mirror of
https://github.com/ipxe/ipxe
synced 2025-12-20 12:00:19 +03:00
[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 <mcb30@ipxe.org>
This commit is contained in:
@@ -2954,13 +2954,11 @@ static int xhci_root_enable ( struct usb_hub *hub, struct usb_port *port ) {
|
|||||||
uint32_t portsc;
|
uint32_t portsc;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
/* Reset port if applicable */
|
/* Reset port */
|
||||||
if ( port->protocol < USB_PROTO_3_0 ) {
|
|
||||||
portsc = readl ( xhci->op + XHCI_OP_PORTSC ( port->address ) );
|
portsc = readl ( xhci->op + XHCI_OP_PORTSC ( port->address ) );
|
||||||
portsc &= XHCI_PORTSC_PRESERVE;
|
portsc &= XHCI_PORTSC_PRESERVE;
|
||||||
portsc |= XHCI_PORTSC_PR;
|
portsc |= XHCI_PORTSC_PR;
|
||||||
writel ( portsc, xhci->op + XHCI_OP_PORTSC ( port->address ) );
|
writel ( portsc, xhci->op + XHCI_OP_PORTSC ( port->address ) );
|
||||||
}
|
|
||||||
|
|
||||||
/* Wait for port to become enabled */
|
/* Wait for port to become enabled */
|
||||||
for ( i = 0 ; i < XHCI_PORT_RESET_MAX_WAIT_MS ; i++ ) {
|
for ( i = 0 ; i < XHCI_PORT_RESET_MAX_WAIT_MS ; i++ ) {
|
||||||
|
|||||||
Reference in New Issue
Block a user