diff options
author | Namyoon Woo <namyoon@chromium.org> | 2020-10-17 20:25:15 -0700 |
---|---|---|
committer | Edward O'Callaghan <quasisec@chromium.org> | 2020-10-27 11:37:03 +0000 |
commit | f7a08a8ef22fa1e5bbbbbe10d39b7cf46bd5cb6c (patch) | |
tree | 53422de0ed371e1d9b42e641fc451ef91ac10c22 | |
parent | cf1e8f7b904ddf639b29b2e1bb0ad681c1aad76d (diff) | |
download | flashrom-f7a08a8ef22fa1e5bbbbbe10d39b7cf46bd5cb6c.tar.gz flashrom-f7a08a8ef22fa1e5bbbbbe10d39b7cf46bd5cb6c.tar.bz2 flashrom-f7a08a8ef22fa1e5bbbbbe10d39b7cf46bd5cb6c.zip |
dummyflasher.c: Fix null par data and size param handling
This patch fixes a few bugs that two patches ( `3149822cd45cb2e5841e15d648783748ba1b2ec6` && `3b8fe0f8e907c0ba9f7c7935e950f3e1538d427f`) brought:
* Check the presence of 'size' param only if the emulate is VARIABLE_SIZE.
* Initialize 'flash->st->par.data' in dummy_init() so that it can probe the VARIABLE_SIZE emulator correct in probe_variable_size().
* Replace atoi() with strtol().
* Revise man page to describe how to use the VARIABLE_SIZE emulation target.
TEST:
$ flashrom -p dummy:image=dummy.bin,emulate=VARIABLE_SIZE,size=16777216 \
-w ${IMG} -V -f
...
Verifying flash... VERIFIED.
Writing dummy.bin
$ flashrom -p dummy:image=dummy.bin,emulate=VARIABLE_SIZE -w ${IMG} -V -f
...
dummy_init: the size parameter is not given.
Unhandled programmer parameters (possibly due to another failure): image=dummy.bin,
Error: Programmer initialization failed
$ flashrom -p dummy:image=dummy.bin,emulate=SST25VF040.REMS -c SST25LF040A -w ${IMG}
...
Erasing and writing flash chip... Erase/write done.
Verifying flash... VERIFIED.
$ man flashrom
...
* Dummy vendor VARIABLE_SIZE SPI flash chip (configurable size, page write)
Example: flashrom -p dummy:emulate=SST25VF040.REMS
To use VARIABLE_SIZE chip, size must be specified to configure the size of the flash chip as a power of two.
Example: flashrom -p dummy:emulate=VARIABLE_SIZE,size=16777216,image=dummy.bin
...
Signed-off-by: Namyoon Woo <namyoon@google.com>
Change-Id: Ie6481943a831b946a91b643b4d79e684c27e48b8
Reviewed-on: https://review.coreboot.org/c/flashrom/+/46536
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Edward O'Callaghan <quasisec@chromium.org>
-rw-r--r-- | dummyflasher.c | 15 | ||||
-rw-r--r-- | flashrom.8.tmpl | 11 |
2 files changed, 20 insertions, 6 deletions
diff --git a/dummyflasher.c b/dummyflasher.c index 32a00abb..82aa3c8d 100644 --- a/dummyflasher.c +++ b/dummyflasher.c @@ -126,7 +126,7 @@ static struct spi_master spi_master_dummyflasher = { .write_aai = default_spi_write_aai, }; -static const struct par_master par_master_dummy = { +static struct par_master par_master_dummy = { .chip_readb = dummy_chip_readb, .chip_readw = dummy_chip_readw, .chip_readl = dummy_chip_readl, @@ -166,7 +166,7 @@ int dummy_init(void) unsigned int i; #if EMULATE_SPI_CHIP char *status = NULL; - int size = -1; /* size for VARIOUS_SIZE chip device */ + int size = -1; /* size for VARIABLE_SIZE chip device */ #endif #if EMULATE_CHIP struct stat image_stat; @@ -180,6 +180,7 @@ int dummy_init(void) data->emu_chip = EMULATE_NONE; data->delay_us = 0; spi_master_dummyflasher.data = data; + par_master_dummy.data = data; msg_pspew("%s\n", __func__); @@ -343,7 +344,7 @@ int dummy_init(void) #if EMULATE_SPI_CHIP tmp = extract_programmer_param("size"); if (tmp) { - size = atoi(tmp); + size = strtol(tmp, NULL, 10); if (size <= 0 || (size % 1024 != 0)) { msg_perr("%s: Chip size is not a multipler of 1024: %s\n", __func__, tmp); @@ -351,9 +352,6 @@ int dummy_init(void) return 1; } free(tmp); - } else { - msg_perr("%s: the size parameter is not given.\n", __func__); - return 1; } #endif @@ -433,6 +431,11 @@ int dummy_init(void) * flashrom -p dummy:emulate=VARIABLE_SIZE,size=4194304 */ if (!strcmp(tmp, "VARIABLE_SIZE")) { + if (size == -1) { + msg_perr("%s: the size parameter is not given.\n", __func__); + free(tmp); + return 1; + } data->emu_chip = EMULATE_VARIABLE_SIZE; data->emu_chip_size = size; data->emu_max_byteprogram_size = 256; diff --git a/flashrom.8.tmpl b/flashrom.8.tmpl index db50d595..02f60dc9 100644 --- a/flashrom.8.tmpl +++ b/flashrom.8.tmpl @@ -646,8 +646,19 @@ vendor): .sp .RB "* Macronix " MX25L6436 " SPI flash chip (8192 kB, RDID, SFDP)" .sp +.RB "* Dummy vendor " VARIABLE_SIZE " SPI flash chip (configurable size, page write)" +.sp Example: .B "flashrom -p dummy:emulate=SST25VF040.REMS" +.sp +To use +.B VARIABLE_SIZE +chip, +.B size +must be specified to configure the size of the flash chip as a power of two. +.sp +Example: +.B "flashrom -p dummy:emulate=VARIABLE_SIZE,size=16777216,image=dummy.bin" .TP .B Persistent images .sp |