[PATCH 2/7] mtd/nand: try to erase bad blocks only if scrub flag is provided

Mikhail Kshevetskiy mikhail.kshevetskiy at iopsys.eu
Thu Oct 6 17:52:10 CEST 2022


On Thu, 6 Oct 2022 08:56:08 +0200
Michael Nazzareno Trimarchi <michael at amarulasolutions.com> wrote:

> [External email]
> 
> 
> 
> 
> 
> Hi
> 
> On Thu, Oct 6, 2022 at 5:15 AM <mikhail.kshevetskiy at iopsys.eu> wrote:
> >
> > From: Mikhail Kshevetskiy <mikhail.kshevetskiy at iopsys.eu>
> >
> > 'mtd erase' command should not erase bad blocks. To force bad block erasing
> > there is 'mtd erase.dontskipbad' command (this command sets 'scrub' flag
> > to true in the erase_info structure). Unfortunately nand layer ignore
> > scrub flag and try to erases bad blocks unconditionally. This is wrong.
> >
> > Add checks to allow bad block erasing only if scrub flag is set.
> >
> > Signed-off-by: Mikhail Kshevetskiy <mikhail.kshevetskiy at iopsys.eu>
> > ---
> >  drivers/mtd/nand/core.c | 5 ++++-
> >  1 file changed, 4 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/mtd/nand/core.c b/drivers/mtd/nand/core.c
> > index 99c29670c7..a4fb7602c9 100644
> > --- a/drivers/mtd/nand/core.c
> > +++ b/drivers/mtd/nand/core.c
> > @@ -174,7 +174,10 @@ int nanddev_mtd_erase(struct mtd_info *mtd, struct
> > erase_info *einfo) nanddev_offs_to_pos(nand, einfo->addr + einfo->len - 1,
> > &last); while (nanddev_pos_cmp(&pos, &last) <= 0) {
> >                 schedule();
> > -               ret = nanddev_erase(nand, &pos);
> > +               if (!einfo->scrub && nanddev_isbad(nand, &pos))
> 
> The nandev_erase already check it here:
> 
> if (nanddev_isbad(nand, pos) || nanddev_isreserved(nand, pos)) {
>

no it does not work. see nanddev_erase() code

if block is bad or reserverved, than warning is printed, than block is erased.

 
> > +                       ret = -EIO;
> > +               else
> > +                       ret = nanddev_erase(nand, &pos);
> 
> erase opt should already take in account scrub.
> 
> Please extend the problem
> 
> Michael
> >                 if (ret) {
> >                         einfo->fail_addr = nanddev_pos_to_offs(nand, &pos);
> >
> > --
> > 2.35.1
> >
> 
> 
> --
> Michael Nazzareno Trimarchi
> Co-Founder & Chief Executive Officer
> M. +39 347 913 2170
> michael at amarulasolutions.com
> __________________________________
> 
> Amarula Solutions BV
> Joop Geesinkweg 125, 1114 AB, Amsterdam, NL
> T. +31 (0)85 111 9172
> info at amarulasolutions.com
> https://eur03.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.amarulasolutions.com%2F&data=05%7C01%7Cmikhail.kshevetskiy%40iopsys.eu%7C0271cbe11c804a8dfde608daa767e01b%7C7ff78d652de440f586750569e5c7a65d%7C0%7C0%7C638006361837818885%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=ZmdqQp%2FXl4XC7yFKmFEYWocIEsqQGYk8b2UI9i2cibo%3D&reserved=0


More information about the U-Boot mailing list