summaryrefslogtreecommitdiff
path: root/src/flash/flash.c
diff options
context:
space:
mode:
authorntfreak <ntfreak@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2007-12-20 22:20:45 +0000
committerntfreak <ntfreak@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2007-12-20 22:20:45 +0000
commitfe0240125293a4535cd8eb966d899595a9b4d3ad (patch)
tree55f2d6216edb3ab10cc5d1bad26ba7c411e3600a /src/flash/flash.c
parent55f2fe830a541a297d6bf3906c6a28df81acbf05 (diff)
downloadopenocd+libswd-fe0240125293a4535cd8eb966d899595a9b4d3ad.tar.gz
openocd+libswd-fe0240125293a4535cd8eb966d899595a9b4d3ad.tar.bz2
openocd+libswd-fe0240125293a4535cd8eb966d899595a9b4d3ad.tar.xz
openocd+libswd-fe0240125293a4535cd8eb966d899595a9b4d3ad.zip
- fixed problem when write_image is called multiple times
git-svn-id: svn://svn.berlios.de/openocd/trunk@244 b42882b7-edfa-0310-969c-e2dbd0fdcd60
Diffstat (limited to 'src/flash/flash.c')
-rw-r--r--src/flash/flash.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/src/flash/flash.c b/src/flash/flash.c
index fe225f0c..efd16c34 100644
--- a/src/flash/flash.c
+++ b/src/flash/flash.c
@@ -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;