| From 779e097fee552c9b937a94aa86226aa2ce75844a Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 9 Mar 2021 01:01:07 +0100 |
| Subject: mtd: rawnand: mtk: Fix WAITRDY break condition and timeout |
| |
| From: Hauke Mehrtens <hauke@hauke-m.de> |
| |
| [ Upstream commit 2fb164f0ce95e504e2688b4f984893c29ebd19ab ] |
| |
| This fixes NAND_OP_WAITRDY_INSTR operation in the driver. Without this |
| change the driver waits till the system is busy, but we should wait till |
| the busy flag is cleared. The readl_poll_timeout() function gets a break |
| condition, not a wait condition. |
| |
| In addition fix the timeout. The timeout_ms is given in ms, but the |
| readl_poll_timeout() function takes the timeout in us. Multiple the |
| given timeout by 1000 to convert it. |
| |
| Without this change, the driver does not work at all, it doesn't even |
| identify the NAND chip. |
| |
| Fixes: 5197360f9e09 ("mtd: rawnand: mtk: Convert the driver to exec_op()") |
| Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> |
| Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> |
| Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> |
| Link: https://lore.kernel.org/linux-mtd/20210309000107.1368404-1-hauke@hauke-m.de |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/mtd/nand/raw/mtk_nand.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| diff --git a/drivers/mtd/nand/raw/mtk_nand.c b/drivers/mtd/nand/raw/mtk_nand.c |
| index 57f1f1708994..5c5c92132287 100644 |
| --- a/drivers/mtd/nand/raw/mtk_nand.c |
| +++ b/drivers/mtd/nand/raw/mtk_nand.c |
| @@ -488,8 +488,8 @@ static int mtk_nfc_exec_instr(struct nand_chip *chip, |
| return 0; |
| case NAND_OP_WAITRDY_INSTR: |
| return readl_poll_timeout(nfc->regs + NFI_STA, status, |
| - status & STA_BUSY, 20, |
| - instr->ctx.waitrdy.timeout_ms); |
| + !(status & STA_BUSY), 20, |
| + instr->ctx.waitrdy.timeout_ms * 1000); |
| default: |
| break; |
| } |
| -- |
| 2.30.2 |
| |