mirror of
https://github.com/ipxe/ipxe
synced 2025-12-09 10:50:28 +03:00
[xhci] Set link state to RxDetect after disabling USB3 root hub port
The "disabled" port states for USB2 and USB3 are not directly equivalent. In particular, a disabled USB3 port will not detect new device connections. The result is that a USB3 device disconnected from and reconnected to an xHCI root hub port will end up reconnecting as a USB2 device. Fix by setting the link state to RxDetect after disabling the port, as is already done during initialisation. Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
@@ -3051,6 +3051,19 @@ static int xhci_root_disable ( struct usb_hub *hub, struct usb_port *port ) {
|
||||
portsc |= XHCI_PORTSC_PED;
|
||||
writel ( portsc, xhci->op + XHCI_OP_PORTSC ( port->address ) );
|
||||
|
||||
/* Allow time for link state to stabilise */
|
||||
mdelay ( XHCI_LINK_STATE_DELAY_MS );
|
||||
|
||||
/* Set link state to RxDetect for USB3 ports */
|
||||
if ( port->protocol >= USB_PROTO_3_0 ) {
|
||||
portsc &= XHCI_PORTSC_PRESERVE;
|
||||
portsc |= ( XHCI_PORTSC_PLS_RXDETECT | XHCI_PORTSC_LWS );
|
||||
writel ( portsc, xhci->op + XHCI_OP_PORTSC ( port->address ) );
|
||||
}
|
||||
|
||||
/* Allow time for link state to stabilise */
|
||||
mdelay ( XHCI_LINK_STATE_DELAY_MS );
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user