Avoid setting SPI speed on firmware versions < 5.0.0 and note this limitation in the man page. Use the index stored for a given speed in the translation array instead of the index of the element in that array.
Signed-off-by: Patrick Georgi patrick.georgi@secunet.com Signed-off-by: Stefan Tauner stefan.tauner@student.tuwien.ac.at --- IMHO the speed setting was broken ever since. Has anyone every checked the resulting frequency on the bus?
I am not entirely sure why the translation table was introduced in the first place although dediprog's indices could be "stored" in the array offset, but mixing the two approaches is of course not a good idea.
Nico, can you please verify that this patch is what you actually meant to do?
dediprog.c | 13 ++++++++----- flashrom.8 | 3 ++- 2 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/dediprog.c b/dediprog.c index ab5388b..77ca195 100644 --- a/dediprog.c +++ b/dediprog.c @@ -184,12 +184,15 @@ static const struct dediprog_spispeeds spispeeds[] = { */ static int dediprog_set_spi_speed(unsigned int spispeed_idx) { - int ret; + if (dediprog_firmwareversion < FIRMWARE_VERSION(5, 0, 0)) { + msg_pwarn("Skipping to set SPI speed because firmware is too old.\n"); + return 0; + }
msg_pdbg("SPI speed is %sHz\n", spispeeds[spispeed_idx].name);
- ret = usb_control_msg(dediprog_handle, 0x42, 0x61, spispeeds[spispeed_idx].speed, 0xff, - NULL, 0x0, DEFAULT_TIMEOUT); + int ret = usb_control_msg(dediprog_handle, 0x42, 0x61, spispeeds[spispeed_idx].speed, 0xff, + NULL, 0x0, DEFAULT_TIMEOUT); if (ret != 0x0) { msg_perr("Command Set SPI Speed 0x%x failed!\n", spispeeds[spispeed_idx].speed); return 1; @@ -801,12 +804,12 @@ int dediprog_init(void) if (spispeed) { for (i = 0; spispeeds[i].name; ++i) { if (!strcasecmp(spispeeds[i].name, spispeed)) { - spispeed_idx = i; + spispeed_idx = spispeeds[i].speed; break; } } if (!spispeeds[i].name) { - msg_perr("Error: Invalid 'spispeed' value.\n"); + msg_perr("Error: Invalid spispeed value: '%s'.\n", spispeed); free(spispeed); return 1; } diff --git a/flashrom.8 b/flashrom.8 index c7a6c69..4e6ab55 100644 --- a/flashrom.8 +++ b/flashrom.8 @@ -683,7 +683,8 @@ Usage example to select the second device: .sp An optional .B spispeed -parameter specifies the frequency of the SPI bus. Syntax is +parameter specifies the frequency of the SPI bus. The firmware on the device needs to be 5.0.0 or newer. +Syntax is .sp .B " flashrom -p dediprog:spispeed=frequency" .sp