mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-17 13:18:00 +07:00
2301780711
The MT29F2Gxxx chips with 4bits/512byte on-die ECC let us know when some bitflips were corrected by the on-die ECC, but they do not report the actual number of bitflips that were present in the data+ECC chunk. We initially decided to always return ecc->strength to avoid re-reading the page in raw mode + comparing it to the corrected buffer to extract the real number of bitflips, but this forces UBI to move data around as soon as one bitflip is present in a page. This not only wears the NAND out faster, but also degrades performances, since reading a full PEB + writing it back to a different PEB + erasing the old one is much more expensive than re-reading the faulty page in raw mode and comparing it to the corrected buffer. In most cases, the actual number of bitflips does not exceed the bitflips threshold, and UBI won't have to move data around. Otherwise, we can assume the time spent re-reading the page and doing the comparison is negligible compared to the time UBI spends moving a full PEB to another PEB. Note that this logic is not applied to chips with 8bits/512byte on-die ECC, because those chips provide fine-grained information (the maximum error is 1 bit, and it will not force UBI to move blocks around at the first bitflip). Suggested-by: Bean Huo <beanhuo@micron.com> Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> |
||
---|---|---|
.. | ||
atmel | ||
bcm47xxnflash | ||
brcmnand | ||
gpmi-nand | ||
ams-delta.c | ||
au1550nd.c | ||
cafe_nand.c | ||
cmx270_nand.c | ||
cs553x_nand.c | ||
davinci_nand.c | ||
denali_dt.c | ||
denali_pci.c | ||
denali.c | ||
denali.h | ||
diskonchip.c | ||
docg4.c | ||
fsl_elbc_nand.c | ||
fsl_ifc_nand.c | ||
fsl_upm.c | ||
fsmc_nand.c | ||
gpio.c | ||
hisi504_nand.c | ||
jz4740_nand.c | ||
jz4780_bch.c | ||
jz4780_bch.h | ||
jz4780_nand.c | ||
Kconfig | ||
lpc32xx_mlc.c | ||
lpc32xx_slc.c | ||
Makefile | ||
marvell_nand.c | ||
mpc5121_nfc.c | ||
mtk_ecc.c | ||
mtk_ecc.h | ||
mtk_nand.c | ||
mxc_nand.c | ||
nand_amd.c | ||
nand_base.c | ||
nand_bbt.c | ||
nand_bch.c | ||
nand_ecc.c | ||
nand_hynix.c | ||
nand_ids.c | ||
nand_macronix.c | ||
nand_micron.c | ||
nand_samsung.c | ||
nand_timings.c | ||
nand_toshiba.c | ||
nandsim.c | ||
ndfc.c | ||
nuc900_nand.c | ||
omap2.c | ||
omap_elm.c | ||
orion_nand.c | ||
oxnas_nand.c | ||
pasemi_nand.c | ||
plat_nand.c | ||
qcom_nandc.c | ||
r852.c | ||
r852.h | ||
s3c2410.c | ||
sh_flctl.c | ||
sharpsl.c | ||
sm_common.c | ||
sm_common.h | ||
socrates_nand.c | ||
sunxi_nand.c | ||
tango_nand.c | ||
tegra_nand.c | ||
tmio_nand.c | ||
txx9ndfmc.c | ||
vf610_nfc.c | ||
xway_nand.c |