From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55343) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Xj3ZU-0000y7-9H for qemu-devel@nongnu.org; Tue, 28 Oct 2014 06:00:18 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Xj3ZK-0003Xk-Se for qemu-devel@nongnu.org; Tue, 28 Oct 2014 06:00:12 -0400 Received: from mx1.redhat.com ([209.132.183.28]:60311) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Xj3ZK-0003VG-LR for qemu-devel@nongnu.org; Tue, 28 Oct 2014 06:00:02 -0400 Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s9SA016i019977 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL) for ; Tue, 28 Oct 2014 06:00:01 -0400 Message-ID: <544F691E.9080300@redhat.com> Date: Tue, 28 Oct 2014 10:59:58 +0100 From: Hans de Goede MIME-Version: 1.0 References: <1414490237-27815-1-git-send-email-kraxel@redhat.com> In-Reply-To: <1414490237-27815-1-git-send-email-kraxel@redhat.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v2] xhci: add property to turn on/off streams support List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Gerd Hoffmann , qemu-devel@nongnu.org Cc: Markus Armbruster , "Dr. David Alan Gilbert" Hi, On 10/28/2014 10:57 AM, Gerd Hoffmann wrote: > streams support in usb-redir and usb-host works only with recent enough > versions of the support libraries (libusbredir and libusbx). Failure > mode is rather unelegant: Any stream usb transfers will throw stall > errors. Turning off support for streams in the xhci host controller > will work better as the guest can figure beforehand that streams are > not going to work. > > Signed-off-by: Gerd Hoffmann Looks good: Reviewed-by: Hans de Goede Regards, Hans > --- > hw/usb/hcd-xhci.c | 15 ++++++++++++--- > 1 file changed, 12 insertions(+), 3 deletions(-) > > diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c > index a27c9d3..2930b72 100644 > --- a/hw/usb/hcd-xhci.c > +++ b/hw/usb/hcd-xhci.c > @@ -459,6 +459,7 @@ struct XHCIState { > uint32_t numintrs; > uint32_t numslots; > uint32_t flags; > + uint32_t max_pstreams_mask; > > /* Operational Registers */ > uint32_t usbcmd; > @@ -500,6 +501,7 @@ enum xhci_flags { > XHCI_FLAG_USE_MSI_X, > XHCI_FLAG_SS_FIRST, > XHCI_FLAG_FORCE_PCIE_ENDCAP, > + XHCI_FLAG_ENABLE_STREAMS, > }; > > static void xhci_kick_ep(XHCIState *xhci, unsigned int slotid, > @@ -1384,7 +1386,7 @@ static void xhci_init_epctx(XHCIEPContext *epctx, > epctx->pctx = pctx; > epctx->max_psize = ctx[1]>>16; > epctx->max_psize *= 1+((ctx[1]>>8)&0xff); > - epctx->max_pstreams = (ctx[0] >> 10) & 0xf; > + epctx->max_pstreams = (ctx[0] >> 10) & epctx->xhci->max_pstreams_mask; > epctx->lsa = (ctx[0] >> 15) & 1; > if (epctx->max_pstreams) { > xhci_alloc_streams(epctx, dequeue); > @@ -2956,9 +2958,9 @@ static uint64_t xhci_cap_read(void *ptr, hwaddr reg, unsigned size) > break; > case 0x10: /* HCCPARAMS */ > if (sizeof(dma_addr_t) == 4) { > - ret = 0x00087000; > + ret = 0x00080000 | (xhci->max_pstreams_mask << 12); > } else { > - ret = 0x00087001; > + ret = 0x00080001 | (xhci->max_pstreams_mask << 12); > } > break; > case 0x14: /* DBOFF */ > @@ -3590,6 +3592,11 @@ static int usb_xhci_initfn(struct PCIDevice *dev) > if (xhci->numslots < 1) { > xhci->numslots = 1; > } > + if (xhci_get_flag(xhci, XHCI_FLAG_ENABLE_STREAMS)) { > + xhci->max_pstreams_mask = 7; /* == 256 primary streams */ > + } else { > + xhci->max_pstreams_mask = 0; > + } > > xhci->mfwrap_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, xhci_mfwrap_timer, xhci); > > @@ -3853,6 +3860,8 @@ static Property xhci_properties[] = { > XHCIState, flags, XHCI_FLAG_SS_FIRST, true), > DEFINE_PROP_BIT("force-pcie-endcap", XHCIState, flags, > XHCI_FLAG_FORCE_PCIE_ENDCAP, false), > + DEFINE_PROP_BIT("streams", XHCIState, flags, > + XHCI_FLAG_ENABLE_STREAMS, true), > DEFINE_PROP_UINT32("intrs", XHCIState, numintrs, MAXINTRS), > DEFINE_PROP_UINT32("slots", XHCIState, numslots, MAXSLOTS), > DEFINE_PROP_UINT32("p2", XHCIState, numports_2, 4), >