summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLadislav Michl <ladis@linux-mips.org>2018-10-28 22:23:22 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2018-12-14 20:20:27 +0100
commitbabffbb19350d0119f128390c80101dbedd4dbca (patch)
treed4e55c57cbca8f34bcf935adf1b89c3653321e96
parent3c9c9a6fee481e7d365455625e69f398680127e8 (diff)
downloadbarebox-babffbb19350d0119f128390c80101dbedd4dbca.tar.gz
barebox-babffbb19350d0119f128390c80101dbedd4dbca.tar.xz
mtd: atmel_nand: Add per board ECC setup
Signed-off-by: Ladislav Michl <ladis@linux-mips.org> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r--arch/arm/mach-at91/include/mach/board.h2
-rw-r--r--drivers/mtd/nand/atmel_nand.c3
2 files changed, 5 insertions, 0 deletions
diff --git a/arch/arm/mach-at91/include/mach/board.h b/arch/arm/mach-at91/include/mach/board.h
index 0f2c269732..886f81e9ad 100644
--- a/arch/arm/mach-at91/include/mach/board.h
+++ b/arch/arm/mach-at91/include/mach/board.h
@@ -64,6 +64,8 @@ struct atmel_nand_data {
u8 cle; /* address line number connected to CLE */
u8 bus_width_16; /* buswidth is 16 bit */
u8 ecc_mode; /* NAND_ECC_* */
+ u8 ecc_strength; /* number of bits to correct per ECC step */
+ u8 ecc_size_shift; /* data bytes covered by a single ECC step.*/
u8 on_flash_bbt; /* Use flash based bbt */
u8 has_pmecc; /* Use PMECC */
u8 bus_on_d0;
diff --git a/drivers/mtd/nand/atmel_nand.c b/drivers/mtd/nand/atmel_nand.c
index 4c1725d096..b4d4e79d91 100644
--- a/drivers/mtd/nand/atmel_nand.c
+++ b/drivers/mtd/nand/atmel_nand.c
@@ -1297,6 +1297,7 @@ static int atmel_hw_nand_init_params(struct device_d *dev,
nand_chip->ecc.hwctl = atmel_nand_hwctl;
nand_chip->ecc.read_page = atmel_nand_read_page;
nand_chip->ecc.bytes = 4;
+ nand_chip->ecc.strength = 1;
return 0;
}
@@ -1387,6 +1388,8 @@ static int __init atmel_nand_probe(struct device_d *dev)
}
nand_chip->ecc.mode = pdata->ecc_mode;
+ nand_chip->ecc.strength = pdata->ecc_strength ? : 1;
+ nand_chip->ecc.size = 1 << pdata->ecc_size_shift ? : 512;
if (IS_ENABLED(CONFIG_NAND_ECC_HW) &&
pdata->ecc_mode == NAND_ECC_HW) {