flash: allow stm32f1x options_write args in any order
Currently we have to supply the arg's to this cmd in a set order, this change fixes that issue. Change-Id: I14a15732e1917a91009e1ac14fba39ca1523c739 Signed-off-by: Spencer Oliver <spen@spen-soft.co.uk> Reviewed-on: http://openocd.zylin.com/992 Tested-by: jenkins Reviewed-by: Andreas Fritiofson <andreas.fritiofson@gmail.com>
This commit is contained in:
parent
bf2b0a0361
commit
6bd9e3b94f
|
@ -1364,9 +1364,9 @@ COMMAND_HANDLER(stm32x_handle_options_write_command)
|
||||||
{
|
{
|
||||||
struct target *target = NULL;
|
struct target *target = NULL;
|
||||||
struct stm32x_flash_bank *stm32x_info = NULL;
|
struct stm32x_flash_bank *stm32x_info = NULL;
|
||||||
uint32_t optionbyte = 0xF0;
|
uint16_t optionbyte;
|
||||||
|
|
||||||
if (CMD_ARGC < 4)
|
if (CMD_ARGC < 2)
|
||||||
return ERROR_COMMAND_SYNTAX_ERROR;
|
return ERROR_COMMAND_SYNTAX_ERROR;
|
||||||
|
|
||||||
struct flash_bank *bank;
|
struct flash_bank *bank;
|
||||||
|
@ -1387,34 +1387,41 @@ COMMAND_HANDLER(stm32x_handle_options_write_command)
|
||||||
if (ERROR_OK != retval)
|
if (ERROR_OK != retval)
|
||||||
return retval;
|
return retval;
|
||||||
|
|
||||||
/* REVISIT: ignores some options which we will display...
|
retval = stm32x_read_options(bank);
|
||||||
* and doesn't insist on the specified syntax.
|
if (ERROR_OK != retval)
|
||||||
*/
|
return retval;
|
||||||
|
|
||||||
/* OPT_RDWDGSW */
|
/* start with current options */
|
||||||
if (strcmp(CMD_ARGV[1], "SWWDG") == 0)
|
optionbyte = stm32x_info->option_bytes.user_options;
|
||||||
|
|
||||||
|
/* skip over flash bank */
|
||||||
|
CMD_ARGC--;
|
||||||
|
CMD_ARGV++;
|
||||||
|
|
||||||
|
while (CMD_ARGC) {
|
||||||
|
if (strcmp("SWWDG", CMD_ARGV[0]) == 0)
|
||||||
optionbyte |= (1 << 0);
|
optionbyte |= (1 << 0);
|
||||||
else /* REVISIT must be "HWWDG" then ... */
|
else if (strcmp("HWWDG", CMD_ARGV[0]) == 0)
|
||||||
optionbyte &= ~(1 << 0);
|
optionbyte &= ~(1 << 0);
|
||||||
|
else if (strcmp("NORSTSTOP", CMD_ARGV[0]) == 0)
|
||||||
/* OPT_RDRSTSTOP */
|
|
||||||
if (strcmp(CMD_ARGV[2], "NORSTSTOP") == 0)
|
|
||||||
optionbyte |= (1 << 1);
|
|
||||||
else /* REVISIT must be "RSTSTNDBY" then ... */
|
|
||||||
optionbyte &= ~(1 << 1);
|
optionbyte &= ~(1 << 1);
|
||||||
|
else if (strcmp("RSTSTNDBY", CMD_ARGV[0]) == 0)
|
||||||
/* OPT_RDRSTSTDBY */
|
optionbyte &= ~(1 << 1);
|
||||||
if (strcmp(CMD_ARGV[3], "NORSTSTNDBY") == 0)
|
else if (strcmp("NORSTSTNDBY", CMD_ARGV[0]) == 0)
|
||||||
optionbyte |= (1 << 2);
|
|
||||||
else /* REVISIT must be "RSTSTOP" then ... */
|
|
||||||
optionbyte &= ~(1 << 2);
|
optionbyte &= ~(1 << 2);
|
||||||
|
else if (strcmp("RSTSTOP", CMD_ARGV[0]) == 0)
|
||||||
if (CMD_ARGC > 4 && stm32x_info->has_dual_banks) {
|
optionbyte &= ~(1 << 2);
|
||||||
/* OPT_BFB2 */
|
else if (stm32x_info->has_dual_banks) {
|
||||||
if (strcmp(CMD_ARGV[4], "BOOT0") == 0)
|
if (strcmp("BOOT0", CMD_ARGV[0]) == 0)
|
||||||
optionbyte |= (1 << 3);
|
optionbyte |= (1 << 3);
|
||||||
else
|
else if (strcmp("BOOT1", CMD_ARGV[0]) == 0)
|
||||||
optionbyte &= ~(1 << 3);
|
optionbyte &= ~(1 << 3);
|
||||||
|
else
|
||||||
|
return ERROR_COMMAND_SYNTAX_ERROR;
|
||||||
|
} else
|
||||||
|
return ERROR_COMMAND_SYNTAX_ERROR;
|
||||||
|
CMD_ARGC--;
|
||||||
|
CMD_ARGV++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (stm32x_erase_options(bank) != ERROR_OK) {
|
if (stm32x_erase_options(bank) != ERROR_OK) {
|
||||||
|
|
Loading…
Reference in New Issue