return ERROR_OK;
}
-static int stellaris_info(struct flash_bank *bank, char *buf, int buf_size)
+static int get_stellaris_info(struct flash_bank *bank, char *buf, int buf_size)
{
int printed, device_class;
struct stellaris_flash_bank *stellaris_info = bank->driver_priv;
if (!set)
{
- LOG_ERROR("Can't unprotect write-protected pages.");
- /* except by the "recover locked device" procedure ... */
+ LOG_ERROR("Hardware doesn't suppport page-level unprotect. "
+ "Try the 'recover' command.");
return ERROR_INVALID_ARGUMENTS;
}
|| (last < first) || !(last & 1)
|| (last >= 2 * stellaris_info->num_lockbits))
{
- LOG_ERROR("Can't protect unaligned or out-of-range sectors.");
+ LOG_ERROR("Can't protect unaligned or out-of-range pages.");
return ERROR_FLASH_SECTOR_INVALID;
}
0x04,0x36, /* adds r6, r6, #4 */
0x96,0x42, /* cmp r6, r2 */
0xF4,0xD1, /* bne mainloop */
- /* exit: */
- 0xFE,0xE7, /* b exit */
+ 0x00,0xBE, /* bkpt #0 */
/* pFLASH_CTRL_BASE: */
0x00,0xD0,0x0F,0x40, /* .word 0x400FD000 */
/* FLASHWRITECMD: */
buffer_size = wcount * 4;
/* memory buffer */
- while (target_alloc_working_area(target, buffer_size, &source) != ERROR_OK)
+ while (target_alloc_working_area_try(target, buffer_size, &source) != ERROR_OK)
{
buffer_size /= 2;
if (buffer_size <= buf_min)
if (retval != ERROR_OK)
return retval;
+ if (bank->sectors)
+ {
+ free(bank->sectors);
+ bank->sectors = NULL;
+ }
+
/* provide this for the benefit of the NOR flash framework */
bank->size = 1024 * stellaris_info->num_pages;
bank->num_sectors = stellaris_info->num_pages;
retval = jtag_execute_queue();
/* wait 400+ msec ... OK, "1+ second" is simpler */
- sleep(1);
+ usleep(1000);
/* USER INTERVENTION required for the power cycle
* Restarting OpenOCD is likely needed because of mode switching.
.handler = stellaris_handle_recover_command,
.mode = COMMAND_EXEC,
.usage = "bank_id",
- .help = "recover locked device",
+ .help = "recover (and erase) locked device",
},
COMMAND_REGISTRATION_DONE
};
.erase = stellaris_erase,
.protect = stellaris_protect,
.write = stellaris_write,
+ .read = default_flash_read,
.probe = stellaris_probe,
.auto_probe = stellaris_probe,
.erase_check = default_flash_mem_blank_check,
.protect_check = stellaris_protect_check,
- .info = stellaris_info,
+ .info = get_stellaris_info,
};