mtd: rawnand: Make sure we wait tWB before polling the STATUS reg

Linux-MTD Mailing List linux-mtd at lists.infradead.org
Wed May 9 23:59:01 PDT 2018


Gitweb:     http://git.infradead.org/?p=mtd-2.6.git;a=commit;h=3057fcef385348fe85173f1b0c824d89f1176f72
Commit:     3057fcef385348fe85173f1b0c824d89f1176f72
Parent:     a2ee41fd953e7c3ff6c55a3038c80354d191a318
Author:     Boris Brezillon <boris.brezillon at bootlin.com>
AuthorDate: Fri May 4 21:24:31 2018 +0200
Committer:  Boris Brezillon <boris.brezillon at bootlin.com>
CommitDate: Thu May 10 08:40:39 2018 +0200

    mtd: rawnand: Make sure we wait tWB before polling the STATUS reg
    
    NAND chips require a bit of time to take the NAND operation into
    account and set the BUSY bit in the STATUS reg. Make sure we don't poll
    the STATUS reg too early in nand_soft_waitrdy().
    
    Fixes: 8878b126df76 ("mtd: nand: add ->exec_op() implementation")
    Cc: <stable at vger.kernel.org>
    Signed-off-by: Boris Brezillon <boris.brezillon at bootlin.com>
    Acked-by: Miquel Raynal <miquel.raynal at bootlin.com>
---
 drivers/mtd/nand/raw/nand_base.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/mtd/nand/raw/nand_base.c b/drivers/mtd/nand/raw/nand_base.c
index 72f3a89da513..f28c3a555861 100644
--- a/drivers/mtd/nand/raw/nand_base.c
+++ b/drivers/mtd/nand/raw/nand_base.c
@@ -706,12 +706,17 @@ static void nand_wait_status_ready(struct mtd_info *mtd, unsigned long timeo)
  */
 int nand_soft_waitrdy(struct nand_chip *chip, unsigned long timeout_ms)
 {
+	const struct nand_sdr_timings *timings;
 	u8 status = 0;
 	int ret;
 
 	if (!chip->exec_op)
 		return -ENOTSUPP;
 
+	/* Wait tWB before polling the STATUS reg. */
+	timings = nand_get_sdr_timings(&chip->data_interface);
+	ndelay(PSEC_TO_NSEC(timings->tWB_max));
+
 	ret = nand_status_op(chip, NULL);
 	if (ret)
 		return ret;



More information about the linux-mtd-cvs mailing list