XHCI: clear warm and port reset

It seems we do not clear UPS_C_BH_PORT_RESET and UPS_C_PORT_RESET
conditions after warm or port reset.  Add that code.

Obtained from:	an old patch mainly debugging other problems
MFC after:	2 weeks
Reviewed by:	hselasky
Differential Revision: https://reviews.freebsd.org/D35483
This commit is contained in:
Bjoern A. Zeeb 2022-06-14 16:52:45 +00:00
parent 447c418da0
commit 8f892e9bee

View file

@ -1088,6 +1088,21 @@ uhub_explore(struct usb_device *udev)
if (err != USB_ERR_NORMAL_COMPLETION)
retval = err;
}
if (udev->speed == USB_SPEED_SUPER &&
(sc->sc_st.port_change & UPS_C_BH_PORT_RESET) != 0) {
DPRINTF("Warm reset finished on port %u.\n", portno);
err = usbd_req_clear_port_feature(
udev, NULL, portno, UHF_C_BH_PORT_RESET);
if (err != USB_ERR_NORMAL_COMPLETION)
retval = err;
}
if (sc->sc_st.port_change & UPS_C_PORT_RESET) {
DPRINTF("Port reset finished on port %u.\n", portno);
err = usbd_req_clear_port_feature(
udev, NULL, portno, UHF_C_PORT_RESET);
if (err != USB_ERR_NORMAL_COMPLETION)
retval = err;
}
if (uhub_explore_sub(sc, up) == USB_ERR_NORMAL_COMPLETION) {
/* explore succeeded - reset restart counter */