• Paul Cercueil's avatar
    dmaengine: jz4780: Fix transfers being ACKed too soon · 4e4106f5
    Paul Cercueil authored
    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: default avatarPaul Cercueil <paul@crapouillou.net>
    Signed-off-by: default avatarVinod Koul <vkoul@kernel.org>
    4e4106f5
dma-jz4780.c 28.3 KB