|
|
@@ -138,24 +138,25 @@ static void hidma_process_completed(struct hidma_chan *mchan)
|
|
|
desc = &mdesc->desc;
|
|
|
last_cookie = desc->cookie;
|
|
|
|
|
|
+ llstat = hidma_ll_status(mdma->lldev, mdesc->tre_ch);
|
|
|
+
|
|
|
spin_lock_irqsave(&mchan->lock, irqflags);
|
|
|
+ if (llstat == DMA_COMPLETE) {
|
|
|
+ mchan->last_success = last_cookie;
|
|
|
+ result.result = DMA_TRANS_NOERROR;
|
|
|
+ } else {
|
|
|
+ result.result = DMA_TRANS_ABORTED;
|
|
|
+ }
|
|
|
+
|
|
|
dma_cookie_complete(desc);
|
|
|
spin_unlock_irqrestore(&mchan->lock, irqflags);
|
|
|
|
|
|
- llstat = hidma_ll_status(mdma->lldev, mdesc->tre_ch);
|
|
|
dmaengine_desc_get_callback(desc, &cb);
|
|
|
|
|
|
dma_run_dependencies(desc);
|
|
|
|
|
|
spin_lock_irqsave(&mchan->lock, irqflags);
|
|
|
list_move(&mdesc->node, &mchan->free);
|
|
|
-
|
|
|
- if (llstat == DMA_COMPLETE) {
|
|
|
- mchan->last_success = last_cookie;
|
|
|
- result.result = DMA_TRANS_NOERROR;
|
|
|
- } else
|
|
|
- result.result = DMA_TRANS_ABORTED;
|
|
|
-
|
|
|
spin_unlock_irqrestore(&mchan->lock, irqflags);
|
|
|
|
|
|
dmaengine_desc_callback_invoke(&cb, &result);
|