mtd: rawnand: gpmi: Add strict ecc strength check
authorHan Xu <han.xu@nxp.com>
Tue, 12 Apr 2022 02:52:43 +0000 (21:52 -0500)
committerMiquel Raynal <miquel.raynal@bootlin.com>
Thu, 21 Apr 2022 07:34:04 +0000 (09:34 +0200)
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>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/linux-mtd/20220412025246.24269-3-han.xu@nxp.com
drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c

index 66ebd569858dfc0f71aebb82bfbc1a0390d9e913..cee39126771e1f989aec66b1269bc4326d1593f8 100644 (file)
@@ -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;
 }
 
 /*