2021-03-02 17:05:32 +00:00
|
|
|
From 095b4dabff2a929cefd330110c5c578956213188 Mon Sep 17 00:00:00 2001
|
2021-02-21 09:00:18 +00:00
|
|
|
From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= <noltari@gmail.com>
|
2021-03-02 17:05:32 +00:00
|
|
|
Date: Wed, 24 Feb 2021 09:02:10 +0100
|
|
|
|
Subject: [PATCH] mtd: rawnand: brcmnand: fix OOB R/W with Hamming ECC
|
2021-02-21 09:00:18 +00:00
|
|
|
MIME-Version: 1.0
|
|
|
|
Content-Type: text/plain; charset=UTF-8
|
|
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
|
|
|
|
Hamming ECC doesn't cover the OOB data, so reading or writing OOB shall
|
|
|
|
always be done without ECC enabled.
|
2021-03-02 17:05:32 +00:00
|
|
|
This is a problem when adding JFFS2 cleanmarkers to erased blocks. If JFFS2
|
2021-02-21 09:00:18 +00:00
|
|
|
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.
|
|
|
|
|
2021-03-02 17:05:32 +00:00
|
|
|
Fixes: 27c5b17cd1b1 ("mtd: nand: add NAND driver "library" for Broadcom STB NAND controller")
|
2021-02-21 09:00:18 +00:00
|
|
|
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
|
2021-03-02 17:05:32 +00:00
|
|
|
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
|
2021-02-21 09:00:18 +00:00
|
|
|
---
|
|
|
|
drivers/mtd/nand/raw/brcmnand/brcmnand.c | 6 ++++++
|
|
|
|
1 file changed, 6 insertions(+)
|
|
|
|
|
|
|
|
--- 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 n
|
|
|
|
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
|