diff options
Diffstat (limited to 'arch/blackfin/kernel/bfin_dma_5xx.c')
| -rw-r--r-- | arch/blackfin/kernel/bfin_dma_5xx.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/arch/blackfin/kernel/bfin_dma_5xx.c b/arch/blackfin/kernel/bfin_dma_5xx.c index 07e02c0d1c07..8531693fb48d 100644 --- a/arch/blackfin/kernel/bfin_dma_5xx.c +++ b/arch/blackfin/kernel/bfin_dma_5xx.c | |||
| @@ -249,6 +249,13 @@ static void __dma_memcpy(u32 daddr, s16 dmod, u32 saddr, s16 smod, size_t cnt, u | |||
| 249 | 249 | ||
| 250 | spin_lock_irqsave(&mdma_lock, flags); | 250 | spin_lock_irqsave(&mdma_lock, flags); |
| 251 | 251 | ||
| 252 | /* Force a sync in case a previous config reset on this channel | ||
| 253 | * occurred. This is needed so subsequent writes to DMA registers | ||
| 254 | * are not spuriously lost/corrupted. Do it under irq lock and | ||
| 255 | * without the anomaly version (because we are atomic already). | ||
| 256 | */ | ||
| 257 | __builtin_bfin_ssync(); | ||
| 258 | |||
| 252 | if (bfin_read_MDMA_S0_CONFIG()) | 259 | if (bfin_read_MDMA_S0_CONFIG()) |
| 253 | while (!(bfin_read_MDMA_D0_IRQ_STATUS() & DMA_DONE)) | 260 | while (!(bfin_read_MDMA_D0_IRQ_STATUS() & DMA_DONE)) |
| 254 | continue; | 261 | continue; |
