mtd: rawnand: fsmc: Fix use of SM ORDER
authorMiquel Raynal <miquel.raynal@bootlin.com>
Tue, 28 Sep 2021 22:15:00 +0000 (00:15 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 18 Nov 2021 18:17:18 +0000 (19:17 +0100)
commit 9be1446ece291a1f08164bd056bed3d698681f8b upstream.

The introduction of the generic ECC engine API lead to a number of
changes in various drivers which broke some of them. Here is a typical
example: I expected the SM_ORDER option to be handled by the Hamming ECC
engine internals. Problem: the fsmc driver does not instantiate (yet) a
real ECC engine object so we had to use a 'bare' ECC helper instead of
the shiny rawnand functions. However, when not intializing this engine
properly and using the bare helpers, we do not get the SM ORDER feature
handled automatically. It looks like this was lost in the process so
let's ensure we use the right SM ORDER now.

Fixes: ad9ffdce4539 ("mtd: rawnand: fsmc: Fix external use of SW Hamming ECC helper")
Cc: stable@vger.kernel.org
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/linux-mtd/20210928221507.199198-2-miquel.raynal@bootlin.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/mtd/nand/raw/fsmc_nand.c

index a3e66155ae4055262656ab1ca64eb8c3691c54df..658f0cbe7ce8ca3b545c28cba577258ed54f4e52 100644 (file)
@@ -438,8 +438,10 @@ static int fsmc_correct_ecc1(struct nand_chip *chip,
                             unsigned char *read_ecc,
                             unsigned char *calc_ecc)
 {
+       bool sm_order = chip->ecc.options & NAND_ECC_SOFT_HAMMING_SM_ORDER;
+
        return ecc_sw_hamming_correct(buf, read_ecc, calc_ecc,
-                                     chip->ecc.size, false);
+                                     chip->ecc.size, sm_order);
 }
 
 /* Count the number of 0's in buff upto a max of max_bits */