diff --git a/sys/dev/usb/usb_hub.c b/sys/dev/usb/usb_hub.c --- a/sys/dev/usb/usb_hub.c +++ b/sys/dev/usb/usb_hub.c @@ -1088,6 +1088,21 @@ 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 */