X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Fflash%2Fnor%2Fstm32f1x.c;h=738c2dac7037663550822f0b16f443b4639dad44;hp=0678ce36dc8641214df0696c32cd32c00b1a1f32;hb=ad0847ca38e4c9d7ea0051ac7718afd3aa61868e;hpb=287ba1888b3dc95d805d054c5c9f2d1dd231a1b2 diff --git a/src/flash/nor/stm32f1x.c b/src/flash/nor/stm32f1x.c index 0678ce36dc..738c2dac70 100644 --- a/src/flash/nor/stm32f1x.c +++ b/src/flash/nor/stm32f1x.c @@ -130,8 +130,7 @@ FLASH_BANK_COMMAND_HANDLER(stm32x_flash_bank_command) 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)); @@ -955,7 +954,7 @@ static int stm32x_probe(struct flash_bank *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; @@ -970,107 +969,93 @@ static int stm32x_probe(struct flash_bank *bank) 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) - { + } 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; @@ -1078,22 +1063,22 @@ static int stm32x_probe(struct flash_bank *bank) 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; @@ -1105,13 +1090,13 @@ static int stm32x_probe(struct flash_bank *bank) return ERROR_FAIL; } - LOG_INFO("flash size = %dkbytes", num_pages); + LOG_INFO("flash size = %dkbytes", flash_size_in_kb); - /* did we assign # of pages? */ - assert(num_pages != 0xffff); + /* 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); @@ -1166,8 +1151,7 @@ static int get_stm32x_info(struct flash_bank *bank, char *buf, int buf_size) 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; @@ -1194,9 +1178,7 @@ static int get_stm32x_info(struct flash_bank *bank, char *buf, int buf_size) 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; @@ -1211,9 +1193,7 @@ static int get_stm32x_info(struct flash_bank *bank, char *buf, int buf_size) 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; @@ -1232,9 +1212,7 @@ static int get_stm32x_info(struct flash_bank *bank, char *buf, int buf_size) 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; @@ -1253,9 +1231,7 @@ static int get_stm32x_info(struct flash_bank *bank, char *buf, int buf_size) 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; @@ -1274,9 +1250,7 @@ static int get_stm32x_info(struct flash_bank *bank, char *buf, int buf_size) 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; @@ -1295,9 +1269,7 @@ static int get_stm32x_info(struct flash_bank *bank, char *buf, int buf_size) 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; @@ -1329,8 +1301,7 @@ COMMAND_HANDLER(stm32x_handle_lock_command) if (CMD_ARGC < 1) { - command_print(CMD_CTX, "stm32x lock "); - return ERROR_OK; + return ERROR_COMMAND_SYNTAX_ERROR; } struct flash_bank *bank; @@ -1378,8 +1349,7 @@ COMMAND_HANDLER(stm32x_handle_unlock_command) if (CMD_ARGC < 1) { - command_print(CMD_CTX, "stm32x unlock "); - return ERROR_OK; + return ERROR_COMMAND_SYNTAX_ERROR; } struct flash_bank *bank; @@ -1426,8 +1396,7 @@ COMMAND_HANDLER(stm32x_handle_options_read_command) if (CMD_ARGC < 1) { - command_print(CMD_CTX, "stm32x options_read "); - return ERROR_OK; + return ERROR_COMMAND_SYNTAX_ERROR; } struct flash_bank *bank; @@ -1496,9 +1465,7 @@ COMMAND_HANDLER(stm32x_handle_options_write_command) if (CMD_ARGC < 4) { - command_print(CMD_CTX, "stm32x options_write " - " "); - return ERROR_OK; + return ERROR_COMMAND_SYNTAX_ERROR; } struct flash_bank *bank; @@ -1631,8 +1598,7 @@ COMMAND_HANDLER(stm32x_handle_mass_erase_command) if (CMD_ARGC < 1) { - command_print(CMD_CTX, "stm32x mass_erase "); - return ERROR_OK; + return ERROR_COMMAND_SYNTAX_ERROR; } struct flash_bank *bank;