[PATCH 3/3] mtd: rawnand: denali: Do not reset the block before booting the kernel

Masahiro Yamada masahiroy at kernel.org
Fri Jan 10 04:09:50 CET 2020


On Fri, Jan 10, 2020 at 9:14 AM Marek Vasut <marex at denx.de> wrote:
>
> The Denali NAND block loses configuration when put in reset.
> Specifically, RB_PIN_ENABLED, CHIP_ENABLE_DONT_CARE,
> SPARE_AREA_SKIP_BYTES and SPARE_AREA_MARKER are lost.
> Since mainline Linux depends on the configuration programmed
> into the Denali NAND controller by the bootloader, do not
> reset the controller before starting the kernel, otherwise
> the kernel will read bogus values and fail to use the NAND.

I think this log is not directly describing the issue.
It is not a matter of reading bogus values.
You cannot use the hardware under the reset state in the first place.

How about describing the root cause?
For example,

The denali driver in the mainline Linux does not support the reset
control yet. Do not reset the controller before starting the kernel,
otherwise the kernel cannot deassert the reset of the NAND controller.



(BTW, the situation is worse on the UniPhier platform.
The kernel will crash because the register access never respond.)



>
> Fixes: ed784ac3822b ("mtd: rawnand: denali: add reset handling")
> Signed-off-by: Marek Vasut <marex at denx.de>
> Cc: Masahiro Yamada <yamada.masahiro at socionext.com>
> Cc: Simon Goldschmidt <simon.k.r.goldschmidt at gmail.com>
> ---
>  drivers/mtd/nand/raw/denali_dt.c | 9 ---------
>  1 file changed, 9 deletions(-)
>
> diff --git a/drivers/mtd/nand/raw/denali_dt.c b/drivers/mtd/nand/raw/denali_dt.c
> index b1e14982c4..03c97dbc05 100644
> --- a/drivers/mtd/nand/raw/denali_dt.c
> +++ b/drivers/mtd/nand/raw/denali_dt.c
> @@ -142,21 +142,12 @@ static int denali_dt_probe(struct udevice *dev)
>         return denali_init(denali);
>  }
>
> -static int denali_dt_remove(struct udevice *dev)
> -{
> -       struct denali_nand_info *denali = dev_get_priv(dev);
> -
> -       return reset_release_bulk(&denali->resets);
> -}
> -
>  U_BOOT_DRIVER(denali_nand_dt) = {
>         .name = "denali-nand-dt",
>         .id = UCLASS_MISC,
>         .of_match = denali_nand_dt_ids,
>         .probe = denali_dt_probe,
>         .priv_auto_alloc_size = sizeof(struct denali_nand_info),
> -       .remove = denali_dt_remove,
> -       .flags = DM_FLAG_OS_PREPARE,
>  };
>
>  void board_nand_init(void)
> --
> 2.24.1
>


--
Best Regards
Masahiro Yamada


More information about the U-Boot mailing list