From 0552d8126be3f2ea9f03098afb5cb77049c8d606 Mon Sep 17 00:00:00 2001 From: Ian Moffett Date: Sat, 11 Oct 2025 19:02:45 -0400 Subject: kern: usb: Poll USBSTS.CNR after reset The host needs to wait for the controller to be ready by polling the CNR bit as per section 4.2 of the spec Signed-off-by: Ian Moffett --- src/sys/io/usb/hcd/xhci.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'src/sys/io/usb/hcd/xhci.c') diff --git a/src/sys/io/usb/hcd/xhci.c b/src/sys/io/usb/hcd/xhci.c index 8d3b0a0..f363bcf 100644 --- a/src/sys/io/usb/hcd/xhci.c +++ b/src/sys/io/usb/hcd/xhci.c @@ -116,6 +116,17 @@ xhci_reset_hc(struct xhci_hcd *hcd) return error; } + /* + * Section 4.2 of the XHCI spec states that we also + * need to wait for the controller to be ready via + * the USBSTS.CNR (controller not ready) bit + */ + error = xhci_poll32(&opregs->usbcmd, USBSTS_CNR, false); + if (error < 0) { + pr_trace("hang waiting for controller ready\n"); + return error; + } + return 0; } -- cgit v1.2.3