FAILED: patch "[PATCH] mtd: rawnand: Ensure ECC configuration is propagated to upper" failed to apply to 5.10-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 5.10-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-5.10.y
git checkout FETCH_HEAD
git cherry-pick -x 3a1b777eb9fb75d09c45ae5dd1d007eddcbebf1f
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2024070824-sprint-steadying-855b@gregkh' --subject-prefix 'PATCH 5.10.y' HEAD^..
Possible dependencies:
3a1b777eb9fb ("mtd: rawnand: Ensure ECC configuration is propagated to upper layers") 80fe603160a4 ("mtd: nand: ecc-bch: Stop using raw NAND structures") ea146d7fbf50 ("mtd: nand: ecc-bch: Update the prototypes to be more generic") 127aae607756 ("mtd: nand: ecc-bch: Drop mtd_nand_has_bch()") 3c0fe36abebe ("mtd: nand: ecc-bch: Stop exporting the private structure") 8c5c20921856 ("mtd: nand: ecc-bch: Cleanup and style fixes") cdbe8df5e28e ("mtd: nand: ecc-bch: Move BCH code to the generic NAND layer")
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 3a1b777eb9fb75d09c45ae5dd1d007eddcbebf1f Mon Sep 17 00:00:00 2001
From: Miquel Raynal <[email protected]>
Date: Tue, 7 May 2024 10:58:42 +0200
Subject: [PATCH] mtd: rawnand: Ensure ECC configuration is propagated to upper
layers
Until recently the "upper layer" was MTD. But following incremental reworks to bring spi-nand support and more recently generic ECC support, there is now an intermediate "generic NAND" layer that also needs to get access to some values. When using "converted" ECC engines, like the software ones, these values are already propagated correctly. But otherwise when using good old raw NAND controller drivers, we need to manually set these values ourselves at the end of the "scan" operation, once these values have been negotiated.
Without this propagation, later (generic) checks like the one warning users that the ECC strength is not high enough might simply no longer work.
drivers/mtd/nand/raw/nand_base.c +8 -1
@@ -6301,6 +6301,7 @@ static const struct nand_ops rawnand_ops = {static int nand_scan_tail (struct nand_chip *chip) {struct mtd_info *mtd =nand_to_mtd (chip); +struct nand_device *base = &chip->base;struct nand_ecc_ctrl *ecc = &chip->ecc;int ret, i;
@@ -6445,9 +6446,13 @@ static int nand_scan_tail(struct nand_chip *chip)if (!ecc->write_oob_raw) ecc->write_oob_raw = ecc->write_oob; -/* propagate ecc info to mtd_info */ +/* Propagate ECC info to the generic NAND and MTD layers */ mtd->ecc_strength = ecc->strength; +if (!base->ecc.ctx.conf.strength) + base->ecc.ctx.conf.strength = ecc->strength; mtd->ecc_step_size = ecc->size; +if (!base->ecc.ctx.conf.step_size) + base->ecc.ctx.conf.step_size = ecc->size;/* * Set the number of read / write steps for one page depending on ECC
@@ -6455,6 +6460,8 @@ static int nand_scan_tail(struct nand_chip *chip)*/ if (!ecc->steps) ecc->steps = mtd->writesize / ecc->size; +if (!base->ecc.ctx.nsteps) + base->ecc.ctx.nsteps = ecc->steps;if (ecc->steps * ecc->size != mtd->writesize) {WARN (1 ,"Invalid ECC parameters\n" ); ret = -EINVAL ;