| From 6c0e9101f4f181e7f1ccdfe463ee2c14c7f2a4ef Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 24 Feb 2021 09:02:10 +0100 |
| Subject: mtd: rawnand: brcmnand: fix OOB R/W with Hamming ECC |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Álvaro Fernández Rojas <noltari@gmail.com> |
| |
| [ Upstream commit f5200c14242fb8fa4a9b93f7fd4064d237e58785 ] |
| |
| Hamming ECC doesn't cover the OOB data, so reading or writing OOB shall |
| always be done without ECC enabled. |
| This is a problem when adding JFFS2 cleanmarkers to erased blocks. If JFFS2 |
| clenmarkers are added to the OOB with ECC enabled, OOB bytes will be changed |
| from ff ff ff to 00 00 00, reporting incorrect ECC errors. |
| |
| Fixes: 27c5b17cd1b1 ("mtd: nand: add NAND driver "library" for Broadcom STB NAND controller") |
| Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com> |
| Acked-by: Brian Norris <computersforpeace@gmail.com> |
| Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> |
| Link: https://lore.kernel.org/linux-mtd/20210224080210.23686-1-noltari@gmail.com |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/mtd/nand/raw/brcmnand/brcmnand.c | 6 ++++++ |
| 1 file changed, 6 insertions(+) |
| |
| diff --git a/drivers/mtd/nand/raw/brcmnand/brcmnand.c b/drivers/mtd/nand/raw/brcmnand/brcmnand.c |
| index 659eaa6f0980..5ff4291380c5 100644 |
| --- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c |
| +++ b/drivers/mtd/nand/raw/brcmnand/brcmnand.c |
| @@ -2688,6 +2688,12 @@ static int brcmnand_attach_chip(struct nand_chip *chip) |
| |
| ret = brcmstb_choose_ecc_layout(host); |
| |
| + /* If OOB is written with ECC enabled it will cause ECC errors */ |
| + if (is_hamming_ecc(host->ctrl, &host->hwcfg)) { |
| + chip->ecc.write_oob = brcmnand_write_oob_raw; |
| + chip->ecc.read_oob = brcmnand_read_oob_raw; |
| + } |
| + |
| return ret; |
| } |
| |
| -- |
| 2.30.2 |
| |