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