X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Fflash%2Fnand%2Ftcl.c;h=c52c347fd59d7b1df61fa6c6a89967199b6beeec;hp=70584fff52c35b439da849b42fe78c709e79bff2;hb=f50ca7c184bf1c02ed6102cfffcc2ca7b4ef4116;hpb=21a1c6ec33f87b6285e47ad6597cd49ad89a9485;ds=sidebyside diff --git a/src/flash/nand/tcl.c b/src/flash/nand/tcl.c index 70584fff52..c52c347fd5 100644 --- a/src/flash/nand/tcl.c +++ b/src/flash/nand/tcl.c @@ -27,6 +27,7 @@ #include "core.h" #include "imp.h" #include "fileio.h" +#include // to be removed extern struct nand_device *nand_devices; @@ -176,12 +177,12 @@ COMMAND_HANDLER(handle_nand_erase_command) COMMAND_PARSE_NUMBER(ulong, CMD_ARGV[1], offset); if ((offset % p->erase_size) != 0 || offset >= size) - return ERROR_INVALID_ARGUMENTS; + return ERROR_COMMAND_SYNTAX_ERROR; COMMAND_PARSE_NUMBER(ulong, CMD_ARGV[2], length); if ((length == 0) || (length % p->erase_size) != 0 || (length + offset) > size) - return ERROR_INVALID_ARGUMENTS; + return ERROR_COMMAND_SYNTAX_ERROR; offset /= p->erase_size; length /= p->erase_size; @@ -195,7 +196,7 @@ COMMAND_HANDLER(handle_nand_erase_command) { command_print(CMD_CTX, "erased blocks %lu to %lu " "on NAND flash device #%s '%s'", - offset, offset + length, + offset, offset + length - 1, CMD_ARGV[0], p->device->name); } @@ -225,12 +226,12 @@ COMMAND_HANDLER(handle_nand_check_bad_blocks_command) COMMAND_PARSE_NUMBER(ulong, CMD_ARGV[1], offset); if (offset % p->erase_size) - return ERROR_INVALID_ARGUMENTS; + return ERROR_COMMAND_SYNTAX_ERROR; offset /= p->erase_size; COMMAND_PARSE_NUMBER(ulong, CMD_ARGV[2], length); if (length % p->erase_size) - return ERROR_INVALID_ARGUMENTS; + return ERROR_COMMAND_SYNTAX_ERROR; length -= 1; length /= p->erase_size; @@ -537,16 +538,36 @@ COMMAND_HANDLER(handle_nand_list_drivers) static COMMAND_HELPER(create_nand_device, const char *bank_name, struct nand_flash_controller *controller) { + struct nand_device *c; + struct target *target; + int retval; + + if (CMD_ARGC < 2) + { + return ERROR_COMMAND_SYNTAX_ERROR; + } + target = get_target(CMD_ARGV[1]); + if (!target) { + LOG_ERROR("invalid target %s", CMD_ARGV[1]); + return ERROR_COMMAND_ARGUMENT_INVALID; + } + if (NULL != controller->commands) { - int retval = register_commands(CMD_CTX, NULL, + retval = register_commands(CMD_CTX, NULL, controller->commands); if (ERROR_OK != retval) return retval; } - struct nand_device *c = malloc(sizeof(struct nand_device)); + c = malloc(sizeof(struct nand_device)); + if (c == NULL) + { + LOG_ERROR("End of memory"); + return ERROR_FAIL; + } c->name = strdup(bank_name); + c->target = target; c->controller = controller; c->controller_priv = NULL; c->manufacturer = NULL; @@ -557,14 +578,19 @@ static COMMAND_HELPER(create_nand_device, const char *bank_name, c->use_raw = 0; c->next = NULL; - int retval = CALL_COMMAND_HANDLER(controller->nand_device_command, c); + retval = CALL_COMMAND_HANDLER(controller->nand_device_command, c); if (ERROR_OK != retval) { - LOG_ERROR("'%s' driver rejected nand flash", controller->name); + LOG_ERROR("'%s' driver rejected nand flash. Usage: %s", + controller->name, + controller->usage); free(c); - return ERROR_OK; + return retval; } + if (controller->usage == NULL) + LOG_DEBUG("'%s' driver usage field missing", controller->name); + nand_device_add(c); return ERROR_OK; @@ -574,8 +600,7 @@ COMMAND_HANDLER(handle_nand_device_command) { if (CMD_ARGC < 2) { - LOG_ERROR("incomplete nand device configuration"); - return ERROR_FLASH_BANK_INVALID; + return ERROR_COMMAND_SYNTAX_ERROR; } // save name and increment (for compatibility) with drivers @@ -606,12 +631,14 @@ static const struct command_registration nand_config_command_handlers[] = { .handler = &handle_nand_list_drivers, .mode = COMMAND_ANY, .help = "lists available NAND drivers", + .usage = "" }, { .name = "init", .mode = COMMAND_CONFIG, .handler = &handle_nand_init_command, .help = "initialize NAND devices", + .usage = "" }, COMMAND_REGISTRATION_DONE }; @@ -620,6 +647,7 @@ static const struct command_registration nand_command_handlers[] = { .name = "nand", .mode = COMMAND_ANY, .help = "NAND flash command group", + .usage = "", .chain = nand_config_command_handlers, }, COMMAND_REGISTRATION_DONE