35 lines
1.2 KiB
Diff
35 lines
1.2 KiB
Diff
|
From cf0d2fbaae9e962d91a321de75e0d4f9f9ccbdfe Mon Sep 17 00:00:00 2001
|
||
|
From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= <noltari@gmail.com>
|
||
|
Date: Thu, 21 Jan 2021 18:17:37 +0100
|
||
|
Subject: [PATCH] nand: brcmnand: fix OOB R/W with Hamming ECC
|
||
|
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.
|
||
|
This is a problem when adding JFFS2 cleanmarkers to erased blocks. When 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.
|
||
|
|
||
|
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
|
||
|
---
|
||
|
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
|
||
|
@@ -2426,6 +2426,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;
|
||
|
}
|
||
|
|