From: Michael Brown Date: Mon, 13 Apr 2015 13:08:09 +0000 (+0100) Subject: [xhci] Always reset root hub ports X-Git-Tag: v1.20.1~867 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=867e3ee47587592d30f6f85b72b061b671f830df;p=thirdparty%2Fipxe.git [xhci] Always reset root hub ports In theory USB3 ports do not require a reset to enable the port. Experimentation shows that this is sometimes required, particularly when rerouting ports from EHCI to xHCI and switching speeds. Signed-off-by: Michael Brown --- diff --git a/src/drivers/usb/xhci.c b/src/drivers/usb/xhci.c index b6ce74441..523a1c0b6 100644 --- a/src/drivers/usb/xhci.c +++ b/src/drivers/usb/xhci.c @@ -2954,13 +2954,11 @@ static int xhci_root_enable ( struct usb_hub *hub, struct usb_port *port ) { uint32_t portsc; unsigned int i; - /* Reset port if applicable */ - if ( port->protocol < USB_PROTO_3_0 ) { - portsc = readl ( xhci->op + XHCI_OP_PORTSC ( port->address ) ); - portsc &= XHCI_PORTSC_PRESERVE; - portsc |= XHCI_PORTSC_PR; - writel ( portsc, xhci->op + XHCI_OP_PORTSC ( port->address ) ); - } + /* Reset port */ + portsc = readl ( xhci->op + XHCI_OP_PORTSC ( port->address ) ); + portsc &= XHCI_PORTSC_PRESERVE; + portsc |= XHCI_PORTSC_PR; + writel ( portsc, xhci->op + XHCI_OP_PORTSC ( port->address ) ); /* Wait for port to become enabled */ for ( i = 0 ; i < XHCI_PORT_RESET_MAX_WAIT_MS ; i++ ) {