fallback for no implementation of multi word CFI write. Successful codepath not affected.
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Mon, 16 Jun 2008 18:44:20 +0000 (18:44 +0000)
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Mon, 16 Jun 2008 18:44:20 +0000 (18:44 +0000)
git-svn-id: svn://svn.berlios.de/openocd/trunk@711 b42882b7-edfa-0310-969c-e2dbd0fdcd60

src/flash/cfi.c

index a4b95f08bd4c19b71bd15803ab3dae9ca7f357aa..fea75a741ff4470440c375ae3d03b9ddffdccaa0 100644 (file)
@@ -1738,21 +1738,25 @@ int cfi_write(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 count)
                        /* fall back to memory writes */
                        while (count >= bank->bus_width)
                        {
+                               int fallback;
                                if ((write_p & 0xff) == 0)
                                {
                                        LOG_INFO("Programming at %08x, count %08x bytes remaining", write_p, count);
                                }
+                               fallback = 1;
                                if ((bufferwsize > 0) && (count >= buffersize) && !(write_p & buffermask))
                                {
                                        retval = cfi_write_words(bank, buffer, bufferwsize, write_p);
-                                       if (retval != ERROR_OK)
-                                               return retval;
-
-                                       buffer += buffersize;
-                                       write_p += buffersize;
-                                       count -= buffersize;
+                                       if (retval == ERROR_OK)
+                                       {
+                                               buffer += buffersize;
+                                               write_p += buffersize;
+                                               count -= buffersize;
+                                               fallback=0;
+                                       }
                                }
-                               else
+                               /* try the slow way? */
+                               if (fallback)
                                {
                                        for (i = 0; i < bank->bus_width; i++)
                                                current_word[i] = 0;