]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
dmaengine: pl330: issue_pending waits until WFP state
authorBumyong Lee <bumyong.lee@samsung.com>
Tue, 19 Dec 2023 05:50:26 +0000 (14:50 +0900)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 17 May 2024 09:47:57 +0000 (11:47 +0200)
[ Upstream commit 22a9d9585812440211b0b34a6bc02ade62314be4 ]

According to DMA-330 errata notice[1] 71930, DMAKILL
cannot clear internal signal, named pipeline_req_active.
it makes that pl330 would wait forever in WFP state
although dma already send dma request if pl330 gets
dma request before entering WFP state.

The errata suggests that polling until entering WFP state
as workaround and then peripherals allows to issue dma request.

[1]: https://developer.arm.com/documentation/genc008428/latest

Signed-off-by: Bumyong Lee <bumyong.lee@samsung.com>
Link: https://lore.kernel.org/r/20231219055026.118695-1-bumyong.lee@samsung.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
Stable-dep-of: afc89870ea67 ("dmaengine: Revert "dmaengine: pl330: issue_pending waits until WFP state"")
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/dma/pl330.c

index 627aa9e9bc12a72394342af9d8c28320f2cf1ba6..c71b5c82552173f5fe1e5fb4664e3a57613246d3 100644 (file)
@@ -1053,6 +1053,9 @@ static bool _trigger(struct pl330_thread *thrd)
 
        thrd->req_running = idx;
 
+       if (desc->rqtype == DMA_MEM_TO_DEV || desc->rqtype == DMA_DEV_TO_MEM)
+               UNTIL(thrd, PL330_STATE_WFP);
+
        return true;
 }