Patch "dmaengine: edma: Remove dynamic TPTC power management feature" has been added to the 4.5-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
dmaengine: edma: Remove dynamic TPTC power management feature
to the 4.5-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
dmaengine-edma-remove-dynamic-tptc-power-management-feature.patch
and it can be found in the queue-4.5 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
23f49fd2ea9bc8e1c8cff0126cd71b071ea9e91fMon Sep 17 00:00:00 2001
From: Peter Ujfalusi <[email protected]>
Date: Wed, 6 Apr 2016 13:01:46 +0300
Subject: dmaengine: edma: Remove dynamic TPTC power management feature
From: Peter Ujfalusi <[email protected]>
commit 23f49fd2ea9bc8e1c8cff0126cd71b071ea9e91f upstream.
The dynamic or on demand pm_runtime does not work correctly on am335x and am437x due to interference with hwmod.
Fall back using the pm_runtime usage as it was in the old driver stack, meaning that at probe time call pm_runtime_enable() and pm_runtime_get_sync() for the TPTCs as well.
--- drivers/dma/edma.c | 38 +++----------------------------------- 1 file changed, 3 insertions(+), 35 deletions(-)
drivers/dma/edma.c +3 -35
@@ -1563,32 +1563,6 @@ static irqreturn_t dma_ccerr_handler(intreturn IRQ_HANDLED ; } -static void edma_tc_set_pm_state (struct edma_tc *tc,bool enable) -{ -struct platform_device *tc_pdev; -int ret; - -if (!IS_ENABLED (CONFIG_OF ) || !tc) -return ; - - tc_pdev =of_find_device_by_node (tc->node); -if (!tc_pdev) { -pr_err ("%s: TPTC device is not found\n" , __func__); -return ; - } -if (!pm_runtime_enabled (&tc_pdev->dev)) -pm_runtime_enable (&tc_pdev->dev); - -if (enable) - ret =pm_runtime_get_sync (&tc_pdev->dev); -else - ret =pm_runtime_put_sync (&tc_pdev->dev); - -if (ret <0 ) -pr_err ("%s: pm_runtime_%s_sync() failed for %s\n" , __func__, - enable ?"get" :"put" ,dev_name (&tc_pdev->dev)); -} -/* Alloc channel resources */ static int edma_alloc_chan_resources (struct dma_chan *chan) {
@@ -1625,8 +1599,6 @@ static int edma_alloc_chan_resources(strEDMA_CHAN_SLOT (echan->ch_num), chan->chan_id, echan->hw_triggered ? "HW" : "SW"); -edma_tc_set_pm_state (echan->tc, true); -return 0 ; err_slot:
@@ -1663,7 +1635,6 @@ static void edma_free_chan_resources(str echan->alloced = false; } -edma_tc_set_pm_state (echan->tc, false); echan->tc =NULL ; echan->hw_triggered = false;
@@ -2408,10 +2379,8 @@ static int edma_pm_suspend(struct deviceint i;for (i =0 ; i < ecc->num_channels; i++) { -if (echan[i].alloced) { +if (echan[i].alloced)edma_setup_interrupt (&echan[i], false); -edma_tc_set_pm_state (echan[i].tc, false); - } }return 0 ;
@@ -2441,8 +2410,6 @@ static int edma_pm_resume(struct device/* Set up channel -> slot mapping for the entry slot */ edma_set_chmap (&echan[i], echan[i].slot[0 ]); - -edma_tc_set_pm_state (echan[i].tc, true); } }
@@ -2466,7 +2433,8 @@ static struct platform_driver edma_drivestatic int edma_tptc_probe (struct platform_device *pdev) { -return 0 ; +pm_runtime_enable (&pdev->dev); +return pm_runtime_get_sync (&pdev->dev); }static struct platform_driver edma_tptc_driver = {
Patches currently in stable-queue which might be from [email protected] are
queue-4.5/arm-dts-am43xx-fix-edma-memcpy-channel-allocation.patch queue-4.5/dmaengine-edma-remove-dynamic-tptc-power-management-feature.patch queue-4.5/dmaengine-omap-dma-fix-polled-channel-completion-detection-and-handling.patch