diff options
author | Varadarajan Narayanan <varada@codeaurora.org> | 2016-03-17 14:43:35 +0530 |
---|---|---|
committer | Patrick Georgi <pgeorgi@google.com> | 2016-05-09 08:29:57 +0200 |
commit | 8e0ffe2088ebc6557bf4e08377605e991d375e06 (patch) | |
tree | e5fc0e772180550bf6be25c16e8adb6b5f359442 | |
parent | 9a8b67d0af6a175e6a559e66893f5c29b8d70bf8 (diff) | |
download | coreboot-8e0ffe2088ebc6557bf4e08377605e991d375e06.tar.xz |
libpayload: xhci: Set MPS based on speed
BUG=chrome-os-partner:49249
TEST=Compiles and boots and detect USB storage
BRANCH=none
Change-Id: I9007399e1f785e6f1d2258225e3f7cc602053aed
Signed-off-by: Patrick Georgi <pgeorgi@chromium.org>
Original-Commit-Id: 1db43f53973d2124e41186777caa829aa346ace3
Original-Change-Id: I943d19a3a7d785bd075073b57ba6388662d7df90
Original-Signed-off-by: Varadarajan Narayanan <varada@codeaurora.org>
Original-Reviewed-on: https://chromium-review.googlesource.com/333311
Original-Commit-Ready: David Hendricks <dhendrix@chromium.org>
Original-Reviewed-by: Patrick Georgi <pgeorgi@chromium.org>
Reviewed-on: https://review.coreboot.org/14659
Tested-by: build bot (Jenkins)
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
-rw-r--r-- | payloads/libpayload/drivers/usb/usb.c | 14 | ||||
-rw-r--r-- | payloads/libpayload/drivers/usb/xhci_devconf.c | 2 | ||||
-rw-r--r-- | payloads/libpayload/include/usb/usb.h | 1 |
3 files changed, 16 insertions, 1 deletions
diff --git a/payloads/libpayload/drivers/usb/usb.c b/payloads/libpayload/drivers/usb/usb.c index e87e397061..bfb697d619 100644 --- a/payloads/libpayload/drivers/usb/usb.c +++ b/payloads/libpayload/drivers/usb/usb.c @@ -275,6 +275,20 @@ usb_decode_mps0(usb_speed speed, u8 bMaxPacketSize0) } } +int speed_to_default_mps(usb_speed speed) +{ + switch (speed) { + case LOW_SPEED: + return 8; + case FULL_SPEED: + case HIGH_SPEED: + return 64; + case SUPER_SPEED: + default: + return 512; + } +} + /* Normalize bInterval to log2 of microframes */ static int usb_decode_interval(usb_speed speed, const endpoint_type type, const unsigned char bInterval) diff --git a/payloads/libpayload/drivers/usb/xhci_devconf.c b/payloads/libpayload/drivers/usb/xhci_devconf.c index ead130e7d1..48d928c380 100644 --- a/payloads/libpayload/drivers/usb/xhci_devconf.c +++ b/payloads/libpayload/drivers/usb/xhci_devconf.c @@ -185,7 +185,7 @@ xhci_set_address (hci_t *controller, usb_speed speed, int hubport, int hubaddr) ic->dev.ep0->tr_dq_high = 0; EC_SET(TYPE, ic->dev.ep0, EP_CONTROL); EC_SET(AVRTRB, ic->dev.ep0, 8); - EC_SET(MPS, ic->dev.ep0, 8); + EC_SET(MPS, ic->dev.ep0, speed_to_default_mps(speed)); EC_SET(CERR, ic->dev.ep0, 3); EC_SET(DCS, ic->dev.ep0, 1); diff --git a/payloads/libpayload/include/usb/usb.h b/payloads/libpayload/include/usb/usb.h index cf52a4aece..e93a11e616 100644 --- a/payloads/libpayload/include/usb/usb.h +++ b/payloads/libpayload/include/usb/usb.h @@ -263,6 +263,7 @@ void usb_poll (void); usbdev_t *init_device_entry (hci_t *controller, int num); int usb_decode_mps0 (usb_speed speed, u8 bMaxPacketSize0); +int speed_to_default_mps(usb_speed speed); int set_feature (usbdev_t *dev, int endp, int feature, int rtype); int get_status (usbdev_t *dev, int endp, int rtype, int len, void *data); int get_descriptor (usbdev_t *dev, int rtype, int descType, int descIdx, |