Parcourir la source

[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>
tags/v1.20.1
Michael Brown il y a 9 ans
Parent
révision
867e3ee475
1 fichiers modifiés avec 5 ajouts et 7 suppressions
  1. 5
    7
      src/drivers/usb/xhci.c

+ 5
- 7
src/drivers/usb/xhci.c Voir le fichier

@@ -2954,13 +2954,11 @@ static int xhci_root_enable ( struct usb_hub *hub, struct usb_port *port ) {
2954 2954
 	uint32_t portsc;
2955 2955
 	unsigned int i;
2956 2956
 
2957
-	/* Reset port if applicable */
2958
-	if ( port->protocol < USB_PROTO_3_0 ) {
2959
-		portsc = readl ( xhci->op + XHCI_OP_PORTSC ( port->address ) );
2960
-		portsc &= XHCI_PORTSC_PRESERVE;
2961
-		portsc |= XHCI_PORTSC_PR;
2962
-		writel ( portsc, xhci->op + XHCI_OP_PORTSC ( port->address ) );
2963
-	}
2957
+	/* Reset port */
2958
+	portsc = readl ( xhci->op + XHCI_OP_PORTSC ( port->address ) );
2959
+	portsc &= XHCI_PORTSC_PRESERVE;
2960
+	portsc |= XHCI_PORTSC_PR;
2961
+	writel ( portsc, xhci->op + XHCI_OP_PORTSC ( port->address ) );
2964 2962
 
2965 2963
 	/* Wait for port to become enabled */
2966 2964
 	for ( i = 0 ; i < XHCI_PORT_RESET_MAX_WAIT_MS ; i++ ) {

Chargement…
Annuler
Enregistrer