linux/drivers/mtd/nand/raw
Miquel Raynal 7fd130f741 mtd: rawnand: marvell: support 8b/512B strength for 2kiB pages layout
Add support for the layout used by 2kiB page NAND chips requesting at
least 8-bit of correction per 512 bytes. This layout requires a bit of
handling as:
1/ It can only fit if the NAND chip has at least 128 OOB bytes.
2/ The Bad Block Markers are located in the middle of the data bytes
   and shall not be used.
3/ It has been experimentally observed that, for certain layouts, the ECC
   engine tries to correct data while it should not because the errors
   are uncorrectable. While this is harmless for truly bad pages, it
   creates bitflips in empty pages. To avoid such scenario that
   augments artificially the number of bitflips we re-read in raw mode
   the entire page instead of just the ECC bytes. This is done only
   for this layout to avoid an unneeded penalty with other setups.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Reviewed-by: Boris Brezillon <boris.brezillon@bootlin.com>
2018-10-03 11:12:25 +02:00
..
atmel mtd: rawnand: Pass a nand_chip object to chip->setup_data_interface() 2018-10-03 11:12:25 +02:00
bcm47xxnflash mtd: rawnand: Pass a nand_chip object to chip->cmdfunc() 2018-10-03 11:12:25 +02:00
brcmnand mtd: rawnand: Pass a nand_chip object to chip->waitfunc() 2018-10-03 11:12:25 +02:00
gpmi-nand mtd: rawnand: Pass a nand_chip object to chip->setup_data_interface() 2018-10-03 11:12:25 +02:00
ams-delta.c mtd: rawnand: Pass a nand_chip object to chip->dev_ready() 2018-10-03 11:12:25 +02:00
au1550nd.c mtd: rawnand: Pass a nand_chip object to chip->cmdfunc() 2018-10-03 11:12:25 +02:00
cafe_nand.c mtd: rawnand: Pass a nand_chip object to chip->cmdfunc() 2018-10-03 11:12:25 +02:00
cmx270_nand.c mtd: rawnand: Pass a nand_chip object to chip->dev_ready() 2018-10-03 11:12:25 +02:00
cs553x_nand.c mtd: rawnand: Pass a nand_chip object to chip->dev_ready() 2018-10-03 11:12:25 +02:00
davinci_nand.c mtd: rawnand: Pass a nand_chip object to chip->dev_ready() 2018-10-03 11:12:25 +02:00
denali_dt.c mtd: rawnand: denali: use SPDX-License-Identifier and fix license mismatch 2018-09-04 23:37:40 +02:00
denali_pci.c mtd: rawnand: denali: use SPDX-License-Identifier and fix license mismatch 2018-09-04 23:37:40 +02:00
denali.c mtd: rawnand: Pass a nand_chip object to chip->setup_data_interface() 2018-10-03 11:12:25 +02:00
denali.h mtd: rawnand: denali: use SPDX-License-Identifier and fix license mismatch 2018-09-04 23:37:40 +02:00
diskonchip.c mtd: rawnand: Pass a nand_chip object to chip->waitfunc() 2018-10-03 11:12:25 +02:00
docg4.c mtd: rawnand: Pass a nand_chip object to chip->erase() 2018-10-03 11:12:25 +02:00
fsl_elbc_nand.c mtd: rawnand: Pass a nand_chip object to chip->waitfunc() 2018-10-03 11:12:25 +02:00
fsl_ifc_nand.c mtd: rawnand: Pass a nand_chip object to chip->waitfunc() 2018-10-03 11:12:25 +02:00
fsl_upm.c mtd: rawnand: Pass a nand_chip object to chip->dev_ready() 2018-10-03 11:12:25 +02:00
fsmc_nand.c mtd: rawnand: Pass a nand_chip object to chip->setup_data_interface() 2018-10-03 11:12:25 +02:00
gpio.c mtd: rawnand: Pass a nand_chip object to chip->dev_ready() 2018-10-03 11:12:25 +02:00
hisi504_nand.c mtd: rawnand: Pass a nand_chip object to chip->cmdfunc() 2018-10-03 11:12:25 +02:00
jz4740_nand.c mtd: rawnand: Pass a nand_chip object to chip->dev_ready() 2018-10-03 11:12:25 +02:00
jz4780_bch.c
jz4780_bch.h
jz4780_nand.c mtd: rawnand: Pass a nand_chip object to chip->dev_ready() 2018-10-03 11:12:25 +02:00
Kconfig mtd: rawnand: atmel: Select GENERIC_ALLOCATOR 2018-08-11 18:07:44 +02:00
lpc32xx_mlc.c mtd: rawnand: Pass a nand_chip object to chip->waitfunc() 2018-10-03 11:12:25 +02:00
lpc32xx_slc.c mtd: rawnand: Pass a nand_chip object to chip->dev_ready() 2018-10-03 11:12:25 +02:00
Makefile mtd: rawnand: add NVIDIA Tegra NAND Flash controller driver 2018-07-02 09:02:06 +02:00
marvell_nand.c mtd: rawnand: marvell: support 8b/512B strength for 2kiB pages layout 2018-10-03 11:12:25 +02:00
mpc5121_nfc.c mtd: rawnand: Pass a nand_chip object to chip->cmdfunc() 2018-10-03 11:12:25 +02:00
mtk_ecc.c mtd: rawnand: mtk: use of_device_get_match_data() 2018-04-29 08:56:41 +02:00
mtk_ecc.h
mtk_nand.c mtd: rawnand: Pass a nand_chip object to chip->setup_data_interface() 2018-10-03 11:12:25 +02:00
mxc_nand.c mtd: rawnand: Pass a nand_chip object to chip->setup_data_interface() 2018-10-03 11:12:25 +02:00
nand_amd.c
nand_base.c mtd: rawnand: Pass a nand_chip object nand_erase_nand() 2018-10-03 11:12:25 +02:00
nand_bbt.c mtd: rawnand: Pass a nand_chip object nand_erase_nand() 2018-10-03 11:12:25 +02:00
nand_bch.c mtd: rawnand: Pass a nand_chip object to ecc->correct() 2018-10-03 11:12:25 +02:00
nand_ecc.c mtd: rawnand: Pass a nand_chip object to ecc->write_xxx() hooks 2018-10-03 11:12:25 +02:00
nand_hynix.c mtd: rawnand: Pass a nand_chip object to chip->setup_read_retry() 2018-10-03 11:12:25 +02:00
nand_ids.c
nand_macronix.c mtd: rawnand: All AC chips have a broken GET_FEATURES(TIMINGS). 2018-06-22 00:31:22 +02:00
nand_micron.c mtd: rawnand: Pass a nand_chip object to chip->setup_read_retry() 2018-10-03 11:12:25 +02:00
nand_samsung.c
nand_timings.c mtd: rawnand: allocate dynamically ONFI parameters during detection 2018-08-01 09:45:59 +02:00
nand_toshiba.c mtd: rawnand: Pass a nand_chip object to ecc->read_xxx() hooks 2018-10-03 11:12:25 +02:00
nandsim.c mtd: rawnand: Pass a nand_chip object to chip->dev_ready() 2018-10-03 11:12:25 +02:00
ndfc.c mtd: rawnand: Pass a nand_chip object to chip->dev_ready() 2018-10-03 11:12:25 +02:00
nuc900_nand.c mtd: rawnand: Pass a nand_chip object to chip->cmdfunc() 2018-10-03 11:12:25 +02:00
omap2.c mtd: rawnand: Pass a nand_chip object to chip->waitfunc() 2018-10-03 11:12:25 +02:00
omap_elm.c
orion_nand.c mtd: rawnand: Pass a nand_chip object to chip->cmd_ctrl() 2018-10-03 11:12:25 +02:00
oxnas_nand.c mtd: rawnand: Pass a nand_chip object to chip->cmd_ctrl() 2018-10-03 11:12:25 +02:00
pasemi_nand.c mtd: rawnand: Pass a nand_chip object to chip->dev_ready() 2018-10-03 11:12:25 +02:00
plat_nand.c mtd: rawnand: Pass a nand_chip object to chip->dev_ready() 2018-10-03 11:12:25 +02:00
qcom_nandc.c mtd: rawnand: Pass a nand_chip object to chip->cmdfunc() 2018-10-03 11:12:25 +02:00
r852.c mtd: rawnand: Pass a nand_chip object to chip->waitfunc() 2018-10-03 11:12:25 +02:00
r852.h
s3c2410.c mtd: rawnand: Pass a nand_chip object to chip->setup_data_interface() 2018-10-03 11:12:25 +02:00
sh_flctl.c mtd: rawnand: Pass a nand_chip object to chip->cmdfunc() 2018-10-03 11:12:25 +02:00
sharpsl.c mtd: rawnand: Pass a nand_chip object to chip->dev_ready() 2018-10-03 11:12:25 +02:00
sm_common.c mtd: rawnand: Pass a nand_chip object to chip->block_xxx() hooks 2018-10-03 11:12:25 +02:00
sm_common.h
socrates_nand.c mtd: rawnand: Pass a nand_chip object to chip->dev_ready() 2018-10-03 11:12:25 +02:00
sunxi_nand.c mtd: rawnand: Pass a nand_chip object to chip->setup_data_interface() 2018-10-03 11:12:25 +02:00
tango_nand.c mtd: rawnand: Pass a nand_chip object to chip->setup_data_interface() 2018-10-03 11:12:25 +02:00
tegra_nand.c mtd: rawnand: Pass a nand_chip object to chip->setup_data_interface() 2018-10-03 11:12:25 +02:00
tmio_nand.c mtd: rawnand: Pass a nand_chip object to chip->waitfunc() 2018-10-03 11:12:25 +02:00
txx9ndfmc.c mtd: rawnand: Pass a nand_chip object to chip->dev_ready() 2018-10-03 11:12:25 +02:00
vf610_nfc.c mtd: rawnand: Pass a nand_chip object to chip->select_chip() 2018-10-03 11:12:25 +02:00
xway_nand.c mtd: rawnand: Pass a nand_chip object to chip->dev_ready() 2018-10-03 11:12:25 +02:00