[coreboot-gerrit] New patch to review for coreboot: 158a6db libpayload: usbhub: Don't clear PSC unless it was set

Isaac Christensen (isaac.christensen@se-eng.com) gerrit at coreboot.org
Mon Aug 11 23:04:44 CEST 2014


Isaac Christensen (isaac.christensen at se-eng.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/6617

-gerrit

commit 158a6db183cbe33d301a94193082a0e2f751ee68
Author: Julius Werner <jwerner at chromium.org>
Date:   Tue Sep 3 16:44:15 2013 -0700

    libpayload: usbhub: Don't clear PSC unless it was set
    
    The current USB hub code always clears the port status change after
    checking it, regardless of whether it was set in the first place. Since
    this check runs on every poll, it might create a race condition where
    the port status changes right between the GET_PORT_STATUS and the
    CLEAR_FEATURE(C_PORT_CONNECT), thus clearing the statrus change flag
    before it was ever read. Let's add one extra if() to avoid that possible
    headache.
    
    Change-Id: Idd46c2199dc6c240bd9ef068fbe70cccc88bac42
    Signed-off-by: Julius Werner <jwerner at chromium.org>
    Reviewed-on: https://chromium-review.googlesource.com/168098
    (cherry picked from commit f7f6f008f701ab3e4a4f785032d8024d676e11cb)
    Signed-off-by: Isaac Christensen <isaac.christensen at se-eng.com>
---
 payloads/libpayload/drivers/usb/usbhub.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/payloads/libpayload/drivers/usb/usbhub.c b/payloads/libpayload/drivers/usb/usbhub.c
index 4e077f6..ff7904c 100644
--- a/payloads/libpayload/drivers/usb/usbhub.c
+++ b/payloads/libpayload/drivers/usb/usbhub.c
@@ -48,7 +48,8 @@ usb_hub_port_status_changed(usbdev_t *const dev, const int port)
 {
 	unsigned short buf[2] = { 0, 0 };
 	get_status (dev, port, DR_PORT, 4, buf);
-	clear_feature (dev, port, SEL_C_PORT_CONNECTION, DR_PORT);
+	if (buf[1] & PORT_CONNECTION)
+		clear_feature (dev, port, SEL_C_PORT_CONNECTION, DR_PORT);
 	return buf[1] & PORT_CONNECTION;
 }
 



More information about the coreboot-gerrit mailing list