[SeaBIOS] [PATCH 01/10] xhci: allocate scratch pad buffers

Gerd Hoffmann kevin at koconnor.net
Sat Dec 28 04:14:45 CET 2013


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 at redhat.com>
---
 src/hw/usb-xhci.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/src/hw/usb-xhci.c b/src/hw/usb-xhci.c
index 14f243c..dc98e5d 100644
--- a/src/hw/usb-xhci.c
+++ b/src/hw/usb-xhci.c
@@ -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);
-- 
1.8.3.1




More information about the SeaBIOS mailing list