[U-Boot] OMAP3 NAND ECC bug report
Arno Steffen
arno.steffen at googlemail.com
Tue Oct 25 09:41:06 CEST 2011
I am feeling to spam the board but found finally the reason for this behaviour.
nand_read returns with -EUCLEAN in case of correcting errors, and this
will later on reported as BAD NAND, although this error is corrected.
Correct me if I am wrong. What I did is chaning env_nand.c:
while (amount_loaded < CONFIG_ENV_SIZE && offset < end) {
if (nand_block_isbad(&nand_info[0], offset)) {
offset += blocksize;
} else {
char_ptr = &buf[amount_loaded];
- if (nand_read(&nand_info[0], offset, &len, char_ptr)) {
- return 1;
+ err = nand_read(&nand_info[0], offset, &len, char_ptr);
+ if (err) {
+ if (err != -EUCLEAN) { // Bad NAND has been corrected, so no problem
+ return 1;
+ }
}
offset += blocksize;
amount_loaded += len;
}
Correct me if I am wrong, but it seems that all platform are suffered,
not just OMAP.
There will be compared a corrected bits before and after correction,
and it send an error message, if bits are corrected (instead of only
if it can not be corrected).
Best regards
Arno
2011/10/21 Arno Steffen <arno.steffen at googlemail.com>:
> I think reason that SW_ECC is not working, is in omap_gpmc.c:
>
> omap_nand_switch_ecc():
>
> case NAND_ECC_SOFT:
> nand->ecc.mode = NAND_ECC_SOFT;
> /* Use mtd default settings */
> nand->ecc.layout = NULL;
> printf("SW ECC selected\n");
>
> The ecc struct is not setup?!? Someone has an idea?
>
> @TI stuff: if you are not the right person to address this, can you
> please forward?
> Thanks
>
> - Arno
>
>
>
> 2011/10/20 Arno Steffen <arno.steffen at googlemail.com>:
>> I did tests with OMAP3 uboot. The SW-ECC (testet 1 bit, 4 bit BCH)
>> doesn't correct errors in environment (during power-up).
>> Compiling uboot for default HW-ECC - correction works fine.
>> Testet with TI's PSP 4.02.00.07 (almost like arago latest version).
>>
>> I modified single bits by adding a patch (thanks Scott Wood) to uboot,
>> that allows write in raw mode to flash. Single bit error can corrected
>> with HW-ECC, not with SW-ECC.
>> This report is only about uboot environment, which is read in startup.
>> I didn't test it, but from my experience the correction works fine,
>> beside the initial reading of the environment, as for reading and
>> starting the kernel.
>>
>> Imho this is very critical, as reliability is suffered if a device
>> isn't booting.
>>
>> Best regards
>> Arno
>>
>> PS:
>> The link below refers to a previous discussion.
>> http://lists.denx.de/pipermail/u-boot/2011-September/100486.html
>>
>> in omap_gpmc.c I used this in board_nand_init()
>>
>> ...
>> nand->chip_delay = 100;
>> nand->ecc.mode = NAND_ECC_4BIT_SOFT;
>> nand_curr_device = 0;
>> omap_nand_switch_ecc(NAND_ECC_4BIT_SOFT, 1);
>> return 0;
>> }
>>
>
More information about the U-Boot
mailing list