]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
mtd: rawnand: sunxi: make the code more self-explanatory
authorRichard Genoud <richard.genoud@bootlin.com>
Tue, 17 Mar 2026 14:24:33 +0000 (15:24 +0100)
committerMiquel Raynal <miquel.raynal@bootlin.com>
Wed, 25 Mar 2026 14:27:30 +0000 (15:27 +0100)
In sunxi_nfc_hw_ecc_{read,write}_chunk(), the ECC step was forced to 0,
the reason is not trivial to get when reading the code.

The explanation is that, from the NAND flash controller perspective, we
are indeed at step 0 for user data length and ECC errors.

Just add a const value with an explanation to clarify things.

Acked-by: Jernej Skrabec <jernej.skrabec@gmail.com>
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 0b0b5349f44668dbc2ae0cc51548520b414a3fb8..ca701c75cec575d46c682aea5ea06749b65179c3 100644 (file)
@@ -963,6 +963,8 @@ static int sunxi_nfc_hw_ecc_read_chunk(struct nand_chip *nand,
        u32 pattern_found;
        bool erased;
        int ret;
+       /* From the controller point of view, we are at step 0 */
+       const int nfc_step = 0;
 
        if (*cur_off != data_off)
                nand_change_read_column_op(nand, data_off, NULL, 0, false);
@@ -977,7 +979,7 @@ static int sunxi_nfc_hw_ecc_read_chunk(struct nand_chip *nand,
                return ret;
 
        sunxi_nfc_reset_user_data_len(nfc);
-       sunxi_nfc_set_user_data_len(nfc, USER_DATA_SZ, 0);
+       sunxi_nfc_set_user_data_len(nfc, USER_DATA_SZ, nfc_step);
        sunxi_nfc_randomizer_config(nand, page, false);
        sunxi_nfc_randomizer_enable(nand);
        writel(NFC_DATA_TRANS | NFC_DATA_SWAP_METHOD | NFC_ECC_OP,
@@ -993,10 +995,9 @@ static int sunxi_nfc_hw_ecc_read_chunk(struct nand_chip *nand,
        pattern_found = readl(nfc->regs + nfc->caps->reg_pat_found);
        pattern_found = field_get(NFC_ECC_PAT_FOUND_MSK(nfc), pattern_found);
 
-       ret = sunxi_nfc_hw_ecc_correct(nand, data, oob_required ? oob : NULL, 0,
-                                      readl(nfc->regs + NFC_REG_ECC_ST),
-                                      pattern_found,
-                                      &erased);
+       ret = sunxi_nfc_hw_ecc_correct(nand, data, oob_required ? oob : NULL,
+                                      nfc_step, readl(nfc->regs + NFC_REG_ECC_ST),
+                                      pattern_found, &erased);
        if (erased)
                return 1;
 
@@ -1029,7 +1030,7 @@ static int sunxi_nfc_hw_ecc_read_chunk(struct nand_chip *nand,
                        sunxi_nfc_randomizer_read_buf(nand, oob, ecc->bytes + USER_DATA_SZ,
                                                      true, page);
 
-                       sunxi_nfc_hw_ecc_get_prot_oob_bytes(nand, oob, 0,
+                       sunxi_nfc_hw_ecc_get_prot_oob_bytes(nand, oob, nfc_step,
                                                            bbm, page);
                }
        }
@@ -1207,6 +1208,8 @@ static int sunxi_nfc_hw_ecc_write_chunk(struct nand_chip *nand,
        struct sunxi_nfc *nfc = to_sunxi_nfc(nand->controller);
        struct nand_ecc_ctrl *ecc = &nand->ecc;
        int ret;
+       /* From the controller point of view, we are at step 0 */
+       const int nfc_step = 0;
 
        if (data_off != *cur_off)
                nand_change_write_column_op(nand, data_off, NULL, 0, false);
@@ -1223,8 +1226,8 @@ static int sunxi_nfc_hw_ecc_write_chunk(struct nand_chip *nand,
        sunxi_nfc_randomizer_config(nand, page, false);
        sunxi_nfc_randomizer_enable(nand);
        sunxi_nfc_reset_user_data_len(nfc);
-       sunxi_nfc_set_user_data_len(nfc, USER_DATA_SZ, 0);
-       sunxi_nfc_hw_ecc_set_prot_oob_bytes(nand, oob, 0, bbm, page);
+       sunxi_nfc_set_user_data_len(nfc, USER_DATA_SZ, nfc_step);
+       sunxi_nfc_hw_ecc_set_prot_oob_bytes(nand, oob, nfc_step, bbm, page);
 
        writel(NFC_DATA_TRANS | NFC_DATA_SWAP_METHOD |
               NFC_ACCESS_DIR | NFC_ECC_OP,