
13 Jul
2009
13 Jul
'09
9:34 p.m.
If we refer to the following code snippet from nand_util.c
rval = nand_read (nand, offset, &read_length, p_buffer);
if (rval != 0) {
printf ("NAND read from offset %llx failed %d\n",
offset, rval);
*length -= left_to_read;
return rval;
}
The above code will return failure even after ECC errors are corrected.
This is because of the following line of code in nand_base.c
return mtd->ecc_stats.corrected - stats.corrected ? -EUCLEAN : 0;
This is in the nand_do_read_ops in nand_bsae.c
I see that changing
if (rval != 0)
to
if (rval != 0 && rval != -EUCLEAN )
solves the problem.
I can submit a patch if required.
Thanks, Sandeep