[coreboot-gerrit] Patch set updated for coreboot: libpayload: xhci: Set MPS based on speed

Patrick Georgi (pgeorgi@google.com) gerrit at coreboot.org
Sat May 7 07:31:31 CEST 2016


Patrick Georgi (pgeorgi at google.com) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/14659

-gerrit

commit c0827a1c0f8fbd13e0476c2d1d19225ed863b199
Author: Varadarajan Narayanan <varada at codeaurora.org>
Date:   Thu Mar 17 14:43:35 2016 +0530

    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 at chromium.org>
    Original-Commit-Id: 1db43f53973d2124e41186777caa829aa346ace3
    Original-Change-Id: I943d19a3a7d785bd075073b57ba6388662d7df90
    Original-Signed-off-by: Varadarajan Narayanan <varada at codeaurora.org>
    Original-Reviewed-on: https://chromium-review.googlesource.com/333311
    Original-Commit-Ready: David Hendricks <dhendrix at chromium.org>
    Original-Reviewed-by: Patrick Georgi <pgeorgi at chromium.org>
---
 payloads/libpayload/drivers/usb/usb.c          | 14 ++++++++++++++
 payloads/libpayload/drivers/usb/xhci_devconf.c |  2 +-
 payloads/libpayload/include/usb/usb.h          |  1 +
 3 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/payloads/libpayload/drivers/usb/usb.c b/payloads/libpayload/drivers/usb/usb.c
index e87e397..bfb697d 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 ead130e..48d928c 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 cf52a4a..e93a11e 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,



More information about the coreboot-gerrit mailing list