X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Fflash%2Fnor%2Ftcl.c;h=cf40a81a75e4b49145d3d7f44be6eb02af9a6b1c;hp=b7e80df25d9802b0e93f44cec079208172744728;hb=73566405b6e105b0a8b7f21db48331926bec97ad;hpb=d91941d5a01ca0b9d43571edc03ba18741076cca diff --git a/src/flash/nor/tcl.c b/src/flash/nor/tcl.c index b7e80df25d..cf40a81a75 100644 --- a/src/flash/nor/tcl.c +++ b/src/flash/nor/tcl.c @@ -203,14 +203,29 @@ COMMAND_HANDLER(handle_flash_erase_address_command) int retval; int address; int length; - + bool do_pad = false; struct target *target = get_current_target(CMD_CTX); - if (CMD_ARGC != 2) + switch (CMD_ARGC) { + case 3: + /* Optionally pad out the address range to block/sector + * boundaries. We can't know if there's data in that part + * of the flash; only do padding if we're told to. + */ + if (strcmp("pad", CMD_ARGV[0]) != 0) + return ERROR_COMMAND_SYNTAX_ERROR; + do_pad = true; + CMD_ARGC--; + CMD_ARGV++; + /* FALL THROUGH */ + case 2: + COMMAND_PARSE_NUMBER(int, CMD_ARGV[0], address); + COMMAND_PARSE_NUMBER(int, CMD_ARGV[1], length); + break; + default: return ERROR_COMMAND_SYNTAX_ERROR; + } - COMMAND_PARSE_NUMBER(int, CMD_ARGV[0], address); - COMMAND_PARSE_NUMBER(int, CMD_ARGV[1], length); if (length <= 0) { command_print(CMD_CTX, "Length must be >0"); @@ -229,7 +244,7 @@ COMMAND_HANDLER(handle_flash_erase_address_command) struct duration bench; duration_start(&bench); - retval = flash_erase_address_range(target, address, length); + retval = flash_erase_address_range(target, do_pad, address, length); if ((ERROR_OK == retval) && (duration_measure(&bench) == ERROR_OK)) { @@ -698,9 +713,12 @@ static const struct command_registration flash_exec_command_handlers[] = { .name = "erase_address", .handler = handle_flash_erase_address_command, .mode = COMMAND_EXEC, - .usage = "address length", - .help = "Erase flash blocks starting at address " - "and continuing for length bytes.", + .usage = "['pad'] address length", + .help = "Erase flash sectors starting at address and " + "continuing for length bytes. If 'pad' is specified, " + "data outside that range may also be erased: the start " + "address may be decreased, and length increased, so " + "that all of the first and last sectors are erased.", }, { .name = "fillw",