From: Zach W. <zw...@us...> - 2009-11-06 03:24:52
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Main OpenOCD repository". The branch, master has been updated via 36b4ac90e45dda4df505981bd8d090971e478867 (commit) via fa9e5d102708df2dcc0f070c847adf250ee1aa33 (commit) via 111b7a6a9dbd68c906b8a8dff6e6c34d780297db (commit) via aa9351ba46d0959555a4b293627ea14b5b42344f (commit) via 786106d725aace7637e8b628a66aa0fbc03b2e19 (commit) via fc116380bf26ac00b8d0a37fee91e74118e12d8d (commit) via ee4723c494fb9cd8deefdbf5387f0ba31ea57c65 (commit) via c63671e4f7eac5488e1ec0ef50f9d32e12cf3b31 (commit) via 7b2d8d93e6b132048f951106480b4e6a6f0b885a (commit) via 0004691e9104c9a59336fbe6e230597d48e8cb57 (commit) via 7f6ad49d12e3d166c730d27306d887bb3ed48a1b (commit) via 680e22c4d7d71d88128bd12e3ecc08b135da626a (commit) via 7b3d54a1278dc89f5ad43a5c00bfacbbddc8a9b6 (commit) via 266c423bbdea4e09c6b1f6cd216f872f8e3ef3f8 (commit) via 7b49739790cf8c7638ff11573c0e40626b936d3d (commit) via 75b601b1f31de52885448bc59ce5c5f5a5048d93 (commit) via 5e0ee6ab083f999e7007696762d8c55d647624dd (commit) via 93ab9ce8885cd45f5f9beba7d7e55536655eb5bf (commit) via e9566a4a6af9b16762c66cf632abbeafbe8f874f (commit) via 11e545f56091e4fa808bd57a215d6b8066b39295 (commit) via 4189fdad28c283602b80ff7bc5a43bd5963019e7 (commit) via d660721ba8821aa92248bddcbeefde1b3e629744 (commit) via 04b8a2a6f3e85fc701ce19c8c5999ab8a75964cd (commit) via a8886cdfee58aff32a6c3e3cdf818e584d1075d7 (commit) via 9b3781e5a4c0145f0be4e7c262975e3b9909d1c4 (commit) via af84cd33a2e0b8af31d4c7dbd64cfd0348d65a0e (commit) via 4d67b0974f23c1d24050eeec8c8533a2396fa6d4 (commit) via b699aef4c009e705660ee5a0bdfd3a2064fa0a20 (commit) via f8f1ac886519d8ea4e21572f86a42a223ce72457 (commit) via 714d92a954ad348571713c4ccc2611d7b910bcc7 (commit) via 0442bda216ef89a212f1dc58591db6edfd6b9f08 (commit) via 11a0afc932853fc9cb8d33a5fdce954195f406e2 (commit) via 3541ed3aa3beb93c80bb2a01be429dacdec33919 (commit) via 3dd5c59d7d4d4dc13ebd3fc870bd4bc695c9fda8 (commit) via b62ee5a3c56cfbb000a40c05083dd31720c7cb1e (commit) via ab33bdd46c3bb3acdb3f1b1f09a0e1a9393ef798 (commit) via 6e542407e7927ec589824b56ba706ed02d0ba97f (commit) via 2b78a4e82b1845ee7cc89f6e31d7b49e9299cb32 (commit) via ae5732b9e4f085b89da3f9ce07eb526e159e1937 (commit) via 653ea7b25c4bec65fbe60101eb55d2564ba982af (commit) via b7b561aae809ab9022b9f213dc5a12b6d58ce2ee (commit) via f6f1dbfafdfac93d8f9a9540c71f011fac7611e0 (commit) via 36a3646c2205474345482188c8c05e50d1f67e44 (commit) via 68785af4da7727238c86dcf8858e0b5975bc988e (commit) from 0f3117c19d3b0bf8d693b25c2e97ff874d8acc99 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 36b4ac90e45dda4df505981bd8d090971e478867 Author: Zachary T Welch <zw...@su...> Date: Fri Oct 23 01:18:25 2009 -0700 Improve str9xpec command argument parsing. diff --git a/src/flash/str9xpec.c b/src/flash/str9xpec.c index 33471e6..711ee7a 100644 --- a/src/flash/str9xpec.c +++ b/src/flash/str9xpec.c @@ -795,7 +795,6 @@ static int str9xpec_probe(struct flash_bank_s *bank) static int str9xpec_handle_part_id_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { - flash_bank_t *bank; scan_field_t field; uint8_t *buffer = NULL; jtag_tap_t *tap; @@ -803,16 +802,12 @@ static int str9xpec_handle_part_id_command(struct command_context_s *cmd_ctx, ch str9xpec_flash_controller_t *str9xpec_info = NULL; if (argc < 1) - { 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; str9xpec_info = bank->driver_priv; tap = str9xpec_info->tap; @@ -851,7 +846,6 @@ static int str9xpec_info(struct flash_bank_s *bank, char *buf, int buf_size) static int str9xpec_handle_flash_options_read_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { - flash_bank_t *bank; uint8_t status; str9xpec_flash_controller_t *str9xpec_info = NULL; @@ -861,12 +855,10 @@ static int str9xpec_handle_flash_options_read_command(struct command_context_s * return ERROR_OK; } - 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; str9xpec_info = bank->driver_priv; @@ -971,7 +963,6 @@ static int str9xpec_write_options(struct flash_bank_s *bank) static int str9xpec_handle_flash_options_write_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { - flash_bank_t *bank; uint8_t status; if (argc < 1) @@ -980,12 +971,10 @@ static int str9xpec_handle_flash_options_write_command(struct command_context_s return ERROR_OK; } - 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; status = str9xpec_write_options(bank); @@ -997,7 +986,6 @@ static int str9xpec_handle_flash_options_write_command(struct command_context_s static int str9xpec_handle_flash_options_cmap_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { - flash_bank_t *bank; str9xpec_flash_controller_t *str9xpec_info = NULL; if (argc < 2) @@ -1006,12 +994,10 @@ static int str9xpec_handle_flash_options_cmap_command(struct command_context_s * return ERROR_OK; } - 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; str9xpec_info = bank->driver_priv; @@ -1029,7 +1015,6 @@ static int str9xpec_handle_flash_options_cmap_command(struct command_context_s * static int str9xpec_handle_flash_options_lvdthd_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { - flash_bank_t *bank; str9xpec_flash_controller_t *str9xpec_info = NULL; if (argc < 2) @@ -1038,12 +1023,10 @@ static int str9xpec_handle_flash_options_lvdthd_command(struct command_context_s return ERROR_OK; } - 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; str9xpec_info = bank->driver_priv; @@ -1061,7 +1044,6 @@ static int str9xpec_handle_flash_options_lvdthd_command(struct command_context_s int str9xpec_handle_flash_options_lvdsel_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { - flash_bank_t *bank; str9xpec_flash_controller_t *str9xpec_info = NULL; if (argc < 2) @@ -1070,12 +1052,10 @@ int str9xpec_handle_flash_options_lvdsel_command(struct command_context_s *cmd_c return ERROR_OK; } - 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; str9xpec_info = bank->driver_priv; @@ -1093,7 +1073,6 @@ int str9xpec_handle_flash_options_lvdsel_command(struct command_context_s *cmd_c static int str9xpec_handle_flash_options_lvdwarn_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { - flash_bank_t *bank; str9xpec_flash_controller_t *str9xpec_info = NULL; if (argc < 2) @@ -1102,12 +1081,10 @@ static int str9xpec_handle_flash_options_lvdwarn_command(struct command_context_ return ERROR_OK; } - 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; str9xpec_info = bank->driver_priv; @@ -1126,7 +1103,6 @@ static int str9xpec_handle_flash_options_lvdwarn_command(struct command_context_ static int str9xpec_handle_flash_lock_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { uint8_t status; - flash_bank_t *bank; if (argc < 1) { @@ -1134,12 +1110,10 @@ static int str9xpec_handle_flash_lock_command(struct command_context_s *cmd_ctx, return ERROR_OK; } - 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; status = str9xpec_lock_device(bank); @@ -1152,7 +1126,6 @@ static int str9xpec_handle_flash_lock_command(struct command_context_s *cmd_ctx, static int str9xpec_handle_flash_unlock_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { uint8_t status; - flash_bank_t *bank; if (argc < 1) { @@ -1160,12 +1133,10 @@ static int str9xpec_handle_flash_unlock_command(struct command_context_s *cmd_ct return ERROR_OK; } - 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; status = str9xpec_unlock_device(bank); @@ -1177,8 +1148,6 @@ static int str9xpec_handle_flash_unlock_command(struct command_context_s *cmd_ct static int str9xpec_handle_flash_enable_turbo_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { - int retval; - flash_bank_t *bank; jtag_tap_t *tap0; jtag_tap_t *tap1; jtag_tap_t *tap2; @@ -1190,12 +1159,10 @@ static int str9xpec_handle_flash_enable_turbo_command(struct command_context_s * return ERROR_OK; } - 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; str9xpec_info = bank->driver_priv; @@ -1230,7 +1197,6 @@ static int str9xpec_handle_flash_enable_turbo_command(struct command_context_s * static int str9xpec_handle_flash_disable_turbo_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { - flash_bank_t *bank; jtag_tap_t *tap; str9xpec_flash_controller_t *str9xpec_info = NULL; @@ -1240,12 +1206,10 @@ static int str9xpec_handle_flash_disable_turbo_command(struct command_context_s return ERROR_OK; } - 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; str9xpec_info = bank->driver_priv; tap = str9xpec_info->tap; commit fa9e5d102708df2dcc0f070c847adf250ee1aa33 Author: Zachary T Welch <zw...@su...> Date: Fri Oct 23 01:25:22 2009 -0700 Improve str9x config command argument parsing. diff --git a/src/flash/str9x.c b/src/flash/str9x.c index 9d7b672..fe6c086 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); commit 111b7a6a9dbd68c906b8a8dff6e6c34d780297db Author: Zachary T Welch <zw...@su...> Date: Fri Oct 23 01:32:20 2009 -0700 Improve str7x config command argument parsing. diff --git a/src/flash/str7x.c b/src/flash/str7x.c index 4d35748..650c0bc 100644 --- a/src/flash/str7x.c +++ b/src/flash/str7x.c @@ -640,12 +640,10 @@ static int str7x_info(struct flash_bank_s *bank, char *buf, int buf_size) static int str7x_handle_disable_jtag_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { - flash_bank_t *bank; target_t *target = NULL; str7x_flash_bank_t *str7x_info = NULL; uint32_t flash_cmd; - uint32_t retval; uint16_t ProtectionLevel = 0; uint16_t ProtectionRegs; @@ -655,12 +653,10 @@ static int str7x_handle_disable_jtag_command(struct command_context_s *cmd_ctx, return ERROR_OK; } - bank = get_flash_bank_by_num(strtoul(args[0], NULL, 0)); - if (!bank) - { - command_print(cmd_ctx, "str7x disable_jtag <bank> ok"); - 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; str7x_info = bank->driver_priv; @@ -673,15 +669,16 @@ static int str7x_handle_disable_jtag_command(struct command_context_s *cmd_ctx, } /* first we get protection status */ - target_read_u32(target, str7x_get_flash_adr(bank, FLASH_NVAPR0), &retval); + uint32_t reg; + target_read_u32(target, str7x_get_flash_adr(bank, FLASH_NVAPR0), ®); - if (!(retval & str7x_info->disable_bit)) + if (!(reg & str7x_info->disable_bit)) { ProtectionLevel = 1; } - target_read_u32(target, str7x_get_flash_adr(bank, FLASH_NVAPR1), &retval); - ProtectionRegs = ~(retval >> 16); + target_read_u32(target, str7x_get_flash_adr(bank, FLASH_NVAPR1), ®); + ProtectionRegs = ~(reg >> 16); while (((ProtectionRegs) != 0) && (ProtectionLevel < 16)) { commit aa9351ba46d0959555a4b293627ea14b5b42344f Author: Zachary T Welch <zw...@su...> Date: Thu Oct 22 22:33:12 2009 -0700 Improve stm32x.c command argument parsing. diff --git a/src/flash/stm32x.c b/src/flash/stm32x.c index 22bd4f9..158f264 100644 --- a/src/flash/stm32x.c +++ b/src/flash/stm32x.c @@ -942,7 +942,6 @@ static int stm32x_info(struct flash_bank_s *bank, char *buf, int buf_size) static int stm32x_handle_lock_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { - flash_bank_t *bank; target_t *target = NULL; stm32x_flash_bank_t *stm32x_info = NULL; @@ -952,12 +951,10 @@ static int stm32x_handle_lock_command(struct command_context_s *cmd_ctx, char *c return ERROR_OK; } - 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; stm32x_info = bank->driver_priv; @@ -991,7 +988,6 @@ static int stm32x_handle_lock_command(struct command_context_s *cmd_ctx, char *c static int stm32x_handle_unlock_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { - flash_bank_t *bank; target_t *target = NULL; stm32x_flash_bank_t *stm32x_info = NULL; @@ -1001,12 +997,10 @@ static int stm32x_handle_unlock_command(struct command_context_s *cmd_ctx, char return ERROR_OK; } - 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; stm32x_info = bank->driver_priv; @@ -1037,7 +1031,6 @@ static int stm32x_handle_unlock_command(struct command_context_s *cmd_ctx, char static int stm32x_handle_options_read_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { - flash_bank_t *bank; uint32_t optionbyte; target_t *target = NULL; stm32x_flash_bank_t *stm32x_info = NULL; @@ -1048,12 +1041,10 @@ static int stm32x_handle_options_read_command(struct command_context_s *cmd_ctx, return ERROR_OK; } - 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; stm32x_info = bank->driver_priv; @@ -1096,7 +1087,6 @@ static int stm32x_handle_options_read_command(struct command_context_s *cmd_ctx, static int stm32x_handle_options_write_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { - flash_bank_t *bank; target_t *target = NULL; stm32x_flash_bank_t *stm32x_info = NULL; uint16_t optionbyte = 0xF8; @@ -1107,12 +1097,10 @@ static int stm32x_handle_options_write_command(struct command_context_s *cmd_ctx return ERROR_OK; } - 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; stm32x_info = bank->driver_priv; @@ -1210,7 +1198,6 @@ static int stm32x_mass_erase(struct flash_bank_s *bank) static int stm32x_handle_mass_erase_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { - flash_bank_t *bank; int i; if (argc < 1) @@ -1219,12 +1206,10 @@ static int stm32x_handle_mass_erase_command(struct command_context_s *cmd_ctx, c return ERROR_OK; } - 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; if (stm32x_mass_erase(bank) == ERROR_OK) { commit 786106d725aace7637e8b628a66aa0fbc03b2e19 Author: Zachary T Welch <zw...@su...> Date: Fri Oct 23 01:40:47 2009 -0700 Improve stellaris.c erase argument parsing. diff --git a/src/flash/stellaris.c b/src/flash/stellaris.c index dfc276e..b482ce2 100644 --- a/src/flash/stellaris.c +++ b/src/flash/stellaris.c @@ -1162,7 +1162,6 @@ static int stellaris_mass_erase(struct flash_bank_s *bank) static int stellaris_handle_mass_erase_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { - flash_bank_t *bank; int i; if (argc < 1) @@ -1171,12 +1170,10 @@ static int stellaris_handle_mass_erase_command(struct command_context_s *cmd_ctx return ERROR_OK; } - 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; if (stellaris_mass_erase(bank) == ERROR_OK) { commit fc116380bf26ac00b8d0a37fee91e74118e12d8d Author: Zachary T Welch <zw...@su...> Date: Thu Oct 22 22:33:12 2009 -0700 Improve pic32mx.c command argument parsing. diff --git a/src/flash/pic32mx.c b/src/flash/pic32mx.c index 48ba38c..d9966bf 100644 --- a/src/flash/pic32mx.c +++ b/src/flash/pic32mx.c @@ -724,7 +724,6 @@ static int pic32mx_info(struct flash_bank_s *bank, char *buf, int buf_size) #if 0 int pic32mx_handle_lock_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { - flash_bank_t *bank; target_t *target = NULL; pic32mx_flash_bank_t *pic32mx_info = NULL; @@ -734,12 +733,10 @@ int pic32mx_handle_lock_command(struct command_context_s *cmd_ctx, char *cmd, ch return ERROR_OK; } - 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; pic32mx_info = bank->driver_priv; @@ -773,7 +770,6 @@ int pic32mx_handle_lock_command(struct command_context_s *cmd_ctx, char *cmd, ch int pic32mx_handle_unlock_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { - flash_bank_t *bank; target_t *target = NULL; pic32mx_flash_bank_t *pic32mx_info = NULL; @@ -783,12 +779,10 @@ int pic32mx_handle_unlock_command(struct command_context_s *cmd_ctx, char *cmd, return ERROR_OK; } - 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; pic32mx_info = bank->driver_priv; @@ -867,7 +861,6 @@ static int pic32mx_chip_erase(struct flash_bank_s *bank) static int pic32mx_handle_chip_erase_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { #if 0 - flash_bank_t *bank; int i; if (argc != 0) @@ -876,12 +869,10 @@ static int pic32mx_handle_chip_erase_command(struct command_context_s *cmd_ctx, return ERROR_OK; } - 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; if (pic32mx_chip_erase(bank) == ERROR_OK) { @@ -904,7 +895,6 @@ static int pic32mx_handle_chip_erase_command(struct command_context_s *cmd_ctx, static int pic32mx_handle_pgm_word_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { - flash_bank_t *bank; uint32_t address, value; int status, res; @@ -914,15 +904,14 @@ static int pic32mx_handle_pgm_word_command(struct command_context_s *cmd_ctx, ch return ERROR_OK; } - address = strtoul(args[0], NULL, 0); - value = strtoul(args[1], NULL, 0); + COMMAND_PARSE_NUMBER(u32, args[0], address); + COMMAND_PARSE_NUMBER(u32, args[1], value); + + flash_bank_t *bank; + int retval = flash_command_get_bank_by_num(cmd_ctx, args[2], &bank); + if (ERROR_OK != retval) + return retval; - bank = get_flash_bank_by_num(strtoul(args[2], NULL, 0)); - if (!bank) - { - command_print(cmd_ctx, "flash bank '#%s' is out of bounds", args[2]); - return ERROR_OK; - } if (address < bank->base || address >= (bank->base + bank->size)) { command_print(cmd_ctx, "flash address '%s' is out of bounds", args[0]); commit ee4723c494fb9cd8deefdbf5387f0ba31ea57c65 Author: Zachary T Welch <zw...@su...> Date: Fri Oct 23 02:17:17 2009 -0700 Improve mflash.c command argument parsing. diff --git a/src/flash/mflash.c b/src/flash/mflash.c index 63ba054..bf759c9 100644 --- a/src/flash/mflash.c +++ b/src/flash/mflash.c @@ -716,7 +716,7 @@ static int mg_write_cmd(struct command_context_s *cmd_ctx, char *cmd, char **arg return ERROR_COMMAND_SYNTAX_ERROR; } - address = strtoul(args[2], NULL, 0); + COMMAND_PARSE_NUMBER(u32, args[2], address); ret = fileio_open(&fileio, args[1], FILEIO_READ, FILEIO_BINARY); if (ret != ERROR_OK) @@ -783,8 +783,8 @@ static int mg_dump_cmd(struct command_context_s *cmd_ctx, char *cmd, char **args return ERROR_COMMAND_SYNTAX_ERROR; } - address = strtoul(args[2], NULL, 0); - size = strtoul(args[3], NULL, 0); + COMMAND_PARSE_NUMBER(u32, args[2], address); + COMMAND_PARSE_NUMBER(u32, args[3], size); ret = fileio_open(&fileio, args[1], FILEIO_WRITE, FILEIO_BINARY); if (ret != ERROR_OK) @@ -1238,7 +1238,9 @@ int mg_config_cmd(struct command_context_s *cmd_ctx, char *cmd, break; case 3: if (!strcmp(args[1], "pll")) { - fin = strtoul(args[2], NULL, 0); + unsigned long freq; + COMMAND_PARSE_NUMBER(ulong, args[2], freq); + fin = freq; if (fin > MG_PLL_CLK_OUT) { LOG_ERROR("mflash: input freq. is too large"); @@ -1288,7 +1290,6 @@ int mflash_init_drivers(struct command_context_s *cmd_ctx) static int mg_bank_cmd(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { target_t *target; - char *str; int i; if (argc < 4) @@ -1303,7 +1304,9 @@ static int mg_bank_cmd(struct command_context_s *cmd_ctx, char *cmd, char **args } mflash_bank = calloc(sizeof(mflash_bank_t), 1); - mflash_bank->base = strtoul(args[1], NULL, 0); + COMMAND_PARSE_NUMBER(u32, args[1], mflash_bank->base); + /// @todo Verify how this parsing should work, then document it. + char *str; mflash_bank->rst_pin.num = strtoul(args[2], &str, 0); if (*str) mflash_bank->rst_pin.port[0] = (uint16_t)tolower(str[0]); commit c63671e4f7eac5488e1ec0ef50f9d32e12cf3b31 Author: Zachary T Welch <zw...@su...> Date: Fri Oct 23 02:17:17 2009 -0700 Improve lpc3180_nand_controller.c parsing. This fixes a memory leak in lpc3180_nand_device_command by reordering the malloc to occur after all parsing has completed. diff --git a/src/flash/lpc3180_nand_controller.c b/src/flash/lpc3180_nand_controller.c index de6d4e2..ac079c6 100644 --- a/src/flash/lpc3180_nand_controller.c +++ b/src/flash/lpc3180_nand_controller.c @@ -60,25 +60,29 @@ nand_flash_controller_t lpc3180_nand_controller = */ static int lpc3180_nand_device_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc, struct nand_device_s *device) { - lpc3180_nand_controller_t *lpc3180_info; - if (argc < 3) { LOG_WARNING("incomplete 'lpc3180' nand flash configuration"); return ERROR_FLASH_BANK_INVALID; } - lpc3180_info = malloc(sizeof(lpc3180_nand_controller_t)); - device->controller_priv = lpc3180_info; - - lpc3180_info->target = get_target(args[1]); - if (!lpc3180_info->target) + target_t *target = get_target(args[1]); + if (NULL == target) { LOG_ERROR("target '%s' not defined", args[1]); return ERROR_NAND_DEVICE_INVALID; } - lpc3180_info->osc_freq = strtoul(args[2], NULL, 0); + uint32_t osc_freq; + COMMAND_PARSE_NUMBER(u32, args[2], osc_freq); + + lpc3180_nand_controller_t *lpc3180_info; + lpc3180_info = malloc(sizeof(lpc3180_nand_controller_t)); + device->controller_priv = lpc3180_info; + + lpc3180_info->target = target; + lpc3180_info->osc_freq = osc_freq; + if ((lpc3180_info->osc_freq < 1000) || (lpc3180_info->osc_freq > 20000)) { LOG_WARNING("LPC3180 oscillator frequency should be between 1000 and 20000 kHz, was %i", lpc3180_info->osc_freq); @@ -864,7 +868,6 @@ static int lpc3180_nand_ready(struct nand_device_s *device, int timeout) static int handle_lpc3180_select_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { - nand_device_t *device = NULL; lpc3180_nand_controller_t *lpc3180_info = NULL; char *selected[] = { @@ -876,7 +879,9 @@ static int handle_lpc3180_select_command(struct command_context_s *cmd_ctx, char return ERROR_COMMAND_SYNTAX_ERROR; } - device = get_nand_device_by_num(strtoul(args[0], NULL, 0)); + unsigned num; + COMMAND_PARSE_NUMBER(uint, args[1], num); + nand_device_t *device = get_nand_device_by_num(num); if (!device) { command_print(cmd_ctx, "nand device '#%s' is out of bounds", args[0]); commit 7b2d8d93e6b132048f951106480b4e6a6f0b885a Author: Zachary T Welch <zw...@su...> Date: Fri Oct 23 02:17:17 2009 -0700 Improve lpc2900.c command argument parsing. diff --git a/src/flash/lpc2900.c b/src/flash/lpc2900.c index 902180c..e15d93b 100644 --- a/src/flash/lpc2900.c +++ b/src/flash/lpc2900.c @@ -554,7 +554,6 @@ static uint32_t lpc2900_calc_tr( uint32_t clock, uint32_t time ) static int lpc2900_handle_signature_command( struct command_context_s *cmd_ctx, char *cmd, char **args, int argc ) { - flash_bank_t *bank; uint32_t status; uint32_t signature[4]; @@ -565,13 +564,10 @@ static int lpc2900_handle_signature_command( struct command_context_s *cmd_ctx, return ERROR_FLASH_BANK_INVALID; } - /* Get the bank descriptor */ - 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; if( bank->target->state != TARGET_HALTED ) { @@ -614,21 +610,16 @@ static int lpc2900_handle_signature_command( struct command_context_s *cmd_ctx, static int lpc2900_handle_read_custom_command( struct command_context_s *cmd_ctx, char *cmd, char **args, int argc ) { - flash_bank_t *bank; - - if( argc < 2 ) { return ERROR_COMMAND_SYNTAX_ERROR; } - /* Get the bank descriptor */ - 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; + lpc2900_flash_bank_t *lpc2900_info = bank->driver_priv; lpc2900_info->risky = 0; @@ -696,21 +687,16 @@ static int lpc2900_handle_read_custom_command( struct command_context_s *cmd_ctx static int lpc2900_handle_password_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { - flash_bank_t *bank; - - if (argc < 2) { return ERROR_COMMAND_SYNTAX_ERROR; } - /* Get the bank descriptor */ - 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; + lpc2900_flash_bank_t *lpc2900_info = bank->driver_priv; #define ISS_PASSWORD "I_know_what_I_am_doing" @@ -747,13 +733,11 @@ static int lpc2900_handle_write_custom_command( struct command_context_s *cmd_ct return ERROR_COMMAND_SYNTAX_ERROR; } - /* Get the bank descriptor */ - flash_bank_t *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; + lpc2900_flash_bank_t *lpc2900_info = bank->driver_priv; /* Check if command execution is allowed. */ @@ -780,7 +764,7 @@ static int lpc2900_handle_write_custom_command( struct command_context_s *cmd_ct char *filename = args[1]; char *type = (argc >= 3) ? args[2] : NULL; - int retval = image_open(&image, filename, type); + retval = image_open(&image, filename, type); if (retval != ERROR_OK) { return retval; @@ -866,12 +850,11 @@ static int lpc2900_handle_secure_sector_command(struct command_context_s *cmd_ct } /* Get the bank descriptor */ - flash_bank_t *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; + lpc2900_flash_bank_t *lpc2900_info = bank->driver_priv; /* Check if command execution is allowed. */ @@ -884,8 +867,9 @@ static int lpc2900_handle_secure_sector_command(struct command_context_s *cmd_ct lpc2900_info->risky = 0; /* Read sector range, and do a sanity check. */ - int first = strtoul(args[1], NULL, 0); - int last = strtoul(args[2], NULL, 0); + int first, last; + COMMAND_PARSE_NUMBER(int, args[1], first); + COMMAND_PARSE_NUMBER(int, args[2], last); if( (first >= bank->num_sectors) || (last >= bank->num_sectors) || (first > last) ) @@ -896,7 +880,6 @@ static int lpc2900_handle_secure_sector_command(struct command_context_s *cmd_ct uint8_t page[FLASH_PAGE_SIZE]; int sector; - int retval; /* Sectors in page 6 */ if( (first <= 4) || (last >= 8) ) @@ -972,12 +955,11 @@ static int lpc2900_handle_secure_jtag_command(struct command_context_s *cmd_ctx, } /* Get the bank descriptor */ - flash_bank_t *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; + lpc2900_flash_bank_t *lpc2900_info = bank->driver_priv; /* Check if command execution is allowed. */ @@ -1001,7 +983,6 @@ static int lpc2900_handle_secure_jtag_command(struct command_context_s *cmd_ctx, page[0x30 + 3] = 0x7F; /* Write to page 5 */ - int retval; if( (retval = lpc2900_write_index_page( bank, 5, &page )) != ERROR_OK ) { @@ -1117,7 +1098,9 @@ static int lpc2900_flash_bank_command(struct command_context_s *cmd_ctx, * Reject it if we can't meet the requirements for program time * (if clock too slow), or for erase time (clock too fast). */ - lpc2900_info->clk_sys_fmc = strtoul(args[6], NULL, 0) * 1000; + uint32_t clk_sys_fmc; + COMMAND_PARSE_NUMBER(u32, args[6], clk_sys_fmc); + lpc2900_info->clk_sys_fmc = clk_sys_fmc * 1000; uint32_t clock_limit; /* Check program time limit */ commit 0004691e9104c9a59336fbe6e230597d48e8cb57 Author: Zachary T Welch <zw...@su...> Date: Fri Oct 23 02:17:17 2009 -0700 Improve lpc288x.c command argument parsing. diff --git a/src/flash/lpc288x.c b/src/flash/lpc288x.c index 513e2fc..61aa3a0 100644 --- a/src/flash/lpc288x.c +++ b/src/flash/lpc288x.c @@ -209,7 +209,7 @@ static int lpc288x_flash_bank_command(struct command_context_s *cmd_ctx, char *c /* part wasn't probed for info yet */ lpc288x_info->cidr = 0; - lpc288x_info->cclk = strtoul(args[6], NULL, 0); + COMMAND_PARSE_NUMBER(u32, args[6], lpc288x_info->cclk); return ERROR_OK; } commit 7f6ad49d12e3d166c730d27306d887bb3ed48a1b Author: Zachary T Welch <zw...@su...> Date: Fri Oct 23 02:17:17 2009 -0700 Improve lpc2000.c command argument parsing. diff --git a/src/flash/lpc2000.c b/src/flash/lpc2000.c index 5dcf1bb..ed9c7c3 100644 --- a/src/flash/lpc2000.c +++ b/src/flash/lpc2000.c @@ -501,7 +501,7 @@ static int lpc2000_flash_bank_command(struct command_context_s *cmd_ctx, char *c } lpc2000_info->iap_working_area = NULL; - lpc2000_info->cclk = strtoul(args[7], NULL, 0); + COMMAND_PARSE_NUMBER(u32, args[7], lpc2000_info->cclk); lpc2000_info->calc_checksum = 0; lpc2000_build_sector_list(bank); @@ -776,7 +776,6 @@ static int lpc2000_info(struct flash_bank_s *bank, char *buf, int buf_size) static int lpc2000_handle_part_id_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { - flash_bank_t *bank; uint32_t param_table[5]; uint32_t result_table[4]; int status_code; @@ -786,12 +785,10 @@ static int lpc2000_handle_part_id_command(struct command_context_s *cmd_ctx, cha 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; if (bank->target->state != TARGET_HALTED) { commit 680e22c4d7d71d88128bd12e3ecc08b135da626a Author: Zachary T Welch <zw...@su...> Date: Fri Oct 23 02:17:17 2009 -0700 Improve cfi.c command argument parsing. diff --git a/src/flash/cfi.c b/src/flash/cfi.c index 2d75ff4..93e661c 100644 --- a/src/flash/cfi.c +++ b/src/flash/cfi.c @@ -641,8 +641,12 @@ static int cfi_flash_bank_command(struct command_context_s *cmd_ctx, char *cmd, return ERROR_FLASH_BANK_INVALID; } - if ((strtoul(args[4], NULL, 0) > CFI_MAX_CHIP_WIDTH) - || (strtoul(args[3], NULL, 0) > CFI_MAX_BUS_WIDTH)) + uint16_t chip_width, bus_width; + COMMAND_PARSE_NUMBER(u16, args[3], bus_width); + COMMAND_PARSE_NUMBER(u16, args[4], chip_width); + + if ((chip_width > CFI_MAX_CHIP_WIDTH) + || (bus_width > CFI_MAX_BUS_WIDTH)) { LOG_ERROR("chip and bus width have to specified in bytes"); return ERROR_FLASH_BANK_INVALID; commit 7b3d54a1278dc89f5ad43a5c00bfacbbddc8a9b6 Author: Zachary T Welch <zw...@su...> Date: Fri Oct 23 02:17:17 2009 -0700 Improve avrf.c command argument parsing. diff --git a/src/flash/avrf.c b/src/flash/avrf.c index 533822e..2b95b8a 100644 --- a/src/flash/avrf.c +++ b/src/flash/avrf.c @@ -456,7 +456,6 @@ static int avrf_mass_erase(struct flash_bank_s *bank) static int avrf_handle_mass_erase_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { - flash_bank_t *bank; int i; if (argc < 1) @@ -465,12 +464,10 @@ static int avrf_handle_mass_erase_command(struct command_context_s *cmd_ctx, cha return ERROR_OK; } - 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; if (avrf_mass_erase(bank) == ERROR_OK) { commit 266c423bbdea4e09c6b1f6cd216f872f8e3ef3f8 Author: Zachary T Welch <zw...@su...> Date: Thu Oct 22 22:33:12 2009 -0700 Improve orion_nand.c command argument parsing. diff --git a/src/flash/orion_nand.c b/src/flash/orion_nand.c index 94df17b..6e88f82 100644 --- a/src/flash/orion_nand.c +++ b/src/flash/orion_nand.c @@ -152,7 +152,7 @@ int orion_nand_device_command(struct command_context_s *cmd_ctx, char *cmd, return ERROR_NAND_DEVICE_INVALID; } - base = strtoul(args[2], NULL, 0); + COMMAND_PARSE_NUMBER(u32, args[2], base); cle = 0; ale = 1; commit 7b49739790cf8c7638ff11573c0e40626b936d3d Author: Zachary T Welch <zw...@su...> Date: Thu Oct 22 22:33:12 2009 -0700 Improve davinci_nand.c command argument parsing. diff --git a/src/flash/davinci_nand.c b/src/flash/davinci_nand.c index 41c2b20..b6210b8 100644 --- a/src/flash/davinci_nand.c +++ b/src/flash/davinci_nand.c @@ -638,7 +638,6 @@ static int davinci_nand_device_command(struct command_context_s *cmd_ctx, unsigned long chip, aemif; enum ecc eccmode; int chipsel; - char *ep; /* arguments: * - "davinci" @@ -661,8 +660,8 @@ static int davinci_nand_device_command(struct command_context_s *cmd_ctx, goto fail; } - chip = strtoul(argv[2], &ep, 0); - if (*ep || chip == 0 || chip == ULONG_MAX) { + COMMAND_PARSE_NUMBER(ulong, argv[2], chip); + if (chip == 0) { LOG_ERROR("Invalid NAND chip address %s", argv[2]); goto fail; } @@ -678,8 +677,8 @@ static int davinci_nand_device_command(struct command_context_s *cmd_ctx, goto fail; } - aemif = strtoul(argv[4], &ep, 0); - if (*ep || aemif == 0 || aemif == ULONG_MAX) { + COMMAND_PARSE_NUMBER(ulong, argv[4], aemif); + if (aemif == 0) { LOG_ERROR("Invalid AEMIF controller address %s", argv[4]); goto fail; } commit 75b601b1f31de52885448bc59ce5c5f5a5048d93 Author: Zachary T Welch <zw...@su...> Date: Thu Oct 22 22:33:12 2009 -0700 Improve at91sam7.c command argument parsing. diff --git a/src/flash/at91sam7.c b/src/flash/at91sam7.c index 315a3f3..7d93c9e 100644 --- a/src/flash/at91sam7.c +++ b/src/flash/at91sam7.c @@ -752,7 +752,7 @@ static int at91sam7_flash_bank_command(struct command_context_s *cmd_ctx, char * uint32_t base_address; uint32_t bank_size; - uint32_t ext_freq; + uint32_t ext_freq = 0; int chip_width; int bus_width; @@ -776,33 +776,37 @@ static int at91sam7_flash_bank_command(struct command_context_s *cmd_ctx, char * at91sam7_info->ext_freq = 0; at91sam7_info->flash_autodetection = 0; - if (argc == 14) + if (argc < 13) { - ext_freq = atol(args[13]) * 1000; + at91sam7_info->flash_autodetection = 1; + return ERROR_OK; + } + + COMMAND_PARSE_NUMBER(u32, args[1], base_address); + + COMMAND_PARSE_NUMBER(int, args[3], chip_width); + COMMAND_PARSE_NUMBER(int, args[4], bus_width); + + COMMAND_PARSE_NUMBER(int, args[8], banks_num); + COMMAND_PARSE_NUMBER(int, args[9], num_sectors); + COMMAND_PARSE_NUMBER(u16, args[10], pages_per_sector); + COMMAND_PARSE_NUMBER(u16, args[11], page_size); + COMMAND_PARSE_NUMBER(u16, args[12], num_nvmbits); + + if (argc == 14) { + unsigned long freq; + COMMAND_PARSE_NUMBER(ulong, args[13], freq); + ext_freq = freq * 1000; at91sam7_info->ext_freq = ext_freq; } - if ((argc != 14) || - (atoi(args[4]) == 0) || /* bus width */ - (atoi(args[8]) == 0) || /* banks number */ - (atoi(args[9]) == 0) || /* sectors per bank */ - (atoi(args[10]) == 0) || /* pages per sector */ - (atoi(args[11]) == 0) || /* page size */ - (atoi(args[12]) == 0)) /* nvmbits number */ + if ((bus_width == 0) || (banks_num == 0) || (num_sectors == 0) || + (pages_per_sector == 0) || (page_size == 0) || (num_nvmbits == 0)) { at91sam7_info->flash_autodetection = 1; return ERROR_OK; } - base_address = strtoul(args[1], NULL, 0); - chip_width = atoi(args[3]); - bus_width = atoi(args[4]); - banks_num = atoi(args[8]); - num_sectors = atoi(args[9]); - pages_per_sector = atoi(args[10]); - page_size = atoi(args[11]); - num_nvmbits = atoi(args[12]); - target_name = calloc(strlen(args[7]) + 1, sizeof(char)); strcpy(target_name, args[7]); @@ -1181,7 +1185,7 @@ static int at91sam7_handle_gpnvm_command(struct command_context_s *cmd_ctx, char } } - bit = atoi(args[0]); + COMMAND_PARSE_NUMBER(int, args[0], bit); if ((bit < 0) || (bit >= at91sam7_info->num_nvmbits)) { command_print(cmd_ctx, "gpnvm bit '#%s' is out of bounds for target %s", args[0], at91sam7_info->target_name); commit 5e0ee6ab083f999e7007696762d8c55d647624dd Author: Zachary T Welch <zw...@su...> Date: Thu Oct 22 22:33:12 2009 -0700 Improve at91sam3.c command argument parsing. diff --git a/src/flash/at91sam3.c b/src/flash/at91sam3.c index 5edaa69..aff4d98 100644 --- a/src/flash/at91sam3.c +++ b/src/flash/at91sam3.c @@ -2347,7 +2347,6 @@ static int sam3_handle_gpnvm_command(struct command_context_s *cmd_ctx, char *cmd, char **argv, int argc) { unsigned x,v; - uint32_t v32; int r,who; struct sam3_chip *pChip; @@ -2391,11 +2390,8 @@ sam3_handle_gpnvm_command(struct command_context_s *cmd_ctx, char *cmd, char **a if ((0 == strcmp(argv[0], "show")) && (0 == strcmp(argv[1], "all"))) { who = -1; } else { - r = parse_u32(argv[1], &v32); - if (r != ERROR_OK) { - command_print(cmd_ctx, "Not a number: %s", argv[1]); - return r; - } + uint32_t v32; + COMMAND_PARSE_NUMBER(u32, argv[1], v32); who = v32; } break; @@ -2444,9 +2440,6 @@ sam3_handle_gpnvm_command(struct command_context_s *cmd_ctx, char *cmd, char **a static int sam3_handle_slowclk_command(struct command_context_s *cmd_ctx, char *cmd, char **argv, int argc) { - uint32_t v; - int r; - struct sam3_chip *pChip; pChip = get_current_sam3(cmd_ctx); @@ -2460,8 +2453,10 @@ sam3_handle_slowclk_command(struct command_context_s *cmd_ctx, char *cmd, char * // show break; case 1: + { // set - r = parse_u32(argv[0], &v); + uint32_t v; + COMMAND_PARSE_NUMBER(u32, argv[0], v); if (v > 200000) { // absurd slow clock of 200Khz? command_print(cmd_ctx,"Absurd/illegal slow clock freq: %d\n", (int)(v)); @@ -2469,7 +2464,7 @@ sam3_handle_slowclk_command(struct command_context_s *cmd_ctx, char *cmd, char * } pChip->cfg.slow_freq = v; break; - + } default: // error command_print(cmd_ctx,"Too many parameters"); commit 93ab9ce8885cd45f5f9beba7d7e55536655eb5bf Author: Zachary T Welch <zw...@su...> Date: Thu Oct 22 22:33:12 2009 -0700 Improve nand.c command argument parsing. diff --git a/src/flash/nand.c b/src/flash/nand.c index d97c817..7fb7c99 100644 --- a/src/flash/nand.c +++ b/src/flash/nand.c @@ -1107,12 +1107,16 @@ int handle_nand_list_command(struct command_context_s *cmd_ctx, char *cmd, char static int handle_nand_info_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { - nand_device_t *p; int i = 0; int j = 0; int first = -1; int last = -1; + nand_device_t *p; + int retval = nand_command_get_device_by_num(cmd_ctx, args[0], &p); + if (ERROR_OK != retval) + return retval; + switch (argc) { default: return ERROR_COMMAND_SYNTAX_ERROR; @@ -1121,15 +1125,16 @@ static int handle_nand_info_command(struct command_context_s *cmd_ctx, char *cmd last = INT32_MAX; break; case 2: - first = last = strtoul(args[1], NULL, 0); + COMMAND_PARSE_NUMBER(int, args[1], i); + first = last = i; + i = 0; break; case 3: - first = strtoul(args[1], NULL, 0); - last = strtoul(args[2], NULL, 0); + COMMAND_PARSE_NUMBER(int, args[1], first); + COMMAND_PARSE_NUMBER(int, args[2], last); break; } - p = get_nand_device_by_num(strtoul(args[0], NULL, 0)); if (p) { if (p->device) @@ -1181,15 +1186,16 @@ static int handle_nand_info_command(struct command_context_s *cmd_ctx, char *cmd static int handle_nand_probe_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { - nand_device_t *p; - int retval; - if (argc != 1) { return ERROR_COMMAND_SYNTAX_ERROR; } - p = get_nand_device_by_num(strtoul(args[0], NULL, 0)); + nand_device_t *p; + int retval = nand_command_get_device_by_num(cmd_ctx, args[0], &p); + if (ERROR_OK != retval) + return retval; + if (p) { if ((retval = nand_probe(p)) == ERROR_OK) @@ -1205,29 +1211,25 @@ static int handle_nand_probe_command(struct command_context_s *cmd_ctx, char *cm command_print(cmd_ctx, "unknown error when probing NAND flash device"); } } - else - { - command_print(cmd_ctx, "NAND flash device '#%s' is out of bounds", args[0]); - } return ERROR_OK; } static int handle_nand_erase_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { - nand_device_t *p; - int retval; - if (argc != 1 && argc != 3) { return ERROR_COMMAND_SYNTAX_ERROR; } - p = get_nand_device_by_num(strtoul(args[0], NULL, 0)); + nand_device_t *p; + int retval = nand_command_get_device_by_num(cmd_ctx, args[0], &p); + if (ERROR_OK != retval) + return retval; + if (p) { - char *cp; unsigned long offset; unsigned long length; @@ -1235,16 +1237,12 @@ static int handle_nand_erase_command(struct command_context_s *cmd_ctx, char *cm if (argc == 3) { unsigned long size = p->erase_size * p->num_blocks; - offset = strtoul(args[1], &cp, 0); - if (*cp || (offset == ULONG_MAX) - || (offset % p->erase_size) != 0 - || offset >= size) + COMMAND_PARSE_NUMBER(ulong, args[1], offset); + if ((offset % p->erase_size) != 0 || offset >= size) return ERROR_INVALID_ARGUMENTS; - length = strtoul(args[2], &cp, 0); - if (*cp || (length == ULONG_MAX) - || (length == 0) - || (length % p->erase_size) != 0 + COMMAND_PARSE_NUMBER(ulong, args[2], length); + if ((length == 0) || (length % p->erase_size) != 0 || (length + offset) > size) return ERROR_INVALID_ARGUMENTS; @@ -1272,18 +1270,12 @@ static int handle_nand_erase_command(struct command_context_s *cmd_ctx, char *cm command_print(cmd_ctx, "unknown error when erasing NAND flash device"); } } - else - { - command_print(cmd_ctx, "NAND flash device '#%s' is out of bounds", args[0]); - } return ERROR_OK; } int handle_nand_check_bad_blocks_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { - nand_device_t *p; - int retval; int first = -1; int last = -1; @@ -1293,31 +1285,25 @@ int handle_nand_check_bad_blocks_command(struct command_context_s *cmd_ctx, char } - p = get_nand_device_by_num(strtoul(args[0], NULL, 0)); - if (!p) { - command_print(cmd_ctx, "NAND flash device '#%s' is out of bounds", - args[0]); - return ERROR_INVALID_ARGUMENTS; - } + nand_device_t *p; + int retval = nand_command_get_device_by_num(cmd_ctx, args[0], &p); + if (ERROR_OK != retval) + return retval; if (argc == 3) { - char *cp; unsigned long offset; unsigned long length; - offset = strtoul(args[1], &cp, 0); - if (*cp || offset == ULONG_MAX || offset % p->erase_size) - { + COMMAND_PARSE_NUMBER(ulong, args[1], offset); + if (offset % p->erase_size) return ERROR_INVALID_ARGUMENTS; - } offset /= p->erase_size; - length = strtoul(args[2], &cp, 0); - if (*cp || length == ULONG_MAX || length % p->erase_size) - { + COMMAND_PARSE_NUMBER(ulong, args[2], length); + if (length % p->erase_size) return ERROR_INVALID_ARGUMENTS; - } + length -= 1; length /= p->erase_size; @@ -1357,15 +1343,16 @@ static int handle_nand_write_command(struct command_context_s *cmd_ctx, char *cm duration_t duration; char *duration_text; - nand_device_t *p; - if (argc < 3) { return ERROR_COMMAND_SYNTAX_ERROR; - } - p = get_nand_device_by_num(strtoul(args[0], NULL, 0)); + nand_device_t *p; + int retval = nand_command_get_device_by_num(cmd_ctx, args[0], &p); + if (ERROR_OK != retval) + return retval; + if (p) { uint8_t *page = NULL; @@ -1374,7 +1361,7 @@ static int handle_nand_write_command(struct command_context_s *cmd_ctx, char *cm uint32_t oob_size = 0; const int *eccpos = NULL; - offset = strtoul(args[2], NULL, 0); + COMMAND_PARSE_NUMBER(u32, args[2], offset); if (argc > 3) { @@ -1509,24 +1496,22 @@ static int handle_nand_write_command(struct command_context_s *cmd_ctx, char *cm free(duration_text); duration_text = NULL; } - else - { - command_print(cmd_ctx, "NAND flash device '#%s' is out of bounds", args[0]); - } return ERROR_OK; } static int handle_nand_dump_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { - nand_device_t *p; - if (argc < 4) { return ERROR_COMMAND_SYNTAX_ERROR; } - p = get_nand_device_by_num(strtoul(args[0], NULL, 0)); + nand_device_t *p; + int retval = nand_command_get_device_by_num(cmd_ctx, args[0], &p); + if (ERROR_OK != retval) + return retval; + if (p) { if (p->device) @@ -1540,8 +1525,10 @@ static int handle_nand_dump_command(struct command_context_s *cmd_ctx, char *cmd uint32_t page_size = 0; uint8_t *oob = NULL; uint32_t oob_size = 0; - uint32_t address = strtoul(args[2], NULL, 0); - uint32_t size = strtoul(args[3], NULL, 0); + uint32_t address; + COMMAND_PARSE_NUMBER(u32, args[2], address); + uint32_t size; + COMMAND_PARSE_NUMBER(u32, args[3], size); uint32_t bytes_done = 0; enum oob_formats oob_format = NAND_OOB_NONE; @@ -1631,24 +1618,22 @@ static int handle_nand_dump_command(struct command_context_s *cmd_ctx, char *cmd command_print(cmd_ctx, "#%s: not probed", args[0]); } } - else - { - command_print(cmd_ctx, "NAND flash device '#%s' is out of bounds", args[0]); - } return ERROR_OK; } static int handle_nand_raw_access_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { - nand_device_t *p; - if ((argc < 1) || (argc > 2)) { return ERROR_COMMAND_SYNTAX_ERROR; } - p = get_nand_device_by_num(strtoul(args[0], NULL, 0)); + nand_device_t *p; + int retval = nand_command_get_device_by_num(cmd_ctx, args[0], &p); + if (ERROR_OK != retval) + return retval; + if (p) { if (p->device) @@ -1676,10 +1661,6 @@ static int handle_nand_raw_access_command(struct command_context_s *cmd_ctx, cha command_print(cmd_ctx, "#%s: not probed", args[0]); } } - else - { - command_print(cmd_ctx, "NAND flash device '#%s' is out of bounds", args[0]); - } return ERROR_OK; } commit e9566a4a6af9b16762c66cf632abbeafbe8f874f Author: Zachary T Welch <zw...@su...> Date: Thu Oct 22 22:33:12 2009 -0700 Improve flash.c command argument parsing. diff --git a/src/flash/flash.c b/src/flash/flash.c index aa24659..b40e074 100644 --- a/src/flash/flash.c +++ b/src/flash/flash.c @@ -307,10 +307,10 @@ static int handle_flash_bank_command(struct command_context_s *cmd_ctx, char *cm c->target = target; c->driver = flash_drivers[i]; c->driver_priv = NULL; - c->base = strtoul(args[1], NULL, 0); - c->size = strtoul(args[2], NULL, 0); - c->chip_width = strtoul(args[3], NULL, 0); - c->bus_width = strtoul(args[4], NULL, 0); + COMMAND_PARSE_NUMBER(u32, args[1], c->base); + COMMAND_PARSE_NUMBER(u32, args[2], c->size); + COMMAND_PARSE_NUMBER(int, args[3], c->chip_width); + COMMAND_PARSE_NUMBER(int, args[4], c->bus_width); c->num_sectors = 0; c->sectors = NULL; c->next = NULL; @@ -360,13 +360,14 @@ static int handle_flash_info_command(struct command_context_s *cmd_ctx, char *cm int retval; if (argc != 1) - { return ERROR_COMMAND_SYNTAX_ERROR; - } + + unsigned bank_nr; + COMMAND_PARSE_NUMBER(uint, args[0], bank_nr); for (p = flash_banks; p; p = p->next, i++) { - if (i == strtoul(args[0], NULL, 0)) + if (i == bank_nr) { char buf[1024]; @@ -415,7 +416,6 @@ static int handle_flash_info_command(struct command_context_s *cmd_ctx, char *cm static int handle_flash_probe_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { - flash_bank_t *p; int retval; if (argc != 1) @@ -423,7 +423,9 @@ static int handle_flash_probe_command(struct command_context_s *cmd_ctx, char *c return ERROR_COMMAND_SYNTAX_ERROR; } - p = get_flash_bank_by_num_noprobe(strtoul(args[0], NULL, 0)); + unsigned bank_nr; + COMMAND_PARSE_NUMBER(uint, args[0], bank_nr); + flash_bank_t *p = get_flash_bank_by_num_noprobe(bank_nr); if (p) { if ((retval = p->driver->probe(p)) == ERROR_OK) @@ -451,15 +453,16 @@ static int handle_flash_probe_command(struct command_context_s *cmd_ctx, char *c static int handle_flash_erase_check_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { - flash_bank_t *p; - int retval; - if (argc != 1) { return ERROR_COMMAND_SYNTAX_ERROR; } - p = get_flash_bank_by_num(strtoul(args[0], NULL, 0)); + flash_bank_t *p; + int retval = flash_command_get_bank_by_num(cmd_ctx, args[0], &p); + if (ERROR_OK != retval) + return retval; + if (p) { int j; @@ -509,12 +512,10 @@ static int handle_flash_erase_address_command(struct command_context_s *cmd_ctx, target_t *target = get_current_target(cmd_ctx); if (argc != 2) - { return ERROR_COMMAND_SYNTAX_ERROR; - } - address = strtoul(args[0], NULL, 0); - length = strtoul(args[1], NULL, 0); + COMMAND_PARSE_NUMBER(int, args[0], address); + COMMAND_PARSE_NUMBER(int, args[1], length); if (length <= 0) { command_print(cmd_ctx, "Length must be >0"); @@ -547,17 +548,17 @@ static int handle_flash_erase_address_command(struct command_context_s *cmd_ctx, static int handle_flash_protect_check_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { - flash_bank_t *p; - int retval; - if (argc != 1) - { return ERROR_COMMAND_SYNTAX_ERROR; - } - p = get_flash_bank_by_num(strtoul(args[0], NULL, 0)); + flash_bank_t *p; + int retval = flash_command_get_bank_by_num(cmd_ctx, args[0], &p); + if (ERROR_OK != retval) + return retval; + if (p) { + int retval; if ((retval = p->driver->protect_check(p)) == ERROR_OK) { command_print(cmd_ctx, "successfully checked protect state"); @@ -571,10 +572,6 @@ static int handle_flash_protect_check_command(struct command_context_s *cmd_ctx, command_print(cmd_ctx, "unknown error when checking protection state of flash bank '#%s' at 0x%8.8" PRIx32, args[0], p->base); } } - else - { - return ERROR_COMMAND_SYNTAX_ERROR; - } return ERROR_OK; } @@ -605,23 +602,19 @@ static int handle_flash_erase_command(struct command_context_s *cmd_ctx, uint32_t bank_nr; uint32_t first; uint32_t last; - int retval; - - if ((retval = parse_u32(args[0], &bank_nr)) != ERROR_OK) - return retval; + COMMAND_PARSE_NUMBER(u32, args[0], bank_nr); flash_bank_t *p = get_flash_bank_by_num(bank_nr); if (!p) return ERROR_OK; - if ((retval = parse_u32(args[1], &first)) != ERROR_OK) - return retval; + COMMAND_PARSE_NUMBER(u32, args[1], first); if (strcmp(args[2], "last") == 0) last = p->num_sectors - 1; else - if ((retval = parse_u32(args[2], &last)) != ERROR_OK) - return retval; + COMMAND_PARSE_NUMBER(u32, args[2], last); + int retval; if ((retval = flash_check_sector_parameters(cmd_ctx, first, last, p->num_sectors)) != ERROR_OK) return retval; @@ -655,23 +648,18 @@ static int handle_flash_protect_command(struct command_context_s *cmd_ctx, uint32_t bank_nr; uint32_t first; uint32_t last; - int retval; int set; - if ((retval = parse_u32(args[0], &bank_nr)) != ERROR_OK) - return retval; - + COMMAND_PARSE_NUMBER(u32, args[0], bank_nr); flash_bank_t *p = get_flash_bank_by_num(bank_nr); if (!p) return ERROR_OK; - if ((retval = parse_u32(args[1], &first)) != ERROR_OK) - return retval; + COMMAND_PARSE_NUMBER(u32, args[1], first); if (strcmp(args[2], "last") == 0) last = p->num_sectors - 1; else - if ((retval = parse_u32(args[2], &last)) != ERROR_OK) - return retval; + COMMAND_PARSE_NUMBER(u32, args[2], last); if (strcmp(args[3], "on") == 0) set = 1; @@ -680,6 +668,7 @@ static int handle_flash_protect_command(struct command_context_s *cmd_ctx, else return ERROR_COMMAND_SYNTAX_ERROR; + int retval; if ((retval = flash_check_sector_parameters(cmd_ctx, first, last, p->num_sectors)) != ERROR_OK) return retval; @@ -755,7 +744,7 @@ static int handle_flash_write_image_command(struct command_context_s *cmd_c... [truncated message content] |