X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Fflash%2Fnor%2Ftms470.c;h=b28aee434625ce86e692b18cf003a76cc6ef43ca;hp=7efcbd4b918620217fb9341f30715064aba052d4;hb=16b6b5e7a86353dbc0c4823fe3d772c0faca7c1c;hpb=d9dc604a4d790f557a7ba502babdabffa27eaa17 diff --git a/src/flash/nor/tms470.c b/src/flash/nor/tms470.c index 7efcbd4b91..b28aee4346 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,7 +28,21 @@ Internal Support, Helpers ---------------------------------------------------------------------- */ -const struct flash_sector TMS470R1A256_SECTORS[] = { +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}, {0x00004000, 0x00002000, -1, -1}, @@ -49,7 +62,7 @@ const struct flash_sector TMS470R1A256_SECTORS[] = { #define TMS470R1A256_NUM_SECTORS \ ARRAY_SIZE(TMS470R1A256_SECTORS) -const struct flash_sector TMS470R1A288_BANK0_SECTORS[] = { +static const struct flash_sector TMS470R1A288_BANK0_SECTORS[] = { {0x00000000, 0x00002000, -1, -1}, {0x00002000, 0x00002000, -1, -1}, {0x00004000, 0x00002000, -1, -1}, @@ -59,7 +72,7 @@ const struct flash_sector TMS470R1A288_BANK0_SECTORS[] = { #define TMS470R1A288_BANK0_NUM_SECTORS \ ARRAY_SIZE(TMS470R1A288_BANK0_SECTORS) -const struct flash_sector TMS470R1A288_BANK1_SECTORS[] = { +static const struct flash_sector TMS470R1A288_BANK1_SECTORS[] = { {0x00040000, 0x00010000, -1, -1}, {0x00050000, 0x00010000, -1, -1}, {0x00060000, 0x00010000, -1, -1}, @@ -69,7 +82,7 @@ const struct flash_sector TMS470R1A288_BANK1_SECTORS[] = { #define TMS470R1A288_BANK1_NUM_SECTORS \ ARRAY_SIZE(TMS470R1A288_BANK1_SECTORS) -const struct flash_sector TMS470R1A384_BANK0_SECTORS[] = { +static const struct flash_sector TMS470R1A384_BANK0_SECTORS[] = { {0x00000000, 0x00002000, -1, -1}, {0x00002000, 0x00002000, -1, -1}, {0x00004000, 0x00004000, -1, -1}, @@ -85,7 +98,7 @@ const struct flash_sector TMS470R1A384_BANK0_SECTORS[] = { #define TMS470R1A384_BANK0_NUM_SECTORS \ ARRAY_SIZE(TMS470R1A384_BANK0_SECTORS) -const struct flash_sector TMS470R1A384_BANK1_SECTORS[] = { +static const struct flash_sector TMS470R1A384_BANK1_SECTORS[] = { {0x00020000, 0x00008000, -1, -1}, {0x00028000, 0x00008000, -1, -1}, {0x00030000, 0x00008000, -1, -1}, @@ -95,7 +108,7 @@ const struct flash_sector TMS470R1A384_BANK1_SECTORS[] = { #define TMS470R1A384_BANK1_NUM_SECTORS \ ARRAY_SIZE(TMS470R1A384_BANK1_SECTORS) -const struct flash_sector TMS470R1A384_BANK2_SECTORS[] = { +static const struct flash_sector TMS470R1A384_BANK2_SECTORS[] = { {0x00040000, 0x00008000, -1, -1}, {0x00048000, 0x00008000, -1, -1}, {0x00050000, 0x00008000, -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) { @@ -667,7 +683,7 @@ static int tms470_flash_initialize_internal_state_machine(struct flash_bank *ban /* ---------------------------------------------------------------------- */ -int tms470_flash_status(struct flash_bank *bank) +static int tms470_flash_status(struct flash_bank *bank) { struct target *target = bank->target; int result = ERROR_OK; @@ -821,19 +837,22 @@ static int tms470_erase_sector(struct flash_bank *bank, int sector) static const struct command_registration tms470_any_command_handlers[] = { { .name = "flash_keyset", - .handler = &tms470_handle_flash_keyset_command, + .usage = " ", + .handler = tms470_handle_flash_keyset_command, .mode = COMMAND_ANY, .help = "tms470 flash_keyset ", }, { .name = "osc_megahertz", - .handler = &tms470_handle_osc_megahertz_command, + .usage = "", + .handler = tms470_handle_osc_megahertz_command, .mode = COMMAND_ANY, .help = "tms470 osc_megahertz ", }, { .name = "plldis", - .handler = &tms470_handle_plldis_command, + .usage = "<0 | 1>", + .handler = tms470_handle_plldis_command, .mode = COMMAND_ANY, .help = "tms470 plldis <0/1>", }, @@ -1209,7 +1228,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 +1244,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; } @@ -1258,15 +1275,16 @@ FLASH_BANK_COMMAND_HANDLER(tms470_flash_bank_command) } struct flash_driver tms470_flash = { - .name = "tms470", - .commands = tms470_command_handlers, - .flash_bank_command = &tms470_flash_bank_command, - .erase = &tms470_erase, - .protect = &tms470_protect, - .write = &tms470_write, - .probe = &tms470_probe, - .auto_probe = &tms470_auto_probe, - .erase_check = &tms470_erase_check, - .protect_check = &tms470_protect_check, - .info = &tms470_info, - }; + .name = "tms470", + .commands = tms470_command_handlers, + .flash_bank_command = tms470_flash_bank_command, + .erase = tms470_erase, + .protect = tms470_protect, + .write = tms470_write, + .read = default_flash_read, + .probe = tms470_probe, + .auto_probe = tms470_auto_probe, + .erase_check = tms470_erase_check, + .protect_check = tms470_protect_check, + .info = get_tms470_info, +};