mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-22 02:17:36 -04:00
mtd: onenand: samsung: report DMA completion timeouts
The S5PC110 OneNAND DMA helpers have bounded waits for transfer
completion. The polling helper falls out of its timeout loop and returns
success, and the IRQ helper ignores wait_for_completion_timeout().
Return -ETIMEDOUT when the DMA transfer-done bit or completion does not
arrive before the timeout so callers can treat the buffer transfer as
failed.
Fixes: e23abf4b77 ("mtd: OneNAND: S5PC110: Implement DMA interrupt method")
Cc: stable@vger.kernel.org
Signed-off-by: Pengpeng Hou <pengpeng@iscas.ac.cn>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
This commit is contained in:
committed by
Miquel Raynal
parent
f9a13e05a3
commit
d03a19bd6c
@@ -554,6 +554,9 @@ static int s5pc110_dma_poll(dma_addr_t dst, dma_addr_t src, size_t count, int di
|
||||
} while (!(status & S5PC110_DMA_TRANS_STATUS_TD) &&
|
||||
time_before(jiffies, timeout));
|
||||
|
||||
if (!(status & S5PC110_DMA_TRANS_STATUS_TD))
|
||||
return -ETIMEDOUT;
|
||||
|
||||
writel(S5PC110_DMA_TRANS_CMD_TDC, base + S5PC110_DMA_TRANS_CMD);
|
||||
|
||||
return 0;
|
||||
@@ -608,7 +611,9 @@ static int s5pc110_dma_irq(dma_addr_t dst, dma_addr_t src, size_t count, int dir
|
||||
|
||||
writel(S5PC110_DMA_TRANS_CMD_TR, base + S5PC110_DMA_TRANS_CMD);
|
||||
|
||||
wait_for_completion_timeout(&onenand->complete, msecs_to_jiffies(20));
|
||||
if (!wait_for_completion_timeout(&onenand->complete,
|
||||
msecs_to_jiffies(20)))
|
||||
return -ETIMEDOUT;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user