On Tue, 3 Jul 2018 14:17:37 +0200 Boris Brezillon <boris.brezillon at bootlin.com> wrote: > Hello, > > Back when support for Micron 4bit/512byte on-die ECC was added, we > decided that it wasn't worth retrieving the real number of bitflips > when the chip was returning WRITE_RECOMMENDED and instead decided to > always return the maximum value (ECC strength). > > This decision leads to UBI moving eraseblocks around as soon as 1 > bitflip is present, which is far from optimal, and might wear the NAND > out faster than if we get the actual number of bitflips by re-reading > the page in raw mode and comparing its content to the corrected > version. > > IIRC, Bean warned us about that, but it seems we didn't listen, so now > is time to revisit the implementation and implement what Bean initially > suggested. > > This implementation has been tested on an MT29F2G08ABAEAH4, and seems > to work as expected (nandbiterrs works fine, and the real number of > bitflips is now returned). > > Here are some details about these patches: > Patch 1 is just a cleanup to avoid passing parameters we don't need to > the ecc_status() functions. Patch 2 is preparing things for the actual > changes by reworking the ordering in the read function, and patch 3 is > implementing the read-in-raw-mode-and-compare logic. Please ignore this cover letter. I just sent a new version, this time with the patches. Sorry for the noise. Boris > > Regards, > > Boris > > Boris Brezillon (3): > mtd: rawnand: micron: Stop passing an mtd_info object to ecc_status > funcs > mtd: rawnand: micron: Disable ECC earlier in the read path > mtd: rawnand: micron: Get the actual number of bitflips > > drivers/mtd/nand/raw/nand_micron.c | 145 ++++++++++++++++++++++++++++++------- > 1 file changed, 120 insertions(+), 25 deletions(-) >