diff options
author | Øyvind Harboe <oyvind.harboe@zylin.com> | 2010-11-15 14:43:16 +0100 |
---|---|---|
committer | Øyvind Harboe <oyvind.harboe@zylin.com> | 2010-11-17 16:56:28 +0100 |
commit | 2b546fdc45d33a7b407f49b3732d1a57afa60b72 (patch) | |
tree | 6d8613a05216ac9a34f6ce36196bee0a4ae82e48 /src/flash/nor | |
parent | 52558354e67e4a2f7884666cf88c899ad9afa05e (diff) | |
download | openocd_libswd-2b546fdc45d33a7b407f49b3732d1a57afa60b72.tar.gz openocd_libswd-2b546fdc45d33a7b407f49b3732d1a57afa60b72.tar.bz2 openocd_libswd-2b546fdc45d33a7b407f49b3732d1a57afa60b72.tar.xz openocd_libswd-2b546fdc45d33a7b407f49b3732d1a57afa60b72.zip |
flash: fix bug with multiple back-to-back flash chips
flash programming via flash write_image or gdb load would
produce a bogus error message that the flash chip was to
small.
The solution is to limit the current flash programming
run to the current chip.
Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
Diffstat (limited to 'src/flash/nor')
-rw-r--r-- | src/flash/nor/core.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/flash/nor/core.c b/src/flash/nor/core.c index 2c1d9dee..da73bf64 100644 --- a/src/flash/nor/core.c +++ b/src/flash/nor/core.c @@ -654,9 +654,13 @@ int flash_write_unlock(struct target *target, struct image *image, if (run_address + run_size - 1 > c->base + c->size - 1) { - LOG_ERROR("The image is too big for the flash"); - retval = ERROR_FAIL; - goto done; + /* If we have more than one flash chip back to back, then we limit + * the current write operation to the current chip. + */ + LOG_DEBUG("Truncate flash run size to the current flash chip."); + + run_size = c->base + c->size - run_address; + assert(run_size > 0); } /* If we're applying any sector automagic, then pad this |