]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
mtd: rawnand: sunxi: introduce random en/dir in sunxi_nfc_caps
authorRichard Genoud <richard.genoud@bootlin.com>
Tue, 28 Oct 2025 07:35:03 +0000 (08:35 +0100)
committerMiquel Raynal <miquel.raynal@bootlin.com>
Tue, 28 Oct 2025 16:18:13 +0000 (17:18 +0100)
The H6/H616 RANDOM EN/DIRECTION masks are different from A10/A23.
So move the masks into sunxi_nfc_caps.

No functional change.

Signed-off-by: Richard Genoud <richard.genoud@bootlin.com>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
drivers/mtd/nand/raw/sunxi_nand.c

index a16d50a017512a9e66c4d381c2aae6bd6d606e6c..7dfc50a788e227fa23c13167642ddf0ec31edcb1 100644 (file)
 #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_RANDOM_EN(nfc)     (nfc->caps->random_en_mask)
+#define NFC_RANDOM_DIRECTION(nfc) (nfc->caps->random_dir_mask)
 #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    GENMASK(30, 16)
@@ -239,6 +239,8 @@ static inline struct sunxi_nand_chip *to_sunxi_nand(struct nand_chip *nand)
  * @reg_ecc_err_cnt:   ECC error counter register
  * @reg_user_data:     User data register
  * @reg_pat_found:     Data Pattern Status Register
+ * @random_en_mask:    RANDOM_EN mask in NFC_ECC_CTL register
+ * @random_dir_mask:   RANDOM_DIRECTION mask in NFC_ECC_CTL register
  * @ecc_mode_mask:     ECC_MODE mask in NFC_ECC_CTL register
  * @pat_found_mask:    ECC_PAT_FOUND mask in NFC_REG_PAT_FOUND register
  * @dma_maxburst:      DMA maxburst
@@ -252,6 +254,8 @@ struct sunxi_nfc_caps {
        unsigned int reg_ecc_err_cnt;
        unsigned int reg_user_data;
        unsigned int reg_pat_found;
+       unsigned int random_en_mask;
+       unsigned int random_dir_mask;
        unsigned int ecc_mode_mask;
        unsigned int pat_found_mask;
        unsigned int dma_maxburst;
@@ -680,7 +684,7 @@ static void sunxi_nfc_randomizer_enable(struct nand_chip *nand)
        if (!(nand->options & NAND_NEED_SCRAMBLING))
                return;
 
-       writel(readl(nfc->regs + NFC_REG_ECC_CTL) | NFC_RANDOM_EN,
+       writel(readl(nfc->regs + NFC_REG_ECC_CTL) | NFC_RANDOM_EN(nfc),
               nfc->regs + NFC_REG_ECC_CTL);
 }
 
@@ -691,7 +695,7 @@ static void sunxi_nfc_randomizer_disable(struct nand_chip *nand)
        if (!(nand->options & NAND_NEED_SCRAMBLING))
                return;
 
-       writel(readl(nfc->regs + NFC_REG_ECC_CTL) & ~NFC_RANDOM_EN,
+       writel(readl(nfc->regs + NFC_REG_ECC_CTL) & ~NFC_RANDOM_EN(nfc),
               nfc->regs + NFC_REG_ECC_CTL);
 }
 
@@ -2230,6 +2234,8 @@ static const struct sunxi_nfc_caps sunxi_nfc_a10_caps = {
        .reg_ecc_err_cnt = NFC_REG_A10_ECC_ERR_CNT,
        .reg_user_data = NFC_REG_A10_USER_DATA,
        .reg_pat_found = NFC_REG_ECC_ST,
+       .random_en_mask = BIT(9),
+       .random_dir_mask = BIT(10),
        .ecc_mode_mask = GENMASK(15, 12),
        .pat_found_mask = GENMASK(31, 16),
        .dma_maxburst = 4,
@@ -2244,6 +2250,8 @@ static const struct sunxi_nfc_caps sunxi_nfc_a23_caps = {
        .reg_ecc_err_cnt = NFC_REG_A10_ECC_ERR_CNT,
        .reg_user_data = NFC_REG_A10_USER_DATA,
        .reg_pat_found = NFC_REG_ECC_ST,
+       .random_en_mask = BIT(9),
+       .random_dir_mask = BIT(10),
        .ecc_mode_mask = GENMASK(15, 12),
        .pat_found_mask = GENMASK(31, 16),
        .dma_maxburst = 8,