Message ID | 4d9473ce-c167-47d7-e37a-7b39915a724c@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Fixes for Rockchip NAND controller driver | expand |
Hi Johan, jbx6244@gmail.com wrote on Thu, 8 Jun 2023 18:30:27 +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 we can run it manually. How do you run it manually? > The NAND_NO_BBM_QUIRK option allows us to erase bad blocks with > the nand_erase_nand() function and the flash_erase command. For erasure you now have access to a debugfs entry for experts/forensics which allows you to bypass all bad block checks. > > Signed-off-by: Johan Jonker <jbx6244@gmail.com> > --- > drivers/mtd/nand/raw/rockchip-nand-controller.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/drivers/mtd/nand/raw/rockchip-nand-controller.c b/drivers/mtd/nand/raw/rockchip-nand-controller.c > index cafccc324..f56430f6c 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 the NAND chip contains data not in MTD format."); I highly dislike this. It's not a module parameter that you need, it is related to a partition. > + > 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); > @@ -1156,6 +1160,10 @@ static int rk_nfc_nand_chip_init(struct device *dev, struct rk_nfc *nfc, > > nand_set_controller_data(chip, nfc); > > + /* Skip the automatic BBT scan so we can run it manually. */ > + 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
diff --git a/drivers/mtd/nand/raw/rockchip-nand-controller.c b/drivers/mtd/nand/raw/rockchip-nand-controller.c index cafccc324..f56430f6c 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 the NAND chip contains data 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); @@ -1156,6 +1160,10 @@ static int rk_nfc_nand_chip_init(struct device *dev, struct rk_nfc *nfc, nand_set_controller_data(chip, nfc); + /* Skip the automatic BBT scan so we can run it manually. */ + 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;
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 we can run it manually. The NAND_NO_BBM_QUIRK option allows us to erase bad blocks with the nand_erase_nand() function and the flash_erase command. Signed-off-by: Johan Jonker <jbx6244@gmail.com> --- drivers/mtd/nand/raw/rockchip-nand-controller.c | 8 ++++++++ 1 file changed, 8 insertions(+) -- 2.30.2