Skip to content

Commit 8c1b28a

Browse files
richard-bootlinmiquelraynal
authored andcommitted
mtd: rawnand: sunxi: add has_ecc_block_512 capability
The H616 controller can't handle 512 bytes ECC block size. The NFC_ECC_BLOCK_512 bit disappeared in H6, and NDFC_RANDOM_EN took its place. So, add has_ecc_block_512 capability to only set this bit on SoC having it. No functional change. Signed-off-by: Richard Genoud <richard.genoud@bootlin.com> Reviewed-by: Jernej Skrabec <jernej.skrabec@gmail.com> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
1 parent 6fc2619 commit 8c1b28a

1 file changed

Lines changed: 12 additions & 2 deletions

File tree

drivers/mtd/nand/raw/sunxi_nand.c

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,7 @@ static inline struct sunxi_nand_chip *to_sunxi_nand(struct nand_chip *nand)
233233
*
234234
* @has_mdma: Use mbus dma mode, otherwise general dma
235235
* through MBUS on A23/A33 needs extra configuration.
236+
* @has_ecc_block_512: If the ECC can handle 512B or only 1024B chuncks
236237
* @reg_io_data: I/O data register
237238
* @reg_ecc_err_cnt: ECC error counter register
238239
* @reg_user_data: User data register
@@ -244,6 +245,7 @@ static inline struct sunxi_nand_chip *to_sunxi_nand(struct nand_chip *nand)
244245
*/
245246
struct sunxi_nfc_caps {
246247
bool has_mdma;
248+
bool has_ecc_block_512;
247249
unsigned int reg_io_data;
248250
unsigned int reg_ecc_err_cnt;
249251
unsigned int reg_user_data;
@@ -1758,8 +1760,14 @@ static int sunxi_nand_hw_ecc_ctrl_init(struct nand_chip *nand,
17581760
sunxi_nand->ecc.ecc_ctl = NFC_ECC_MODE(i) | NFC_ECC_EXCEPTION |
17591761
NFC_ECC_PIPELINE | NFC_ECC_EN;
17601762

1761-
if (ecc->size == 512)
1762-
sunxi_nand->ecc.ecc_ctl |= NFC_ECC_BLOCK_512;
1763+
if (ecc->size == 512) {
1764+
if (nfc->caps->has_ecc_block_512) {
1765+
sunxi_nand->ecc.ecc_ctl |= NFC_ECC_BLOCK_512;
1766+
} else {
1767+
dev_err(nfc->dev, "512B ECC block not supported\n");
1768+
return -EOPNOTSUPP;
1769+
}
1770+
}
17631771

17641772
return 0;
17651773
}
@@ -2214,6 +2222,7 @@ static const u8 sunxi_ecc_strengths_a10[] = {
22142222
};
22152223

22162224
static const struct sunxi_nfc_caps sunxi_nfc_a10_caps = {
2225+
.has_ecc_block_512 = true,
22172226
.reg_io_data = NFC_REG_A10_IO_DATA,
22182227
.reg_ecc_err_cnt = NFC_REG_A10_ECC_ERR_CNT,
22192228
.reg_user_data = NFC_REG_A10_USER_DATA,
@@ -2226,6 +2235,7 @@ static const struct sunxi_nfc_caps sunxi_nfc_a10_caps = {
22262235

22272236
static const struct sunxi_nfc_caps sunxi_nfc_a23_caps = {
22282237
.has_mdma = true,
2238+
.has_ecc_block_512 = true,
22292239
.reg_io_data = NFC_REG_A23_IO_DATA,
22302240
.reg_ecc_err_cnt = NFC_REG_A10_ECC_ERR_CNT,
22312241
.reg_user_data = NFC_REG_A10_USER_DATA,

0 commit comments

Comments
 (0)