]> git.lizzy.rs Git - plan9front.git/blobdiff - sys/src/9/port/usbehci.c
devproc: make sure /proc/n/wait waits for the right process children
[plan9front.git] / sys / src / 9 / port / usbehci.c
index 19732dac639e88ae8b203fe9e7d5b596be5de019..66546675cdd2a499fddb935a06116568c7e95b48 100644 (file)
@@ -1692,19 +1692,20 @@ portreset(Hci *hp, int port, int on)
                        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)
@@ -2224,6 +2225,8 @@ ehcipoll(void* a)
        hp = a;
        ctlr = hp->aux;
        poll = &ctlr->poll;
+       while(waserror())
+               ;
        for(;;){
                if(ctlr->nreqs == 0){
                        if(0)ddprint("ehcipoll %#p sleep\n", ctlr->capio);