diff options
Diffstat (limited to 'drivers/dma/sirf-dma.c')
-rw-r--r-- | drivers/dma/sirf-dma.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/dma/sirf-dma.c b/drivers/dma/sirf-dma.c index 7d78cf7bb7f1..fb5790d8a0b0 100644 --- a/drivers/dma/sirf-dma.c +++ b/drivers/dma/sirf-dma.c | |||
@@ -291,6 +291,8 @@ static int sirfsoc_dma_terminate_all(struct sirfsoc_dma_chan *schan) | |||
291 | int cid = schan->chan.chan_id; | 291 | int cid = schan->chan.chan_id; |
292 | unsigned long flags; | 292 | unsigned long flags; |
293 | 293 | ||
294 | spin_lock_irqsave(&schan->lock, flags); | ||
295 | |||
294 | if (!sdma->is_marco) { | 296 | if (!sdma->is_marco) { |
295 | writel_relaxed(readl_relaxed(sdma->base + SIRFSOC_DMA_INT_EN) & | 297 | writel_relaxed(readl_relaxed(sdma->base + SIRFSOC_DMA_INT_EN) & |
296 | ~(1 << cid), sdma->base + SIRFSOC_DMA_INT_EN); | 298 | ~(1 << cid), sdma->base + SIRFSOC_DMA_INT_EN); |
@@ -305,9 +307,9 @@ static int sirfsoc_dma_terminate_all(struct sirfsoc_dma_chan *schan) | |||
305 | 307 | ||
306 | writel_relaxed(1 << cid, sdma->base + SIRFSOC_DMA_CH_VALID); | 308 | writel_relaxed(1 << cid, sdma->base + SIRFSOC_DMA_CH_VALID); |
307 | 309 | ||
308 | spin_lock_irqsave(&schan->lock, flags); | ||
309 | list_splice_tail_init(&schan->active, &schan->free); | 310 | list_splice_tail_init(&schan->active, &schan->free); |
310 | list_splice_tail_init(&schan->queued, &schan->free); | 311 | list_splice_tail_init(&schan->queued, &schan->free); |
312 | |||
311 | spin_unlock_irqrestore(&schan->lock, flags); | 313 | spin_unlock_irqrestore(&schan->lock, flags); |
312 | 314 | ||
313 | return 0; | 315 | return 0; |