[PATCH] cmd: mtd: try to erase bad blocks only if scrub flag is provided

Michael Nazzareno Trimarchi michael at amarulasolutions.com
Mon Oct 24 09:36:01 CEST 2022


HI Mikhail

On Mon, Oct 24, 2022 at 9:30 AM Mikhail Kshevetskiy
<mikhail.kshevetskiy at iopsys.eu> wrote:
>
> 'mtd erase' command should not erase bad blocks. To force bad block erasing
> there is 'mtd erase.dontskipbad' command. Unfortunately nand layer erases
> bad blocks unconditionally. This is wrong.
>
> Fix issue by adding bad block checks to do_mtd_erase() function in the case
> srub flag is not provided. We can't simplify code by eliminating -EIO result
> check of mtd_erase() as it will terminate erasing with CMD_RET_SUCCESS.
>
> Thanks to Dario Binacchi <dario.binacchi at amarulasolutions.com> for his patch.
>
> Signed-off-by: Mikhail Kshevetskiy <mikhail.kshevetskiy at iopsys.eu>
> ---
>  cmd/mtd.c | 17 +++++++++++++++--
>  1 file changed, 15 insertions(+), 2 deletions(-)
>
> diff --git a/cmd/mtd.c b/cmd/mtd.c
> index ad5cc9827d..a314745e95 100644
> --- a/cmd/mtd.c
> +++ b/cmd/mtd.c
> @@ -434,11 +434,24 @@ static int do_mtd_erase(struct cmd_tbl *cmdtp, int flag, int argc,
>   erase_op.mtd = mtd;
>   erase_op.addr = off;
>   erase_op.len = mtd->erasesize;
> - erase_op.scrub = scrub;
>
>   while (len) {
> - ret = mtd_erase(mtd, &erase_op);
> + if (!scrub) {
> + ret = mtd_block_isbad(mtd, erase_op.addr);
> + if (ret < 0) {
> + printf("Failed to get bad block at 0x%08llx\n",
> +       erase_op.addr);
> + ret = CMD_RET_FAILURE;
> + goto out_put_mtd;
> + } else if (ret > 0) {
> + /* simulate bad block behavior */
> + ret = -EIO;
> + goto skip_block_erasing;
> + }
> + }
>

It's better to review the dario patch and we can resend with your
signoff and comment too

Michael

> + ret = mtd_erase(mtd, &erase_op);
> +skip_block_erasing:
>   if (ret) {
>   /* Abort if its not a bad block error */
>   if (ret != -EIO)
> --
> 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
www.amarulasolutions.com


More information about the U-Boot mailing list