[PATCH] mtd: nand: Mark reserved blocks

Michael Nazzareno Trimarchi michael at amarulasolutions.com
Thu Jan 5 10:34:45 CET 2023


Hi Ashok

On Thu, Jan 5, 2023 at 10:28 AM Ashok Reddy Soma
<ashok.reddy.soma at amd.com> wrote:
>
> Reserved blocks are used for storing bad block tables. With "nand bad"
> command, these reserved blocks are shown as bad blocks. This is leading
> to confusion when compared with Linux bad blocks. Hence, display
> "Reserved for bbt" when printing reserved blocks with "nand bad" command.
>
> To acheive this, return 2 which represents reserved from nand_isbad_bbt()
> instead of 1 in case of reserved blocks and catch it in cmd/nand.c.
>
> "nand bad" command display's hexadecimal numbers, so add "0x" prefix.
>
> Example log will show up as below.
>
> ZynqMP> nand bad
>
> Device 0 bad blocks:
>   0x00400000
>   0x16800000
>   0x16c00000
>   0x17000000
>   0x3d800000
>   0x3e400000
>   0xe8400000
>   0xff000000     <--- Reserved for bbt
>   0xff400000     <--- Reserved for bbt
>   0xff800000     <--- Reserved for bbt
>   0xffc00000     <--- Reserved for bbt
>   0x116800000
>   0x116c00000
>   0x1ff000000    <--- Reserved for bbt
>   0x1ff400000    <--- Reserved for bbt
>   0x1ff800000    <--- Reserved for bbt
>   0x1ffc00000    <--- Reserved for bbt
>
> Signed-off-by: Ashok Reddy Soma <ashok.reddy.soma at amd.com>
> ---
>
>  cmd/nand.c                      | 9 ++++++---
>  drivers/mtd/nand/raw/nand_bbt.c | 3 ++-
>  2 files changed, 8 insertions(+), 4 deletions(-)
>
> diff --git a/cmd/nand.c b/cmd/nand.c
> index 9a723f5757..feb6b0e3ec 100644
> --- a/cmd/nand.c
> +++ b/cmd/nand.c
> @@ -567,9 +567,12 @@ static int do_nand(struct cmd_tbl *cmdtp, int flag, int argc,
>
>         if (strcmp(cmd, "bad") == 0) {
>                 printf("\nDevice %d bad blocks:\n", dev);
> -               for (off = 0; off < mtd->size; off += mtd->erasesize)
> -                       if (nand_block_isbad(mtd, off))
> -                               printf("  %08llx\n", (unsigned long long)off);
> +               for (off = 0; off < mtd->size; off += mtd->erasesize) {
> +                       ret = nand_block_isbad(mtd, off);
> +                       if (ret)
> +                               printf("  0x%08llx%s\n", (unsigned long long)off,
> +                                      ret == 2 ? "\t <--- Reserved for bbt" : "");
> +               }

Look good but suggest to use something more simple like (bbt reserved)
without <---

Reviewed-by: Michael Trimarchi <michael at amarulasolutions.com>

>                 return 0;
>         }
>
> diff --git a/drivers/mtd/nand/raw/nand_bbt.c b/drivers/mtd/nand/raw/nand_bbt.c
> index 911472e91e..cd451870a6 100644
> --- a/drivers/mtd/nand/raw/nand_bbt.c
> +++ b/drivers/mtd/nand/raw/nand_bbt.c
> @@ -1330,6 +1330,7 @@ int nand_isreserved_bbt(struct mtd_info *mtd, loff_t offs)
>   * @mtd: MTD device structure
>   * @offs: offset in the device
>   * @allowbbt: allow access to bad block table region
> + * Return: 0 - good block, 1- bad block, 2 - reserved block
>   */
>  int nand_isbad_bbt(struct mtd_info *mtd, loff_t offs, int allowbbt)
>  {
> @@ -1348,7 +1349,7 @@ int nand_isbad_bbt(struct mtd_info *mtd, loff_t offs, int allowbbt)
>         case BBT_BLOCK_WORN:
>                 return 1;
>         case BBT_BLOCK_RESERVED:
> -               return allowbbt ? 0 : 1;
> +               return allowbbt ? 0 : 2;
>         }
>         return 1;
>  }
> --
> 2.17.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
www.amarulasolutions.com


More information about the U-Boot mailing list