mtd: rawnand: Try not to use the ECC private structures
authorMiquel Raynal <miquel.raynal@bootlin.com>
Wed, 27 Jan 2021 20:30:17 +0000 (21:30 +0100)
committerMiquel Raynal <miquel.raynal@bootlin.com>
Thu, 11 Mar 2021 08:37:28 +0000 (09:37 +0100)
Most of the time, there is no need to use the software ECC Hamming and
BCH algorithms private context to know their configuration. All the
data has been stored by their ->init_ctx() hook in the generic NAND
ECC engine structure, so use this one when possible.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Tested-by: Adam Ford <aford173@gmail.com> #logicpd Torpedo
Link: https://lore.kernel.org/linux-mtd/20210127203020.9574-7-miquel.raynal@bootlin.com
drivers/mtd/nand/raw/nand_base.c

index c33fa1b1847f9893722c25c4f04090858510d4dd..4e1bd1e5d474aaaa0b6e352d29f594c2f7638b88 100644 (file)
@@ -5162,8 +5162,8 @@ int rawnand_sw_hamming_init(struct nand_chip *chip)
        chip->ecc.size = base->ecc.ctx.conf.step_size;
        chip->ecc.strength = base->ecc.ctx.conf.strength;
        chip->ecc.total = base->ecc.ctx.total;
-       chip->ecc.steps = engine_conf->nsteps;
-       chip->ecc.bytes = engine_conf->code_size;
+       chip->ecc.steps = nanddev_get_ecc_nsteps(base);
+       chip->ecc.bytes = base->ecc.ctx.total / nanddev_get_ecc_nsteps(base);
 
        return 0;
 }
@@ -5201,7 +5201,7 @@ EXPORT_SYMBOL(rawnand_sw_hamming_cleanup);
 int rawnand_sw_bch_init(struct nand_chip *chip)
 {
        struct nand_device *base = &chip->base;
-       struct nand_ecc_sw_bch_conf *engine_conf;
+       const struct nand_ecc_props *ecc_conf = nanddev_get_ecc_conf(base);
        int ret;
 
        base->ecc.user_conf.engine_type = NAND_ECC_ENGINE_TYPE_SOFT;
@@ -5213,13 +5213,11 @@ int rawnand_sw_bch_init(struct nand_chip *chip)
        if (ret)
                return ret;
 
-       engine_conf = base->ecc.ctx.priv;
-
-       chip->ecc.size = base->ecc.ctx.conf.step_size;
-       chip->ecc.strength = base->ecc.ctx.conf.strength;
+       chip->ecc.size = ecc_conf->step_size;
+       chip->ecc.strength = ecc_conf->strength;
        chip->ecc.total = base->ecc.ctx.total;
-       chip->ecc.steps = engine_conf->nsteps;
-       chip->ecc.bytes = engine_conf->code_size;
+       chip->ecc.steps = nanddev_get_ecc_nsteps(base);
+       chip->ecc.bytes = base->ecc.ctx.total / nanddev_get_ecc_nsteps(base);
 
        return 0;
 }