]> git.ipfire.org Git - thirdparty/kernel/stable.git/commit
dmaengine: jz4780: Fix transfers being ACKed too soon
authorPaul Cercueil <paul@crapouillou.net>
Sat, 4 May 2019 21:37:57 +0000 (23:37 +0200)
committerVinod Koul <vkoul@kernel.org>
Tue, 21 May 2019 04:29:58 +0000 (09:59 +0530)
commit4e4106f5e942bff65548e82fc330d40385c89220
tree13e43675bce30c58d814669b26815f1c83afa9f8
parenta188339ca5a396acc588e5851ed7e19f66b0ebd9
dmaengine: jz4780: Fix transfers being ACKed too soon

When a multi-descriptor DMA transfer is in progress, the "IRQ pending"
flag will apparently be set for that channel as soon as the last
descriptor loads, way before the IRQ actually happens. This behaviour
has been observed on the JZ4725B, but maybe other SoCs are affected.

In the case where another DMA transfer is running into completion on a
separate channel, the IRQ handler would then run the completion handler
for our previous channel even if the transfer didn't actually finish.

Fix this by checking in the completion handler that we're indeed done;
if not the interrupted DMA transfer will simply be resumed.

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Signed-off-by: Vinod Koul <vkoul@kernel.org>
drivers/dma/dma-jz4780.c