1
0
mirror of https://review.coreboot.org/flashrom.git synced 2025-04-30 16:33:41 +02:00

dummyflasher.c: Allow filling with either 0x00 or 0xff

This upstreams a ChromiumOS feature that allows the user
of the dummyflasher spi master to either fill with 0x00
or 0xff in the fake flash content by way of a spi master
param.

BUG=b:140394053
BRANCH=none
TEST=none

Change-Id: I37c6dee932e449201d8bbfb03ca6d139da3cb6a2
Signed-off-by: Edward O'Callaghan <quasisec@google.com>
Reviewed-on: https://review.coreboot.org/c/flashrom/+/47859
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Sam McNally <sammc@google.com>
This commit is contained in:
Edward O'Callaghan 2020-11-23 22:35:20 +11:00 committed by Edward O'Callaghan
parent f280797060
commit 3d300cb797

View File

@ -52,6 +52,7 @@ struct emu_data {
enum emu_chip emu_chip;
char *emu_persistent_image;
unsigned int emu_chip_size;
int erase_to_zero;
int emu_modified; /* is the image modified since reading it? */
uint8_t emu_status;
/* If "freq" parameter is passed in from command line, commands will delay
@ -455,6 +456,23 @@ int dummy_init(void)
return 1;
}
free(tmp);
/* Should emulated flash erase to zero (yes/no)? */
tmp = extract_programmer_param("erase_to_zero");
if (tmp) {
if (!strcmp(tmp, "yes")) {
msg_pdbg("Emulated chip will erase to 0x00\n");
data->erase_to_zero = 1;
} else if (!strcmp(tmp, "no")) {
msg_pdbg("Emulated chip will erase to 0xff\n");
} else {
msg_perr("erase_to_zero can be \"yes\" or \"no\"\n");
free(tmp);
return 1;
}
}
free(tmp);
flashchip_contents = malloc(data->emu_chip_size);
if (!flashchip_contents) {
msg_perr("Out of memory!\n");
@ -478,8 +496,9 @@ int dummy_init(void)
}
#endif
msg_pdbg("Filling fake flash chip with 0xff, size %i\n", data->emu_chip_size);
memset(flashchip_contents, 0xff, data->emu_chip_size);
msg_pdbg("Filling fake flash chip with 0x%02x, size %i\n",
data->erase_to_zero ? 0x00 : 0xff, data->emu_chip_size);
memset(flashchip_contents, data->erase_to_zero ? 0x00 : 0xff, data->emu_chip_size);
/* Will be freed by shutdown function if necessary. */
data->emu_persistent_image = extract_programmer_param("image");
@ -1052,6 +1071,9 @@ int probe_variable_size(struct flashctx *flash)
msg_cdbg("%s: set flash->total_size to %dK bytes.\n", __func__,
flash->chip->total_size);
if (emu_data->erase_to_zero)
flash->chip->feature_bits |= FEATURE_ERASED_ZERO;
/* Update the first count of each of the block_erasers. */
for (i = 0; i < NUM_ERASEFUNCTIONS; i++) {
struct block_eraser *eraser = &flash->chip->block_erasers[i];