]> git.sur5r.net Git - u-boot/blobdiff - drivers/mtd/nand/nand_util.c
Merge branch 'master' into next
[u-boot] / drivers / mtd / nand / nand_util.c
index fc16282c2e1c9d6f127b83c70efd28ea22576889..7085d42cc1b92ebc7e4a543863c85867bd7cf245 100644 (file)
@@ -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;