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
This commit is contained in:
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

@@ -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;
}