X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Fflash%2Fnor%2Ftms470.c;h=393ca76e5a9b7688cff878c75ba8618b8dd830bb;hp=c1681f1971ddc65f7be89be9e4e3b0fc6708bf80;hb=2a34cc8eb6a8431ecebad1279d19ce919978a778;hpb=bc8be110ff314cab0e09792a05b6871672c18302 diff --git a/src/flash/nor/tms470.c b/src/flash/nor/tms470.c index c1681f1971..393ca76e5a 100644 --- a/src/flash/nor/tms470.c +++ b/src/flash/nor/tms470.c @@ -21,7 +21,6 @@ #include "config.h" #endif -#include "tms470.h" #include "imp.h" @@ -29,6 +28,20 @@ Internal Support, Helpers ---------------------------------------------------------------------- */ +struct tms470_flash_bank +{ + unsigned ordinal; + + /* device identification register */ + uint32_t device_ident_reg; + uint32_t silicon_version; + uint32_t technology_family; + uint32_t rom_flash; + uint32_t part_number; + const char * part_name; + +}; + static const struct flash_sector TMS470R1A256_SECTORS[] = { {0x00000000, 0x00002000, -1, -1}, {0x00002000, 0x00002000, -1, -1}, @@ -116,7 +129,7 @@ static int tms470_read_part_info(struct flash_bank *bank) uint32_t technology_family; uint32_t rom_flash; uint32_t part_number; - char *part_name; + const char *part_name; /* we shall not rely on the caller in this test, this function allocates memory, thus and executing the code more than once may cause memory leak */ @@ -139,6 +152,12 @@ static int tms470_read_part_info(struct flash_bank *bank) rom_flash = (device_ident_reg >> 10) & 1; part_number = (device_ident_reg >> 3) & 0x7f; + if (bank->sectors) + { + free(bank->sectors); + bank->sectors = NULL; + } + /* * If the part number is known, determine if the flash bank is valid * based on the base address being within the known flash bank @@ -294,8 +313,7 @@ COMMAND_HANDLER(tms470_handle_flash_keyset_command) { if (CMD_ARGC > 4) { - command_print(CMD_CTX, "tms470 flash_keyset "); - return ERROR_INVALID_ARGUMENTS; + return ERROR_COMMAND_SYNTAX_ERROR; } else if (CMD_ARGC == 4) { @@ -309,7 +327,7 @@ COMMAND_HANDLER(tms470_handle_flash_keyset_command) { command_print(CMD_CTX, "could not process flash key %s", CMD_ARGV[i]); LOG_ERROR("could not process flash key %s", CMD_ARGV[i]); - return ERROR_INVALID_ARGUMENTS; + return ERROR_COMMAND_SYNTAX_ERROR; } } @@ -318,7 +336,7 @@ COMMAND_HANDLER(tms470_handle_flash_keyset_command) else if (CMD_ARGC != 0) { command_print(CMD_CTX, "tms470 flash_keyset "); - return ERROR_INVALID_ARGUMENTS; + return ERROR_COMMAND_SYNTAX_ERROR; } if (keysSet) @@ -358,8 +376,7 @@ COMMAND_HANDLER(tms470_handle_osc_megahertz_command) { if (CMD_ARGC > 1) { - command_print(CMD_CTX, "tms470 osc_megahertz "); - return ERROR_INVALID_ARGUMENTS; + return ERROR_COMMAND_SYNTAX_ERROR; } else if (CMD_ARGC == 1) { @@ -371,7 +388,7 @@ COMMAND_HANDLER(tms470_handle_osc_megahertz_command) LOG_ERROR("osc_megahertz must be positive and non-zero!"); command_print(CMD_CTX, "osc_megahertz must be positive and non-zero!"); oscMHz = 12; - return ERROR_INVALID_ARGUMENTS; + return ERROR_COMMAND_SYNTAX_ERROR; } command_print(CMD_CTX, "osc_megahertz=%d", oscMHz); @@ -387,8 +404,7 @@ COMMAND_HANDLER(tms470_handle_plldis_command) { if (CMD_ARGC > 1) { - command_print(CMD_CTX, "tms470 plldis <0 | 1>"); - return ERROR_INVALID_ARGUMENTS; + return ERROR_COMMAND_SYNTAX_ERROR; } else if (CMD_ARGC == 1) { @@ -821,18 +837,21 @@ static int tms470_erase_sector(struct flash_bank *bank, int sector) static const struct command_registration tms470_any_command_handlers[] = { { .name = "flash_keyset", + .usage = " ", .handler = tms470_handle_flash_keyset_command, .mode = COMMAND_ANY, .help = "tms470 flash_keyset ", }, { .name = "osc_megahertz", + .usage = "", .handler = tms470_handle_osc_megahertz_command, .mode = COMMAND_ANY, .help = "tms470 osc_megahertz ", }, { .name = "plldis", + .usage = "<0 | 1>", .handler = tms470_handle_plldis_command, .mode = COMMAND_ANY, .help = "tms470 plldis <0/1>", @@ -844,6 +863,7 @@ static const struct command_registration tms470_command_handlers[] = { .name = "tms470", .mode = COMMAND_ANY, .help = "TI tms470 flash command group", + .usage = "", .chain = tms470_any_command_handlers, }, COMMAND_REGISTRATION_DONE @@ -1209,7 +1229,7 @@ static int tms470_protect_check(struct flash_bank *bank) /* ---------------------------------------------------------------------- */ -static int tms470_info(struct flash_bank *bank, char *buf, int buf_size) +static int get_tms470_info(struct flash_bank *bank, char *buf, int buf_size) { int used = 0; struct tms470_flash_bank *tms470_info = bank->driver_priv; @@ -1225,13 +1245,11 @@ static int tms470_info(struct flash_bank *bank, char *buf, int buf_size) return ERROR_FLASH_OPERATION_FAILED; } - used += snprintf(buf, buf_size, "\ntms470 information: Chip is %s\n", tms470_info->part_name); + used = snprintf(buf, buf_size, "\ntms470 information: Chip is %s\n", tms470_info->part_name); buf += used; buf_size -= used; - used += snprintf(buf, buf_size, "Flash protection level 2 is %s\n", tms470_check_flash_unlocked(bank->target) == ERROR_OK ? "disabled" : "enabled"); - buf += used; - buf_size -= used; + snprintf(buf, buf_size, "Flash protection level 2 is %s\n", tms470_check_flash_unlocked(bank->target) == ERROR_OK ? "disabled" : "enabled"); return ERROR_OK; } @@ -1269,5 +1287,5 @@ struct flash_driver tms470_flash = { .auto_probe = tms470_auto_probe, .erase_check = tms470_erase_check, .protect_check = tms470_protect_check, - .info = tms470_info, + .info = get_tms470_info, };