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: usb: dwc2: Fix endless deferral probe From: Stefan Wahren Message-Id: <277384ef-b30c-fb5a-5ffe-1efc15c500bb@i2se.com> Date: Fri, 12 Jan 2018 09:06:40 +0100 To: Arnd Bergmann Cc: Felipe Balbi , Florian Fainelli , John Youn , Greg Kroah-Hartman , linux-usb@vger.kernel.org, Minas Harutyunyan , Kishon Vijay Abraham I , Eric Anholt , Linux ARM , Hans Verkuil List-ID: QW0gMTIuMDEuMjAxOCB1bSAwMDozMiBzY2hyaWViIEFybmQgQmVyZ21hbm46Cj4gT24gV2VkLCBK YW4gMTAsIDIwMTggYXQgMToxNSBQTSwgU3RlZmFuIFdhaHJlbiA8c3RlZmFuLndhaHJlbkBpMnNl LmNvbT4gd3JvdGU6Cj4+IEhpIEFybmQsCj4+Cj4+Cj4+IEFtIDA5LjAxLjIwMTggdW0gMjI6MzMg c2NocmllYiBBcm5kIEJlcmdtYW5uOgo+Pj4gT24gVHVlLCBKYW4gOSwgMjAxOCBhdCA4OjI4IFBN LCBTdGVmYW4gV2FocmVuIDxzdGVmYW4ud2FocmVuQGkyc2UuY29tPgo+Pj4gd3JvdGU6Cj4+Pj4g VGhlIGR3YzIgVVNCIGRyaXZlciB0cmllcyB0byBmaW5kIGEgZ2VuZXJpYyBQSFkgZmlyc3QgYW5k IHRoZW4gbG9vawo+Pj4+IGZvciBhbiBvbGQgc3R5bGUgVVNCIFBIWS4gSW4gY2FzZSBvZiBhIHZh bGlkIGdlbmVyaWMgUEhZIG5vZGUgd2l0aG91dAo+Pj4+IGEgUEhZIGRyaXZlciwgdGhlIFBIWSBs YXllciB3aWxsIHJldHVybiAtRVBST0JFX0RFRkVSIGZvcmV2ZXIuIFNvIGR3YzIKPj4+PiB3aWxs IG5ldmVyIHRyaWVzIGZvciBhbiBVU0IgUEhZLgo+Pj4+Cj4+Pj4gRml4IHRoaXMgaXNzdWUgYnkg ZmluZGluZyBhIGdlbmVyaWMgUEhZIGFuZCBhbiBvbGQgc3R5bGUgVVNCIFBIWQo+Pj4+IGF0IG9u Y2UuCj4+PiBUaGlzIHdvdWxkIGZpeCBvbmx5IG9uZSBvZiB0aGUgVVNCIGNvbnRyb2xsZXJzIChk d2MyKSwgYnV0IG5vdCB0aGUgb3RoZXJzCj4+PiB0aGF0IGFyZSBhZmZlY3RlZC4gQXMgSSB3cm90 ZSBpbiBteSBzdWdnZXN0ZWQgcGF0Y2gsIGR3YzMgYXBwZWFycyB0byBiZQo+Pj4gYWZmZWN0ZWQg dGhlIHNhbWUgd2F5LCBhbmQgYWxsIG90aGVyIGhvc3QgZHJpdmVycyB0aGF0IGNhbGwgdXNiX2Fk ZF9oY2QoKQo+Pj4gd2l0aG91dCBmaXJzdCBzZXR0aW5nIGhjZC0+cGh5IHdvdWxkIHN1ZmZlciBm cm9tIHRoaXMgYXMgd2VsbC4KPj4+Cj4+PiBJZiB3ZSBnbyBkb3duIHRoZSByb3V0ZSBvZiBhZGRy ZXNzaW5nIGl0IGhlcmUgaW4gdGhlIGhjZCBkcml2ZXJzLCB3ZQo+Pj4gc2hvdWxkCj4+PiBhdCBs ZWFzdCBjaGFuZ2UgYWxsIHRocmVlIG9mIHRob3NlLCBhbmQgaG9wZSB0aGlzIGRvZXNuJ3QgcmVn cmVzcyBpbgo+Pj4gYW5vdGhlciB3YXkuCj4+Pgo+Pj4gICAgICAgICAgQXJuZAo+Pgo+PiBpIGZ1 bGx5IHVudGVyc3RhbmQuIEJ1dCB3ZSBsZWF2aW5nIHRoZSBwYXRoIG9mICJmaXhpbmcgYSBjcml0 aWNhbCBpc3N1ZSBvbgo+PiBCQ00yODM1IiBhbmQgZ28gdG8gImZpeGluZyBtdWx0aXBsZSBVU0Ig aG9zdCBjb250cm9sbGVyIi4gSSBkbyB0aGlzIGFsbCBpbgo+PiBteSBzcGFyZSB0aW1lIGFuZCBk b24ndCBoYXZlIGFueSBvZiB0aGUgb3RoZXIgVVNCIGNvbnRyb2xsZXIgYXZhaWxhYmxlLiBTbwo+ PiBiZWZvcmUgaSBwcm9jZWVkIHdpdGggYW55IG90aGVyIHBhdGNoIGkgbGlrZSBzbyBzZWUgc29t ZSBmZWVkYmFjayBmcm9tIEpvaG4sCj4+IEdyZWcgb3IgRmVsaXBlLgo+Pgo+PiBBZnRlciBmaW5h bGl6aW5nIHRoaXMgcGF0Y2ggaSB0aGluayB0aGUgY2hhbmNlIGlzIGxpdHRsZSB0aGF0IHRoaXMg d291bGQgYmUKPj4gYXBwbGllZCB0byA0LjE1LiBTbyBpIHNlZW1zIHRvIG1lIHRoYXQgd2Ugc3Rp bGwgcmV2ZXJ0IG15IERUIGNsZWFuIHVwIHBhdGNoLgo+IENvdWxkIHlvdSBjb25maXJtIHRoYXQg dGhpcyBzaW1wbGVyIHBhdGNoIGZpeGVzIHRoZSBwcm9ibGVtIGZvciAgeW91Pwo+IE15IGZlZWxp bmcgcmlnaHQgbm93IGlzIHRoYXQgdGhpcyB3b3VsZCBiZSB0aGUgbGVhc3QgaW52YXNpdmUgdmFy aWFudC4KPiBUaGlzIGlzIG9idmlvdXNseSBhIGNyaXRpY2FsIHJlZ3Jlc3Npb24gZm9yIEJDTTI4 MzUsIGJ1dCBJJ20gZmFpcmx5IHN1cmUKPiBpdCdzIGp1c3QgYXMgY3JpdGljYWwgZm9yIGEgbG90 IG9mIG90aGVyIFNvQ3MgdGhhdCBoYXZlbid0IGRvbmUgYXMgbXVjaAo+IHRlc3Rpbmcgb24gbGlu dXgtbmV4dC4KCkV2ZW4gd29yc2UgYXJtNjQgYW5kIG1pcHMgY291bGQgYmUgYWZmZWN0ZWQsIHRv by4KCj4KPiBIYW5zIGhhcyBhbHJlYWR5IHZlcmlmaWVkIHRoZSBlYXJsaWVyIChtb3JlIGNvbXBs ZXgpIHZlcnNpb24sIGJ1dCBteQo+IGFuYWx5c2lzIHRvZGF5IGhhcyBtYWRlIGl0IHZlcnkgbGlr ZWx5IHRoYXQgdGhpcyBvbmUgaXMgZnVsbHkgc3VmZmljaWVudAo+IHRvIGZpeCBhbGwgYWZmZWN0 ZWQgcGxhdGZvcm1zLgo+Cj4gUmV2ZXJ0aW5nIGFsbCBuaW5lIHBhdGNoZXMgdGhhdCBhZGQgI3Bo eS1jZWxscyB3b3VsZCBzdGlsbCBiZSBhbiBvcHRpb24sCj4gYnV0IHNlZW1zIHdheSBtb3JlIGlu dmFzaXZlIGF0IHRoaXMgcG9pbnQuCj4KPiAgICAgICAgIEFybmQKPgo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL3BoeS9waHktY29yZS5jIGIvZHJpdmVycy9waHkvcGh5LWNvcmUuYwo+IGluZGV4IGI0 OTY0YjA2N2FlYy4uOTNiNTVmYjcxZDU0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvcGh5L3BoeS1j b3JlLmMKPiArKysgYi9kcml2ZXJzL3BoeS9waHktY29yZS5jCj4gQEAgLTQxMCw2ICs0MTAsMTAg QEAgc3RhdGljIHN0cnVjdCBwaHkgKl9vZl9waHlfZ2V0KHN0cnVjdCBkZXZpY2Vfbm9kZQo+ICpu cCwgaW50IGluZGV4KQo+ICAgICAgICAgIGlmIChyZXQpCj4gICAgICAgICAgICAgICAgICByZXR1 cm4gRVJSX1BUUigtRU5PREVWKTsKPgo+ICsgICAgICAgLyogVGhpcyBwaHkgdHlwZSBoYW5kbGVk IGJ5IHRoZSB1c2ItcGh5IHN1YnN5c3RlbSBmb3Igbm93ICovCj4gKyAgICAgICBpZiAob2ZfZGV2 aWNlX2lzX2NvbXBhdGlibGUobnAsICJ1c2Itbm9wLXhjZWl2IikpCj4gKyAgICAgICAgICAgICAg IHJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwo+ICsKPiAgICAgICAgICBtdXRleF9sb2NrKCZwaHlf cHJvdmlkZXJfbXV0ZXgpOwo+ICAgICAgICAgIHBoeV9wcm92aWRlciA9IG9mX3BoeV9wcm92aWRl cl9sb29rdXAoYXJncy5ucCk7Cj4gICAgICAgICAgaWYgKElTX0VSUihwaHlfcHJvdmlkZXIpIHx8 ICF0cnlfbW9kdWxlX2dldChwaHlfcHJvdmlkZXItPm93bmVyKSkgewoKSSB0cmllZCB0aGlzLCBi dXQgaXQgZG9lc24ndCB3b3JrLiAibnAiIGlzIHRoZSBub2RlIG9mIHRoZSBVU0IgCmNvbnRyb2xs ZXIsIG5vdCBvZiB0aGUgcGh5PwotLS0KVG8gdW5zdWJzY3JpYmUgZnJvbSB0aGlzIGxpc3Q6IHNl bmQgdGhlIGxpbmUgInVuc3Vic2NyaWJlIGxpbnV4LXVzYiIgaW4KdGhlIGJvZHkgb2YgYSBtZXNz YWdlIHRvIG1ham9yZG9tb0B2Z2VyLmtlcm5lbC5vcmcKTW9yZSBtYWpvcmRvbW8gaW5mbyBhdCAg aHR0cDovL3ZnZXIua2VybmVsLm9yZy9tYWpvcmRvbW8taW5mby5odG1sCg== From mboxrd@z Thu Jan 1 00:00:00 1970 From: stefan.wahren@i2se.com (Stefan Wahren) Date: Fri, 12 Jan 2018 09:06:40 +0100 Subject: [PATCH] usb: dwc2: Fix endless deferral probe In-Reply-To: References: <1515526134-2148-1-git-send-email-stefan.wahren@i2se.com> <7ef21b99-67c8-b246-cc9a-b7202264a7a0@i2se.com> Message-ID: <277384ef-b30c-fb5a-5ffe-1efc15c500bb@i2se.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Am 12.01.2018 um 00:32 schrieb Arnd Bergmann: > On Wed, Jan 10, 2018 at 1:15 PM, Stefan Wahren wrote: >> Hi Arnd, >> >> >> Am 09.01.2018 um 22:33 schrieb Arnd Bergmann: >>> On Tue, Jan 9, 2018 at 8:28 PM, Stefan Wahren >>> wrote: >>>> The dwc2 USB driver tries to find a generic PHY first and then look >>>> for an old style USB PHY. In case of a valid generic PHY node without >>>> a PHY driver, the PHY layer will return -EPROBE_DEFER forever. So dwc2 >>>> will never tries for an USB PHY. >>>> >>>> Fix this issue by finding a generic PHY and an old style USB PHY >>>> at once. >>> This would fix only one of the USB controllers (dwc2), but not the others >>> that are affected. As I wrote in my suggested patch, dwc3 appears to be >>> affected the same way, and all other host drivers that call usb_add_hcd() >>> without first setting hcd->phy would suffer from this as well. >>> >>> If we go down the route of addressing it here in the hcd drivers, we >>> should >>> at least change all three of those, and hope this doesn't regress in >>> another way. >>> >>> Arnd >> >> i fully unterstand. But we leaving the path of "fixing a critical issue on >> BCM2835" and go to "fixing multiple USB host controller". I do this all in >> my spare time and don't have any of the other USB controller available. So >> before i proceed with any other patch i like so see some feedback from John, >> Greg or Felipe. >> >> After finalizing this patch i think the chance is little that this would be >> applied to 4.15. So i seems to me that we still revert my DT clean up patch. > Could you confirm that this simpler patch fixes the problem for you? > My feeling right now is that this would be the least invasive variant. > This is obviously a critical regression for BCM2835, but I'm fairly sure > it's just as critical for a lot of other SoCs that haven't done as much > testing on linux-next. Even worse arm64 and mips could be affected, too. > > Hans has already verified the earlier (more complex) version, but my > analysis today has made it very likely that this one is fully sufficient > to fix all affected platforms. > > Reverting all nine patches that add #phy-cells would still be an option, > but seems way more invasive at this point. > > Arnd > > diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c > index b4964b067aec..93b55fb71d54 100644 > --- a/drivers/phy/phy-core.c > +++ b/drivers/phy/phy-core.c > @@ -410,6 +410,10 @@ static struct phy *_of_phy_get(struct device_node > *np, int index) > if (ret) > return ERR_PTR(-ENODEV); > > + /* This phy type handled by the usb-phy subsystem for now */ > + if (of_device_is_compatible(np, "usb-nop-xceiv")) > + return ERR_PTR(-ENODEV); > + > mutex_lock(&phy_provider_mutex); > phy_provider = of_phy_provider_lookup(args.np); > if (IS_ERR(phy_provider) || !try_module_get(phy_provider->owner)) { I tried this, but it doesn't work. "np" is the node of the USB controller, not of the phy?