]> xenbits.xensource.com Git - seabios.git/commitdiff
xhci: allocate scratch pad buffers
authorGerd Hoffmann <kraxel@redhat.com>
Fri, 6 Dec 2013 15:08:01 +0000 (16:08 +0100)
committerKevin O'Connor <kevin@koconnor.net>
Wed, 29 Jan 2014 17:57:01 +0000 (12:57 -0500)
Untested.  Anyone who tried to get xhci run on real hardware
is welcome to test whenever this patch improves things.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
src/hw/usb-xhci.c

index 14f243cd697a861c8fb5872f8e47a2f7302dd90d..dc98e5d8dbb6bbe22f87e5ef2c674c8591a10fa5 100644 (file)
@@ -711,6 +711,19 @@ configure_xhci(void *data)
     writel(&xhci->ir->erstba_high, 0);
     xhci->evts->cs = 1;
 
+    reg = readl(&xhci->caps->hcsparams2);
+    u32 spb = reg >> 27;
+    if (spb) {
+        dprintf(3, "%s: setup %d scratch pad buffers\n", __func__, spb);
+        u64 *spba = memalign_high(64, sizeof(*spba) * spb);
+        void *pad = memalign_high(4096, 4096 * spb);
+        int i;
+        for (i = 0; i < spb; i++)
+            spba[i] = (u32)pad + (i * 4096);
+        xhci->devs[0].ptr_low = (u32)spba;
+        xhci->devs[0].ptr_high = 0;
+    }
+
     reg = readl(&xhci->op->usbcmd);
     reg |= XHCI_CMD_RS;
     writel(&xhci->op->usbcmd, reg);