]> git.sur5r.net Git - openocd/commitdiff
- fixed problem when write_image is called multiple times
authorntfreak <ntfreak@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Thu, 20 Dec 2007 22:20:45 +0000 (22:20 +0000)
committerntfreak <ntfreak@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Thu, 20 Dec 2007 22:20:45 +0000 (22:20 +0000)
git-svn-id: svn://svn.berlios.de/openocd/trunk@244 b42882b7-edfa-0310-969c-e2dbd0fdcd60

src/flash/flash.c

index fe225f0cc34ca16eb5f541fb60b4be01b7a5c9e1..efd16c34c9bb0d4c35a8dbbc56b993ddacc35cee 100644 (file)
@@ -836,7 +836,8 @@ int flash_write(target_t *target, image_t *image, u32 *written, char **error_str
 
        int section;
        u32 section_offset;
-
+       flash_bank_t *c;
+       
        section = 0;
        section_offset = 0;
 
@@ -846,11 +847,24 @@ int flash_write(target_t *target, image_t *image, u32 *written, char **error_str
        if (failed != NULL)
                for (i = 0; i < image->num_sections; i++)
                        failed[i] = 0;
-
+       
+       if (erase)
+       {
+               /* assume all sectors need erasing - stops any problems
+                * when flash_write is called multiple times */
+                
+               for (c = flash_banks; c; c = c->next)
+               {
+                       for (i = 0; i < c->num_sectors; i++)
+                       {
+                               c->sectors[i].is_erased = 0; 
+                       }
+               }
+       }
+       
        /* loop until we reach end of the image */
        while (section < image->num_sections)
        {
-               flash_bank_t *c;
                u32 buffer_size;
                u8 *buffer;
                int section_first;