u-boot/drivers/mtd
Peng Fan 552c88273e nand: mxs: fix the bitflips for erased page when uncorrectable error
This patch is porting from linux:
http://git.freescale.com/git/cgit.cgi/imx/linux-2.6-imx.git/commit/
?h=imx_4.1.15_1.0.0_ga&id=3d42fcece496224fde59f9343763fb2dfc5b0768

"
We may meet the bitflips in reading an erased page(contains all 0xFF),
this may causes the UBIFS corrupt, please see the log from Elie:

-----------------------------------------------------------------
[    3.831323] UBI warning: ubi_io_read: error -74 (ECC error) while reading 16384 bytes from PEB 443:245760, read only 16384 bytes, retry
[    3.845026] UBI warning: ubi_io_read: error -74 (ECC error) while reading 16384 bytes from PEB 443:245760, read only 16384 bytes, retry
[    3.858710] UBI warning: ubi_io_read: error -74 (ECC error) while reading 16384 bytes from PEB 443:245760, read only 16384 bytes, retry
[    3.872408] UBI error: ubi_io_read: error -74 (ECC error) while reading 16384 bytes from PEB 443:245760, read 16384 bytes
...
[    4.011529] UBIFS error (pid 36): ubifs_recover_leb: corrupt empty space LEB 27:237568, corruption starts at 9815
[    4.021897] UBIFS error (pid 36): ubifs_scanned_corruption: corruption at LEB 27:247383
[    4.030000] UBIFS error (pid 36): ubifs_scanned_corruption: first 6569 bytes from LEB 27:247383
-----------------------------------------------------------------

This patch does a check for the uncorrectable failure in the following steps:

   [0] set the threshold.
       The threshold is set based on the truth:
       "A single 0 bit will lead to gf_len(13 or 14) bits 0 after the BCH
        do the ECC."

        For the sake of safe, we will set the threshold with half the gf_len, and
        do not make it bigger the ECC strength.

   [1] count the bitflips of the current ECC chunk, assume it is N.

   [2] if the (N <= threshold) is true, we continue to read out the page with
       ECC disabled. and we count the bitflips again, assume it is N2.
       (We read out the whole page, not just a chunk, this makes the check
        more strictly, and make the code more simple.)

   [3] if the (N2 <= threshold) is true again, we can regard this is a erased
       page. This is because a real erased page is full of 0xFF(maybe also has
       several bitflips), while a page contains the 0xFF data will definitely
       has many bitflips in the ECC parity areas.

   [4] if the [3] fails, we can regard this is a page filled with the '0xFF'
       data.
"

Signed-off-by: Peng Fan <peng.fan@nxp.com>
2020-05-10 20:55:20 +02:00
..
nand nand: mxs: fix the bitflips for erased page when uncorrectable error 2020-05-10 20:55:20 +02:00
onenand dm: core: Require users of devres to include the header 2020-02-05 19:33:46 -07:00
spi mtd: spi-nor-ids: Add Spansion s25fs512s flash entry 2020-04-30 22:34:20 +05:30
ubi dm: core: Create a new header file for 'compat' features 2020-02-05 19:33:46 -07:00
ubispl crc32: Use the crc.h header for crc functions 2019-12-02 18:23:08 -05:00
altera_qspi.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
cfi_flash.c common: Move interrupt functions into a new header 2019-12-02 18:25:00 -05:00
cfi_mtd.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
hbmc-am654.c dm: core: Create a new header file for 'compat' features 2020-02-05 19:33:46 -07:00
jedec_flash.c env: Drop environment.h header file where not needed 2019-08-11 16:43:41 -04:00
Kconfig configs: migrate CONFIG_SYS_MTDPARTS_RUNTIME to defconfigs 2020-05-08 09:16:26 -04:00
Makefile mtd: Makefile: deep cleanup 2019-12-04 17:10:51 -05:00
mtd-uclass.c mtd: uclass: add probe function 2018-10-02 22:12:31 +05:30
mtd_uboot.c dm: core: Create a new header file for 'compat' features 2020-02-05 19:33:46 -07:00
mtdconcat.c dm: core: Require users of devres to include the header 2020-02-05 19:33:46 -07:00
mtdcore.c dm: core: Require users of devres to include the header 2020-02-05 19:33:46 -07:00
mtdcore.h mtd: move definitions to enlarge their range 2018-09-20 20:10:49 +05:30
mtdpart.c dm: core: Require users of devres to include the header 2020-02-05 19:33:46 -07:00
mw_eeprom.c common: Move old EEPROM functions into a new header 2019-12-02 18:25:25 -05:00
pic32_flash.c common: Move enable/disable_interrupts out of common.h 2019-12-02 18:25:01 -05:00
renesas_rpc_hf.c dm: core: Create a new header file for 'compat' features 2020-02-05 19:33:46 -07:00
st_smi.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
stm32_flash.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
stm32_flash.h stm32: stm32f4: move flash driver to mtd driver location 2016-03-26 18:49:28 -04:00