|
@@ -601,7 +601,9 @@ int flash_write_unlock(struct target *target, struct image *image, |
|
|
/* find the corresponding flash bank */ |
|
|
/* find the corresponding flash bank */ |
|
|
retval = get_flash_bank_by_addr(target, run_address, false, &c); |
|
|
retval = get_flash_bank_by_addr(target, run_address, false, &c); |
|
|
if (retval != ERROR_OK) |
|
|
if (retval != ERROR_OK) |
|
|
return retval; |
|
|
|
|
|
|
|
|
{ |
|
|
|
|
|
goto done; |
|
|
|
|
|
} |
|
|
if (c == NULL) |
|
|
if (c == NULL) |
|
|
{ |
|
|
{ |
|
|
section++; /* and skip it */ |
|
|
section++; /* and skip it */ |
|
@@ -653,7 +655,8 @@ int flash_write_unlock(struct target *target, struct image *image, |
|
|
if (run_address + run_size - 1 > c->base + c->size - 1) |
|
|
if (run_address + run_size - 1 > c->base + c->size - 1) |
|
|
{ |
|
|
{ |
|
|
LOG_ERROR("The image is too big for the flash"); |
|
|
LOG_ERROR("The image is too big for the flash"); |
|
|
return ERROR_FAIL; |
|
|
|
|
|
|
|
|
retval = ERROR_FAIL; |
|
|
|
|
|
goto done; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/* If we're applying any sector automagic, then pad this |
|
|
/* If we're applying any sector automagic, then pad this |
|
@@ -679,6 +682,12 @@ int flash_write_unlock(struct target *target, struct image *image, |
|
|
|
|
|
|
|
|
/* allocate buffer */ |
|
|
/* allocate buffer */ |
|
|
buffer = malloc(run_size); |
|
|
buffer = malloc(run_size); |
|
|
|
|
|
if (buffer == NULL) |
|
|
|
|
|
{ |
|
|
|
|
|
LOG_ERROR("Out of memory for flash bank buffer"); |
|
|
|
|
|
retval = ERROR_FAIL; |
|
|
|
|
|
goto done; |
|
|
|
|
|
} |
|
|
buffer_size = 0; |
|
|
buffer_size = 0; |
|
|
|
|
|
|
|
|
/* read sections to the buffer */ |
|
|
/* read sections to the buffer */ |
|
|