linux/drivers/mtd/nand
Ivan Djelic 0e618ef0a6 mtd: nand: omap: add support for hardware BCH ecc
Two modes are supported: 4-bit and 8-bit error correction.
Note that 4-bit mode is only confirmed to work on OMAP3630 ES 1.x,
x >= 1. The OMAP3 GPMC hardware BCH engine computes remainder
polynomials, it does not provide automatic error location and
correction: this step is implemented using the BCH library.

This implementation only protects page data, there is no support
for protecting user-defined spare area bytes (this could be added
with few modifications); therefore, it cannot be used with YAFFS2
or other similar filesystems that depend on oob storage.

Before being stored to nand flash, hardware BCH ecc is adjusted
so that an erased page has a valid ecc; thus allowing correction of
bitflips in blank pages (also common on 4-bit devices).

BCH correction mode is selected at runtime by setting platform data
parameter 'ecc_opt' to value OMAP_ECC_BCH4_CODE_HW or
OMAP_ECC_BCH8_CODE_HW.

This code has been tested with mtd test modules, UBI and UBIFS on a
BeagleBoard revC3 (OMAP3530 ES3.0 + Micron NAND 256MiB 1,8V 16-bit).

Signed-off-by: Ivan Djelic <ivan.djelic@parrot.com>
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
2012-05-13 23:25:51 -05:00
..
gpmi-nand mtd: nand: remove 'sndcmd' parameter of 'read_oob/read_oob_raw' 2012-05-13 23:24:40 -05:00
alauda.c mtd: driver _read() returns max_bitflips; mtd_read() returns -EUCLEAN 2012-05-13 23:14:23 -05:00
ams-delta.c mtd: ams-delta: fix request_mem_region() failure 2012-05-08 16:24:33 -05:00
atmel_nand.c mtd: nand: add 'oob_required' argument to NAND {read,write}_page interfaces 2012-05-13 23:20:00 -05:00
atmel_nand_ecc.h [ARM] 5265/3: [AT91] Add copyright info 2008-09-21 23:01:18 +01:00
au1550nd.c mtd: nand: kill NAND_NO_AUTOINCR option 2012-05-13 23:15:38 -05:00
autcpu12.c mtd: nand: rename NAND_USE_FLASH_BBT 2011-09-11 15:01:56 +03:00
bcm_umi_bch.c mtd: nand: add 'oob_required' argument to NAND {read,write}_page interfaces 2012-05-13 23:20:00 -05:00
bcm_umi_nand.c mtd: nand: add 'oob_required' argument to NAND {read,write}_page interfaces 2012-05-13 23:20:00 -05:00
bf5xx_nand.c mtd: nand: add 'oob_required' argument to NAND {read,write}_page interfaces 2012-05-13 23:20:00 -05:00
cafe_nand.c mtd: nand: remove 'sndcmd' parameter of 'read_oob/read_oob_raw' 2012-05-13 23:24:40 -05:00
cmx270_nand.c mtd: do not use plain 0 as NULL 2012-03-27 00:53:20 +01:00
cs553x_nand.c mtd: nand: kill NAND_NO_AUTOINCR option 2012-05-13 23:15:38 -05:00
davinci_nand.c mtd: flash drivers set ecc strength 2012-03-27 00:56:46 +01:00
denali.c mtd: nand: remove 'sndcmd' parameter of 'read_oob/read_oob_raw' 2012-05-13 23:24:40 -05:00
denali.h mtd: denali: detect the number of banks 2011-05-25 02:02:12 +01:00
diskonchip.c mtd: flash drivers set ecc strength 2012-03-27 00:56:46 +01:00
docg4.c mtd: nand: remove 'sndcmd' parameter of 'read_oob/read_oob_raw' 2012-05-13 23:24:40 -05:00
fsl_elbc_nand.c mtd: eLBC NAND: utilize oob_required parameter 2012-05-13 23:21:39 -05:00
fsl_ifc_nand.c mtd: IFC NAND: utilize oob_required parameter 2012-05-13 23:21:48 -05:00
fsl_upm.c mtd: convert drivers/mtd/* to use module_platform_driver() 2012-01-09 18:12:35 +00:00
fsmc_nand.c mtd: nand: add 'oob_required' argument to NAND {read,write}_page interfaces 2012-05-13 23:20:00 -05:00
gpio.c mtd: gpio-nand: add device tree bindings 2012-01-09 18:23:58 +00:00
h1910.c mtd: nand: kill NAND_NO_AUTOINCR option 2012-05-13 23:15:38 -05:00
jz4740_nand.c mtd: nand: fix incorrect ecc strength values 2012-05-13 23:10:28 -05:00
Kconfig mtd: nand: omap: add support for hardware BCH ecc 2012-05-13 23:25:51 -05:00
Makefile MTD merge for 3.4 2012-03-30 17:31:56 -07:00
mpc5121_nfc.c mtd: nand: kill NAND_NO_AUTOINCR option 2012-05-13 23:15:38 -05:00
mxc_nand.c mtd: mxc_nand: fix several sparse warnings about incorrect address space 2012-05-13 23:03:31 -05:00
nand_base.c mtd: nand: check the return code of 'read_oob/read_oob_raw' 2012-05-13 23:25:00 -05:00
nand_bbt.c mtd: introduce mtd_write_oob interface 2012-01-09 18:25:24 +00:00
nand_bch.c mtd: cleanup style on pr_debug messages 2011-09-11 15:02:16 +03:00
nand_bcm_umi.c mtd: add bcmring nand driver 2009-10-20 10:07:23 +09:00
nand_bcm_umi.h mtd: nand_bcm: fix hot spin and code duplication 2010-02-26 16:56:35 +00:00
nand_ecc.c mtd: spelling, capitalization, uniformity 2011-09-11 15:02:13 +03:00
nand_ids.c mtd: nand: kill NAND_NO_AUTOINCR option 2012-05-13 23:15:38 -05:00
nandsim.c mtd: nandsim: remove autoincrement code 2012-05-13 23:15:10 -05:00
ndfc.c mtd: flash drivers set ecc strength 2012-03-27 00:56:46 +01:00
nomadik_nand.c mtd: introduce mtd_resume interface 2012-01-09 18:25:46 +00:00
nuc900_nand.c mtd: convert drivers/mtd/* to use module_platform_driver() 2012-01-09 18:12:35 +00:00
omap2.c mtd: nand: omap: add support for hardware BCH ecc 2012-05-13 23:25:51 -05:00
orion_nand.c mtd: do not use plain 0 as NULL 2012-03-27 00:53:20 +01:00
pasemi_nand.c mtd: nand: kill NAND_NO_AUTOINCR option 2012-05-13 23:15:38 -05:00
plat_nand.c mtd: add read_byte support to plat_nand 2012-05-13 23:16:53 -05:00
ppchameleonevb.c mtd: do not use plain 0 as NULL 2012-03-27 00:53:20 +01:00
pxa3xx_nand.c mtd: nand: add 'oob_required' argument to NAND {read,write}_page interfaces 2012-05-13 23:20:00 -05:00
r852.c mtd: nand: remove 'sndcmd' parameter of 'read_oob/read_oob_raw' 2012-05-13 23:24:40 -05:00
r852.h mtd: r852: remove useless pci powerup/down from suspend/resume routines 2010-10-25 01:32:21 +01:00
rtc_from4.c mtd: flash drivers set ecc strength 2012-03-27 00:56:46 +01:00
s3c2410.c mtd: flash drivers set ecc strength 2012-03-27 00:56:46 +01:00
sh_flctl.c mtd: nand: add 'oob_required' argument to NAND {read,write}_page interfaces 2012-05-13 23:20:00 -05:00
sharpsl.c mtd: flash drivers set ecc strength 2012-03-27 00:56:46 +01:00
sm_common.c mtd: nand: kill NAND_NO_AUTOINCR option 2012-05-13 23:15:38 -05:00
sm_common.h mtd: sm_common: split smartmedia and xD table 2010-05-14 01:03:46 +01:00
socrates_nand.c mtd: convert drivers/mtd/* to use module_platform_driver() 2012-01-09 18:12:35 +00:00
spia.c mtd: convert remaining users to mtd_device_register() 2011-05-25 02:25:00 +01:00
tmio_nand.c mtd: flash drivers set ecc strength 2012-03-27 00:56:46 +01:00
txx9ndfmc.c mtd: flash drivers set ecc strength 2012-03-27 00:56:46 +01:00