summaryrefslogtreecommitdiff
path: root/src/flash/str9x.c
diff options
context:
space:
mode:
authorZachary T Welch <zw@superlucidity.net>2009-10-23 01:25:22 -0700
committerZachary T Welch <zw@superlucidity.net>2009-11-05 18:19:19 -0800
commitfa9e5d102708df2dcc0f070c847adf250ee1aa33 (patch)
tree3a424a6108eb04fe1f1b05262ac2c9b363a7f118 /src/flash/str9x.c
parent111b7a6a9dbd68c906b8a8dff6e6c34d780297db (diff)
downloadopenocd+libswd-fa9e5d102708df2dcc0f070c847adf250ee1aa33.tar.gz
openocd+libswd-fa9e5d102708df2dcc0f070c847adf250ee1aa33.tar.bz2
openocd+libswd-fa9e5d102708df2dcc0f070c847adf250ee1aa33.tar.xz
openocd+libswd-fa9e5d102708df2dcc0f070c847adf250ee1aa33.zip
Improve str9x config command argument parsing.
Diffstat (limited to 'src/flash/str9x.c')
-rw-r--r--src/flash/str9x.c25
1 files changed, 14 insertions, 11 deletions
diff --git a/src/flash/str9x.c b/src/flash/str9x.c
index 9d7b672d..fe6c0868 100644
--- a/src/flash/str9x.c
+++ b/src/flash/str9x.c
@@ -673,7 +673,6 @@ static int str9x_handle_flash_config_command(struct command_context_s *cmd_ctx,
char *cmd, char **args, int argc)
{
str9x_flash_bank_t *str9x_info;
- flash_bank_t *bank;
target_t *target = NULL;
if (argc < 5)
@@ -681,12 +680,16 @@ static int str9x_handle_flash_config_command(struct command_context_s *cmd_ctx,
return ERROR_COMMAND_SYNTAX_ERROR;
}
- bank = get_flash_bank_by_num(strtoul(args[0], NULL, 0));
- if (!bank)
- {
- command_print(cmd_ctx, "flash bank '#%s' is out of bounds", args[0]);
- return ERROR_OK;
- }
+ flash_bank_t *bank;
+ int retval = flash_command_get_bank_by_num(cmd_ctx, args[0], &bank);
+ if (ERROR_OK != retval)
+ return retval;
+
+ uint32_t bbsr, nbbsr, bbadr, nbbadr;
+ COMMAND_PARSE_NUMBER(u32, args[1], bbsr);
+ COMMAND_PARSE_NUMBER(u32, args[2], nbbsr);
+ COMMAND_PARSE_NUMBER(u32, args[3], bbadr);
+ COMMAND_PARSE_NUMBER(u32, args[4], nbbadr);
str9x_info = bank->driver_priv;
@@ -699,10 +702,10 @@ static int str9x_handle_flash_config_command(struct command_context_s *cmd_ctx,
}
/* config flash controller */
- target_write_u32(target, FLASH_BBSR, strtoul(args[1], NULL, 0));
- target_write_u32(target, FLASH_NBBSR, strtoul(args[2], NULL, 0));
- target_write_u32(target, FLASH_BBADR, (strtoul(args[3], NULL, 0) >> 2));
- target_write_u32(target, FLASH_NBBADR, (strtoul(args[4], NULL, 0) >> 2));
+ target_write_u32(target, FLASH_BBSR, bbsr);
+ target_write_u32(target, FLASH_NBBSR, nbbsr);
+ target_write_u32(target, FLASH_BBADR, bbadr >> 2);
+ target_write_u32(target, FLASH_NBBADR, nbbadr >> 2);
/* set bit 18 instruction TCM order as per flash programming manual */
arm966e_write_cp15(target, 62, 0x40000);