| From e3ebfcb972ed77b71bf3b0a92f15ea312de3f022 Mon Sep 17 00:00:00 2001 |
| From: Claire Lin <claire.lin@broadcom.com> |
| Date: Mon, 26 Aug 2019 15:57:56 -0400 |
| Subject: [PATCH] mtd: rawnand: brcmnand: Fix ecc chunk calculation for erased |
| page bitfips |
| |
| commit 7f852cc1579297fd763789f8cd370639d0c654b6 upstream. |
| |
| In brcmstb_nand_verify_erased_page(), the ECC chunk pointer calculation |
| while correcting erased page bitflips is wrong, fix it. |
| |
| Fixes: 02b88eea9f9c ("mtd: brcmnand: Add check for erased page bitflips") |
| Signed-off-by: Claire Lin <claire.lin@broadcom.com> |
| Reviewed-by: Ray Jui <ray.jui@broadcom.com> |
| Signed-off-by: Kamal Dasu <kdasu.kdev@gmail.com> |
| Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/mtd/nand/raw/brcmnand/brcmnand.c b/drivers/mtd/nand/raw/brcmnand/brcmnand.c |
| index f71bab29c475..8f60f9d8783c 100644 |
| --- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c |
| +++ b/drivers/mtd/nand/raw/brcmnand/brcmnand.c |
| @@ -1670,6 +1670,7 @@ static int brcmstb_nand_verify_erased_page(struct mtd_info *mtd, |
| int bitflips = 0; |
| int page = addr >> chip->page_shift; |
| int ret; |
| + void *ecc_chunk; |
| |
| if (!buf) |
| buf = nand_get_data_buf(chip); |
| @@ -1682,7 +1683,9 @@ static int brcmstb_nand_verify_erased_page(struct mtd_info *mtd, |
| return ret; |
| |
| for (i = 0; i < chip->ecc.steps; i++, oob += sas) { |
| - ret = nand_check_erased_ecc_chunk(buf, chip->ecc.size, |
| + ecc_chunk = buf + chip->ecc.size * i; |
| + ret = nand_check_erased_ecc_chunk(ecc_chunk, |
| + chip->ecc.size, |
| oob, sas, NULL, 0, |
| chip->ecc.strength); |
| if (ret < 0) |
| -- |
| 2.27.0 |
| |