DMA errata for special end of block programming is applicable only for OMAP2430 & OMAP3430 ES1.0. This patch does the necessary checks before the workaround is applied. Tested on 3430 SDP Signed-off-by: Thara Gopinath <thara@xxxxxx> Signed-off-by: Venkatraman S <svenkatr@xxxxxx> --- arch/arm/plat-omap/dma.c | 22 ++++++++++++++-------- 1 files changed, 14 insertions(+), 8 deletions(-) diff --git a/arch/arm/plat-omap/dma.c b/arch/arm/plat-omap/dma.c index 2ab224c..ef965ac 100644 --- a/arch/arm/plat-omap/dma.c +++ b/arch/arm/plat-omap/dma.c @@ -1663,14 +1663,18 @@ int omap_stop_dma_chain_transfers(int chain_id) channels = dma_linked_lch[chain_id].linked_dmach_q; /* - * DMA Errata: - * Special programming model needed to disable DMA before end of block + * DMA Errata: i88 + * Special programming model needed + * to disable DMA before end of block */ sys_cf = dma_read(OCP_SYSCONFIG); - l = sys_cf; - /* Middle mode reg set no Standby */ - l &= ~((1 << 12)|(1 << 13)); - dma_write(l, OCP_SYSCONFIG); + if (cpu_is_omap2430() || (cpu_is_omap3430() && + omap_rev() == OMAP3430_REV_ES1_0)) { + l = sys_cf; + /* Middle mode reg set no Standby */ + l &= ~((1 << 12)|(1 << 13)); + dma_write(l, OCP_SYSCONFIG); + } for (i = 0; i < dma_linked_lch[chain_id].no_of_lchs_linked; i++) { @@ -1689,8 +1693,10 @@ int omap_stop_dma_chain_transfers(int chain_id) /* Reset the Queue pointers */ OMAP_DMA_CHAIN_QINIT(chain_id); - /* Errata - put in the old value */ - dma_write(sys_cf, OCP_SYSCONFIG); + /* Errata: put back the old value */ + if (cpu_is_omap2430() || (cpu_is_omap3430() && + omap_rev() == OMAP3430_REV_ES1_0)) + dma_write(sys_cf, OCP_SYSCONFIG); return 0; } -- 1.6.3.3 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html