flash: fix bug with multiple back-to-back flash chips
authorØyvind Harboe <oyvind.harboe@zylin.com>
Mon, 15 Nov 2010 13:43:16 +0000 (14:43 +0100)
committerØyvind Harboe <oyvind.harboe@zylin.com>
Wed, 17 Nov 2010 15:56:28 +0000 (16:56 +0100)
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>
src/flash/nor/core.c

index 2c1d9dee04dbcb29b12abb038e7d7f69679c8b8d..da73bf6405fab4730a422337f8cbd5af6877c508 100644 (file)
@@ -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