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__
parent
53ca124a75
commit
1f3ca0b5b8
|
@ -4862,6 +4862,12 @@ specifies "to the end of the flash bank".
|
||||||
The @var{num} parameter is a value shown by @command{flash banks}.
|
The @var{num} parameter is a value shown by @command{flash banks}.
|
||||||
@end deffn
|
@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}
|
@anchor{program}
|
||||||
@deffn Command {program} filename [verify] [reset] [offset]
|
@deffn Command {program} filename [verify] [reset] [offset]
|
||||||
This is a helper script that simplifies using OpenOCD as a standalone
|
This is a helper script that simplifies using OpenOCD as a standalone
|
||||||
|
|
|
@ -710,7 +710,7 @@ int flash_write_unlock(struct target *target, struct image *image,
|
||||||
|
|
||||||
/* see if we need to pad the section */
|
/* see if we need to pad the section */
|
||||||
while (padding[section]--)
|
while (padding[section]--)
|
||||||
(buffer + buffer_size)[size_read++] = 0xff;
|
(buffer + buffer_size)[size_read++] = c->default_padded_value;
|
||||||
|
|
||||||
buffer_size += size_read;
|
buffer_size += size_read;
|
||||||
section_offset += size_read;
|
section_offset += size_read;
|
||||||
|
|
|
@ -87,6 +87,10 @@ struct flash_bank {
|
||||||
int chip_width; /**< Width of the chip in bytes (1,2,4 bytes) */
|
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) */
|
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
|
* The number of sectors on this chip. This value will
|
||||||
* be set intially to 0, and the flash driver must set this to
|
* be set intially to 0, and the flash driver must set this to
|
||||||
|
|
|
@ -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[] = {
|
static const struct command_registration flash_exec_command_handlers[] = {
|
||||||
{
|
{
|
||||||
.name = "probe",
|
.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 "
|
.help = "Turn protection on or off for a range of sectors "
|
||||||
"in a given flash bank.",
|
"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
|
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);
|
return register_commands(cmd_ctx, parent, flash_exec_command_handlers);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
COMMAND_HANDLER(handle_flash_bank_command)
|
COMMAND_HANDLER(handle_flash_bank_command)
|
||||||
{
|
{
|
||||||
if (CMD_ARGC < 7) {
|
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(u32, CMD_ARGV[2], c->size);
|
||||||
COMMAND_PARSE_NUMBER(int, CMD_ARGV[3], c->chip_width);
|
COMMAND_PARSE_NUMBER(int, CMD_ARGV[3], c->chip_width);
|
||||||
COMMAND_PARSE_NUMBER(int, CMD_ARGV[4], c->bus_width);
|
COMMAND_PARSE_NUMBER(int, CMD_ARGV[4], c->bus_width);
|
||||||
|
c->default_padded_value = 0xff;
|
||||||
c->num_sectors = 0;
|
c->num_sectors = 0;
|
||||||
c->sectors = NULL;
|
c->sectors = NULL;
|
||||||
c->next = NULL;
|
c->next = NULL;
|
||||||
|
|
|
@ -46,6 +46,7 @@ static void virtual_update_bank_info(struct flash_bank *bank)
|
||||||
bank->size = master_bank->size;
|
bank->size = master_bank->size;
|
||||||
bank->chip_width = master_bank->chip_width;
|
bank->chip_width = master_bank->chip_width;
|
||||||
bank->bus_width = master_bank->bus_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->num_sectors = master_bank->num_sectors;
|
||||||
bank->sectors = master_bank->sectors;
|
bank->sectors = master_bank->sectors;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue