summaryrefslogtreecommitdiff
path: root/payloads/libpayload/drivers/usb/xhci.c
diff options
context:
space:
mode:
authorCaveh Jalali <caveh@chromium.org>2020-05-28 18:19:36 -0700
committerPatrick Georgi <pgeorgi@google.com>2020-06-06 09:26:02 +0000
commit96f231ac4b68fa34a2c0a6354f5089374ccc15c3 (patch)
treec4f960bc9a129e200cf3ac7be97409e727eefb3b /payloads/libpayload/drivers/usb/xhci.c
parent0a9e72e87e573183d713fca928c75464f829e5a8 (diff)
usb/xhci: Fix timeout logic
This fixes a logic bug in how timeouts are reported back. In the timeout case, the original code would return -1 instead of 0. All call sites expect a return value of 0 as the timeout indicator. Signed-off-by: Caveh Jalali <caveh@chromium.org> Change-Id: I81a888aa0a1544e55e6a680be8f3b7f6e0d87812 Reviewed-on: https://review.coreboot.org/c/coreboot/+/41854 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org>
Diffstat (limited to 'payloads/libpayload/drivers/usb/xhci.c')
-rw-r--r--payloads/libpayload/drivers/usb/xhci.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/payloads/libpayload/drivers/usb/xhci.c b/payloads/libpayload/drivers/usb/xhci.c
index 07d5b16486..749ff0a066 100644
--- a/payloads/libpayload/drivers/usb/xhci.c
+++ b/payloads/libpayload/drivers/usb/xhci.c
@@ -129,7 +129,12 @@ xhci_switchback_ppt_ports(pcidev_t addr)
static long
xhci_handshake(volatile u32 *const reg, u32 mask, u32 wait_for, long timeout_us)
{
- while ((*reg & mask) != wait_for && timeout_us--) udelay(1);
+ if (timeout_us <= 0)
+ return 0;
+ while ((*reg & mask) != wait_for && timeout_us != 0) {
+ --timeout_us;
+ udelay(1);
+ }
return timeout_us;
}