git: 66754c01ff95 - stable/13 - XHCI: clear warm and port reset
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 01 Jul 2022 14:57:51 UTC
The branch stable/13 has been updated by bz:
URL: https://cgit.FreeBSD.org/src/commit/?id=66754c01ff951a771c594dd850675ba2c4236dcc
commit 66754c01ff951a771c594dd850675ba2c4236dcc
Author: Bjoern A. Zeeb <bz@FreeBSD.org>
AuthorDate: 2022-06-14 16:52:45 +0000
Commit: Bjoern A. Zeeb <bz@FreeBSD.org>
CommitDate: 2022-07-01 13:50:19 +0000
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
Reviewed by: hselasky
Differential Revision: https://reviews.freebsd.org/D35483
(cherry picked from commit 8f892e9bee33fda1e2a2efca4b3e8a1949264cac)
---
sys/dev/usb/usb_hub.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/sys/dev/usb/usb_hub.c b/sys/dev/usb/usb_hub.c
index 00173a5d14d0..4c7b67b92474 100644
--- a/sys/dev/usb/usb_hub.c
+++ b/sys/dev/usb/usb_hub.c
@@ -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 */