if (CMD_ARGC < 6)
{
- LOG_WARNING("incomplete flash_bank stm32x configuration");
- return ERROR_FLASH_BANK_INVALID;
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
stm32x_info = malloc(sizeof(struct stm32x_flash_bank));
struct target *target = bank->target;
struct stm32x_flash_bank *stm32x_info = bank->driver_priv;
int i;
- uint16_t num_pages;
+ uint16_t flash_size_in_kb;
uint32_t device_id;
int page_size;
uint32_t base_address = 0x08000000;
LOG_INFO("device id = 0x%08" PRIx32 "", device_id);
/* get flash size from target. */
- retval = target_read_u16(target, 0x1FFFF7E0, &num_pages);
+ retval = target_read_u16(target, 0x1FFFF7E0, &flash_size_in_kb);
if (retval != ERROR_OK)
{
LOG_WARNING("failed reading flash size, default to max target family");
/* failed reading flash size, default to max target family */
- num_pages = 0xffff;
+ flash_size_in_kb = 0xffff;
}
- if ((device_id & 0x7ff) == 0x410)
- {
+ if ((device_id & 0xfff) == 0x410) {
/* medium density - we have 1k pages
* 4 pages for a protection area */
page_size = 1024;
stm32x_info->ppage_size = 4;
/* check for early silicon */
- if (num_pages == 0xffff)
+ if (flash_size_in_kb == 0xffff)
{
/* number of sectors incorrect on revA */
LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 128k flash");
- num_pages = 128;
+ flash_size_in_kb = 128;
}
- }
- else if ((device_id & 0x7ff) == 0x412)
- {
+ } else if ((device_id & 0xfff) == 0x412) {
/* low density - we have 1k pages
* 4 pages for a protection area */
page_size = 1024;
stm32x_info->ppage_size = 4;
/* check for early silicon */
- if (num_pages == 0xffff)
+ if (flash_size_in_kb == 0xffff)
{
/* number of sectors incorrect on revA */
LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 32k flash");
- num_pages = 32;
+ flash_size_in_kb = 32;
}
- }
- else if ((device_id & 0x7ff) == 0x414)
- {
+ } else if ((device_id & 0xfff) == 0x414) {
/* high density - we have 2k pages
* 2 pages for a protection area */
page_size = 2048;
stm32x_info->ppage_size = 2;
/* check for early silicon */
- if (num_pages == 0xffff)
+ if (flash_size_in_kb == 0xffff)
{
/* number of sectors incorrect on revZ */
LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 512k flash");
- num_pages = 512;
+ flash_size_in_kb = 512;
}
- }
- else if ((device_id & 0x7ff) == 0x418)
- {
+ } else if ((device_id & 0xfff) == 0x418) {
/* connectivity line density - we have 2k pages
* 2 pages for a protection area */
page_size = 2048;
stm32x_info->ppage_size = 2;
/* check for early silicon */
- if (num_pages == 0xffff)
+ if (flash_size_in_kb == 0xffff)
{
/* number of sectors incorrect on revZ */
LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 256k flash");
- num_pages = 256;
+ flash_size_in_kb = 256;
}
- }
- else if ((device_id & 0x7ff) == 0x420)
- {
+ } else if ((device_id & 0xfff) == 0x420) {
/* value line density - we have 1k pages
* 4 pages for a protection area */
page_size = 1024;
stm32x_info->ppage_size = 4;
/* check for early silicon */
- if (num_pages == 0xffff)
+ if (flash_size_in_kb == 0xffff)
{
/* number of sectors may be incorrrect on early silicon */
LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 128k flash");
- num_pages = 128;
+ flash_size_in_kb = 128;
}
- }
- else if ((device_id & 0x7ff) == 0x428)
- {
- /* value line density - we have 1k pages
+ } else if ((device_id & 0xfff) == 0x428) {
+ /* value line High density - we have 2k pages
* 4 pages for a protection area */
page_size = 2048;
stm32x_info->ppage_size = 4;
/* check for early silicon */
- if (num_pages == 0xffff)
+ if (flash_size_in_kb == 0xffff)
{
/* number of sectors may be incorrrect on early silicon */
LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 128k flash");
- num_pages = 128;
+ flash_size_in_kb = 128;
}
- }
-
- else if ((device_id & 0x7ff) == 0x430)
- {
+ } else if ((device_id & 0xfff) == 0x430) {
/* xl line density - we have 2k pages
* 2 pages for a protection area */
page_size = 2048;
stm32x_info->has_dual_banks = true;
/* check for early silicon */
- if (num_pages == 0xffff)
+ if (flash_size_in_kb == 0xffff)
{
/* number of sectors may be incorrrect on early silicon */
LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 1024k flash");
- num_pages = 1024;
+ flash_size_in_kb = 1024;
}
/* split reported size into matching bank */
if (bank->base != 0x08080000)
{
/* bank 0 will be fixed 512k */
- num_pages = 512;
+ flash_size_in_kb = 512;
}
else
{
- num_pages -= 512;
+ flash_size_in_kb -= 512;
/* bank1 also uses a register offset */
stm32x_info->register_base = FLASH_REG_BASE_B1;
base_address = 0x08080000;
return ERROR_FAIL;
}
- LOG_INFO("flash size = %dkbytes", num_pages);
+ LOG_INFO("flash size = %dkbytes", flash_size_in_kb);
+
+ /* did we assign flash size? */
+ assert(flash_size_in_kb != 0xffff);
/* calculate numbers of pages */
- num_pages /= (page_size / 1024);
+ int num_pages = flash_size_in_kb * 1024 / page_size;
+
+ /* check that calculation result makes sense */
+ assert(num_pages > 0);
if (bank->sectors)
{
if (retval != ERROR_OK)
return retval;
- if ((device_id & 0x7ff) == 0x410)
- {
+ if ((device_id & 0xfff) == 0x410) {
printed = snprintf(buf, buf_size, "stm32x (Medium Density) - Rev: ");
buf += printed;
buf_size -= printed;
snprintf(buf, buf_size, "unknown");
break;
}
- }
- else if ((device_id & 0x7ff) == 0x412)
- {
+ } else if ((device_id & 0xfff) == 0x412) {
printed = snprintf(buf, buf_size, "stm32x (Low Density) - Rev: ");
buf += printed;
buf_size -= printed;
snprintf(buf, buf_size, "unknown");
break;
}
- }
- else if ((device_id & 0x7ff) == 0x414)
- {
+ } else if ((device_id & 0xfff) == 0x414) {
printed = snprintf(buf, buf_size, "stm32x (High Density) - Rev: ");
buf += printed;
buf_size -= printed;
snprintf(buf, buf_size, "unknown");
break;
}
- }
- else if ((device_id & 0x7ff) == 0x418)
- {
+ } else if ((device_id & 0xfff) == 0x418) {
printed = snprintf(buf, buf_size, "stm32x (Connectivity) - Rev: ");
buf += printed;
buf_size -= printed;
snprintf(buf, buf_size, "unknown");
break;
}
- }
- else if ((device_id & 0x7ff) == 0x420)
- {
+ } else if ((device_id & 0xfff) == 0x420) {
printed = snprintf(buf, buf_size, "stm32x (Value) - Rev: ");
buf += printed;
buf_size -= printed;
snprintf(buf, buf_size, "unknown");
break;
}
- }
- else if ((device_id & 0x7ff) == 0x428)
- {
+ } else if ((device_id & 0xfff) == 0x428) {
printed = snprintf(buf, buf_size, "stm32x (Value HD) - Rev: ");
buf += printed;
buf_size -= printed;
snprintf(buf, buf_size, "unknown");
break;
}
- }
- else if ((device_id & 0x7ff) == 0x430)
- {
+ } else if ((device_id & 0xfff) == 0x430) {
printed = snprintf(buf, buf_size, "stm32x (XL) - Rev: ");
buf += printed;
buf_size -= printed;
if (CMD_ARGC < 1)
{
- command_print(CMD_CTX, "stm32x lock <bank>");
- return ERROR_OK;
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
struct flash_bank *bank;
if (CMD_ARGC < 1)
{
- command_print(CMD_CTX, "stm32x unlock <bank>");
- return ERROR_OK;
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
struct flash_bank *bank;
if (CMD_ARGC < 1)
{
- command_print(CMD_CTX, "stm32x options_read <bank>");
- return ERROR_OK;
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
struct flash_bank *bank;
if (CMD_ARGC < 4)
{
- command_print(CMD_CTX, "stm32x options_write <bank> <SWWDG | HWWDG> "
- "<RSTSTNDBY | NORSTSTNDBY> <RSTSTOP | NORSTSTOP> <BOOT0 | BOOT1>");
- return ERROR_OK;
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
struct flash_bank *bank;
if (CMD_ARGC < 1)
{
- command_print(CMD_CTX, "stm32x mass_erase <bank>");
- return ERROR_OK;
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
struct flash_bank *bank;
.name = "stm32f1x",
.mode = COMMAND_ANY,
.help = "stm32f1x flash command group",
+ .usage = "",
.chain = stm32x_exec_command_handlers,
},
COMMAND_REGISTRATION_DONE