aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/dma
diff options
context:
space:
mode:
authorNicolas Ferre <nicolas.ferre@atmel.com>2012-04-16 14:46:30 +0200
committerBen Hutchings <ben@decadent.org.uk>2012-05-11 13:14:34 +0100
commit39fd81649ec76c39861105e9713adedba6e5432b (patch)
tree251d546513324eff422cb3a9bbb41b11349553fe /drivers/dma
parent75da54d1e53bc81447e82c5f5d0f5112d7a3aed5 (diff)
downloadkernel_samsung_smdk4412-39fd81649ec76c39861105e9713adedba6e5432b.zip
kernel_samsung_smdk4412-39fd81649ec76c39861105e9713adedba6e5432b.tar.gz
kernel_samsung_smdk4412-39fd81649ec76c39861105e9713adedba6e5432b.tar.bz2
dmaengine: at_hdmac: remove clear-on-read in atc_dostart()
commit ed8b0d67f33518a16c6b2450fe5ebebf180c2d04 upstream. This loop on EBCISR register was designed to clear IRQ sources before enabling a DMA channel. This register is clear-on-read so a race condition can appear if another channel is already active and has just finished its transfer. Removing this read on EBCISR is fixing the issue as there is no case where an IRQ could be pending: we already make sure that this register is drained at probe() time and during resume. Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com> Signed-off-by: Vinod Koul <vinod.koul@linux.intel.com> Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Diffstat (limited to 'drivers/dma')
-rw-r--r--drivers/dma/at_hdmac.c4
1 files changed, 0 insertions, 4 deletions
diff --git a/drivers/dma/at_hdmac.c b/drivers/dma/at_hdmac.c
index a60adbf..79dcf6e 100644
--- a/drivers/dma/at_hdmac.c
+++ b/drivers/dma/at_hdmac.c
@@ -239,10 +239,6 @@ static void atc_dostart(struct at_dma_chan *atchan, struct at_desc *first)
vdbg_dump_regs(atchan);
- /* clear any pending interrupt */
- while (dma_readl(atdma, EBCISR))
- cpu_relax();
-
channel_writel(atchan, SADDR, 0);
channel_writel(atchan, DADDR, 0);
channel_writel(atchan, CTRLA, 0);