Get error -74 (ECC error) during ubiattach

Oleksij Rempel linux at rempel-privat.de
Sat Dec 20 06:05:42 PST 2014


Am 20.12.2014 um 11:16 schrieb Oleksij Rempel:
> Am 20.12.2014 um 11:12 schrieb Richard Weinberger:
>> Am 20.12.2014 um 11:05 schrieb Oleksij Rempel:
>>> Am 20.12.2014 um 11:02 schrieb Richard Weinberger:
>>>> Am 20.12.2014 um 11:00 schrieb Oleksij Rempel:
>>>>> Am 20.12.2014 um 10:27 schrieb Richard Weinberger:
>>>>>> Hi!
>>>>>>
>>>>>> Am 20.12.2014 um 04:43 schrieb t kevin:
>>>>>>> So for uncorrectable ECC error ( e.g., bad block) the only way out is
>>>>>>> to do a fresh ubiformat?
>>>>>>> For device like harddisk you get bad blocks all the time, if it is not
>>>>>>> in the critical sector things can be fixed as much as possible by fsck
>>>>>>> so I was looking for something like fsck.ubifs.
>>>>>>
>>>>>> An uncorrectable ECC error means that more bits flipped than your ECC
>>>>>> algorithm can fix.
>>>>>
>>>>> At same time uncorrectable ECC error mean, the page was erase and there
>>>>> is no ECC sum. Something should be written to create ECC.
>>>>
>>>> Which would be a driver bug and needs fixing.
>>>
>>> No at all. If driver get request to erase page, it should do it and
>>> nothing more.
>>> There are use cases where erase means erase, and not erase + write ecc.
>>
>> Raw mode is a different thing.
> 
> There is no raw erase mode in this api.
> 
>>> It is not a driver bug!
>>
>> If users on top of MTD read from an erased block it has to return 0xFF bytes and
>> not an ECC error.
>> IOW if mtd_erase() -> mtd_read() causes an ECC error with your driver it needs
>> fixing.
> 
> 
> check out this code:
> https://github.com/olerem/linux-2.6/blob/uparm_9260-2014.12.17.1/drivers/mtd/nand/nand_base.c#L2686
> 
> This commands passed to flash chip. There is nothing about erase and
> write ecc.

After long IRC discussion, i will agree that it is hw issue:
not all nand controllers use ECC algorithm with ECC=0xFF on empty page.
In this case ECC of page written full of 0xff != ECC of erased page. For
this case, on ECC error, OOB should be read and tested if (OOB=all(0xff).

May be it is more then one controller with this issue, and this case
should be handled by nand_base. If it is only single controller, it can
be solved in driver.
Other way to solve it is to use SW_ECC mode.


-- 
Regards,
Oleksij

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 213 bytes
Desc: OpenPGP digital signature
URL: <http://lists.infradead.org/pipermail/linux-mtd/attachments/20141220/e42bbc46/attachment.sig>


More information about the linux-mtd mailing list