Remove the power bit from the super speed root hub port status register

because it clobbers the super speed link status when a device is in super
speed mode. Currently the power bit is not needed for anything in the USB
hub driver.

This fixes USB warm reset for super speed devices.

Tested by:	Shichun.Ma@dell.com
MFC after:	3 days
Sponsored by:	Mellanox Technologies
This commit is contained in:
Hans Petter Selasky 2020-03-08 13:24:34 +00:00
parent d2222aa0e9
commit 601ee53858
2 changed files with 6 additions and 9 deletions

View File

@ -3591,13 +3591,10 @@ xhci_roothub_exec(struct usb_device *udev,
i |= UPS_OVERCURRENT_INDICATOR;
if (v & XHCI_PS_PR)
i |= UPS_RESET;
if (v & XHCI_PS_PP) {
/*
* The USB 3.0 RH is using the
* USB 2.0's power bit
*/
i |= UPS_PORT_POWER;
}
#if 0
if (v & XHCI_PS_PP)
/* XXX undefined */
#endif
USETW(sc->sc_hub_desc.ps.wPortStatus, i);
i = 0;

View File

@ -660,7 +660,7 @@ uhub_reattach_port(struct uhub_softc *sc, uint8_t portno)
break;
case USB_SPEED_SUPER:
if (udev->parent_hub == NULL)
power_mask = UPS_PORT_POWER;
power_mask = 0; /* XXX undefined */
else
power_mask = UPS_PORT_POWER_SS;
break;
@ -668,7 +668,7 @@ uhub_reattach_port(struct uhub_softc *sc, uint8_t portno)
power_mask = 0;
break;
}
if (!(sc->sc_st.port_status & power_mask)) {
if ((sc->sc_st.port_status & power_mask) != power_mask) {
DPRINTF("WARNING: strange, connected port %d "
"has no power\n", portno);
}