nand_ecc_is_strong_enough() doesn't trigger
Miquel Raynal
miquel.raynal at bootlin.com
Tue May 7 05:30:36 PDT 2024
Hi,
s.hauer at pengutronix.de wrote on Thu, 11 Apr 2024 12:06:30 +0200:
> Hi,
>
> I am currently working with a NAND chip requiring 4 bit correction per
> 512 byte data while my NAND driver only supports 1 bit correction, so
> I would assume this to trigger:
>
> /* ECC sanity check: warn if it's too weak */
> if (!nand_ecc_is_strong_enough(&chip->base))
> pr_warn("WARNING: %s: the ECC used on your system (%db/%dB) is too weak compared to the one required by the NAND chip (%db/%dB)\n",
> mtd->name, chip->ecc.strength, chip->ecc.size,
> nanddev_get_ecc_requirements(&chip->base)->strength,
> nanddev_get_ecc_requirements(&chip->base)->step_size);
>
> nand_ecc_is_strong_enough() works on nand->ecc.ctx.conf.step_size, but
> this only ever seems to be initialized by the various ecc-sw-*
> algorithms.
>
> This was changed in 8c126720fe10 ("mtd: rawnand: Use the ECC framework
> nand_ecc_is_strong_enough() helper"). Before this patch the initialized
> values in &(struct nand_chip *chip)->ecc were used (and which are still
> used in the warning message above).
>
> Do you have a direction how this should be fixed?
I looked into it, we need to make sure the ECC values are propagated to
the upper layers. If other people are following the thread, here is the
proposal:
https://lore.kernel.org/linux-mtd/20240507085842.108844-1-miquel.raynal@bootlin.com/T/#u
Thanks,
Miquèl
More information about the linux-mtd
mailing list