mtd: nand: sunxi: fix support for 512bytes ECC chunks
authorBoris Brezillon <boris.brezillon@free-electrons.com>
Thu, 20 Oct 2016 08:12:42 +0000 (10:12 +0200)
committerBoris Brezillon <boris.brezillon@free-electrons.com>
Fri, 21 Oct 2016 15:52:23 +0000 (17:52 +0200)
The driver is incorrectly assuming that the ECC block size is always 1k
which is not always true.

Also take the other cases into account.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
drivers/mtd/nand/sunxi_nand.c

index 8b8470c4e6d02d2058264cd2a74847ce343df129..e40482a65de6683264950a0caeba55484b1ffedf 100644 (file)
 #define NFC_ECC_PIPELINE       BIT(3)
 #define NFC_ECC_EXCEPTION      BIT(4)
 #define NFC_ECC_BLOCK_SIZE_MSK BIT(5)
+#define NFC_ECC_BLOCK_512      BIT(5)
 #define NFC_RANDOM_EN          BIT(9)
 #define NFC_RANDOM_DIRECTION   BIT(10)
 #define NFC_ECC_MODE_MSK       GENMASK(15, 12)
@@ -817,6 +818,9 @@ static void sunxi_nfc_hw_ecc_enable(struct mtd_info *mtd)
        ecc_ctl |= NFC_ECC_EN | NFC_ECC_MODE(data->mode) | NFC_ECC_EXCEPTION |
                   NFC_ECC_PIPELINE;
 
+       if (nand->ecc.size == 512)
+               ecc_ctl |= NFC_ECC_BLOCK_512;
+
        writel(ecc_ctl, nfc->regs + NFC_REG_ECC_CTL);
 }