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: Mathias Nyman Message-Id: Date: Fri, 8 Feb 2019 14:35:02 +0200 To: Srinath Mannam 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: T24gMDcuMDIuMjAxOSAxNzoxNywgU3JpbmF0aCBNYW5uYW0gd3JvdGU6Cj4gSGkgTWF0aGlhcywK PiAKPiBUaGFua3MgZm9yIHJldmlldywgcGxlYXNlIHNlZSBteSBjb21tZW50cyBiZWxvdyBpbmxp bmUuCj4gCj4gT24gVGh1LCBGZWIgNywgMjAxOSBhdCA4OjMyIFBNIE1hdGhpYXMgTnltYW4KPiA8 bWF0aGlhcy5ueW1hbkBsaW51eC5pbnRlbC5jb20+IHdyb3RlOgo+Pgo+PiBPbiAwNS4wMi4yMDE5 IDA4OjE4LCBTcmluYXRoIE1hbm5hbSB3cm90ZToKPj4+IEFkZCBhIHF1aXJrIHRvIHJlc2V0IHhI Q0kgcG9ydCBQSFkgb24gcG9ydCBkaXNjb25uZWN0IGV2ZW50Lgo+Pj4gU3RpbmdyYXkgVVNCIEhT IFBIWSBoYXMgYW4gaXNzdWUsIHRoYXQgVVNCIEhpZ2ggU3BlZWQgZGV2aWNlIGRldGVjdGVkCj4+ PiBhdCBGdWxsIFNwZWVkIGFmdGVyIHRoZSBzYW1lIHBvcnQgaGFzIGNvbm5lY3RlZCB0byBGdWxs IHNwZWVkIGRldmljZS4KPj4+IFRoaXMgcHJvYmxlbSBjYW4gYmUgcmVzb2x2ZWQgd2l0aCB0aGF0 IHBvcnQgUEhZIHJlc2V0IG9uIGRpc2Nvbm5lY3QuCj4+Pgo+Pj4gU2lnbmVkLW9mZi1ieTogU3Jp bmF0aCBNYW5uYW0gPHNyaW5hdGgubWFubmFtQGJyb2FkY29tLmNvbT4KPj4+IFJldmlld2VkLWJ5 OiBSYXkgSnVpIDxyYXkuanVpQGJyb2FkY29tLmNvbT4KPj4+IC0tLQo+Pj4gICAgZHJpdmVycy91 c2IvY29yZS9oY2QuYyAgICAgICB8ICA2ICsrKysrKwo+Pj4gICAgZHJpdmVycy91c2IvY29yZS9w aHkuYyAgICAgICB8IDIxICsrKysrKysrKysrKysrKysrKysrKwo+Pj4gICAgZHJpdmVycy91c2Iv Y29yZS9waHkuaCAgICAgICB8ICAxICsKPj4+ICAgIGRyaXZlcnMvdXNiL2hvc3QveGhjaS1wbGF0 LmMgfCAgMyArKysKPj4+ICAgIGRyaXZlcnMvdXNiL2hvc3QveGhjaS1yaW5nLmMgfCAgOSArKysr KystLS0KPj4+ICAgIGRyaXZlcnMvdXNiL2hvc3QveGhjaS5oICAgICAgfCAgMSArCj4+PiAgICBp bmNsdWRlL2xpbnV4L3VzYi9oY2QuaCAgICAgIHwgIDEgKwo+Pj4gICAgNyBmaWxlcyBjaGFuZ2Vk LCAzOSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQo+Pj4KPj4+IGRpZmYgLS1naXQgYS9k cml2ZXJzL3VzYi9jb3JlL2hjZC5jIGIvZHJpdmVycy91c2IvY29yZS9oY2QuYwo+Pj4gaW5kZXgg MDE1YjEyNi4uZTJiODdhNiAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMK Pj4+ICsrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKPj4+IEBAIC0yNjYzLDYgKzI2NjMsMTIg QEAgaW50IHVzYl9oY2RfZmluZF9yYXdfcG9ydF9udW1iZXIoc3RydWN0IHVzYl9oY2QgKmhjZCwg aW50IHBvcnQxKQo+Pj4gICAgICAgIHJldHVybiBoY2QtPmRyaXZlci0+ZmluZF9yYXdfcG9ydF9u dW1iZXIoaGNkLCBwb3J0MSk7Cj4+PiAgICB9Cj4+Pgo+Pj4gK2ludCB1c2JfaGNkX3BoeV9wb3J0 X3Jlc2V0KHN0cnVjdCB1c2JfaGNkICpoY2QsIGludCBwb3J0KQo+Pj4gK3sKPj4+ICsgICAgIHJl dHVybiB1c2JfcGh5X3Jvb3RodWJfcG9ydF9yZXNldChoY2QtPnBoeV9yb290aHViLCBwb3J0KTsK Pj4+ICt9Cj4+PiArRVhQT1JUX1NZTUJPTF9HUEwodXNiX2hjZF9waHlfcG9ydF9yZXNldCk7Cj4+ PiArCj4+PiAgICBzdGF0aWMgaW50IHVzYl9oY2RfcmVxdWVzdF9pcnFzKHN0cnVjdCB1c2JfaGNk ICpoY2QsCj4+PiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaXJxbnVtLCB1bnNpZ25lZCBs b25nIGlycWZsYWdzKQo+Pj4gICAgewo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUv cGh5LmMgYi9kcml2ZXJzL3VzYi9jb3JlL3BoeS5jCj4+PiBpbmRleCAzOGIyYzc3Li5jNjQ3Njdk IDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVycy91c2IvY29yZS9waHkuYwo+Pj4gKysrIGIvZHJpdmVy cy91c2IvY29yZS9waHkuYwo+Pj4gQEAgLTE2Miw2ICsxNjIsMjcgQEAgdm9pZCB1c2JfcGh5X3Jv b3RodWJfcG93ZXJfb2ZmKHN0cnVjdCB1c2JfcGh5X3Jvb3RodWIgKnBoeV9yb290aHViKQo+Pj4g ICAgfQo+Pj4gICAgRVhQT1JUX1NZTUJPTF9HUEwodXNiX3BoeV9yb290aHViX3Bvd2VyX29mZik7 Cj4+Pgo+Pj4gK2ludCB1c2JfcGh5X3Jvb3RodWJfcG9ydF9yZXNldChzdHJ1Y3QgdXNiX3BoeV9y b290aHViICpwaHlfcm9vdGh1YiwgaW50IHBvcnQpCj4+PiArewo+Pj4gKyAgICAgc3RydWN0IHVz Yl9waHlfcm9vdGh1YiAqcm9vdGh1Yl9lbnRyeTsKPj4+ICsgICAgIHN0cnVjdCBsaXN0X2hlYWQg KmhlYWQ7Cj4+PiArICAgICBpbnQgaSA9IDA7Cj4+PiArCj4+PiArICAgICBpZiAoIXBoeV9yb290 aHViKQo+Pj4gKyAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPj4+ICsKPj4+ICsgICAgIGhl YWQgPSAmcGh5X3Jvb3RodWItPmxpc3Q7Cj4+PiArCj4+PiArICAgICBsaXN0X2Zvcl9lYWNoX2Vu dHJ5KHJvb3RodWJfZW50cnksIGhlYWQsIGxpc3QpIHsKPj4+ICsgICAgICAgICAgICAgaWYgKGkg PT0gcG9ydCkKPj4+ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGh5X3Jlc2V0KHJvb3Ro dWJfZW50cnktPnBoeSk7Cj4+PiArICAgICAgICAgICAgIGkrKzsKPj4+ICsgICAgIH0KPj4KPj4g SSdtIG5vdCB0aGF0IGZhbWlsaWFyIHdpdGggU29DJ3MgdGhhdCBoYXZlIHNldmVyYWwgUEhZcyBw ZXIgY29udHJvbGxlciwKPj4gYnV0IHRoaXMgbG9va3Mgb2RkLgo+Pgo+PiBGb3IgdGhlIGFib3Zl IGNvZGUgdG8gd29yayB3b3VsZG4ndCBpdCByZXF1aXJlIHRoYXQgZWFjaCBwb3J0IGhhcyB0aGVp ciBvd24gUEhZLAo+PiBhbmQgdGhlIFBIWXMgYXJlIGFkZGVkIHRvIHRoZSBsaXN0IG9mIHVzYl9w aHlfcm9vdGh1YiBpcyBpbiB0aGUgc2FtZSBvcmRlciBhcyB1c2IgcG9ydHM/Cj4+Cj4+IE9yIGlz IHRoZXJlIHNvbWV0aGluZyBJIGRvbid0IHVuZGVyc3RhbmQgaGVyZT8KPj4KPiBJbiBvdXIgU09D IChTdGluZ3JheSksIHhIQ0kgY29udHJvbGxlciBoYXMgdGhyZWUgcG9ydHMgYW5kIGVhY2ggcG9y dAo+IGNvbm5lY3RlZCB0byBzZXBhcmF0ZSBQSFkuCj4gU3RpbmdyYXkgeEhDSSBjb250cm9sbGVy IHN1cHBvcnRzIGJvdGggU1MgYW5kIEhTIHBvcnRzIGFuZCBjb25uZWN0ZWQKPiBzZXBhcmF0ZSBQ SFlzLgo+IFdlIHBhc3NlZCBQSFkgcGhhbmRsZXJzIGluIHhIQ0kgRFQgbm9kZSBpbiB0aGUgb3Jk ZXIgb2YgcG9ydCBudW1iZXJzLgo+IGFzIHNob3duIGJlbG93IHhIQ0kgRFQgbm9kZS4KPiBTbyB0 aGF0IGFsbCBQSFlzIGFkZGVkIHRvIHVzYl9waHlfcm9vdGh1YiBhcmUgaW4gb3JkZXIgb2YgcG9y dCBudW1iZXJzLgo+ICAgeGhjaTE6IHVzYkAxMTAwMCB7Cj4gICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbXBhdGlibGUgPSAiZ2VuZXJpYy14aGNpIjsKPiAgICAgICAgICAgICAgICAgICAgICAg ICAgcmVnID0gPDB4MDAwMTEwMDAgMHgxMDAwPjsKPiAgICAgICAgICAgICAgICAgICAgICAgICAg aW50ZXJydXB0cyA9IDxHSUNfU1BJIDI2MyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKPiAgICAgICAg ICAgICAgICAgICAgICAgICAgcGh5cyA9IDwmdXNiMV9waHkxPiwgPCZ1c2JwaHkyPiwgPCZ1c2Ix X3BoeTA+Owo+ICAgICAgICAgICAgICAgICAgICAgICAgICBwaHktbmFtZXMgPSAicGh5MCIsICJw aHkxIiwgInBoeTIiOwo+ICAgICAgICAgICAgICAgICAgICAgICAgICBkbWEtY29oZXJlbnQ7Cj4g ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9ICJkaXNhYmxlZCI7Cj4gfTsKPiBCdXQg d2UgaGF2ZSBpc3N1ZSB3aXRoIEhTIFBIWXMsIHNvIHRoYXQgdGhvc2UgUEhZcyBhcmUgcmVxdWly ZWQgdG8gcmVzZXQuCgpUaGlzIGlzIHZlcnkgc3BlY2lmaWMgdG8geW91ciBTT0MuCkEgcXVpY2sg Z3JlcCBzaG93cyBtb3N0IHhoY2kgY29udHJvbGxlcnMgaGF2ZSBvbmUgb3IgdHdvIFBIWXMgaW4g dG90YWwuCgpUaGUgc3VnZ2VzdGVkIHVzYl9waHlfcm9vdGh1Yl9wb3J0X3Jlc2V0KCkgYWJvdmUg d2lsbCBvbmx5IHdvcmsgZm9yIHlvdXIgU09DLgpJIHRoaW5rIGl0IHdvdWxkIGJlIGJldHRlciB0 byBoYXZlIGEgc3RpbmdyYXkgc3BlY2lmaWMgcXVpcmsvd29ya2Fyb3VuZCB3aGVyZSB5b3UKY2Fu IGZpbmQgdGhlIHJpZ2h0IFBIWSB0byByZXNldCBiYXNlZCBvbiBzb210aGluZyBsaWtlIHBvcnQg bnVtYmVyIGFuZCBQSFkgbmFtZS4KCkZvciBhIGdlbmVyaWMgc29sdXRpb24gd2Ugd291bGQgbmVl ZCBhIGJldHRlciB3YXkgdG8gbWFwIHVzYiBwb3J0cyB0byB0aGUgUEhZIGl0IHVzZXMuCgotTWF0 aGlhcwo= From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mathias Nyman Subject: Re: [PATCH 2/2] drivers: xhci: Add quirk to reset xHCI port PHY Date: Fri, 8 Feb 2019 14:35:02 +0200 Message-ID: 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> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: Content-Language: en-US Sender: linux-kernel-owner@vger.kernel.org To: Srinath Mannam 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: devicetree@vger.kernel.org On 07.02.2019 17:17, Srinath Mannam wrote: > 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. This is very specific to your SOC. A quick grep shows most xhci controllers have one or two PHYs in total. The suggested usb_phy_roothub_port_reset() above will only work for your SOC. I think it would be better to have a stingray specific quirk/workaround where you can find the right PHY to reset based on somthing like port number and PHY name. For a generic solution we would need a better way to map usb ports to the PHY it uses. -Mathias