NFC_ECC_MODE register offset moved in H616, so let's make it a SoC cap No functional change.
Signed-off-by: Richard Genoud <[email protected]> --- drivers/mtd/nand/raw/sunxi_nand.c | 6 ++++-- drivers/mtd/nand/raw/sunxi_nand.h | 9 ++++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/drivers/mtd/nand/raw/sunxi_nand.c b/drivers/mtd/nand/raw/sunxi_nand.c index fddb1cada023..fd74aa290c92 100644 --- a/drivers/mtd/nand/raw/sunxi_nand.c +++ b/drivers/mtd/nand/raw/sunxi_nand.c @@ -660,10 +660,11 @@ static void sunxi_nfc_hw_ecc_enable(struct mtd_info *mtd) u32 ecc_ctl; ecc_ctl = readl(nfc->regs + NFC_REG_ECC_CTL); - ecc_ctl &= ~(NFC_ECC_MODE_MSK | NFC_ECC_PIPELINE); + ecc_ctl &= ~(NFC_ECC_MODE_MSK(nfc) | NFC_ECC_PIPELINE); if (nfc->caps->has_ecc_block_512) ecc_ctl &= ~NFC_ECC_BLOCK_SIZE_MSK; - ecc_ctl |= NFC_ECC_EN | NFC_ECC_MODE(data->mode) | NFC_ECC_EXCEPTION; + ecc_ctl |= NFC_ECC_EN | NFC_ECC_MODE(nfc, data->mode) + | NFC_ECC_EXCEPTION; if (nand->ecc.size == 512 && nfc->caps->has_ecc_block_512) ecc_ctl |= NFC_ECC_BLOCK_512; @@ -1728,6 +1729,7 @@ static const struct sunxi_nfc_caps sunxi_nfc_a10_caps = { .reg_user_data = NFC_REG_A10_USER_DATA, .reg_pat_found = NFC_REG_ECC_ST, .pat_found_mask = GENMASK(31, 16), + .ecc_mode_mask = GENMASK(15, 12), }; static const struct udevice_id sunxi_nand_ids[] = { diff --git a/drivers/mtd/nand/raw/sunxi_nand.h b/drivers/mtd/nand/raw/sunxi_nand.h index be294d7cea0a..069beaa5289d 100644 --- a/drivers/mtd/nand/raw/sunxi_nand.h +++ b/drivers/mtd/nand/raw/sunxi_nand.h @@ -25,8 +25,9 @@ #include <linux/bitops.h> -/* non compile-time field get */ +/* non compile-time field get/prep */ #define field_get(_mask, _reg) (((_reg) & (_mask)) >> (ffs(_mask) - 1)) +#define field_prep(_mask, _val) (((_val) << (ffs(_mask) - 1)) & (_mask)) #define NFC_REG_CTL 0x0000 #define NFC_REG_ST 0x0004 @@ -142,8 +143,8 @@ #define NFC_ECC_BLOCK_512 BIT(5) #define NFC_RANDOM_EN BIT(9) #define NFC_RANDOM_DIRECTION BIT(10) -#define NFC_ECC_MODE_MSK (0xf << 12) -#define NFC_ECC_MODE(x) ((x) << 12) +#define NFC_ECC_MODE_MSK(nfc) ((nfc)->caps->ecc_mode_mask) +#define NFC_ECC_MODE(nfc, x) field_prep(NFC_ECC_MODE_MSK(nfc), (x)) #define NFC_RANDOM_SEED_MSK (0x7fff << 16) #define NFC_RANDOM_SEED(x) ((x) << 16) @@ -175,6 +176,7 @@ * @reg_user_data: User data register * @reg_pat_found: Data Pattern Status Register * @pat_found_mask: ECC_PAT_FOUND mask in NFC_REG_PAT_FOUND register + * @ecc_mode_mask: ECC_MODE mask in NFC_ECC_CTL register */ struct sunxi_nfc_caps { bool has_ecc_block_512; @@ -183,6 +185,7 @@ struct sunxi_nfc_caps { unsigned int reg_user_data; unsigned int reg_pat_found; unsigned int pat_found_mask; + unsigned int ecc_mode_mask; }; #endif

