X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Fflash%2Fflash.c;h=b21838cfaaad3086d196de71bd8e52f6fb838fb5;hp=1e5ac9a355c909de777f8e3aacc585cc19ee3be2;hb=3cb0b56005059314c8d09d2f8574042a4352dab4;hpb=37201c019ffc6b806aa61bf2eb8fc18c58083f02 diff --git a/src/flash/flash.c b/src/flash/flash.c index 1e5ac9a355..b21838cfaa 100644 --- a/src/flash/flash.c +++ b/src/flash/flash.c @@ -29,8 +29,8 @@ #include "flash.h" #include "common.h" -#include "image.h" -#include "time_support.h" +#include +#include static int flash_write_unlock(struct target *target, struct image *image, uint32_t *written, int erase, bool unlock); @@ -120,39 +120,6 @@ int flash_driver_protect(struct flash_bank *bank, int set, int first, int last) return retval; } -static int jim_flash_banks(Jim_Interp *interp, int argc, Jim_Obj *const *argv) -{ - struct flash_bank *p; - - if (argc != 1) { - Jim_WrongNumArgs(interp, 1, argv, "no arguments to flash_banks command"); - return JIM_ERR; - } - - Jim_Obj *list = Jim_NewListObj(interp, NULL, 0); - for (p = flash_banks; p; p = p->next) - { - Jim_Obj *elem = Jim_NewListObj(interp, NULL, 0); - - Jim_ListAppendElement(interp, elem, Jim_NewStringObj(interp, "name", -1)); - Jim_ListAppendElement(interp, elem, Jim_NewStringObj(interp, p->driver->name, -1)); - Jim_ListAppendElement(interp, elem, Jim_NewStringObj(interp, "base", -1)); - Jim_ListAppendElement(interp, elem, Jim_NewIntObj(interp, p->base)); - Jim_ListAppendElement(interp, elem, Jim_NewStringObj(interp, "size", -1)); - Jim_ListAppendElement(interp, elem, Jim_NewIntObj(interp, p->size)); - Jim_ListAppendElement(interp, elem, Jim_NewStringObj(interp, "bus_width", -1)); - Jim_ListAppendElement(interp, elem, Jim_NewIntObj(interp, p->bus_width)); - Jim_ListAppendElement(interp, elem, Jim_NewStringObj(interp, "chip_width", -1)); - Jim_ListAppendElement(interp, elem, Jim_NewIntObj(interp, p->chip_width)); - - Jim_ListAppendElement(interp, list, elem); - } - - Jim_SetResult(interp, list); - - return JIM_OK; -} - struct flash_bank *get_flash_bank_by_num_noprobe(int num) { struct flash_bank *p; @@ -238,92 +205,6 @@ COMMAND_HELPER(flash_command_get_bank, unsigned name_index, } -COMMAND_HANDLER(handle_flash_bank_command) -{ - if (CMD_ARGC < 7) - { - LOG_ERROR("usage: flash bank " - " "); - return ERROR_COMMAND_SYNTAX_ERROR; - } - // save bank name and advance arguments for compatibility - const char *bank_name = *CMD_ARGV++; - CMD_ARGC--; - - struct target *target; - if ((target = get_target(CMD_ARGV[5])) == NULL) - { - LOG_ERROR("target '%s' not defined", CMD_ARGV[5]); - return ERROR_FAIL; - } - - const char *driver_name = CMD_ARGV[0]; - for (unsigned i = 0; flash_drivers[i]; i++) - { - if (strcmp(driver_name, flash_drivers[i]->name) != 0) - continue; - - /* register flash specific commands */ - if (NULL != flash_drivers[i]->commands) - { - int retval = register_commands(CMD_CTX, NULL, - flash_drivers[i]->commands); - if (ERROR_OK != retval) - { - LOG_ERROR("couldn't register '%s' commands", - driver_name); - return ERROR_FAIL; - } - } - - struct flash_bank *p, *c; - c = malloc(sizeof(struct flash_bank)); - c->name = strdup(bank_name); - c->target = target; - c->driver = flash_drivers[i]; - c->driver_priv = NULL; - COMMAND_PARSE_NUMBER(u32, CMD_ARGV[1], c->base); - COMMAND_PARSE_NUMBER(u32, CMD_ARGV[2], c->size); - COMMAND_PARSE_NUMBER(int, CMD_ARGV[3], c->chip_width); - COMMAND_PARSE_NUMBER(int, CMD_ARGV[4], c->bus_width); - c->num_sectors = 0; - c->sectors = NULL; - c->next = NULL; - - int retval; - retval = CALL_COMMAND_HANDLER(flash_drivers[i]->flash_bank_command, c); - if (ERROR_OK != retval) - { - LOG_ERROR("'%s' driver rejected flash bank at 0x%8.8" PRIx32, - driver_name, c->base); - free(c); - return retval; - } - - /* put flash bank in linked list */ - if (flash_banks) - { - int bank_num = 0; - /* find last flash bank */ - for (p = flash_banks; p && p->next; p = p->next) bank_num++; - if (p) - p->next = c; - c->bank_number = bank_num + 1; - } - else - { - flash_banks = c; - c->bank_number = 0; - } - - return ERROR_OK; - } - - /* no matching flash driver found */ - LOG_ERROR("flash driver '%s' not found", driver_name); - return ERROR_FAIL; -} - COMMAND_HANDLER(handle_flash_info_command) { struct flash_bank *p; @@ -1375,59 +1256,3 @@ int flash_init_drivers(struct command_context *cmd_ctx) return register_commands(cmd_ctx, parent, flash_exec_command_handlers); } -COMMAND_HANDLER(handle_flash_init_command) -{ - if (CMD_ARGC != 0) - return ERROR_COMMAND_SYNTAX_ERROR; - - static bool flash_initialized = false; - if (flash_initialized) - { - LOG_INFO("'flash init' has already been called"); - return ERROR_OK; - } - flash_initialized = true; - - LOG_DEBUG("Initializing flash devices..."); - return flash_init_drivers(CMD_CTX); -} - -static const struct command_registration flash_config_command_handlers[] = { - { - .name = "bank", - .handler = &handle_flash_bank_command, - .mode = COMMAND_CONFIG, - .usage = " " - " " - "[driver_options ...]", - .help = "Define a new bank with the given name, " - "using the specified NOR flash driver.", - }, - { - .name = "init", - .mode = COMMAND_CONFIG, - .handler = &handle_flash_init_command, - .help = "initialize flash devices", - }, - { - .name = "banks", - .mode = COMMAND_ANY, - .jim_handler = &jim_flash_banks, - .help = "return information about the flash banks", - }, - COMMAND_REGISTRATION_DONE -}; -static const struct command_registration flash_command_handlers[] = { - { - .name = "flash", - .mode = COMMAND_ANY, - .help = "NOR flash command group", - .chain = flash_config_command_handlers, - }, - COMMAND_REGISTRATION_DONE -}; - -int flash_register_commands(struct command_context *cmd_ctx) -{ - return register_commands(cmd_ctx, NULL, flash_command_handlers); -}