|
|
@@ -1367,6 +1367,7 @@ static enum dma_status rcar_dmac_tx_status(struct dma_chan *chan,
|
|
|
enum dma_status status;
|
|
|
unsigned long flags;
|
|
|
unsigned int residue;
|
|
|
+ bool cyclic;
|
|
|
|
|
|
status = dma_cookie_status(chan, cookie, txstate);
|
|
|
if (status == DMA_COMPLETE || !txstate)
|
|
|
@@ -1374,10 +1375,11 @@ static enum dma_status rcar_dmac_tx_status(struct dma_chan *chan,
|
|
|
|
|
|
spin_lock_irqsave(&rchan->lock, flags);
|
|
|
residue = rcar_dmac_chan_get_residue(rchan, cookie);
|
|
|
+ cyclic = rchan->desc.running ? rchan->desc.running->cyclic : false;
|
|
|
spin_unlock_irqrestore(&rchan->lock, flags);
|
|
|
|
|
|
/* if there's no residue, the cookie is complete */
|
|
|
- if (!residue)
|
|
|
+ if (!residue && !cyclic)
|
|
|
return DMA_COMPLETE;
|
|
|
|
|
|
dma_set_residue(txstate, residue);
|