[PATCH v3 6/6] mtd: rawnand: nand_base: Don't overwrite read/write_page_raw() for soft ECC
Bastien Curutchet (DAVE.eu)
bastien.curutchet at bootlin.com
Thu Jul 2 15:08:46 CEST 2026
On writes, the Zynq NAND controller needs a bit to be set in the address
register for the last 4 bytes sent. This is correctly handled by the
zynq_nand_write_page_raw() operation but the callback is overwritten
by the core when soft ECC is on. It leads to write failures.
Don't overwrite the write_page_raw callback if it already has a specific
implementation in the NAND driver.
Do the same for the read_page_raw callback to keep symetry between reads
and writes.
Signed-off-by: Bastien Curutchet (DAVE.eu) <bastien.curutchet at bootlin.com>
---
drivers/mtd/nand/raw/nand_base.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/mtd/nand/raw/nand_base.c b/drivers/mtd/nand/raw/nand_base.c
index 48e3685d995..d43263d9f96 100644
--- a/drivers/mtd/nand/raw/nand_base.c
+++ b/drivers/mtd/nand/raw/nand_base.c
@@ -5058,8 +5058,10 @@ int nand_scan_tail(struct mtd_info *mtd)
ecc->read_page = nand_read_page_swecc;
ecc->read_subpage = nand_read_subpage;
ecc->write_page = nand_write_page_swecc;
- ecc->read_page_raw = nand_read_page_raw;
- ecc->write_page_raw = nand_write_page_raw;
+ if (!ecc->read_page_raw)
+ ecc->read_page_raw = nand_read_page_raw;
+ if (!ecc->write_page_raw)
+ ecc->write_page_raw = nand_write_page_raw;
ecc->read_oob = nand_read_oob_std;
ecc->write_oob = nand_write_oob_std;
if (!ecc->size)
--
2.54.0
More information about the U-Boot
mailing list