diff options
| -rw-r--r-- | arch/arm/plat-omap/dma.c | 14 | ||||
| -rw-r--r-- | arch/arm/plat-omap/include/plat/dma.h | 1 | 
2 files changed, 11 insertions, 4 deletions
| diff --git a/arch/arm/plat-omap/dma.c b/arch/arm/plat-omap/dma.c index ec7eddf9e525..420cef370b33 100644 --- a/arch/arm/plat-omap/dma.c +++ b/arch/arm/plat-omap/dma.c @@ -996,11 +996,17 @@ void omap_start_dma(int lch)  	l = dma_read(CCR(lch));  	/* -	 * Errata: On ES2.0 BUFFERING disable must be set. -	 * This will always fail on ES1.0 +	 * Errata: Inter Frame DMA buffering issue (All OMAP2420 and +	 * OMAP2430ES1.0): DMA will wrongly buffer elements if packing and +	 * bursting is enabled. This might result in data gets stalled in +	 * FIFO at the end of the block. +	 * Workaround: DMA channels must have BUFFERING_DISABLED bit set to +	 * guarantee no data will stay in the DMA FIFO in case inter frame +	 * buffering occurs.  	 */ -	if (cpu_is_omap24xx()) -		l |= OMAP_DMA_CCR_EN; +	if (cpu_is_omap2420() || +	    (cpu_is_omap2430() && (omap_type() == OMAP2430_REV_ES1_0))) +		l |= OMAP_DMA_CCR_BUFFERING_DISABLE;  	l |= OMAP_DMA_CCR_EN;  	dma_write(l, CCR(lch)); diff --git a/arch/arm/plat-omap/include/plat/dma.h b/arch/arm/plat-omap/include/plat/dma.h index 098f154f5d41..6f70f7cfe91d 100644 --- a/arch/arm/plat-omap/include/plat/dma.h +++ b/arch/arm/plat-omap/include/plat/dma.h @@ -337,6 +337,7 @@  #define OMAP2_DMA_MISALIGNED_ERR_IRQ	(1 << 11)  #define OMAP_DMA_CCR_EN			(1 << 7) +#define OMAP_DMA_CCR_BUFFERING_DISABLE	(1 << 25)  #define OMAP_DMA_DATA_TYPE_S8		0x00  #define OMAP_DMA_DATA_TYPE_S16		0x01 | 
