From 3ae04a1204ab724689dadeac0548aadd5e5eb088 Mon Sep 17 00:00:00 2001 From: Rick Altherr Date: Mon, 13 Dec 2021 17:10:00 -0800 Subject: dediprog: wait for spi bulk read xfers to finish dediprog_bulk_read_poll()'s finish argument allows it to be used in two distinct cases: where dediprog_bulk_read_poll will be called as part of a loop (finish=0) and where dediprog_bulk_read_poll should wait for all outstanding transfers to finish (finish=1). In both cases, dediprog_bulk_read_poll() calls libusb to process events with a 10 second timeout. After dediprog_spi_bulk_read() has queued the last transfers, it calls dediprog_bulk_read_poll() with finish=0 when it should be finish=1. finish=0 just happens to work because frequently the transfers finish in the 10 second timeout. Signed-off-by: Rick Altherr Change-Id: If7cb541742c8620358c8e04275d8316131b2d1ab Reviewed-on: https://review.coreboot.org/c/flashrom/+/60087 Tested-by: build bot (Jenkins) Reviewed-by: Angel Pons Reviewed-by: Nico Huber --- dediprog.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dediprog.c b/dediprog.c index 939673cc..8a05a7c1 100644 --- a/dediprog.c +++ b/dediprog.c @@ -526,7 +526,7 @@ static int dediprog_spi_bulk_read(struct flashctx *flash, uint8_t *buf, unsigned goto err_free; } /* Wait for transfers to finish. */ - if (dediprog_bulk_read_poll(dp_data->usb_ctx, &status, 0)) + if (dediprog_bulk_read_poll(dp_data->usb_ctx, &status, 1)) goto err_free; /* Check if everything has been transmitted. */ if ((status.finished_idx < count) || status.error) -- cgit v1.2.3