diff options
author | Brian J. Nemec <bnemec@chromium.org> | 2020-05-06 15:25:58 -0700 |
---|---|---|
committer | Edward O'Callaghan <quasisec@chromium.org> | 2020-05-08 02:18:10 +0000 |
commit | 93bfafc0ecc45bafcf792d362cbc302c15280909 (patch) | |
tree | 654cd68ce971653cbf1337d920d0fef10fdec391 /raiden_debug_spi.c | |
parent | a5cbe437613a9a5710b084064bf20a7027d562e1 (diff) | |
download | flashrom-93bfafc0ecc45bafcf792d362cbc302c15280909.tar.gz flashrom-93bfafc0ecc45bafcf792d362cbc302c15280909.tar.bz2 flashrom-93bfafc0ecc45bafcf792d362cbc302c15280909.zip |
raiden_debug_spi.c: Enables USB retry for invalid write count
Enables the USB SPI transfer retry mechanism when the error code
USB_SPI_WRITE_COUNT_INVALID is returned. This error code can
indicate a recoverable USB transfer failure.
BUG=b:153887087
BRANCH=none
TEST=Manual testing of ServoMicro and Flashrom when performing
reads, writes, and verification of the EC firmware on Nami.
TEST=Modified ServoMicro to randomly corrupt USB packets when
reading the packet length to replicate bad packets and the
verify recovery is successful.
Change-Id: I9e6b2ccec0b06aab0d6920f1bddf108058e5d6b1
Signed-off-by: Brian J. Nemec <bnemec@chromium.com>
Reviewed-on: https://review.coreboot.org/c/flashrom/+/41152
Reviewed-by: Edward O'Callaghan <quasisec@chromium.org>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'raiden_debug_spi.c')
-rw-r--r-- | raiden_debug_spi.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/raiden_debug_spi.c b/raiden_debug_spi.c index 2127f696d..ac74c0bc3 100644 --- a/raiden_debug_spi.c +++ b/raiden_debug_spi.c @@ -188,9 +188,13 @@ typedef struct { static bool retry_recovery(int error_code) { if (error_code < 0x10000) { - /* Handle error codes returned from the device. */ - if (USB_SPI_WRITE_COUNT_INVALID <= error_code && - error_code <= USB_SPI_DISABLED) { + /* + * Handle error codes returned from the device. USB_SPI_TIMEOUT, + * USB_SPI_BUSY, and USB_SPI_WRITE_COUNT_INVALID have been observed + * during transfer errors to the device and can be recovered. + */ + if (USB_SPI_READ_COUNT_INVALID <= error_code && + error_code <= USB_SPI_DISABLED) { return false; } } else if (usb_device_is_libusb_error(error_code)) { |