From: Gerd Hoffmann Date: Fri, 6 Dec 2013 15:08:01 +0000 (+0100) Subject: xhci: allocate scratch pad buffers X-Git-Tag: rel-1.7.5-rc1~68 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=d42b795516c0efdcb4bded346872d69c5882ee62;p=seabios.git xhci: allocate scratch pad buffers 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 --- 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);