Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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>

authored by

Richard Genoud and committed by
Miquel Raynal
8c1b28ab 6fc2619a

+12 -2
+12 -2
drivers/mtd/nand/raw/sunxi_nand.c
··· 233 233 * 234 234 * @has_mdma: Use mbus dma mode, otherwise general dma 235 235 * through MBUS on A23/A33 needs extra configuration. 236 + * @has_ecc_block_512: If the ECC can handle 512B or only 1024B chuncks 236 237 * @reg_io_data: I/O data register 237 238 * @reg_ecc_err_cnt: ECC error counter register 238 239 * @reg_user_data: User data register ··· 245 244 */ 246 245 struct sunxi_nfc_caps { 247 246 bool has_mdma; 247 + bool has_ecc_block_512; 248 248 unsigned int reg_io_data; 249 249 unsigned int reg_ecc_err_cnt; 250 250 unsigned int reg_user_data; ··· 1760 1758 sunxi_nand->ecc.ecc_ctl = NFC_ECC_MODE(i) | NFC_ECC_EXCEPTION | 1761 1759 NFC_ECC_PIPELINE | NFC_ECC_EN; 1762 1760 1763 - if (ecc->size == 512) 1764 - sunxi_nand->ecc.ecc_ctl |= NFC_ECC_BLOCK_512; 1761 + if (ecc->size == 512) { 1762 + if (nfc->caps->has_ecc_block_512) { 1763 + sunxi_nand->ecc.ecc_ctl |= NFC_ECC_BLOCK_512; 1764 + } else { 1765 + dev_err(nfc->dev, "512B ECC block not supported\n"); 1766 + return -EOPNOTSUPP; 1767 + } 1768 + } 1765 1769 1766 1770 return 0; 1767 1771 } ··· 2222 2214 }; 2223 2215 2224 2216 static const struct sunxi_nfc_caps sunxi_nfc_a10_caps = { 2217 + .has_ecc_block_512 = true, 2225 2218 .reg_io_data = NFC_REG_A10_IO_DATA, 2226 2219 .reg_ecc_err_cnt = NFC_REG_A10_ECC_ERR_CNT, 2227 2220 .reg_user_data = NFC_REG_A10_USER_DATA, ··· 2235 2226 2236 2227 static const struct sunxi_nfc_caps sunxi_nfc_a23_caps = { 2237 2228 .has_mdma = true, 2229 + .has_ecc_block_512 = true, 2238 2230 .reg_io_data = NFC_REG_A23_IO_DATA, 2239 2231 .reg_ecc_err_cnt = NFC_REG_A10_ECC_ERR_CNT, 2240 2232 .reg_user_data = NFC_REG_A10_USER_DATA,