]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
mtd: nand: sunxi: Fix ECC strength choice
authorMiquel Raynal <miquel.raynal@free-electrons.com>
Wed, 24 Jan 2018 22:49:31 +0000 (23:49 +0100)
committerSasha Levin <alexander.levin@microsoft.com>
Thu, 1 Mar 2018 03:09:51 +0000 (22:09 -0500)
[ Upstream commit f4c6cd1a7f2275d5bc0e494b21fff26f8dde80f0 ]

When the requested ECC strength does not exactly match the strengths
supported by the ECC engine, the driver is selecting the closest
strength meeting the 'selected_strength > requested_strength'
constraint. Fix the fact that, in this particular case, ecc->strength
value was not updated to match the 'selected_strength'.

For instance, one can encounter this issue when no ECC requirement is
filled in the device tree while the NAND chip minimum requirement is not
a strength/step_size combo natively supported by the ECC engine.

Fixes: 1fef62c1423b ("mtd: nand: add sunxi NAND flash controller support")
Cc: <stable@vger.kernel.org>
Suggested-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Signed-off-by: Miquel Raynal <miquel.raynal@free-electrons.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
drivers/mtd/nand/sunxi_nand.c

index 499b8e433d3daafc9551074c5c7329b7bce7b933..1c8fdc3cec937c035755dd7cd137c19d71816ed7 100644 (file)
@@ -933,8 +933,14 @@ static int sunxi_nand_hw_common_ecc_ctrl_init(struct mtd_info *mtd,
 
        /* Add ECC info retrieval from DT */
        for (i = 0; i < ARRAY_SIZE(strengths); i++) {
-               if (ecc->strength <= strengths[i])
+               if (ecc->strength <= strengths[i]) {
+                       /*
+                        * Update ecc->strength value with the actual strength
+                        * that will be used by the ECC engine.
+                        */
+                       ecc->strength = strengths[i];
                        break;
+               }
        }
 
        if (i >= ARRAY_SIZE(strengths)) {