Commit f59dab8d authored by Boris Brezillon's avatar Boris Brezillon

mtd: nand: sunxi: fix support for 512bytes ECC chunks

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: default avatarBoris Brezillon <boris.brezillon@free-electrons.com>
Signed-off-by: default avatarMaxime Ripard <maxime.ripard@free-electrons.com>
parent b156b7f2
...@@ -145,6 +145,7 @@ ...@@ -145,6 +145,7 @@
#define NFC_ECC_PIPELINE BIT(3) #define NFC_ECC_PIPELINE BIT(3)
#define NFC_ECC_EXCEPTION BIT(4) #define NFC_ECC_EXCEPTION BIT(4)
#define NFC_ECC_BLOCK_SIZE_MSK BIT(5) #define NFC_ECC_BLOCK_SIZE_MSK BIT(5)
#define NFC_ECC_BLOCK_512 BIT(5)
#define NFC_RANDOM_EN BIT(9) #define NFC_RANDOM_EN BIT(9)
#define NFC_RANDOM_DIRECTION BIT(10) #define NFC_RANDOM_DIRECTION BIT(10)
#define NFC_ECC_MODE_MSK GENMASK(15, 12) #define NFC_ECC_MODE_MSK GENMASK(15, 12)
...@@ -817,6 +818,9 @@ static void sunxi_nfc_hw_ecc_enable(struct mtd_info *mtd) ...@@ -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 | ecc_ctl |= NFC_ECC_EN | NFC_ECC_MODE(data->mode) | NFC_ECC_EXCEPTION |
NFC_ECC_PIPELINE; NFC_ECC_PIPELINE;
if (nand->ecc.size == 512)
ecc_ctl |= NFC_ECC_BLOCK_512;
writel(ecc_ctl, nfc->regs + NFC_REG_ECC_CTL); writel(ecc_ctl, nfc->regs + NFC_REG_ECC_CTL);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment