diff mbox series

[v4,2/5] mtd: rawnand: gpmi: Add strict ecc strength check

Message ID 20220412025246.24269-3-han.xu@nxp.com
State Accepted
Headers show
Series Refactor bch settings and support large oob NAND | expand

Commit Message

Han Xu April 12, 2022, 2:52 a.m. UTC
Add nand_ecc_is_strong_enough() check in gpmi_check_ecc() function to
make sure ecc strength can meet chip requirement.

Signed-off-by: Han Xu <han.xu@nxp.com>

---
Changes since v3:
 - split the uninline to a single patch
 - reuse the nand_ecc_is_strong_enough()

Changes since v2:
 - split the ecc check to a single patch
---
---
 drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

Comments

Miquel Raynal April 21, 2022, 7:37 a.m. UTC | #1
On Tue, 2022-04-12 at 02:52:43 UTC, Han Xu wrote:
> Add nand_ecc_is_strong_enough() check in gpmi_check_ecc() function to
> make sure ecc strength can meet chip requirement.
> 
> Signed-off-by: Han Xu <han.xu@nxp.com>

Applied to https://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux.git nand/next, thanks.

Miquel
diff mbox series

Patch

diff --git a/drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c b/drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c
index 66ebd569858d..cee39126771e 100644
--- a/drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c
+++ b/drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c
@@ -240,7 +240,13 @@  static void gpmi_dump_info(struct gpmi_nand_data *this)
 
 static inline bool gpmi_check_ecc(struct gpmi_nand_data *this)
 {
+	struct nand_chip *chip = &this->nand;
 	struct bch_geometry *geo = &this->bch_geometry;
+	struct nand_device *nand = &chip->base;
+	struct nand_ecc_props *conf = &nand->ecc.ctx.conf;
+
+	conf->step_size = geo->eccn_chunk_size;
+	conf->strength = geo->ecc_strength;
 
 	/* Do the sanity check. */
 	if (GPMI_IS_MXS(this)) {
@@ -248,7 +254,14 @@  static inline bool gpmi_check_ecc(struct gpmi_nand_data *this)
 		if (geo->gf_len == 14)
 			return false;
 	}
-	return geo->ecc_strength <= this->devdata->bch_max_ecc_strength;
+
+	if (geo->ecc_strength > this->devdata->bch_max_ecc_strength)
+		return false;
+
+	if (!nand_ecc_is_strong_enough(nand))
+		return false;
+
+	return true;
 }
 
 /*