On Tue, Oct 09, 2012 at 01:36:50PM +0100, Philip, Avinash wrote: (...) > > There are at least 2 potential problems when reading an erased page with bitflips: > > > > 1. bitflip in data area and no bitflip in spare area (all 0xff) > > Your code will not perform any ECC correction. > > UBIFS does not like finding bitflips in empty pages, see for instance > > http://lists.infradead.org/pipermail/linux-mtd/2012-March/040328.html. > > In case of error correction using ELM, syndrome vector calculated after reading > Data area & OOB area. So handling of erased page requires a software workaround. > I am planning something as follows. > > I will first check calculated ecc, which would be zero for non error pages. > Then I would check 0xFF in OOB area (for erased page) by checking number of > bit zeros in OOB area. If it is 0xFF (number of bit zero count is zero), > set entire page as 0xFF if number of bit zeros is less than max bit flips > (8 or 4) by counting the number of bit zero's in data area. > > This logic is implemented in fsmc_nand.c > > See commit > mtd: fsmc: Newly erased page read algorithm implemented > > > > > 2. bitflip in ECC bytes in spare area > > Your code will report an uncorrectable error upon reading; if this happens while reading a partially programmed UBI block, > > I guess you will lose data. > > In case of uncorrectable errors due to bit flips in spare area, > I can go on checking number of bit zero's in data area + OOB area > are less than max bit flips (8 or 4), I can go on setting the entire > page as 0xFF. > OK, sounds reasonable. Another simple strategy could use the fact that you add a 14th zero byte to the 13 BCH bytes for RBL compatibility: Upon reading: - if this 14th byte is zero (*) => page was programmed: perform ECC correction as usual - else, page was not programmed: do not perform ECC, read entire data+spare area, and set it to 0xff if less than 8 or 4 (max bitflips) zero bits were found (*) for robustness to bitflip in 14th byte, replace condition "14th byte is zero" by e.g. "14th byte has less than 4 bits set to 1". What do you think ? BR, -- Ivan -- To unsubscribe from this list: send the line "unsubscribe linux-doc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html