From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [RFC,v2] usb: xhci: add Immediate Data Transfer support From: Felipe Balbi Message-Id: <87lg2tmnk3.fsf@linux.intel.com> Date: Wed, 06 Feb 2019 08:35:40 +0200 To: Nicolas Saenz Julienne , oneukum@suse.com, Mathias Nyman Cc: Greg Kroah-Hartman , linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org List-ID: SGksCgpOaWNvbGFzIFNhZW56IEp1bGllbm5lIDxuc2FlbnpqdWxpZW5uZUBzdXNlLmRlPiB3cml0 ZXM6Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1yaW5nLmMgYi9kcml2ZXJz L3VzYi9ob3N0L3hoY2ktcmluZy5jCj4gaW5kZXggNDBmYTI1YzRkMDQxLi5hNGVmYmU2MmExYTMg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYwo+ICsrKyBiL2RyaXZl cnMvdXNiL2hvc3QveGhjaS1yaW5nLmMKPiBAQCAtMzI3Miw4ICszMjcyLDE1IEBAIGludCB4aGNp X3F1ZXVlX2J1bGtfdHgoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBnZnBfdCBtZW1fZmxhZ3MsCj4g IAkJCWZpZWxkIHw9IFRSQl9JT0M7Cj4gIAkJCW1vcmVfdHJic19jb21pbmcgPSBmYWxzZTsKPiAg CQkJdGQtPmxhc3RfdHJiID0gcmluZy0+ZW5xdWV1ZTsKPiArCj4gKwkJCWlmICh4aGNpX3VyYl9z dWl0YWJsZV9mb3JfaWR0KHVyYikpIHsKPiArCQkJCW1lbWNweSgmc2VuZF9hZGRyLCB1cmItPnRy YW5zZmVyX2J1ZmZlciwKPiArCQkJCSAgICAgICB0cmJfYnVmZl9sZW4pOwo+ICsJCQkJZmllbGQg fD0gVFJCX0lEVDsKPiArCQkJfQo+ICAJCX0KPiAgCj4gKwoKdHJhaWxpbmcgY2hhbmdlCgo+IEBA IC0zNDExLDYgKzM0MTgsMTIgQEAgaW50IHhoY2lfcXVldWVfY3RybF90eChzdHJ1Y3QgeGhjaV9o Y2QgKnhoY2ksIGdmcF90IG1lbV9mbGFncywKPiAgCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlcl9s ZW5ndGggPiAwKSB7Cj4gIAkJdTMyIGxlbmd0aF9maWVsZCwgcmVtYWluZGVyOwo+ICAKPiArCQlp ZiAoeGhjaV91cmJfc3VpdGFibGVfZm9yX2lkdCh1cmIpKSB7Cj4gKwkJCW1lbWNweSgmdXJiLT50 cmFuc2Zlcl9kbWEsIHVyYi0+dHJhbnNmZXJfYnVmZmVyLAo+ICsJCQkgICAgICAgdXJiLT50cmFu c2Zlcl9idWZmZXJfbGVuZ3RoKTsKPiArCQkJZmllbGQgfD0gVFJCX0lEVDsKPiArCQl9Cj4gKwo+ ICAJCXJlbWFpbmRlciA9IHhoY2lfdGRfcmVtYWluZGVyKHhoY2ksIDAsCj4gIAkJCQl1cmItPnRy YW5zZmVyX2J1ZmZlcl9sZW5ndGgsCj4gIAkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgs Cj4gQEAgLTM0MjAsNiArMzQzMyw3IEBAIGludCB4aGNpX3F1ZXVlX2N0cmxfdHgoc3RydWN0IHho Y2lfaGNkICp4aGNpLCBnZnBfdCBtZW1fZmxhZ3MsCj4gIAkJCQlUUkJfSU5UUl9UQVJHRVQoMCk7 Cj4gIAkJaWYgKHNldHVwLT5iUmVxdWVzdFR5cGUgJiBVU0JfRElSX0lOKQo+ICAJCQlmaWVsZCB8 PSBUUkJfRElSX0lOOwo+ICsKCnRyYWlsaW5nIGNoYW5nZQoKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy91c2IvaG9zdC94aGNpLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYwo+IGluZGV4IDAwNWU2 NTkyMjYwOC4uZGVjNjJmN2Y1ZGM4IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhj aS5jCj4gKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLmMKPiBAQCAtMTIzOCw2ICsxMjM4LDIx IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHhoY2lfcmVzdW1lKTsKPiAgCj4gIC8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSovCj4gIAo+ICsvKgo+ICsgKiBCeXBhc3MgdGhlIERNQSBtYXBwaW5nIGlmIFVSQiBpcyBz dWl0YWJsZSBmb3IgSW1tZWRpYXRlIFRyYW5zZmVyIChJRFQpLAo+ICsgKiB3ZSdsbCBjb3B5IHRo ZSBhY3R1YWwgZGF0YSBpbnRvIHRoZSBUUkIgYWRkcmVzcyByZWdpc3Rlci4gVGhpcyBpcyBsaW1p dGVkIHRvCj4gKyAqIHRyYW5zZmVycyB1cCB0byA4IGJ5dGVzIG9uIG91dHB1dCBlbmRwb2ludHMg b2YgYW55IGtpbmQgd2l0aCB3TWF4UGFja2V0U2l6ZQo+ICsgKiA+PSA4IGJ5dGVzLgo+ICsgKi8K PiArc3RhdGljIGludCB4aGNpX21hcF91cmJfZm9yX2RtYShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBz dHJ1Y3QgdXJiICp1cmIsCj4gKwkJCQlnZnBfdCBtZW1fZmxhZ3MpCj4gK3sKPiArCWlmICh4aGNp X3VyYl9zdWl0YWJsZV9mb3JfaWR0KHVyYikpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJcmV0dXJu IHVzYl9oY2RfbWFwX3VyYl9mb3JfZG1hKGhjZCwgdXJiLCBtZW1fZmxhZ3MpOwo+ICt9Cgpkb24n dCB5b3UgbmVlZCBhIG1hdGNoaW5nIHVubWFwX3VyYl9mb3JfZG1hKCk/PwoKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLmggYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuaAo+IGlu ZGV4IDY1MmRjMzZlMzAxMi4uOWQ3N2IwOTAxYWI3IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvdXNi L2hvc3QveGhjaS5oCj4gKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLmgKPiBAQCAtMTI5NSw2 ICsxMjk1LDggQEAgZW51bSB4aGNpX3NldHVwX2RldiB7Cj4gICNkZWZpbmUgVFJCX0lPQwkJCSgx PDw1KQo+ICAvKiBUaGUgYnVmZmVyIHBvaW50ZXIgY29udGFpbnMgaW1tZWRpYXRlIGRhdGEgKi8K PiAgI2RlZmluZSBUUkJfSURUCQkJKDE8PDYpCj4gKy8qIFREcyBzbWFsbGVyIHRoYW4gdGhpcyBt aWdodCB1c2UgSURUICovCgpUZWNobmljYWxseSwgIlREcyBhdCBtb3N0IHRoaXMiIHNpbmNlIHlv dSdyZSA4IGl0c2VsZiBpcyBhbiBhbGxvd2VkCnNpemUuCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 70946C282C2 for ; Wed, 6 Feb 2019 06:35:49 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 47C8E2175B for ; Wed, 6 Feb 2019 06:35:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727780AbfBFGfr (ORCPT ); Wed, 6 Feb 2019 01:35:47 -0500 Received: from mga11.intel.com ([192.55.52.93]:43539 "EHLO mga11.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725897AbfBFGfr (ORCPT ); Wed, 6 Feb 2019 01:35:47 -0500 X-Amp-Result: UNKNOWN X-Amp-Original-Verdict: FILE UNKNOWN X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 05 Feb 2019 22:35:46 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.58,338,1544515200"; d="asc'?scan'208";a="272848284" Received: from pipin.fi.intel.com (HELO localhost) ([10.237.72.175]) by orsmga004.jf.intel.com with ESMTP; 05 Feb 2019 22:35:44 -0800 From: Felipe Balbi To: Nicolas Saenz Julienne , oneukum@suse.com, Mathias Nyman Cc: Nicolas Saenz Julienne , Greg Kroah-Hartman , linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [RFC v2] usb: xhci: add Immediate Data Transfer support In-Reply-To: <20190205195647.29258-1-nsaenzjulienne@suse.de> References: <20190205195647.29258-1-nsaenzjulienne@suse.de> Date: Wed, 06 Feb 2019 08:35:40 +0200 Message-ID: <87lg2tmnk3.fsf@linux.intel.com> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha256; protocol="application/pgp-signature" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --=-=-= Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Hi, Nicolas Saenz Julienne writes: > diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c > index 40fa25c4d041..a4efbe62a1a3 100644 > --- a/drivers/usb/host/xhci-ring.c > +++ b/drivers/usb/host/xhci-ring.c > @@ -3272,8 +3272,15 @@ int xhci_queue_bulk_tx(struct xhci_hcd *xhci, gfp_= t mem_flags, > field |=3D TRB_IOC; > more_trbs_coming =3D false; > td->last_trb =3D ring->enqueue; > + > + if (xhci_urb_suitable_for_idt(urb)) { > + memcpy(&send_addr, urb->transfer_buffer, > + trb_buff_len); > + field |=3D TRB_IDT; > + } > } >=20=20 > + trailing change > @@ -3411,6 +3418,12 @@ int xhci_queue_ctrl_tx(struct xhci_hcd *xhci, gfp_= t mem_flags, > if (urb->transfer_buffer_length > 0) { > u32 length_field, remainder; >=20=20 > + if (xhci_urb_suitable_for_idt(urb)) { > + memcpy(&urb->transfer_dma, urb->transfer_buffer, > + urb->transfer_buffer_length); > + field |=3D TRB_IDT; > + } > + > remainder =3D xhci_td_remainder(xhci, 0, > urb->transfer_buffer_length, > urb->transfer_buffer_length, > @@ -3420,6 +3433,7 @@ int xhci_queue_ctrl_tx(struct xhci_hcd *xhci, gfp_t= mem_flags, > TRB_INTR_TARGET(0); > if (setup->bRequestType & USB_DIR_IN) > field |=3D TRB_DIR_IN; > + trailing change > diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c > index 005e65922608..dec62f7f5dc8 100644 > --- a/drivers/usb/host/xhci.c > +++ b/drivers/usb/host/xhci.c > @@ -1238,6 +1238,21 @@ EXPORT_SYMBOL_GPL(xhci_resume); >=20=20 > /*----------------------------------------------------------------------= ---*/ >=20=20 > +/* > + * Bypass the DMA mapping if URB is suitable for Immediate Transfer (IDT= ), > + * we'll copy the actual data into the TRB address register. This is lim= ited to > + * transfers up to 8 bytes on output endpoints of any kind with wMaxPack= etSize > + * >=3D 8 bytes. > + */ > +static int xhci_map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb, > + gfp_t mem_flags) > +{ > + if (xhci_urb_suitable_for_idt(urb)) > + return 0; > + > + return usb_hcd_map_urb_for_dma(hcd, urb, mem_flags); > +} don't you need a matching unmap_urb_for_dma()?? > diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h > index 652dc36e3012..9d77b0901ab7 100644 > --- a/drivers/usb/host/xhci.h > +++ b/drivers/usb/host/xhci.h > @@ -1295,6 +1295,8 @@ enum xhci_setup_dev { > #define TRB_IOC (1<<5) > /* The buffer pointer contains immediate data */ > #define TRB_IDT (1<<6) > +/* TDs smaller than this might use IDT */ Technically, "TDs at most this" since you're 8 itself is an allowed size. =2D-=20 balbi --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEElLzh7wn96CXwjh2IzL64meEamQYFAlxagDwACgkQzL64meEa mQYwwhAAmKBLft2kXtuShT+9jt2f6fYig0SD7rvHKd0/9YPC80Sts4eo0jyxNzPZ uFmWnYm2JHsPkm6btayxd+LK8MQt2WZoMk2eaNpO9SbJy50als10y6nZJIHWYRu3 fXSGbo4qHg52v9bsGkoNIwgRZ161CL7fETHePOfGBpbSvbCAZZ4f6kFW7n/UwRBm 9zCZw+VT3zOcAU6lc21qkoOsHlr1IRtSCurBD38qtUQ+OadintuGUnQHz781Juwp oadURjvZgpOqU3D9ITYp6xOgu+NjbpTVAhRrk+LyciMkGBswI00WUWndj/iT7dw8 XzUzaWEuJbtFeLCK5XWAFdTKaQoQcc6qPd0XoboBZDWq2zYnIPmodENrEGqqipbI nQMsh6xNIyOPLyyS9dypOCkaXnTznhoFNvNzjBKFJ2xS0DMTs7ZCZUU9mZLbqlzI jpkKixRXHkdOBpyw9PcKMVcBjCyd1TUbU39+29+Zb0yFxMbDznsr7oayMSy6DHIq 1PtA49eoEBGcRAXwdBL/AMfBn6MYRcXF+fnc8cRHvlNSuFVOgyghbGFggiAWTemu 3wvJObqIaR2f7g2L1tPKXMLqLCmwLECTGZAOgMRBvDawUFIrvTh1g7GqMey6YSnf /kYHybiQTY24cv4b5OytaU09UIKZ5bQZMIdwX6+ufPwD6sIgd3Q= =eW3F -----END PGP SIGNATURE----- --=-=-=--