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) | |||
| 996 | l = dma_read(CCR(lch)); | 996 | l = dma_read(CCR(lch)); |
| 997 | 997 | ||
| 998 | /* | 998 | /* |
| 999 | * Errata: On ES2.0 BUFFERING disable must be set. | 999 | * Errata: Inter Frame DMA buffering issue (All OMAP2420 and |
| 1000 | * This will always fail on ES1.0 | 1000 | * OMAP2430ES1.0): DMA will wrongly buffer elements if packing and |
| 1001 | * bursting is enabled. This might result in data gets stalled in | ||
| 1002 | * FIFO at the end of the block. | ||
| 1003 | * Workaround: DMA channels must have BUFFERING_DISABLED bit set to | ||
| 1004 | * guarantee no data will stay in the DMA FIFO in case inter frame | ||
| 1005 | * buffering occurs. | ||
| 1001 | */ | 1006 | */ |
| 1002 | if (cpu_is_omap24xx()) | 1007 | if (cpu_is_omap2420() || |
| 1003 | l |= OMAP_DMA_CCR_EN; | 1008 | (cpu_is_omap2430() && (omap_type() == OMAP2430_REV_ES1_0))) |
| 1009 | l |= OMAP_DMA_CCR_BUFFERING_DISABLE; | ||
| 1004 | 1010 | ||
| 1005 | l |= OMAP_DMA_CCR_EN; | 1011 | l |= OMAP_DMA_CCR_EN; |
| 1006 | dma_write(l, CCR(lch)); | 1012 | 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 @@ | |||
| 337 | #define OMAP2_DMA_MISALIGNED_ERR_IRQ (1 << 11) | 337 | #define OMAP2_DMA_MISALIGNED_ERR_IRQ (1 << 11) |
| 338 | 338 | ||
| 339 | #define OMAP_DMA_CCR_EN (1 << 7) | 339 | #define OMAP_DMA_CCR_EN (1 << 7) |
| 340 | #define OMAP_DMA_CCR_BUFFERING_DISABLE (1 << 25) | ||
| 340 | 341 | ||
| 341 | #define OMAP_DMA_DATA_TYPE_S8 0x00 | 342 | #define OMAP_DMA_DATA_TYPE_S8 0x00 |
| 342 | #define OMAP_DMA_DATA_TYPE_S16 0x01 | 343 | #define OMAP_DMA_DATA_TYPE_S16 0x01 |
