
-----Original Message----- From: Masahiro Yamada masahiroy@kernel.org Sent: Friday, July 10, 2020 9:08 PM To: Tan, Ley Foon ley.foon.tan@intel.com Cc: U-Boot Mailing List u-boot@lists.denx.de; Simon Glass sjg@chromium.org; See, Chin Liang chin.liang.see@intel.com; Bacrau, Radu radu.bacrau@intel.com; Marek Vasut marex@denx.de Subject: Re: [PATCH v2 2/2] mtd: nand: raw: denali: Wait for reset completion status
On Fri, Jul 10, 2020 at 3:58 PM Ley Foon Tan ley.foon.tan@intel.com wrote:
Fixed delay 200us is not working in certain platforms. Change to poll for reset completion status to have more reliable reset process.
Controller will set the rst_comp bit in intr_status register after controller has completed its reset and initialization process.
Tested-by: Masahiro Yamada yamada.masahiro@socionext.com Signed-off-by: Radu Bacrau radu.bacrau@intel.com Signed-off-by: Ley Foon Tan ley.foon.tan@intel.com
v2:
- Added "Tested-by" in commit message.
- Restore "bootstrap process" in comment.
drivers/mtd/nand/raw/denali.c | 11 +++++++++++ drivers/mtd/nand/raw/denali.h | 1 + drivers/mtd/nand/raw/denali_dt.c | 11 ++++++++--- 3 files changed, 20 insertions(+), 3 deletions(-)
diff --git a/drivers/mtd/nand/raw/denali.c b/drivers/mtd/nand/raw/denali.c index 15e90291de09..ab91db85467d 100644 --- a/drivers/mtd/nand/raw/denali.c +++ b/drivers/mtd/nand/raw/denali.c @@ -1220,6 +1220,17 @@ static int denali_multidev_fixup(struct
denali_nand_info *denali)
return 0;
}
+int denali_wait_reset_complete(struct denali_nand_info *denali) {
u32 irq_status;
irq_status = denali_wait_for_irq(denali, INTR__RST_COMP);
if (!(irq_status & INTR__RST_COMP))
return -EIO;
return 0;
+}
int denali_init(struct denali_nand_info *denali) { struct nand_chip *chip = &denali->nand; diff --git a/drivers/mtd/nand/raw/denali.h b/drivers/mtd/nand/raw/denali.h index 019deda094e5..6cd02b2e26ee 100644 --- a/drivers/mtd/nand/raw/denali.h +++ b/drivers/mtd/nand/raw/denali.h @@ -321,6 +321,7 @@ struct denali_nand_info { #define DENALI_CAP_DMA_64BIT BIT(1)
int denali_calc_ecc_bytes(int step_size, int strength); +int denali_wait_reset_complete(struct denali_nand_info *denali); int denali_init(struct denali_nand_info *denali);
#endif /* __DENALI_H__ */ diff --git a/drivers/mtd/nand/raw/denali_dt.c b/drivers/mtd/nand/raw/denali_dt.c index 75ad15b0758c..c22b05940df6 100644 --- a/drivers/mtd/nand/raw/denali_dt.c +++ b/drivers/mtd/nand/raw/denali_dt.c @@ -154,10 +154,15 @@ static int denali_dt_probe(struct udevice *dev)
/* * 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.
* kicked (bootstrap proccess). The driver must wait
- until it
Again, you are touching this comment line with no good reason. "proccess" is a typo.
I fixed it up and applied. Thanks.
Thanks.
Regards Ley Foon