flash: add padded_value cmd

This adds support for setting the default value used when padding image
sections. Previously 0xff was used but some targets have an erased value
of 0x00.

Change-Id: If3df6fea3abf95b09daa3ff7be362acf991070ce
Signed-off-by: Spencer Oliver <spen@spen-soft.co.uk>
Reviewed-on: http://openocd.zylin.com/1635
Tested-by: jenkins
__archive__
Spencer Oliver 2013-09-19 12:07:06 +01:00
parent 53ca124a75
commit 1f3ca0b5b8
5 changed files with 38 additions and 2 deletions

View File

@ -4862,6 +4862,12 @@ specifies "to the end of the flash bank".
The @var{num} parameter is a value shown by @command{flash banks}.
@end deffn
@deffn Command {flash padded_value} num value
Sets the default value used for padding any image sections, This should
normally match the flash bank erased value. If not specified by this
comamnd or the flash driver then it defaults to 0xff.
@end deffn
@anchor{program}
@deffn Command {program} filename [verify] [reset] [offset]
This is a helper script that simplifies using OpenOCD as a standalone

View File

@ -710,7 +710,7 @@ int flash_write_unlock(struct target *target, struct image *image,
/* see if we need to pad the section */
while (padding[section]--)
(buffer + buffer_size)[size_read++] = 0xff;
(buffer + buffer_size)[size_read++] = c->default_padded_value;
buffer_size += size_read;
section_offset += size_read;

View File

@ -87,6 +87,10 @@ struct flash_bank {
int chip_width; /**< Width of the chip in bytes (1,2,4 bytes) */
int bus_width; /**< Maximum bus width, in bytes (1,2,4 bytes) */
/** Default padded value used, normally this matches the flash
* erased value. Defaults to 0xFF. */
uint8_t default_padded_value;
/**
* The number of sectors on this chip. This value will
* be set intially to 0, and the flash driver must set this to

View File

@ -605,6 +605,24 @@ void flash_set_dirty(void)
}
}
COMMAND_HANDLER(handle_flash_padded_value_command)
{
if (CMD_ARGC != 2)
return ERROR_COMMAND_SYNTAX_ERROR;
struct flash_bank *p;
int retval = CALL_COMMAND_HANDLER(flash_command_get_bank, 0, &p);
if (ERROR_OK != retval)
return retval;
COMMAND_PARSE_NUMBER(u8, CMD_ARGV[1], p->default_padded_value);
command_print(CMD_CTX, "Default padded value set to 0x%" PRIx8 " for flash bank %u", \
p->default_padded_value, p->bank_number);
return retval;
}
static const struct command_registration flash_exec_command_handlers[] = {
{
.name = "probe",
@ -700,6 +718,13 @@ static const struct command_registration flash_exec_command_handlers[] = {
.help = "Turn protection on or off for a range of sectors "
"in a given flash bank.",
},
{
.name = "padded_value",
.handler = handle_flash_padded_value_command,
.mode = COMMAND_EXEC,
.usage = "bank_id value",
.help = "Set default flash padded value",
},
COMMAND_REGISTRATION_DONE
};
@ -712,7 +737,6 @@ static int flash_init_drivers(struct command_context *cmd_ctx)
return register_commands(cmd_ctx, parent, flash_exec_command_handlers);
}
COMMAND_HANDLER(handle_flash_bank_command)
{
if (CMD_ARGC < 7) {
@ -765,6 +789,7 @@ COMMAND_HANDLER(handle_flash_bank_command)
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->default_padded_value = 0xff;
c->num_sectors = 0;
c->sectors = NULL;
c->next = NULL;

View File

@ -46,6 +46,7 @@ static void virtual_update_bank_info(struct flash_bank *bank)
bank->size = master_bank->size;
bank->chip_width = master_bank->chip_width;
bank->bus_width = master_bank->bus_width;
bank->default_padded_value = master_bank->default_padded_value;
bank->num_sectors = master_bank->num_sectors;
bank->sectors = master_bank->sectors;
}