summaryrefslogtreecommitdiff
path: root/drivers/mtd/nand/raw
diff options
context:
space:
mode:
authorMasahiro Yamada <yamada.masahiro@socionext.com>2020-01-30 00:55:54 +0900
committerMasahiro Yamada <yamada.masahiro@socionext.com>2020-02-01 01:14:32 +0900
commit21d4a3ca549b5b1b8243c845b15f91142bfa3528 (patch)
tree33fcf210705da30c228dafe1ad442f2e2883fbde /drivers/mtd/nand/raw
parent9925df051a7964e939298fe54df60153409b6352 (diff)
mtd: rawnand: denali_dt: insert udelay() after reset deassert
When the reset signal is de-asserted, the HW-controlled bootstrap starts running unless it is disabled in the SoC integration. It issues some commands to detect a NAND chip, and sets up registers automatically. Until this process finishes, software should avoid any register access. Without this delay function, some of UniPhier boards hangs up while executing nand_scan_ident(). (denali_read_byte() is blocked) Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Diffstat (limited to 'drivers/mtd/nand/raw')
-rw-r--r--drivers/mtd/nand/raw/denali_dt.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/drivers/mtd/nand/raw/denali_dt.c b/drivers/mtd/nand/raw/denali_dt.c
index 91d0f20aae..1afc61f876 100644
--- a/drivers/mtd/nand/raw/denali_dt.c
+++ b/drivers/mtd/nand/raw/denali_dt.c
@@ -136,11 +136,19 @@ static int denali_dt_probe(struct udevice *dev)
}
ret = reset_get_bulk(dev, &resets);
- if (ret)
+ if (ret) {
dev_warn(dev, "Can't get reset: %d\n", ret);
- else
+ } else {
reset_deassert_bulk(&resets);
+ /*
+ * When the reset is deasserted, the initialization sequence is
+ * kicked (bootstrap process). The driver must wait until it is
+ * finished. Otherwise, it will result in unpredictable behavior.
+ */
+ udelay(200);
+ }
+
return denali_init(denali);
}