]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
dmaengine: tegra-apb: Only save channel state for those in use
authorJon Hunter <jonathanh@nvidia.com>
Fri, 13 Nov 2015 16:39:41 +0000 (16:39 +0000)
committerVinod Koul <vinod.koul@intel.com>
Sat, 5 Dec 2015 10:43:08 +0000 (16:13 +0530)
Currently the tegra-apb DMA driver suspend/resume helpers, save and
restore the registers for all channels regardless of whether they are
in use or not. Change this so that only channels that have been
allocated and configured are saved and restored.

Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
drivers/dma/tegra20-apb-dma.c

index 18a561376c639c14d2eaedb1e7defdaa8cca5e30..d4cabd6931e5dc93ff39266bbfa2734265b97554 100644 (file)
@@ -1545,6 +1545,10 @@ static int tegra_dma_pm_suspend(struct device *dev)
                struct tegra_dma_channel *tdc = &tdma->channels[i];
                struct tegra_dma_channel_regs *ch_reg = &tdc->channel_reg;
 
+               /* Only save the state of DMA channels that are in use */
+               if (!tdc->config_init)
+                       continue;
+
                ch_reg->csr = tdc_read(tdc, TEGRA_APBDMA_CHAN_CSR);
                ch_reg->ahb_ptr = tdc_read(tdc, TEGRA_APBDMA_CHAN_AHBPTR);
                ch_reg->apb_ptr = tdc_read(tdc, TEGRA_APBDMA_CHAN_APBPTR);
@@ -1579,6 +1583,10 @@ static int tegra_dma_pm_resume(struct device *dev)
                struct tegra_dma_channel *tdc = &tdma->channels[i];
                struct tegra_dma_channel_regs *ch_reg = &tdc->channel_reg;
 
+               /* Only restore the state of DMA channels that are in use */
+               if (!tdc->config_init)
+                       continue;
+
                if (tdma->chip_data->support_separate_wcount_reg)
                        tdc_write(tdc, TEGRA_APBDMA_CHAN_WCOUNT,
                                  ch_reg->wcount);