]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
mtd: rawnand: sunxi: move NFC_ECC_MODE offset in SoC caps
authorRichard Genoud <richard.genoud@bootlin.com>
Fri, 23 Jan 2026 11:44:47 +0000 (12:44 +0100)
committerMichael Trimarchi <michael@amarulasolutions.com>
Tue, 3 Feb 2026 20:44:51 +0000 (21:44 +0100)
NFC_ECC_MODE register offset moved in H616, so let's make it a SoC cap

No functional change.

Signed-off-by: Richard Genoud <richard.genoud@bootlin.com>
Signed-off-by: Michael Trimarchi <michael@amarulasolutions.com>
drivers/mtd/nand/raw/sunxi_nand.c
drivers/mtd/nand/raw/sunxi_nand.h

index d14a12b6662c1379d80eb430d1b350f035e336d3..c5efafa2414ca599881047f7bba1d895db58852f 100644 (file)
@@ -659,10 +659,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_512;
-       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;
@@ -1727,6 +1728,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[] = {
index b4a05733c81006cb6ce744124810e7eceb536555..3b155b0c8f3efc7cdd58fc36d658beba6d0fdd11 100644 (file)
@@ -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
 #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)
 
  * @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;
@@ -182,6 +184,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