summaryrefslogtreecommitdiff
path: root/payloads
diff options
context:
space:
mode:
authorJulius Werner <jwerner@chromium.org>2015-08-07 15:29:41 -0700
committerAaron Durbin <adurbin@chromium.org>2015-08-14 15:18:16 +0200
commit6f4c7a6fded85c4687386b857687af4b9a953851 (patch)
tree320f6d44f0246df1cefd33a64fee1fd3a381e782 /payloads
parent22ea0078917415aa179f868b94b7f91fd533b369 (diff)
downloadcoreboot-6f4c7a6fded85c4687386b857687af4b9a953851.tar.xz
libpayload: usb: xhci: Fix list of cleared port change bits
The xhci_rh_port_status_changed() function tries to always clear all port status bits, even though most of them don't interest us. This is generally a smart thing to do since not clearing a status bit may cause the controller to not generate any more Port Status Change Events. However, the bitmask we currently use doesn't cover bit 23 (Port Config Error Change) and instead covers bit 16 (Port Link State Write Strobe) which is not really related to this and not a W1C bit. Probably a typo, so let's fix that. BRANCH=None BUG=None TEST=Plugged/unplugged a bunch of USB devices on an XHCI Falco. Original-Change-Id: Ia83f5b72cce094859c0f0e730752d7b5cfa6e1c6 Original-Signed-off-by: Julius Werner <jwerner@chromium.org> Original-Reviewed-on: https://chromium-review.googlesource.com/291842 Original-Reviewed-by: Aaron Durbin <adurbin@chromium.org> Change-Id: I11f5fe38cb70055daf6e866a8ee84ca80488e3bf Signed-off-by: Julius Werner <jwerner@chromium.org> Reviewed-on: http://review.coreboot.org/11194 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Georgi <pgeorgi@google.com>
Diffstat (limited to 'payloads')
-rw-r--r--payloads/libpayload/drivers/usb/xhci_rh.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/payloads/libpayload/drivers/usb/xhci_rh.c b/payloads/libpayload/drivers/usb/xhci_rh.c
index bcb01ace98..d7ba82c56a 100644
--- a/payloads/libpayload/drivers/usb/xhci_rh.c
+++ b/payloads/libpayload/drivers/usb/xhci_rh.c
@@ -53,7 +53,7 @@ xhci_rh_port_status_changed(usbdev_t *const dev, const int port)
const int changed = !!(*portsc & (PORTSC_CSC | PORTSC_PRC));
/* always clear all the status change bits */
- *portsc = (*portsc & PORTSC_RW_MASK) | 0x00ef0000;
+ *portsc = (*portsc & PORTSC_RW_MASK) | 0x00fe0000;
return changed;
}