alistair23-linux/drivers/mtd
Brian Norris ba84fb5952 mtd: nand: add generic READ RETRY support
Modern MLC (and even SLC?) NAND can experience a large number of
bitflips (beyond the recommended correctability capacity) due to drifts
in the voltage threshold (Vt). These bitflips can cause ECC errors to
occur well within the expected lifetime of the flash. To account for
this, some manufacturers provide a mechanism for shifting the Vt
threshold after a corrupted read.

The generic pattern seems to be that a particular flash has N read retry
modes (where N = 0, traditionally), and after an ECC failure, the host
should reconfigure the flash to use the next available mode, then retry
the read operation. This process repeats until all bitfips can be
corrected or until the host has tried all available retry modes.

This patch adds the infrastructure support for a
vendor-specific/flash-specific callback, used for setting the read-retry
mode (i.e., voltage threshold).

For now, this patch always returns the flash to mode 0 (the default
mode) after a successful read-retry, according to the flowchart found in
Micron's datasheets. This may need to change in the future if it is
determined that eventually, mode 0 is insufficient for the majority of
the flash cells (and so for performance reasons, we should leave the
flash in mode 1, 2, etc.).

Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Acked-by: Huang Shijie <b32955@freescale.com>
2014-01-13 23:12:58 -08:00
..
chips
devices mtd: docg3: Use devm_*() functions 2014-01-03 11:22:27 -08:00
lpddr mtd: lpddr: Mark functions as static and remove unused function 2014-01-03 11:22:26 -08:00
maps mtd: ixp4xx: Use devm_*() functions 2014-01-07 10:07:32 -08:00
nand mtd: nand: add generic READ RETRY support 2014-01-13 23:12:58 -08:00
onenand mtd: onenand: Trivial cleanup in samsung.h 2014-01-11 12:00:25 -08:00
tests mtd: tests: mtd_nandecctest: Use IS_ENABLED() macro 2014-01-03 11:22:21 -08:00
ubi MTD merge for 3.13 2013-11-14 12:31:43 +09:00
afs.c mtd: make register_mtd_parser return void 2014-01-03 11:22:22 -08:00
ar7part.c mtd: make register_mtd_parser return void 2014-01-03 11:22:22 -08:00
bcm47xxpart.c mtd: bcm47xxpart: alternative MAGIC for board_data partition 2014-01-07 10:07:37 -08:00
bcm63xxpart.c mtd: make register_mtd_parser return void 2014-01-03 11:22:22 -08:00
cmdlinepart.c mtd: make register_mtd_parser return void 2014-01-03 11:22:22 -08:00
ftl.c
inftlcore.c mtd: nand: add a helper to detect the nand type 2013-10-27 16:27:06 -07:00
inftlmount.c
Kconfig mtd: Hide CONFIG_MTD_BLKDEVS from the menu 2014-01-07 10:07:36 -08:00
Makefile
mtd_blkdevs.c
mtdblock.c mtd: Move major number definitions to major.h 2013-11-06 23:32:59 -08:00
mtdblock_ro.c mtd: Move major number definitions to major.h 2013-11-06 23:32:59 -08:00
mtdchar.c mtd: mtdchar: return expected errors on mmap() call 2013-11-11 11:18:15 -08:00
mtdconcat.c
mtdcore.c mtd: convert to use ATTRIBUTE_GROUPS 2014-01-03 11:22:21 -08:00
mtdcore.h
mtdoops.c
mtdpart.c mtd: make register_mtd_parser return void 2014-01-03 11:22:22 -08:00
mtdsuper.c mtd: Move major number definitions to major.h 2013-11-06 23:32:59 -08:00
mtdswap.c
nftlcore.c mtd: nand: add a helper to detect the nand type 2013-10-27 16:27:06 -07:00
nftlmount.c
ofpart.c mtd: make register_mtd_parser return void 2014-01-03 11:22:22 -08:00
redboot.c mtd: make register_mtd_parser return void 2014-01-03 11:22:22 -08:00
rfd_ftl.c
sm_ftl.c
sm_ftl.h
ssfdc.c mtd: nand: add a helper to detect the nand type 2013-10-27 16:27:06 -07:00