X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Fflash%2Fnand%2Ftcl.c;h=e4bfb4d1c9f21c8c89d96a50010041a3c2ce4ae0;hb=583c9b31ab67e302a9ce288c556d4288be61e2e6;hp=a54f8ea8fe6ddffdf5734f7cc6dc126a841b756e;hpb=3a693ef526575633cc350a69aa1a5d1f08e64c46;p=openocd.git diff --git a/src/flash/nand/tcl.c b/src/flash/nand/tcl.c index a54f8ea8fe..e4bfb4d1c9 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; @@ -357,6 +358,7 @@ COMMAND_HANDLER(handle_nand_verify_command) COMMAND_HANDLER(handle_nand_dump_command) { + int filesize; struct nand_device *nand = NULL; struct nand_fileio_state s; int retval = CALL_COMMAND_HANDLER(nand_fileio_parse_args, @@ -386,11 +388,15 @@ COMMAND_HANDLER(handle_nand_dump_command) s.address += nand->page_size; } + retval = fileio_size(&s.fileio, &filesize); + if (retval != ERROR_OK) + return retval; + if (nand_fileio_finish(&s) == ERROR_OK) { command_print(CMD_CTX, "dumped %ld bytes in %fs (%0.3f KiB/s)", - (long)fileio_size(&s.fileio), duration_elapsed(&s.bench), - duration_kbps(&s.bench, fileio_size(&s.fileio))); + (long)filesize, duration_elapsed(&s.bench), + duration_kbps(&s.bench, filesize)); } return ERROR_OK; } @@ -532,16 +538,37 @@ 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) + { + LOG_ERROR("missing target"); + return ERROR_COMMAND_ARGUMENT_INVALID; + } + 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; @@ -552,7 +579,7 @@ 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); @@ -567,7 +594,7 @@ static COMMAND_HELPER(create_nand_device, const char *bank_name, COMMAND_HANDLER(handle_nand_device_command) { - if (CMD_ARGC < 1) + if (CMD_ARGC < 2) { LOG_ERROR("incomplete nand device configuration"); return ERROR_FLASH_BANK_INVALID;