summaryrefslogtreecommitdiffstats
path: root/raiden_debug_spi.c
diff options
context:
space:
mode:
authorBrian J. Nemec <bnemec@chromium.org>2020-05-06 15:25:58 -0700
committerEdward O'Callaghan <quasisec@chromium.org>2020-05-08 02:18:10 +0000
commit93bfafc0ecc45bafcf792d362cbc302c15280909 (patch)
tree654cd68ce971653cbf1337d920d0fef10fdec391 /raiden_debug_spi.c
parenta5cbe437613a9a5710b084064bf20a7027d562e1 (diff)
downloadflashrom-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.c10
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)) {