diff options
author | ntfreak <ntfreak@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2007-12-20 22:20:45 +0000 |
---|---|---|
committer | ntfreak <ntfreak@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2007-12-20 22:20:45 +0000 |
commit | fe0240125293a4535cd8eb966d899595a9b4d3ad (patch) | |
tree | 55f2d6216edb3ab10cc5d1bad26ba7c411e3600a | |
parent | 55f2fe830a541a297d6bf3906c6a28df81acbf05 (diff) | |
download | openocd_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
-rw-r--r-- | src/flash/flash.c | 20 |
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; |