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=-7.1 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED 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 9E542C282C2 for ; Thu, 7 Feb 2019 15:17:51 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 680142190A for ; Thu, 7 Feb 2019 15:17:51 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=broadcom.com header.i=@broadcom.com header.b="ef/p43L+" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726989AbfBGPRu (ORCPT ); Thu, 7 Feb 2019 10:17:50 -0500 Received: from mail-wm1-f65.google.com ([209.85.128.65]:51060 "EHLO mail-wm1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726270AbfBGPRt (ORCPT ); Thu, 7 Feb 2019 10:17:49 -0500 Received: by mail-wm1-f65.google.com with SMTP id z5so253114wmf.0 for ; Thu, 07 Feb 2019 07:17:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=f6nYbk9CfPOAf3jV4FS+0waz/Vh9XejXm1uS2dqF/hU=; b=ef/p43L+DfaK/3/XJz9rI92id63xSN+v5mt3Mf7foy1nvv2MR3Ew+6qF3tMnheQIU9 oJGalN6tos++BnnhnE3UZFsS6R7oMr9VgGF9hZ7kXlI6RuER1rnyOBJEMd8SZbTF+Yd7 Lyr2iQfE//T6LylYVTovoOvLBL32Yn42iEdhQ= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=f6nYbk9CfPOAf3jV4FS+0waz/Vh9XejXm1uS2dqF/hU=; b=kh20PSJnxFWaqAK8RIjk/IrE/LStE3RQ7pXKbgb+pAE7GSqg+ySmYvuEfRGV6eSAeX J3pqPw/iqQLZdpjgO7Bwga0lQ2u6NWMfI6e0OHmXVFESIy3QVsXBsr8zpT2wLNP/TRWM 69D3UuSSUWHXBRHFqgMXfCaHVQuIYMRwk3TRjQ07QKaNOhlJLZxvz0hd3cb2Jznj5aFK c+is3ZrExfJUuIelw7fk2unzc3mi5NaZKiua57TQFFCp7DI9KY3dGTq7eGLI60vwokv7 BaFHmB8OImUFmfaCdA25RTSAKa07g31FfiTGpUXCC6rO+6AVtxCrVVgFlHNpCDuCpUq+ a0MQ== X-Gm-Message-State: AHQUAuZw/O8A/3kcpPRJcY+RFfxE32WgjRAZ38wY7C6XdSh1qIjeqkcb 6sQ6H0jn/dV4zbIFh/YksOL9JoXG1YuGfarkeC9HKg== X-Google-Smtp-Source: AHgI3Iaks6FDiEYiE95lePN9/mnwz6dALiqSGtYZg59OqczYKaZ9V9csnpbKPQkS7HMy/oi4jC4pPhS0j7LR16H9Ja4= X-Received: by 2002:a1c:2c6:: with SMTP id 189mr7670003wmc.21.1549552667171; Thu, 07 Feb 2019 07:17:47 -0800 (PST) MIME-Version: 1.0 References: <1549347534-11320-1-git-send-email-srinath.mannam@broadcom.com> <1549347534-11320-3-git-send-email-srinath.mannam@broadcom.com> <6392f206-9db2-5506-9e5d-cdf2b784d32e@linux.intel.com> In-Reply-To: <6392f206-9db2-5506-9e5d-cdf2b784d32e@linux.intel.com> From: Srinath Mannam Date: Thu, 7 Feb 2019 20:47:34 +0530 Message-ID: Subject: Re: [PATCH 2/2] drivers: xhci: Add quirk to reset xHCI port PHY To: Mathias Nyman Cc: Greg Kroah-Hartman , Mathias Nyman , Rob Herring , Mark Rutland , linux-usb@vger.kernel.org, devicetree@vger.kernel.org, Linux Kernel Mailing List Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Mathias, Thanks for review, please see my comments below inline. On Thu, Feb 7, 2019 at 8:32 PM Mathias Nyman wrote: > > On 05.02.2019 08:18, Srinath Mannam wrote: > > Add a quirk to reset xHCI port PHY on port disconnect event. > > Stingray USB HS PHY has an issue, that USB High Speed device detected > > at Full Speed after the same port has connected to Full speed device. > > This problem can be resolved with that port PHY reset on disconnect. > > > > Signed-off-by: Srinath Mannam > > Reviewed-by: Ray Jui > > --- > > drivers/usb/core/hcd.c | 6 ++++++ > > drivers/usb/core/phy.c | 21 +++++++++++++++++++++ > > drivers/usb/core/phy.h | 1 + > > drivers/usb/host/xhci-plat.c | 3 +++ > > drivers/usb/host/xhci-ring.c | 9 ++++++--- > > drivers/usb/host/xhci.h | 1 + > > include/linux/usb/hcd.h | 1 + > > 7 files changed, 39 insertions(+), 3 deletions(-) > > > > diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c > > index 015b126..e2b87a6 100644 > > --- a/drivers/usb/core/hcd.c > > +++ b/drivers/usb/core/hcd.c > > @@ -2663,6 +2663,12 @@ int usb_hcd_find_raw_port_number(struct usb_hcd *hcd, int port1) > > return hcd->driver->find_raw_port_number(hcd, port1); > > } > > > > +int usb_hcd_phy_port_reset(struct usb_hcd *hcd, int port) > > +{ > > + return usb_phy_roothub_port_reset(hcd->phy_roothub, port); > > +} > > +EXPORT_SYMBOL_GPL(usb_hcd_phy_port_reset); > > + > > static int usb_hcd_request_irqs(struct usb_hcd *hcd, > > unsigned int irqnum, unsigned long irqflags) > > { > > diff --git a/drivers/usb/core/phy.c b/drivers/usb/core/phy.c > > index 38b2c77..c64767d 100644 > > --- a/drivers/usb/core/phy.c > > +++ b/drivers/usb/core/phy.c > > @@ -162,6 +162,27 @@ void usb_phy_roothub_power_off(struct usb_phy_roothub *phy_roothub) > > } > > EXPORT_SYMBOL_GPL(usb_phy_roothub_power_off); > > > > +int usb_phy_roothub_port_reset(struct usb_phy_roothub *phy_roothub, int port) > > +{ > > + struct usb_phy_roothub *roothub_entry; > > + struct list_head *head; > > + int i = 0; > > + > > + if (!phy_roothub) > > + return -EINVAL; > > + > > + head = &phy_roothub->list; > > + > > + list_for_each_entry(roothub_entry, head, list) { > > + if (i == port) > > + return phy_reset(roothub_entry->phy); > > + i++; > > + } > > I'm not that familiar with SoC's that have several PHYs per controller, > but this looks odd. > > For the above code to work wouldn't it require that each port has their own PHY, > and the PHYs are added to the list of usb_phy_roothub is in the same order as usb ports? > > Or is there something I don't understand here? > In our SOC (Stingray), xHCI controller has three ports and each port connected to separate PHY. Stingray xHCI controller supports both SS and HS ports and connected separate PHYs. We passed PHY phandlers in xHCI DT node in the order of port numbers. as shown below xHCI DT node. So that all PHYs added to usb_phy_roothub are in order of port numbers. xhci1: usb@11000 { compatible = "generic-xhci"; reg = <0x00011000 0x1000>; interrupts = ; phys = <&usb1_phy1>, <&usbphy2>, <&usb1_phy0>; phy-names = "phy0", "phy1", "phy2"; dma-coherent; status = "disabled"; }; But we have issue with HS PHYs, so that those PHYs are required to reset. Regards, Srinath. > -Mathias > 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: [2/2] drivers: xhci: Add quirk to reset xHCI port PHY From: Srinath Mannam Message-Id: Date: Thu, 7 Feb 2019 20:47:34 +0530 To: Mathias Nyman Cc: Greg Kroah-Hartman , Mathias Nyman , Rob Herring , Mark Rutland , linux-usb@vger.kernel.org, devicetree@vger.kernel.org, Linux Kernel Mailing List List-ID: SGkgTWF0aGlhcywKClRoYW5rcyBmb3IgcmV2aWV3LCBwbGVhc2Ugc2VlIG15IGNvbW1lbnRzIGJl bG93IGlubGluZS4KCk9uIFRodSwgRmViIDcsIDIwMTkgYXQgODozMiBQTSBNYXRoaWFzIE55bWFu CjxtYXRoaWFzLm55bWFuQGxpbnV4LmludGVsLmNvbT4gd3JvdGU6Cj4KPiBPbiAwNS4wMi4yMDE5 IDA4OjE4LCBTcmluYXRoIE1hbm5hbSB3cm90ZToKPiA+IEFkZCBhIHF1aXJrIHRvIHJlc2V0IHhI Q0kgcG9ydCBQSFkgb24gcG9ydCBkaXNjb25uZWN0IGV2ZW50Lgo+ID4gU3RpbmdyYXkgVVNCIEhT IFBIWSBoYXMgYW4gaXNzdWUsIHRoYXQgVVNCIEhpZ2ggU3BlZWQgZGV2aWNlIGRldGVjdGVkCj4g PiBhdCBGdWxsIFNwZWVkIGFmdGVyIHRoZSBzYW1lIHBvcnQgaGFzIGNvbm5lY3RlZCB0byBGdWxs IHNwZWVkIGRldmljZS4KPiA+IFRoaXMgcHJvYmxlbSBjYW4gYmUgcmVzb2x2ZWQgd2l0aCB0aGF0 IHBvcnQgUEhZIHJlc2V0IG9uIGRpc2Nvbm5lY3QuCj4gPgo+ID4gU2lnbmVkLW9mZi1ieTogU3Jp bmF0aCBNYW5uYW0gPHNyaW5hdGgubWFubmFtQGJyb2FkY29tLmNvbT4KPiA+IFJldmlld2VkLWJ5 OiBSYXkgSnVpIDxyYXkuanVpQGJyb2FkY29tLmNvbT4KPiA+IC0tLQo+ID4gICBkcml2ZXJzL3Vz Yi9jb3JlL2hjZC5jICAgICAgIHwgIDYgKysrKysrCj4gPiAgIGRyaXZlcnMvdXNiL2NvcmUvcGh5 LmMgICAgICAgfCAyMSArKysrKysrKysrKysrKysrKysrKysKPiA+ICAgZHJpdmVycy91c2IvY29y ZS9waHkuaCAgICAgICB8ICAxICsKPiA+ICAgZHJpdmVycy91c2IvaG9zdC94aGNpLXBsYXQuYyB8 ICAzICsrKwo+ID4gICBkcml2ZXJzL3VzYi9ob3N0L3hoY2ktcmluZy5jIHwgIDkgKysrKysrLS0t Cj4gPiAgIGRyaXZlcnMvdXNiL2hvc3QveGhjaS5oICAgICAgfCAgMSArCj4gPiAgIGluY2x1ZGUv bGludXgvdXNiL2hjZC5oICAgICAgfCAgMSArCj4gPiAgIDcgZmlsZXMgY2hhbmdlZCwgMzkgaW5z ZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKPiA+Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91 c2IvY29yZS9oY2QuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKPiA+IGluZGV4IDAxNWIxMjYu LmUyYjg3YTYgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCj4gPiArKysg Yi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCj4gPiBAQCAtMjY2Myw2ICsyNjYzLDEyIEBAIGludCB1 c2JfaGNkX2ZpbmRfcmF3X3BvcnRfbnVtYmVyKHN0cnVjdCB1c2JfaGNkICpoY2QsIGludCBwb3J0 MSkKPiA+ICAgICAgIHJldHVybiBoY2QtPmRyaXZlci0+ZmluZF9yYXdfcG9ydF9udW1iZXIoaGNk LCBwb3J0MSk7Cj4gPiAgIH0KPiA+Cj4gPiAraW50IHVzYl9oY2RfcGh5X3BvcnRfcmVzZXQoc3Ry dWN0IHVzYl9oY2QgKmhjZCwgaW50IHBvcnQpCj4gPiArewo+ID4gKyAgICAgcmV0dXJuIHVzYl9w aHlfcm9vdGh1Yl9wb3J0X3Jlc2V0KGhjZC0+cGh5X3Jvb3RodWIsIHBvcnQpOwo+ID4gK30KPiA+ ICtFWFBPUlRfU1lNQk9MX0dQTCh1c2JfaGNkX3BoeV9wb3J0X3Jlc2V0KTsKPiA+ICsKPiA+ICAg c3RhdGljIGludCB1c2JfaGNkX3JlcXVlc3RfaXJxcyhzdHJ1Y3QgdXNiX2hjZCAqaGNkLAo+ID4g ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaXJxbnVtLCB1bnNpZ25lZCBsb25nIGlycWZsYWdz KQo+ID4gICB7Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9waHkuYyBiL2RyaXZl cnMvdXNiL2NvcmUvcGh5LmMKPiA+IGluZGV4IDM4YjJjNzcuLmM2NDc2N2QgMTAwNjQ0Cj4gPiAt LS0gYS9kcml2ZXJzL3VzYi9jb3JlL3BoeS5jCj4gPiArKysgYi9kcml2ZXJzL3VzYi9jb3JlL3Bo eS5jCj4gPiBAQCAtMTYyLDYgKzE2MiwyNyBAQCB2b2lkIHVzYl9waHlfcm9vdGh1Yl9wb3dlcl9v ZmYoc3RydWN0IHVzYl9waHlfcm9vdGh1YiAqcGh5X3Jvb3RodWIpCj4gPiAgIH0KPiA+ICAgRVhQ T1JUX1NZTUJPTF9HUEwodXNiX3BoeV9yb290aHViX3Bvd2VyX29mZik7Cj4gPgo+ID4gK2ludCB1 c2JfcGh5X3Jvb3RodWJfcG9ydF9yZXNldChzdHJ1Y3QgdXNiX3BoeV9yb290aHViICpwaHlfcm9v dGh1YiwgaW50IHBvcnQpCj4gPiArewo+ID4gKyAgICAgc3RydWN0IHVzYl9waHlfcm9vdGh1YiAq cm9vdGh1Yl9lbnRyeTsKPiA+ICsgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7Cj4gPiArICAg ICBpbnQgaSA9IDA7Cj4gPiArCj4gPiArICAgICBpZiAoIXBoeV9yb290aHViKQo+ID4gKyAgICAg ICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiA+ICsKPiA+ICsgICAgIGhlYWQgPSAmcGh5X3Jvb3Ro dWItPmxpc3Q7Cj4gPiArCj4gPiArICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KHJvb3RodWJfZW50 cnksIGhlYWQsIGxpc3QpIHsKPiA+ICsgICAgICAgICAgICAgaWYgKGkgPT0gcG9ydCkKPiA+ICsg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGh5X3Jlc2V0KHJvb3RodWJfZW50cnktPnBoeSk7 Cj4gPiArICAgICAgICAgICAgIGkrKzsKPiA+ICsgICAgIH0KPgo+IEknbSBub3QgdGhhdCBmYW1p bGlhciB3aXRoIFNvQydzIHRoYXQgaGF2ZSBzZXZlcmFsIFBIWXMgcGVyIGNvbnRyb2xsZXIsCj4g YnV0IHRoaXMgbG9va3Mgb2RkLgo+Cj4gRm9yIHRoZSBhYm92ZSBjb2RlIHRvIHdvcmsgd291bGRu J3QgaXQgcmVxdWlyZSB0aGF0IGVhY2ggcG9ydCBoYXMgdGhlaXIgb3duIFBIWSwKPiBhbmQgdGhl IFBIWXMgYXJlIGFkZGVkIHRvIHRoZSBsaXN0IG9mIHVzYl9waHlfcm9vdGh1YiBpcyBpbiB0aGUg c2FtZSBvcmRlciBhcyB1c2IgcG9ydHM/Cj4KPiBPciBpcyB0aGVyZSBzb21ldGhpbmcgSSBkb24n dCB1bmRlcnN0YW5kIGhlcmU/Cj4KSW4gb3VyIFNPQyAoU3RpbmdyYXkpLCB4SENJIGNvbnRyb2xs ZXIgaGFzIHRocmVlIHBvcnRzIGFuZCBlYWNoIHBvcnQKY29ubmVjdGVkIHRvIHNlcGFyYXRlIFBI WS4KU3RpbmdyYXkgeEhDSSBjb250cm9sbGVyIHN1cHBvcnRzIGJvdGggU1MgYW5kIEhTIHBvcnRz IGFuZCBjb25uZWN0ZWQKc2VwYXJhdGUgUEhZcy4KV2UgcGFzc2VkIFBIWSBwaGFuZGxlcnMgaW4g eEhDSSBEVCBub2RlIGluIHRoZSBvcmRlciBvZiBwb3J0IG51bWJlcnMuCmFzIHNob3duIGJlbG93 IHhIQ0kgRFQgbm9kZS4KU28gdGhhdCBhbGwgUEhZcyBhZGRlZCB0byB1c2JfcGh5X3Jvb3RodWIg YXJlIGluIG9yZGVyIG9mIHBvcnQgbnVtYmVycy4KIHhoY2kxOiB1c2JAMTEwMDAgewogICAgICAg ICAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gImdlbmVyaWMteGhjaSI7CiAgICAgICAgICAg ICAgICAgICAgICAgIHJlZyA9IDwweDAwMDExMDAwIDB4MTAwMD47CiAgICAgICAgICAgICAgICAg ICAgICAgIGludGVycnVwdHMgPSA8R0lDX1NQSSAyNjMgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAg ICAgICAgICAgICAgICAgICAgICAgIHBoeXMgPSA8JnVzYjFfcGh5MT4sIDwmdXNicGh5Mj4sIDwm dXNiMV9waHkwPjsKICAgICAgICAgICAgICAgICAgICAgICAgcGh5LW5hbWVzID0gInBoeTAiLCAi cGh5MSIsICJwaHkyIjsKICAgICAgICAgICAgICAgICAgICAgICAgZG1hLWNvaGVyZW50OwogICAg ICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAiZGlzYWJsZWQiOwp9OwpCdXQgd2UgaGF2ZSBp c3N1ZSB3aXRoIEhTIFBIWXMsIHNvIHRoYXQgdGhvc2UgUEhZcyBhcmUgcmVxdWlyZWQgdG8gcmVz ZXQuCgpSZWdhcmRzLApTcmluYXRoLgo+IC1NYXRoaWFzCj4K