| From 80ecacd054ffeb60cd28e46ed5cd6bd0d2de318b Mon Sep 17 00:00:00 2001 |
| From: "Miquel Raynal (DAVE)" <miquel.raynal@bootlin.com> |
| Date: Fri, 29 May 2026 18:29:57 +0200 |
| Subject: mtd: rawnand: pl353: Make sure we use the monolithic helpers for raw accesses |
| |
| From: Miquel Raynal (DAVE) <miquel.raynal@bootlin.com> |
| |
| commit 80ecacd054ffeb60cd28e46ed5cd6bd0d2de318b upstream. |
| |
| Any access not using the hardware ECC engine should be monolithic |
| because the controller has its very own way of handling the end of a |
| transaction during operation configuration, so we cannot easily make |
| repeated reads. |
| |
| This has the side effect of fixing support for software ECC engines. |
| |
| Suggested-by: Andrea Scian <andrea.scian@dave.eu> |
| Cc: stable@vger.kernel.org |
| Fixes: 08d8c62164a3 ("mtd: rawnand: pl353: Add support for the ARM PL353 SMC NAND controller") |
| Signed-off-by: Miquel Raynal (DAVE) <miquel.raynal@bootlin.com> |
| Acked-by: Michal Simek <michal.simek@amd.com> |
| Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/mtd/nand/raw/pl35x-nand-controller.c | 5 +++-- |
| 1 file changed, 3 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/mtd/nand/raw/pl35x-nand-controller.c |
| +++ b/drivers/mtd/nand/raw/pl35x-nand-controller.c |
| @@ -914,7 +914,6 @@ static int pl35x_nand_init_hw_ecc_contro |
| chip->ecc.steps = mtd->writesize / chip->ecc.size; |
| chip->ecc.read_page = pl35x_nand_read_page_hwecc; |
| chip->ecc.write_page = pl35x_nand_write_page_hwecc; |
| - chip->ecc.write_page_raw = nand_monolithic_write_page_raw; |
| pl35x_smc_set_ecc_pg_size(nfc, chip, mtd->writesize); |
| |
| nfc->ecc_buf = devm_kmalloc(nfc->dev, chip->ecc.bytes * chip->ecc.steps, |
| @@ -981,7 +980,6 @@ static int pl35x_nand_attach_chip(struct |
| case NAND_ECC_ENGINE_TYPE_NONE: |
| case NAND_ECC_ENGINE_TYPE_SOFT: |
| dev_dbg(nfc->dev, "Using software ECC (Hamming 1-bit/512B)\n"); |
| - chip->ecc.write_page_raw = nand_monolithic_write_page_raw; |
| break; |
| case NAND_ECC_ENGINE_TYPE_ON_HOST: |
| dev_dbg(nfc->dev, "Using hardware ECC\n"); |
| @@ -995,6 +993,9 @@ static int pl35x_nand_attach_chip(struct |
| return -EINVAL; |
| } |
| |
| + chip->ecc.read_page_raw = nand_monolithic_read_page_raw; |
| + chip->ecc.write_page_raw = nand_monolithic_write_page_raw; |
| + |
| return 0; |
| } |
| |