Blackfin: work around anomaly 05000480
authorSteven Miao <realmz6@gmail.com>
Thu, 5 May 2011 06:14:48 +0000 (14:14 +0800)
committerMike Frysinger <vapier@gentoo.org>
Wed, 25 May 2011 12:24:14 +0000 (08:24 -0400)
Anomaly 05000480 on BF537 rev 0.0, 0.1, 0.2:
Multiple Simultaneous Urgent DMA Requests May Cause DMA System Instability

Suggested Workaround:
Program the DMA Traffic Control Period to a non-zero value.  This forces
the DMA block to group accesses together rather than allow arbitration for
each piece of data placed on the internal DMA bus.

Signed-off-by: Steven Miao <realmz6@gmail.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
arch/blackfin/kernel/bfin_dma_5xx.c

index 6ce8dce753c9a49039a615e56cf8e83fbb8097bf..71dbaa4a48afc1263b23af017702ea82aedb2557 100644 (file)
@@ -36,6 +36,11 @@ static int __init blackfin_dma_init(void)
 
        printk(KERN_INFO "Blackfin DMA Controller\n");
 
+
+#if ANOMALY_05000480
+       bfin_write_DMAC_TC_PER(0x0111);
+#endif
+
        for (i = 0; i < MAX_DMA_CHANNELS; i++) {
                atomic_set(&dma_ch[i].chan_status, 0);
                dma_ch[i].regs = dma_io_base_addr[i];