Module Name: src
Committed By: jmcneill
Date: Sun Oct 10 20:10:12 UTC 2021
Modified Files:
src/sys/dev/usb: xhci.c
Log Message:
xhci: shrink port reset delay
Instead of waiting for USB_PORT_ROOT_RESET_DELAY (250ms) before checking
the port reset status, poll the PORTSC register and return early if the
reset has completed.
To generate a diff of this commit:
cvs rdiff -u -r1.148 -r1.149 src/sys/dev/usb/xhci.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/usb/xhci.c
diff -u src/sys/dev/usb/xhci.c:1.148 src/sys/dev/usb/xhci.c:1.149
--- src/sys/dev/usb/xhci.c:1.148 Tue Aug 17 22:00:32 2021
+++ src/sys/dev/usb/xhci.c Sun Oct 10 20:10:12 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: xhci.c,v 1.148 2021/08/17 22:00:32 andvar Exp $ */
+/* $NetBSD: xhci.c,v 1.149 2021/10/10 20:10:12 jmcneill Exp $ */
/*
* Copyright (c) 2013 Jonathan A. Kollasch
@@ -34,7 +34,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: xhci.c,v 1.148 2021/08/17 22:00:32 andvar Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xhci.c,v 1.149 2021/10/10 20:10:12 jmcneill Exp $");
#ifdef _KERNEL_OPT
#include "opt_usb.h"
@@ -4121,18 +4121,17 @@ xhci_roothub_ctrl(struct usbd_bus *bus,
/* XXX suspend */
break;
case UHF_PORT_RESET:
- v &= ~(XHCI_PS_PED | XHCI_PS_PR);
xhci_op_write_4(sc, port, v | XHCI_PS_PR);
/* Wait for reset to complete. */
- usb_delay_ms(&sc->sc_bus, USB_PORT_ROOT_RESET_DELAY);
- if (sc->sc_dying) {
- return -1;
- }
- v = xhci_op_read_4(sc, port);
- if (v & XHCI_PS_PR) {
- xhci_op_write_4(sc, port, v & ~XHCI_PS_PR);
+ for (i = 0; i < USB_PORT_ROOT_RESET_DELAY / 10; i++) {
+ if (sc->sc_dying) {
+ return -1;
+ }
+ v = xhci_op_read_4(sc, port);
+ if ((v & XHCI_PS_PR) == 0) {
+ break;
+ }
usb_delay_ms(&sc->sc_bus, 10);
- /* XXX */
}
break;
case UHF_PORT_POWER: