[PATCH v2 05/10] mtd: rawnand: brcmnand: correctly verify erased pages

William Zhang william.zhang at broadcom.com
Wed Feb 22 02:13:53 CET 2023



On 02/11/2023 07:29 AM, Linus Walleij wrote:
> From: Álvaro Fernández Rojas <noltari at gmail.com>
> 
> The current code checks that the whole OOB area is erased.
> This is a problem when JFFS2 cleanmarkers are added to the OOB, since it will
> fail due to the usable OOB bytes not being 0xff.
> Correct this by only checking that data and ECC bytes aren't 0xff.
> 
> Fixes: 02b88eea9f9c ("mtd: brcmnand: Add check for erased page bitflips")
> Signed-off-by: Álvaro Fernández Rojas <noltari at gmail.com>
> Signed-off-by: Miquel Raynal <miquel.raynal at bootlin.com>
> Link: https://lore.kernel.org/linux-mtd/20200512082451.771212-1-noltari@gmail.com
> [Ported to U-Boot from the Linux kernel]
> Signed-off-by: Linus Walleij <linus.walleij at linaro.org>
> ---
>   drivers/mtd/nand/raw/brcmnand/brcmnand.c | 19 +++++++++++--------
>   1 file changed, 11 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/mtd/nand/raw/brcmnand/brcmnand.c b/drivers/mtd/nand/raw/brcmnand/brcmnand.c
> index a934373a2992..5d3fb460d89a 100644
> --- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c
> +++ b/drivers/mtd/nand/raw/brcmnand/brcmnand.c
> @@ -1777,11 +1777,12 @@ static int brcmnand_read_by_pio(struct mtd_info *mtd, struct nand_chip *chip,
>   static int brcmstb_nand_verify_erased_page(struct mtd_info *mtd,
>   		  struct nand_chip *chip, void *buf, u64 addr)
>   {
> -	int i, sas;
> -	void *oob = chip->oob_poi;
> +	struct mtd_oob_region ecc;
> +	int i;
>   	int bitflips = 0;
>   	int page = addr >> chip->page_shift;
>   	int ret;
> +	void *ecc_bytes;
>   	void *ecc_chunk;
>   
>   	if (!buf) {
> @@ -1794,18 +1795,20 @@ static int brcmstb_nand_verify_erased_page(struct mtd_info *mtd,
>   		chip->pagebuf = -1;
>   	}
>   
> -	sas = mtd->oobsize / chip->ecc.steps;
> -
>   	/* read without ecc for verification */
>   	ret = chip->ecc.read_page_raw(mtd, chip, buf, true, page);
>   	if (ret)
>   		return ret;
>   
> -	for (i = 0; i < chip->ecc.steps; i++, oob += sas) {
> +	for (i = 0; i < chip->ecc.steps; i++) {
>   		ecc_chunk = buf + chip->ecc.size * i;
> -		ret = nand_check_erased_ecc_chunk(ecc_chunk,
> -						  chip->ecc.size,
> -						  oob, sas, NULL, 0,
> +
> +		mtd_ooblayout_ecc(mtd, i, &ecc);
> +		ecc_bytes = chip->oob_poi + ecc.offset;
> +
> +		ret = nand_check_erased_ecc_chunk(ecc_chunk, chip->ecc.size,
> +						  ecc_bytes, ecc.length,
> +						  NULL, 0,
>   						  chip->ecc.strength);
>   		if (ret < 0)
>   			return ret;
> 
Acked-by: William Zhang <william.zhang at broadcom.com>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 4212 bytes
Desc: S/MIME Cryptographic Signature
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20230221/1e55a251/attachment.bin>


More information about the U-Boot mailing list