mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-19 10:44:14 +08:00
dmaengine: rcar-dmac: clear channel register when error
We need to clear channel register in error case as recovery. The channel is already stopped in such case, thus we don't need to call rcar_dmac_chan_halt() before clearing. rcar_dmac_chan_halt() will clear and confirm DE bit. But it will be failed because channel is already stopped in error case. In other words, we shouldn't call it then. Reported-by: Hiroki Negishi <hiroki.negishi.bx@renesas.com> Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Reviewed-by: Hiroki Negishi <hiroki.negishi.bx@renesas.com> Reviewed-by: Simon Horman <horms+renesas@verge.net.au> Signed-off-by: Vinod Koul <vkoul@kernel.org>
This commit is contained in:
parent
45c9a603a4
commit
e919417bd6
@ -1522,7 +1522,15 @@ static irqreturn_t rcar_dmac_isr_channel(int irq, void *dev)
|
||||
|
||||
chcr = rcar_dmac_chan_read(chan, RCAR_DMACHCR);
|
||||
if (chcr & RCAR_DMACHCR_CAE) {
|
||||
rcar_dmac_chan_halt(chan);
|
||||
struct rcar_dmac *dmac = to_rcar_dmac(chan->chan.device);
|
||||
|
||||
/*
|
||||
* We don't need to call rcar_dmac_chan_halt()
|
||||
* because channel is already stopped in error case.
|
||||
* We need to clear register and check DE bit as recovery.
|
||||
*/
|
||||
rcar_dmac_write(dmac, RCAR_DMACHCLR, 1 << chan->index);
|
||||
rcar_dmac_chcr_de_barrier(chan);
|
||||
reinit = true;
|
||||
goto spin_lock_end;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user