]> xenbits.xensource.com Git - seabios.git/commitdiff
xhci: Improve port status change debugging
authorKevin O'Connor <kevin@koconnor.net>
Fri, 18 Dec 2015 17:56:33 +0000 (12:56 -0500)
committerKevin O'Connor <kevin@koconnor.net>
Sun, 20 Dec 2015 20:34:47 +0000 (15:34 -0500)
Report the port state on a port status change notification.  Clear the
change bits so further change notifications are delivered.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
src/hw/usb-xhci.c

index 654febaad108410d17a2a42c5273c0ceabc68513..5f44239a92f303f43e17e9e42b2c8e8b2300a08a 100644 (file)
@@ -658,9 +658,15 @@ static void xhci_process_events(struct usb_xhci_s *xhci)
         }
         case ER_PORT_STATUS_CHANGE:
         {
-            u32 portid = (etrb->ptr_low >> 24) & 0xff;
-            dprintf(3, "%s: status change port #%d\n",
-                    __func__, portid);
+            u32 port = ((etrb->ptr_low >> 24) & 0xff) - 1;
+            // Read status, and clear port status change bits
+            u32 portsc = readl(&xhci->pr[port].portsc);
+            u32 pclear = (((portsc & ~(XHCI_PORTSC_PED|XHCI_PORTSC_PR))
+                           & ~(XHCI_PORTSC_PLS_MASK<<XHCI_PORTSC_PLS_SHIFT))
+                          | (1<<XHCI_PORTSC_PLS_SHIFT));
+            writel(&xhci->pr[port].portsc, pclear);
+
+            xhci_print_port_state(3, __func__, port, portsc);
             break;
         }
         default: