diff options
author | Muhammad Hamza Farooq <mfarooq@visteon.com> | 2016-06-30 11:15:15 -0400 |
---|---|---|
committer | Vinod Koul <vinod.koul@intel.com> | 2016-07-08 01:39:10 -0400 |
commit | 3544d2878817bd139dda238cdd86a15e1c03d037 (patch) | |
tree | 765e3e0376280b905dba65afc2ed8e008def31c7 | |
parent | 3565fe53334cd3f0d59ff5db0872de9370775a19 (diff) |
dmaengine: rcar-dmac: use result of updated get_residue in tx_status
The hardware might have complete the transfer but the interrupt handler
might not have had a chance to run. If rcar_dmac_chan_get_residue()
which reads HW registers finds that there is no residue return
DMA_COMPLETE.
Signed-off-by: Muhammad Hamza Farooq <mfarooq@visteon.com>
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
[Niklas: add explanation in commit message]
Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
-rw-r--r-- | drivers/dma/sh/rcar-dmac.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/dma/sh/rcar-dmac.c b/drivers/dma/sh/rcar-dmac.c index 433e98260414..74c9563222bc 100644 --- a/drivers/dma/sh/rcar-dmac.c +++ b/drivers/dma/sh/rcar-dmac.c | |||
@@ -1202,6 +1202,10 @@ static enum dma_status rcar_dmac_tx_status(struct dma_chan *chan, | |||
1202 | residue = rcar_dmac_chan_get_residue(rchan, cookie); | 1202 | residue = rcar_dmac_chan_get_residue(rchan, cookie); |
1203 | spin_unlock_irqrestore(&rchan->lock, flags); | 1203 | spin_unlock_irqrestore(&rchan->lock, flags); |
1204 | 1204 | ||
1205 | /* if there's no residue, the cookie is complete */ | ||
1206 | if (!residue) | ||
1207 | return DMA_COMPLETE; | ||
1208 | |||
1205 | dma_set_residue(txstate, residue); | 1209 | dma_set_residue(txstate, residue); |
1206 | 1210 | ||
1207 | return status; | 1211 | return status; |