last_addr = 0;
image_indx = 0;
do {
- image_found = false;
- lowest_addr = 0xFFFFFFFF;
- img = fis_work_block;
- for (i = 0; i < fisdir_size/sizeof(*img); i++, img++) {
- if (img->u.name[0] != 0xFF) {
- if ((img->flash_base >= last_addr) && (img->flash_base < lowest_addr)) {
- lowest_addr = img->flash_base;
- image_found = true;
- image_indx = i;
+ image_found = false;
+ lowest_addr = 0xFFFFFFFF;
+ img = fis_work_block;
+ for (i = 0; i < fisdir_size/sizeof(*img); i++, img++) {
+ if (img->u.name[0] != 0xFF) {
+ if ((img->flash_base >= last_addr) && (img->flash_base < lowest_addr)) {
+ lowest_addr = img->flash_base;
+ image_found = true;
+ image_indx = i;
+ }
+ }
}
- }
- }
- if (image_found) {
- img = fis_work_block;
- img += image_indx;
- diag_printf("%-16s 0x%08lX 0x%08lX 0x%08lX 0x%08lX\n", img->u.name,
- (unsigned long)img->flash_base,
+ if (image_found) {
+ img = fis_work_block;
+ img += image_indx;
+ diag_printf("%-16s 0x%08lX 0x%08lX 0x%08lX 0x%08lX\n", img->u.name,
+ (unsigned long)img->flash_base,
#ifdef CYGSEM_REDBOOT_FIS_CRC_CHECK
- show_cksums ? img->file_cksum : img->mem_base,
+ show_cksums ? img->file_cksum : (unsigned long)img->mem_base,
show_datalen ? img->data_length : img->size,
#else
- img->mem_base,
+ (unsigned long)img->mem_base,
img->size,
#endif
- (unsigned long)img->entry_point);
- }
- last_addr = lowest_addr + 1;
+ (unsigned long)img->entry_point);
+ }
+ last_addr = lowest_addr + 1;
} while (image_found == true);
}
return;
}
if (prog_ok) {
+ FLASH_Enable((void *)flash_addr, (void *)(flash_addr + length));
// Erase area to be programmed
- if ((stat = flash_erase((void *)flash_addr, length, &err_addr)) != 0) {
+ stat = flash_erase((void *)flash_addr, length, &err_addr);
+ FLASH_Disable((void *)flash_addr, (void *)(flash_addr + length));
+ if (stat != 0) {
diag_printf("Can't erase region at %p: %s\n", err_addr, flash_errmsg(stat));
prog_ok = false;
}