git: 9front

Download patch

ref: 35d26d412b1a98e2ee6738cff467e2946adfd354
parent: d1187eb320b7c6f53c7865e28598df6e9e05888a
author: cinap_lenrek <cinap_lenrek@gmx.de>
date: Fri Aug 30 12:00:03 EDT 2013

usbehci: portreset timing

assert port reset for 50ms, not 10ms.

--- a/sys/src/9/port/usbehci.c
+++ b/sys/src/9/port/usbehci.c
@@ -1692,19 +1692,20 @@
 			ctlr->capio);
 
 	*portscp = (*portscp & ~Psenable) | Psreset;	/* initiate reset */
-	delay(10);
-	*portscp &= ~Psreset;
-
 	/*
 	 * usb 2 spec: reset must finish within 20 ms.
 	 * linux says spec says it can take 50 ms. for hubs.
 	 */
+	delay(50);
+	*portscp &= ~Psreset;	/* terminate reset */
+
 	delay(10);
 	for(i = 0; *portscp & Psreset && i < 10; i++)
 		delay(10);
+
 	if (*portscp & Psreset)
-		iprint("ehci %#p: port %d didn't reset within %d ms; sts %#lux\n",
-			ctlr->capio, port, i * 10, *portscp);
+		iprint("ehci %#p: port %d didn't reset; sts %#lux\n",
+			ctlr->capio, port, *portscp);
 
 	delay(10);			/* ehci spec: enable within 2 ms. */
 	if((*portscp & Psenable) == 0)
--