ref: d38dbf6415cbff7a43997f80f1be9492b496665e
parent: 2f685dd96be9dcf3fe9bbab306ae5b9e07cfd86d
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Sun Dec 15 16:19:57 EST 2024
nusb/usbd: use longer reset delay for rootports Make reset delays more conservative: The usb spec says root ports need 50ms reset minimum, use 100ms. The usb spec says hub ports need 20ms minimum, use 50ms.
--- a/sys/src/cmd/nusb/usbd/dat.h
+++ b/sys/src/cmd/nusb/usbd/dat.h
@@ -56,8 +56,9 @@
Pconfigured,
/* Delays, timeouts (ms) */
- Resetdelay = 20, /* how much to wait after a reset */
- Resumedelay = 20, /* how much to wait after a resume */
+ Rootresetdelay = 100, /* how much to wait after a root port reset (50ms by standard) */
+ Portresetdelay = 50, /* how much to wait after a hub port reset (20ms by standard) */
+ Resumedelay = 50, /* how much to wait after a resume (20ms by standard) */
Powerdelay = 100, /* after powering up ports */
Pollms = 250, /* port poll interval */
--- a/sys/src/cmd/nusb/usbd/hub.c
+++ b/sys/src/cmd/nusb/usbd/hub.c
@@ -452,7 +452,7 @@
dprint(2, "%s: %s: port %d: set reset: %r\n", argv0, d->dir, p);
return -1;
}
- sleep(Resetdelay);
+ sleep(d->depth<0? Rootresetdelay: Portresetdelay);
if((sts = portstatus(h, p)) == -1)
return -1;
sp = "full";
--
⑨