X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=drivers%2Fmtd%2Fnand%2Fnand_util.c;h=7085d42cc1b92ebc7e4a543863c85867bd7cf245;hb=206c00f26f56af02686cb69bfe5c75e979063171;hp=fc16282c2e1c9d6f127b83c70efd28ea22576889;hpb=c3ae126c2cad03f04be36c92dd9437b9ee2385b6;p=u-boot diff --git a/drivers/mtd/nand/nand_util.c b/drivers/mtd/nand/nand_util.c index fc16282c2e..7085d42cc1 100644 --- a/drivers/mtd/nand/nand_util.c +++ b/drivers/mtd/nand/nand_util.c @@ -452,7 +452,7 @@ static size_t get_len_incl_bad (nand_info_t *nand, loff_t offset, len_incl_bad += block_len; offset += block_len; - if ((offset + len_incl_bad) >= nand->size) + if (offset >= nand->size) break; } @@ -508,6 +508,8 @@ int nand_write_skip_bad(nand_info_t *nand, loff_t offset, size_t *length, size_t block_offset = offset & (nand->erasesize - 1); size_t write_size; + WATCHDOG_RESET (); + if (nand_block_isbad (nand, offset & ~(nand->erasesize - 1))) { printf ("Skip bad block 0x%08llx\n", offset & ~(nand->erasesize - 1)); @@ -567,10 +569,10 @@ int nand_read_skip_bad(nand_info_t *nand, loff_t offset, size_t *length, if (len_incl_bad == *length) { rval = nand_read (nand, offset, length, buffer); - if (rval != 0) - printf ("NAND read from offset %llx failed %d\n", - offset, rval); - + if (!rval || rval == -EUCLEAN) + return 0; + printf ("NAND read from offset %llx failed %d\n", + offset, rval); return rval; } @@ -578,6 +580,8 @@ int nand_read_skip_bad(nand_info_t *nand, loff_t offset, size_t *length, size_t block_offset = offset & (nand->erasesize - 1); size_t read_length; + WATCHDOG_RESET (); + if (nand_block_isbad (nand, offset & ~(nand->erasesize - 1))) { printf ("Skipping bad block 0x%08llx\n", offset & ~(nand->erasesize - 1)); @@ -591,7 +595,7 @@ int nand_read_skip_bad(nand_info_t *nand, loff_t offset, size_t *length, read_length = nand->erasesize - block_offset; rval = nand_read (nand, offset, &read_length, p_buffer); - if (rval != 0) { + if (rval && rval != -EUCLEAN) { printf ("NAND read from offset %llx failed %d\n", offset, rval); *length -= left_to_read;