Messages in this thread | ![/](/images/icornerl.gif) | | Date | Tue, 4 Jul 2023 17:13:48 +0200 | From | Miquel Raynal <> | Subject | Re: [PATCH v3 3/3] mtd: rawnand: rockchip-nand-controller: add skipbbt option |
| |
Hi Johan,
jbx6244@gmail.com wrote on Thu, 15 Jun 2023 19:34:26 +0200:
> On Rockchip SoCs the first boot stages are written on NAND > with help of manufacturer software that uses a different format > then the MTD framework. Skip the automatic BBT scan with the > NAND_SKIP_BBTSCAN option so that the original content is unchanged > during the driver probe. > The NAND_NO_BBM_QUIRK option allows us to erase bad blocks with > the nand_erase_nand() function and the flash_erase command. > With these options the user has the "freedom of choice" by neutral > access mode to read and write in whatever format is needed.
Can the boot_rom_mode thing help?
For writing this part you can disable the bad block protection using debugfs and then write an externally processed file in raw mode I guess.
For the boot I think I proposed a DT property. I don't remember how far the discussion went.
> > Signed-off-by: Johan Jonker <jbx6244@gmail.com> > --- > > Changes V3: > Change prefixes > > Changed V2: > reword > > --- > > I'm aware that the maintainer finds it "awful", > but it's absolute necessary to: > 1: read/write boot blocks in user space without touching original content > 2: format a NAND for MTD either with built in or external driver module > > So we keep it include in this serie. > --- > drivers/mtd/nand/raw/rockchip-nand-controller.c | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/drivers/mtd/nand/raw/rockchip-nand-controller.c b/drivers/mtd/nand/raw/rockchip-nand-controller.c > index 5a0468034..fcda4c760 100644 > --- a/drivers/mtd/nand/raw/rockchip-nand-controller.c > +++ b/drivers/mtd/nand/raw/rockchip-nand-controller.c > @@ -188,6 +188,10 @@ struct rk_nfc { > unsigned long assigned_cs; > }; > > +static int skipbbt; > +module_param(skipbbt, int, 0644); > +MODULE_PARM_DESC(skipbbt, "Skip BBT scan if data on the NAND chip is not in MTD format."); > + > static inline struct rk_nfc_nand_chip *rk_nfc_to_rknand(struct nand_chip *chip) > { > return container_of(chip, struct rk_nfc_nand_chip, chip); > @@ -1153,6 +1157,9 @@ static int rk_nfc_nand_chip_init(struct device *dev, struct rk_nfc *nfc, > > nand_set_controller_data(chip, nfc); > > + if (skipbbt) > + chip->options |= NAND_SKIP_BBTSCAN | NAND_NO_BBM_QUIRK; > + > chip->options |= NAND_USES_DMA | NAND_NO_SUBPAGE_WRITE; > chip->bbt_options = NAND_BBT_USE_FLASH | NAND_BBT_NO_OOB; > > -- > 2.30.2 >
Thanks, Miquèl
| ![\](/images/icornerr.gif) |