diff options
Diffstat (limited to 'payloads/libpayload/drivers')
-rw-r--r-- | payloads/libpayload/drivers/usb/usb.c | 14 | ||||
-rw-r--r-- | payloads/libpayload/drivers/usb/xhci_devconf.c | 2 |
2 files changed, 15 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); |