]> git.sur5r.net Git - u-boot/blobdiff - drivers/mtd/nand/nand_util.c
Blackfin: nand: drain the write buffer before returning
[u-boot] / drivers / mtd / nand / nand_util.c
index 694ead68a16d90c9370b882e01b35b904254e226..29c42f73b1cc4c3c2131a332e68763937ed49585 100644 (file)
 #include <nand.h>
 #include <jffs2/jffs2.h>
 
-#if !defined(CONFIG_SYS_64BIT_VSPRINTF)
-#warning Please define CONFIG_SYS_64BIT_VSPRINTF for correct output!
-#endif
-
 typedef struct erase_info erase_info_t;
 typedef struct mtd_info          mtd_info_t;
 
@@ -452,7 +448,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;
        }
 
@@ -490,7 +486,7 @@ int nand_write_skip_bad(nand_info_t *nand, loff_t offset, size_t *length,
 
        len_incl_bad = get_len_incl_bad (nand, offset, *length);
 
-       if ((offset + len_incl_bad) >= nand->size) {
+       if ((offset + len_incl_bad) > nand->size) {
                printf ("Attempt to write outside the flash area\n");
                return -EINVAL;
        }
@@ -508,6 +504,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));
@@ -560,7 +558,7 @@ int nand_read_skip_bad(nand_info_t *nand, loff_t offset, size_t *length,
 
        len_incl_bad = get_len_incl_bad (nand, offset, *length);
 
-       if ((offset + len_incl_bad) >= nand->size) {
+       if ((offset + len_incl_bad) > nand->size) {
                printf ("Attempt to read outside the flash area\n");
                return -EINVAL;
        }
@@ -578,6 +576,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));