diff options
author | Boojin Kim <boojin.kim@samsung.com> | 2011-09-01 20:44:32 -0400 |
---|---|---|
committer | Vinod Koul <vinod.koul@intel.com> | 2011-09-14 01:40:01 -0400 |
commit | ae43b886f174297366d4e09a008ad8e6592d95df (patch) | |
tree | ff52b7da54a8a9f2e4126413d7a38c5f8f8c8d7b /drivers/dma/pl330.c | |
parent | 1d0c1d606d787e833ee3bd9e1cda640e75c4681a (diff) |
DMA: PL330: Remove the start operation for handling DMA_TERMINATE_ALL command
Original code carries out the start operation after flush operation.
But start operation is not required for DMA_TERMINATE_ALL command.
So, this patch removes the unnecessary start operation and only carries out
the flush operation for handling DMA_TERMINATE_ALL command.
Signed-off-by: Boojin Kim <boojin.kim@samsung.com>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Acked-by: Vinod Koul <vinod.koul@intel.com>
Cc: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Kukjin Kim <kgene.kim@samsung.com>
[Fixed typos in changelog]
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Diffstat (limited to 'drivers/dma/pl330.c')
-rw-r--r-- | drivers/dma/pl330.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c index e7f9d1d3d81a..59943ec1e74a 100644 --- a/drivers/dma/pl330.c +++ b/drivers/dma/pl330.c | |||
@@ -262,10 +262,11 @@ static int pl330_alloc_chan_resources(struct dma_chan *chan) | |||
262 | static int pl330_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd, unsigned long arg) | 262 | static int pl330_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd, unsigned long arg) |
263 | { | 263 | { |
264 | struct dma_pl330_chan *pch = to_pchan(chan); | 264 | struct dma_pl330_chan *pch = to_pchan(chan); |
265 | struct dma_pl330_desc *desc; | 265 | struct dma_pl330_desc *desc, *_dt; |
266 | unsigned long flags; | 266 | unsigned long flags; |
267 | struct dma_pl330_dmac *pdmac = pch->dmac; | 267 | struct dma_pl330_dmac *pdmac = pch->dmac; |
268 | struct dma_slave_config *slave_config; | 268 | struct dma_slave_config *slave_config; |
269 | LIST_HEAD(list); | ||
269 | 270 | ||
270 | switch (cmd) { | 271 | switch (cmd) { |
271 | case DMA_TERMINATE_ALL: | 272 | case DMA_TERMINATE_ALL: |
@@ -275,12 +276,14 @@ static int pl330_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd, unsigned | |||
275 | pl330_chan_ctrl(pch->pl330_chid, PL330_OP_FLUSH); | 276 | pl330_chan_ctrl(pch->pl330_chid, PL330_OP_FLUSH); |
276 | 277 | ||
277 | /* Mark all desc done */ | 278 | /* Mark all desc done */ |
278 | list_for_each_entry(desc, &pch->work_list, node) | 279 | list_for_each_entry_safe(desc, _dt, &pch->work_list , node) { |
279 | desc->status = DONE; | 280 | desc->status = DONE; |
281 | pch->completed = desc->txd.cookie; | ||
282 | list_move_tail(&desc->node, &list); | ||
283 | } | ||
280 | 284 | ||
285 | list_splice_tail_init(&list, &pdmac->desc_pool); | ||
281 | spin_unlock_irqrestore(&pch->lock, flags); | 286 | spin_unlock_irqrestore(&pch->lock, flags); |
282 | |||
283 | pl330_tasklet((unsigned long) pch); | ||
284 | break; | 287 | break; |
285 | case DMA_SLAVE_CONFIG: | 288 | case DMA_SLAVE_CONFIG: |
286 | slave_config = (struct dma_slave_config *)arg; | 289 | slave_config = (struct dma_slave_config *)arg; |