X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Fflash%2Fnand.c;h=c1be276d1e6b2894a966a33cf9b600213dbc2914;hp=81a04f7a6a90850128e03994689fa3c05e9e794b;hb=ca594adb5a71f2bf60c1380172b8e61b075d9479;hpb=fb50efc6e712f413d109c3d77683d0358a557ed4 diff --git a/src/flash/nand.c b/src/flash/nand.c index 81a04f7a6a..c1be276d1e 100644 --- a/src/flash/nand.c +++ b/src/flash/nand.c @@ -28,16 +28,6 @@ #include "time_support.h" #include "fileio.h" -static int handle_nand_list_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc); -static int handle_nand_probe_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc); -static int handle_nand_check_bad_blocks_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc); -static int handle_nand_info_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc); -static int handle_nand_write_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc); -static int handle_nand_dump_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc); -static int handle_nand_erase_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc); - -static int handle_nand_raw_access_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc); - static int nand_read_page(struct nand_device_s *device, uint32_t page, uint8_t *data, uint32_t data_size, uint8_t *oob, uint32_t oob_size); //static int nand_read_plain(struct nand_device_s *device, uint32_t address, uint8_t *data, uint32_t data_size); @@ -297,33 +287,6 @@ int nand_register_commands(struct command_context_s *cmd_ctx) return ERROR_OK; } -int nand_init(struct command_context_s *cmd_ctx) -{ - if (nand_devices) - { - register_command(cmd_ctx, nand_cmd, "list", handle_nand_list_command, COMMAND_EXEC, - "list configured NAND flash devices"); - register_command(cmd_ctx, nand_cmd, "info", handle_nand_info_command, COMMAND_EXEC, - "print info about NAND flash device "); - register_command(cmd_ctx, nand_cmd, "probe", handle_nand_probe_command, COMMAND_EXEC, - "identify NAND flash device "); - register_command(cmd_ctx, nand_cmd, "check_bad_blocks", handle_nand_check_bad_blocks_command, COMMAND_EXEC, - "check NAND flash device for bad blocks [ ]"); - register_command(cmd_ctx, nand_cmd, "erase", - handle_nand_erase_command, COMMAND_EXEC, - "erase blocks on NAND flash device [ ]"); - register_command(cmd_ctx, nand_cmd, "dump", handle_nand_dump_command, COMMAND_EXEC, - "dump from NAND flash device " - " [oob_raw | oob_only]"); - register_command(cmd_ctx, nand_cmd, "write", handle_nand_write_command, COMMAND_EXEC, - "write to NAND flash device [oob_raw | oob_only | oob_softecc | oob_softecc_kw]"); - register_command(cmd_ctx, nand_cmd, "raw_access", handle_nand_raw_access_command, COMMAND_EXEC, - "raw access to NAND flash device ['enable'|'disable']"); - } - - return ERROR_OK; -} - nand_device_t *get_nand_device_by_num(int num) { nand_device_t *p; @@ -341,7 +304,7 @@ nand_device_t *get_nand_device_by_num(int num) } int nand_command_get_device_by_num(struct command_context_s *cmd_ctx, - char *str, nand_device_t **device) + const char *str, nand_device_t **device) { unsigned num; COMMAND_PARSE_NUMBER(uint, str, num); @@ -1330,8 +1293,6 @@ static int handle_nand_write_command(struct command_context_s *cmd_ctx, char *cm fileio_t fileio; - duration_t duration; - char *duration_text; if (argc < 3) { @@ -1372,7 +1333,8 @@ static int handle_nand_write_command(struct command_context_s *cmd_ctx, char *cm } } - duration_start_measure(&duration); + struct duration bench; + duration_start(&bench); if (fileio_open(&fileio, args[1], FILEIO_READ, FILEIO_BINARY) != ERROR_OK) { @@ -1478,11 +1440,13 @@ static int handle_nand_write_command(struct command_context_s *cmd_ctx, char *cm free(page); oob = NULL; page = NULL; - duration_stop_measure(&duration, &duration_text); - command_print(cmd_ctx, "wrote file %s to NAND flash %s up to offset 0x%8.8" PRIx32 " in %s", - args[1], args[0], offset, duration_text); - free(duration_text); - duration_text = NULL; + if (duration_measure(&bench) == ERROR_OK) + { + command_print(cmd_ctx, "wrote file %s to NAND flash %s " + "up to offset 0x%8.8" PRIx32 " in %fs (%0.3f kb/s)", + args[1], args[0], offset, duration_elapsed(&bench), + duration_kbps(&bench, fileio.size)); + } return ERROR_OK; } @@ -1506,8 +1470,6 @@ static int handle_nand_dump_command(struct command_context_s *cmd_ctx, char *cmd } fileio_t fileio; - duration_t duration; - char *duration_text; uint8_t *page = NULL; uint32_t page_size = 0; @@ -1560,7 +1522,8 @@ static int handle_nand_dump_command(struct command_context_s *cmd_ctx, char *cmd return ERROR_OK; } - duration_start_measure(&duration); + struct duration bench; + duration_start(&bench); while (size > 0) { @@ -1596,10 +1559,12 @@ static int handle_nand_dump_command(struct command_context_s *cmd_ctx, char *cmd oob = NULL; fileio_close(&fileio); - duration_stop_measure(&duration, &duration_text); - command_print(cmd_ctx, "dumped %lld byte in %s", fileio.size, duration_text); - free(duration_text); - duration_text = NULL; + if (duration_measure(&bench) == ERROR_OK) + { + command_print(cmd_ctx, "dumped %lld byte in %fs (%0.3f kb/s)", + fileio.size, duration_elapsed(&bench), + duration_kbps(&bench, fileio.size)); + } return ERROR_OK; } @@ -1637,3 +1602,40 @@ static int handle_nand_raw_access_command(struct command_context_s *cmd_ctx, cha return ERROR_OK; } + +int nand_init(struct command_context_s *cmd_ctx) +{ + if (!nand_devices) + return ERROR_OK; + + register_command(cmd_ctx, nand_cmd, "list", + handle_nand_list_command, COMMAND_EXEC, + "list configured NAND flash devices"); + register_command(cmd_ctx, nand_cmd, "info", + handle_nand_info_command, COMMAND_EXEC, + "print info about NAND flash device "); + register_command(cmd_ctx, nand_cmd, "probe", + handle_nand_probe_command, COMMAND_EXEC, + "identify NAND flash device "); + + register_command(cmd_ctx, nand_cmd, "check_bad_blocks", + handle_nand_check_bad_blocks_command, COMMAND_EXEC, + "check NAND flash device for bad blocks [ ]"); + register_command(cmd_ctx, nand_cmd, "erase", + handle_nand_erase_command, COMMAND_EXEC, + "erase blocks on NAND flash device [ ]"); + register_command(cmd_ctx, nand_cmd, "dump", + handle_nand_dump_command, COMMAND_EXEC, + "dump from NAND flash device " + " [oob_raw | oob_only]"); + register_command(cmd_ctx, nand_cmd, "write", + handle_nand_write_command, COMMAND_EXEC, + "write to NAND flash device " + "[oob_raw | oob_only | oob_softecc | oob_softecc_kw]"); + + register_command(cmd_ctx, nand_cmd, "raw_access", + handle_nand_raw_access_command, COMMAND_EXEC, + "raw access to NAND flash device ['enable'|'disable']"); + + return ERROR_OK; +}