On Fri, Jul 10, 2020 at 3:58 PM Ley Foon Tan <ley.foon....@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.masah...@socionext.com> > Signed-off-by: Radu Bacrau <radu.bac...@intel.com> > Signed-off-by: Ley Foon Tan <ley.foon....@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. > + * is finished. Otherwise, it will result in unpredictable > + * behavior. > */ > - udelay(200); > + ret = denali_wait_reset_complete(denali); > + if (ret) { > + dev_err(denali->dev, "reset not completed.\n"); > + return ret; > + } > } > > return denali_init(denali); > -- > 2.19.0 > -- Best Regards Masahiro Yamada