]> Git Repo - J-u-boot.git/commitdiff
mtd: nand: sunxi: fix ECC strength choice
authorMiquel Raynal <[email protected]>
Wed, 28 Feb 2018 19:51:44 +0000 (20:51 +0100)
committerMaxime Ripard <[email protected]>
Tue, 3 Apr 2018 10:10:46 +0000 (12:10 +0200)
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.

Suggested-by: Boris Brezillon <[email protected]>
Signed-off-by: Miquel Raynal <[email protected]>
Acked-by: Boris Brezillon <[email protected]>
Signed-off-by: Maxime Ripard <[email protected]>
drivers/mtd/nand/sunxi_nand.c

index 532e03cd84574958d7ad0d98573a19c48353c0f0..37160aaec2f4faae55fe90c86ad22c00a1511d4f 100644 (file)
@@ -1407,8 +1407,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)) {
This page took 0.03824 seconds and 4 git commands to generate.