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: [v2,1/5] usb: dwc2: bus suspend/resume for hosts with DWC2_POWER_DOWN_PARAM_NONE From: Artur Petrosyan Message-Id: Date: Mon, 29 Apr 2019 08:43:34 +0000 To: Douglas Anderson , Minas Harutyunyan , Felipe Balbi , "heiko@sntech.de" Cc: Alan Stern , "amstan@chromium.org" , "linux-rockchip@lists.infradead.org" , William Wu , "linux-usb@vger.kernel.org" , Stefan Wahren , Randy Li , "zyw@rock-chips.com" , "mka@chromium.org" , "ryandcase@chromium.org" , Amelie Delaunay , "jwerner@chromium.org" , "dinguyen@opensource.altera.com" , Elaine Zhang , Greg Kroah-Hartman , "linux-kernel@vger.kernel.org" List-ID: SGksCgpPbiA0LzE4LzIwMTkgMDQ6MTUsIERvdWdsYXMgQW5kZXJzb24gd3JvdGU6Cj4gVGhpcyBp cyBhbiBhdHRlbXB0IHRvIHJlaGFzaCBjb21taXQgMGNmODg0ZTgxOWUwICgidXNiOiBkd2MyOiBh ZGQgYnVzCj4gc3VzcGVuZC9yZXN1bWUgZm9yIGR3YzIiKSBvbiBUb1QuICBUaGF0IGNvbW1pdCB3 YXMgcmV2ZXJ0ZWQgaW4gY29tbWl0Cj4gYjBiYjliYjZjZTAxICgiUmV2ZXJ0ICJ1c2I6IGR3YzI6 IGFkZCBidXMgc3VzcGVuZC9yZXN1bWUgZm9yIGR3YzIiIikKPiBiZWNhdXNlIGFwcGFyZW50bHkg aXQgYnJva2UgdGhlIEFsdGVyYSBTT0NGUEdBLgo+IAo+IFdpdGggYWxsIHRoZSBjaGFuZ2VzIHRo YXQgaGF2ZSBoYXBwZW5lZCB0byBkd2MyIGluIHRoZSBtZWFudGltZSwgaXQncwo+IHBvc3NpYmxl IHRoYXQgdGhlIEFsdGVyYSBTT0NGUEdBIHdpbGwganVzdCBtYWdpY2FsbHkgd29yayB3aXRoIHRo aXMKPiBjaGFuZ2Ugbm93LiAgLi4uYW5kIGl0IHdvdWxkIGJlIGdvb2QgdG8gZ2V0IGJ1cyBzdXNw ZW5kL3Jlc3VtZQo+IGltcGxlbWVudGVkLgo+IAo+IFRoaXMgY2hhbmdlIGlzIGEgZm9yd2FyZCBw b3J0IG9mIG9uZSB0aGF0J3MgYmVlbiBsaXZpbmcgaW4gdGhlIENocm9tZQo+IE9TIDMuMTQga2Vy bmVsIHRyZWUuCj4gCj4gU2lnbmVkLW9mZi1ieTogRG91Z2xhcyBBbmRlcnNvbiA8ZGlhbmRlcnNA Y2hyb21pdW0ub3JnPgo+IC0tLQo+IFRoaXMgcGF0Y2ggd2FzIGxhc3QgcG9zdGVkIGF0Ogo+IAo+ IGh0dHBzOi8vdXJsZGVmZW5zZS5wcm9vZnBvaW50LmNvbS92Mi91cmw/dT1odHRwcy0zQV9fbGtt bC5rZXJuZWwub3JnX3JfMTQ0NjIzNzE3My0yRDE1MjYzLTJEMS0yRGdpdC0yRHNlbmQtMkRlbWFp bC0yRGRpYW5kZXJzLTQwY2hyb21pdW0ub3JnJmQ9RHdJREFnJmM9RFBMNl9YXzZKa1hGeDdBWFdx QjB0ZyZyPTloUEJGS0NKX25CakpoR1ZycmxZT2VPUWpQX0hsVnpZcXJDX0Q3bmlNSkkmbT1NTWZl LTRsWmVQeXR5NkY1emZRNTRraVlHdUpXTnVseVJhdDk0NExrT3NjJnM9bkV4RnBBUFBfMHBsWmZP NUxNRzFCLW1xdDF2eUN2RTM1ZWxWY3lWZ3M4WSZlPQo+IAo+IC4uLmFuZCBhcHBlYXJzIHRvIGhh dmUgZGllZCB0aGUgZGVhdGggb2Ygc2lsZW5jZS4gIE1heWJlIGl0IGNvdWxkIGdldAo+IHNvbWUg YmFrZSB0aW1lIGluIGxpbnV4bmV4dCBpZiB3ZSBjYW4ndCBmaW5kIGFueSBwcm9hY3RpdmUgdGVz dGluZz8KPiAKPiBJIHdpbGwgYWxzbyBmcmVlbHkgYWRtaXQgdGhhdCBJIGRvbid0IGtub3cgdG9u cyBhYm91dCB0aGUgdGhlb3J5Cj4gYmVoaW5kIHRoaXMgcGF0Y2guICBJJ20gbW9zdGx5IGp1c3Qg cmUtaGFzaGluZyB0aGUgb3JpZ2luYWwgY29tbWl0Cj4gZnJvbSBLZXZlciB0aGF0IHdhcyByZXZl cnRlZCBzaW5jZToKPiAqIFR1cm5pbmcgb24gcGFydGlhbCBwb3dlciBkb3duIG9uIHJrMzI4OCBk b2Vzbid0ICJqdXN0IHdvcmsiLiAgSQo+ICAgIGRvbid0IGdldCBob3RwbHVnIGV2ZW50cy4gIFRo aXMgaXMgZGVzcGl0ZSBkd2MyIGF1dG8tZGV0ZWN0aW5nIHRoYXQKPiAgICB3ZSBhcmUgcG93ZXIg b3B0aW1pemVkLgpXaGF0IGRvIHlvdSBtZWFuIGJ5IGRvZXNuJ3QgImp1c3Qgd29yayIgPyBJdCBz ZWVtIHRvIG1lIHRoYXQgZXZlbiBhZnRlciAKYWRkaW5nIHRoaXMgcGF0Y2ggeW91IGRvbid0IGdl dCBpc3N1ZXMgZml4ZWQuCllvdSBtZW50aW9uIHRoYXQgeW91IGRvbid0IGdldCB0aGUgaG90cGx1 ZyBldmVudHMuIFBsZWFzZSBwcm92aWRlIGR3YzIgCmRlYnVnIGxvZ3MgYW5kIHJlZ2lzdGVyIGR1 bXBzIG9uIHRoaXMgaXNzdWUuCgo+ICogSWYgd2UgZG9uJ3QgZG8gc29tZXRoaW5nIGxpa2UgdGhp cyBjb21taXQgd2UgZG9uJ3QgZ2V0IGludG8gYXMgbG93Cj4gICAgb2YgYSBwb3dlciBtb2RlLgo+ IAo+IENoYW5nZXMgaW4gdjI6IE5vbmUKPiAKPiAgIGRyaXZlcnMvdXNiL2R3YzIvaGNkLmMgfCA4 NCArKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0KPiAgIDEgZmlsZSBj aGFuZ2VkLCA1MyBpbnNlcnRpb25zKCspLCAzMSBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy91c2IvZHdjMi9oY2QuYyBiL2RyaXZlcnMvdXNiL2R3YzIvaGNkLmMKPiBpbmRl eCBlMjcyZDAyMDAxMmUuLjk3ODIzMmE5ZTRhOCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3VzYi9k d2MyL2hjZC5jCj4gKysrIGIvZHJpdmVycy91c2IvZHdjMi9oY2QuYwo+IEBAIC00NDgyLDYgKzQ0 ODIsNyBAQCBzdGF0aWMgaW50IF9kd2MyX2hjZF9zdXNwZW5kKHN0cnVjdCB1c2JfaGNkICpoY2Qp Cj4gICAJdW5zaWduZWQgbG9uZyBmbGFnczsKPiAgIAlpbnQgcmV0ID0gMDsKPiAgIAl1MzIgaHBy dDA7Cj4gKwl1MzIgcGNnY3RsOwo+ICAgCj4gICAJc3Bpbl9sb2NrX2lycXNhdmUoJmhzb3RnLT5s b2NrLCBmbGFncyk7Cj4gICAKPiBAQCAtNDQ5Nyw3ICs0NDk4LDcgQEAgc3RhdGljIGludCBfZHdj Ml9oY2Rfc3VzcGVuZChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQo+ICAgCWlmIChoc290Zy0+b3Bfc3Rh dGUgPT0gT1RHX1NUQVRFX0JfUEVSSVBIRVJBTCkKPiAgIAkJZ290byB1bmxvY2s7Cj4gICAKPiAt CWlmIChoc290Zy0+cGFyYW1zLnBvd2VyX2Rvd24gIT0gRFdDMl9QT1dFUl9ET1dOX1BBUkFNX1BB UlRJQUwpCj4gKwlpZiAoaHNvdGctPnBhcmFtcy5wb3dlcl9kb3duID4gRFdDMl9QT1dFUl9ET1dO X1BBUkFNX1BBUlRJQUwpCiA+ICAgCQlnb3RvIHNraXBfcG93ZXJfc2F2aW5nOwogPgoKImhzb3Rn LT5wYXJhbXMucG93ZXJfZG93biIgaXMgYXNzaWduZWQgdG8gIkRXQzJfUE9XRVJfRE9XTl9QQVJB TV9OT05FID0gCjAiIGlmIHRoZXJlIGlzIG5vIGhpYmVybmF0aW9uIG9yIHBhcnRpYWwgcG93ZXIg ZG93biBzdXBwb3J0ZWQgYnkgdGhlIApjb3JlIG9yIHBvd2VyIHNhdmluZyBmZWF0dXJlcyBhcmUg ZGlzYWJsZWQgYnkgCiJoc290Zy0+cGFyYW1zLnBvd2VyX3NhdmluZyA9IGZhbHNlIiAsICJEV0My X1BPV0VSX0RPV05fUEFSQU1fUEFSVElBTCIgCmlmIGNvcmUgc3VwcG9ydHMgcGFydGlhbCBwb3dl ciBkb3duLCAiRFdDMl9QT1dFUl9ET1dOX1BBUkFNX0hJQkVSTkFUSU9OIAoiIGlmIHRoZSBjb3Jl IHN1cHBvcnRzIGhpYmVybmF0aW9uCgpXaGVuIHlvdSBjaGVjayAiaWYgKGhzb3RnLT5wYXJhbXMu cG93ZXJfZG93biA+IApEV0MyX1BPV0VSX0RPV05fUEFSQU1fUEFSVElBTCkiIHlvdSBhcmUgc2F5 aW5nIHRoYXQgInNraXBfcG93ZXJfc2F2aW5nIiAKb25seSBpbiB0aGF0IGNhc2Ugd2hlbiBjb3Jl IHN1cHBvcnRzIEhpYmVybmF0aW9uLiBCdXQgd2hhdCBpZiBjb3JlIApkb2Vzbid0IHN1cHBvcnQg Ym90aCBoaWJlcm5hdGlvbiBhbmQgcGFydGlhbCBwb3dlciBkb3duIGFuZCB0aGUgCiJoc290Zy0+ cGFyYW1zLnBvd2VyX2Rvd24iIHZhbHVlIHVzIGVxdWFsIHRvIAoiRFdDMl9QT1dFUl9ET1dOX1BB UkFNX05PTkUiIHdoaWNoIGlzIDAuCgpXaXRoIHRoaXMgaW1wbGVtZW50YXRpb24gZHJpdmVyIHdp bGwgcHJvZ3JhbSBlbnRlcmluZyB0byBzdXNwZW5kIHdoZW4gCmNvcmUgZG9lc24ndCBzdXBwb3J0 IGJvdGggaGliZXJuYXRpb24gYW5kIHBhcnRpYWwgcG93ZXIgZG93bi4KCj4gICAJLyoKPiBAQCAt NDUwNiwyMSArNDUwNywzNSBAQCBzdGF0aWMgaW50IF9kd2MyX2hjZF9zdXNwZW5kKHN0cnVjdCB1 c2JfaGNkICpoY2QpCj4gICAJICovCj4gICAJaWYgKCFoc290Zy0+YnVzX3N1c3BlbmRlZCkgewo+ ICAgCQlocHJ0MCA9IGR3YzJfcmVhZF9ocHJ0MChoc290Zyk7Cj4gLQkJaHBydDAgfD0gSFBSVDBf U1VTUDsKPiAtCQlocHJ0MCAmPSB+SFBSVDBfUFdSOwo+IC0JCWR3YzJfd3JpdGVsKGhzb3RnLCBo cHJ0MCwgSFBSVDApOwo+IC0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhzb3RnLT5sb2NrLCBm bGFncyk7Cj4gLQkJZHdjMl92YnVzX3N1cHBseV9leGl0KGhzb3RnKTsKPiAtCQlzcGluX2xvY2tf aXJxc2F2ZSgmaHNvdGctPmxvY2ssIGZsYWdzKTsKPiArCQlpZiAoaHBydDAgJiBIUFJUMF9DT05O U1RTKSB7ID4gKwkJCWhwcnQwIHw9IEhQUlQwX1NVU1A7CkhlcmUgeW91IHNldCAiSFBSVDBfU1VT UCIgYml0IGJ1dCB3aGF0IGlmIGNvcmUgZG9lc24ndCBzdXBwb3J0IGJvdGggCmhpYmVybmF0aW9u IGFuZCBQYXJ0aWFsIFBvd2VyIGRvd24gYXNzdW1pbmcgdGhhdCAKaHNvdGctPnBhcmFtcy5wb3dl cl9kb3duIiB2YWx1ZSB1cyBlcXVhbCB0byAiRFdDMl9QT1dFUl9ET1dOX1BBUkFNX05PTkUiIAp3 aGljaCBpcyAwLgo+ICsJCQlpZiAoaHNvdGctPnBhcmFtcy5wb3dlcl9kb3duID09IERXQzJfUE9X RVJfRE9XTl9QQVJBTV9QQVJUSUFMKQpZb3UgbWFrZSBvbmUgY2hlY2tpbmcgb2YgaHNvdGctPnBh cmFtcy5wb3dlcl9kb3duIG1vZGUgaGVyZS4KPiArCQkJCWhwcnQwICY9IH5IUFJUMF9QV1I7Cj4g KwkJCWR3YzJfd3JpdGVsKGhzb3RnLCBocHJ0MCwgSFBSVDApOwo+ICsJCX0KPiArCQlpZiAoaHNv dGctPnBhcmFtcy5wb3dlcl9kb3duID09IERXQzJfUE9XRVJfRE9XTl9QQVJBTV9QQVJUSUFMKSB7 CmFub3RoZXIgY2hlY2tpbmcgb2YgcG93ZXJfZG93biBtb2RlIGhlcmUuCj4gKwkJCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJmhzb3RnLT5sb2NrLCBmbGFncyk7Cj4gKwkJCWR3YzJfdmJ1c19zdXBw bHlfZXhpdChoc290Zyk7Cj4gKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZoc290Zy0+bG9jaywgZmxh Z3MpOwo+ICsJCX0gZWxzZSB7Cj4gKwkJCXBjZ2N0bCA9IHJlYWRsKGhzb3RnLT5yZWdzICsgUENH Q1RMKTsKPiArCQkJcGNnY3RsIHw9IFBDR0NUTF9TVE9QUENMSzsKPiArCQkJd3JpdGVsKHBjZ2N0 bCwgaHNvdGctPnJlZ3MgKyBQQ0dDVEwpOwoiUENHQ1RMX1NUT1BQQ0xLIiBiaXQgaXMgc2V0IG9u bHkgd2hlbiBjb3JlIGVudGVycyB0byBwYXJ0aWFsIHBvd2VyIApkb3duLiBTbyBoZXJlIGlmIGhz b3RnLT5wYXJhbXMucG93ZXJfZG93biBpcyBub3QgZXF1YWwgdG8gCkRXQzJfUE9XRVJfRE9XTl9Q QVJBTV9QQVJUSUFMIGFuZCBpcyBEV0MyX1BPV0VSX0RPV05fUEFSQU1fTk9ORSB0aGUgdGhlIApi aXQgd2lsbCBiZSBzZXQuCj4gKwkJfQo+ICAgCX0KPiAgIAo+IC0JLyogRW50ZXIgcGFydGlhbF9w b3dlcl9kb3duICovCj4gLQlyZXQgPSBkd2MyX2VudGVyX3BhcnRpYWxfcG93ZXJfZG93bihoc290 Zyk7Cj4gLQlpZiAocmV0KSB7Cj4gLQkJaWYgKHJldCAhPSAtRU5PVFNVUFApCj4gLQkJCWRldl9l cnIoaHNvdGctPmRldiwKPiAtCQkJCSJlbnRlciBwYXJ0aWFsX3Bvd2VyX2Rvd24gZmFpbGVkXG4i KTsKPiAtCQlnb3RvIHNraXBfcG93ZXJfc2F2aW5nOwo+ICsJaWYgKGhzb3RnLT5wYXJhbXMucG93 ZXJfZG93biA9PSBEV0MyX1BPV0VSX0RPV05fUEFSQU1fUEFSVElBTCkgewpvbmUgbW9yZSBwb3dl cl9kb3duIG1vZGUgY2hlY2tpbmcgaGVyZS4KSSB1bmRlcnN0YW5kIHRoYXQgdGhvc2UgY2hlY2tp bmcgYXJlIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGdvdCBwYXJ0aWFsIApwb3dlciBkb3duIG1vZGUg ZW5hYmxlZCBidXQgYmVmb3JlIHRoaXMgcGF0Y2ggaXQgd2FzIGRvbmUgd2l0aCBvbmUgY2hlY2tp bmcuCj4gKwkJLyogRW50ZXIgcGFydGlhbF9wb3dlcl9kb3duICovCj4gKwkJcmV0ID0gZHdjMl9l bnRlcl9wYXJ0aWFsX3Bvd2VyX2Rvd24oaHNvdGcpOwo+ICsJCWlmIChyZXQpIHsKPiArCQkJaWYg KHJldCAhPSAtRU5PVFNVUFApCj4gKwkJCQlkZXZfZXJyKGhzb3RnLT5kZXYsCj4gKwkJCQkJImVu dGVyIHBhcnRpYWxfcG93ZXJfZG93biBmYWlsZWRcbiIpOwo+ICsJCQlnb3RvIHNraXBfcG93ZXJf c2F2aW5nOwo+ICsJCX0KPiArCj4gKwkJLyogQWZ0ZXIgZW50ZXJpbmcgcGFydGlhbF9wb3dlcl9k b3duLCBoYXJkd2FyZSBpcyBubyBtb3JlIGFjY2Vzc2libGUgKi8KPiArCQljbGVhcl9iaXQoSENE X0ZMQUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpOwo+ICAgCX0KPiAgIAo+ICAgCS8qIEFz ayBwaHkgdG8gYmUgc3VzcGVuZGVkICovCj4gQEAgLTQ1MzAsOSArNDU0NSw2IEBAIHN0YXRpYyBp bnQgX2R3YzJfaGNkX3N1c3BlbmQoc3RydWN0IHVzYl9oY2QgKmhjZCkKPiAgIAkJc3Bpbl9sb2Nr X2lycXNhdmUoJmhzb3RnLT5sb2NrLCBmbGFncyk7Cj4gICAJfQo+ICAgCj4gLQkvKiBBZnRlciBl bnRlcmluZyBwYXJ0aWFsX3Bvd2VyX2Rvd24sIGhhcmR3YXJlIGlzIG5vIG1vcmUgYWNjZXNzaWJs ZSAqLwo+IC0JY2xlYXJfYml0KEhDRF9GTEFHX0hXX0FDQ0VTU0lCTEUsICZoY2QtPmZsYWdzKTsK PiAtCj4gICBza2lwX3Bvd2VyX3NhdmluZzoKPiAgIAloc290Zy0+bHhfc3RhdGUgPSBEV0MyX0wy Owo+ICAgdW5sb2NrOgo+IEBAIC00NTQ1LDYgKzQ1NTcsNyBAQCBzdGF0aWMgaW50IF9kd2MyX2hj ZF9yZXN1bWUoc3RydWN0IHVzYl9oY2QgKmhjZCkKPiAgIHsKPiAgIAlzdHJ1Y3QgZHdjMl9oc290 ZyAqaHNvdGcgPSBkd2MyX2hjZF90b19oc290ZyhoY2QpOwo+ICAgCXVuc2lnbmVkIGxvbmcgZmxh Z3M7Cj4gKwl1MzIgcGNnY3RsOwo+ICAgCWludCByZXQgPSAwOwo+ICAgCj4gICAJc3Bpbl9sb2Nr X2lycXNhdmUoJmhzb3RnLT5sb2NrLCBmbGFncyk7Cj4gQEAgLTQ1NTUsMTcgKzQ1NjgsMTEgQEAg c3RhdGljIGludCBfZHdjMl9oY2RfcmVzdW1lKHN0cnVjdCB1c2JfaGNkICpoY2QpCj4gICAJaWYg KGhzb3RnLT5seF9zdGF0ZSAhPSBEV0MyX0wyKQo+ICAgCQlnb3RvIHVubG9jazsKPiAgIAo+IC0J aWYgKGhzb3RnLT5wYXJhbXMucG93ZXJfZG93biAhPSBEV0MyX1BPV0VSX0RPV05fUEFSQU1fUEFS VElBTCkgewo+ICsJaWYgKGhzb3RnLT5wYXJhbXMucG93ZXJfZG93biA+IERXQzJfUE9XRVJfRE9X Tl9QQVJBTV9QQVJUSUFMKSB7Cj4gICAJCWhzb3RnLT5seF9zdGF0ZSA9IERXQzJfTDA7Cj4gICAJ CWdvdG8gdW5sb2NrOwo+ICAgCX0KPiAgIAo+IC0JLyoKPiAtCSAqIFNldCBIVyBhY2Nlc3NpYmxl IGJpdCBiZWZvcmUgcG93ZXJpbmcgb24gdGhlIGNvbnRyb2xsZXIKPiAtCSAqIHNpbmNlIGFuIGlu dGVycnVwdCBtYXkgcmlzZS4KPiAtCSAqLwo+IC0Jc2V0X2JpdChIQ0RfRkxBR19IV19BQ0NFU1NJ QkxFLCAmaGNkLT5mbGFncyk7Cj4gLQo+ICAgCS8qCj4gICAJICogRW5hYmxlIHBvd2VyIGlmIG5v dCBhbHJlYWR5IGRvbmUuCj4gICAJICogVGhpcyBtdXN0IG5vdCBiZSBzcGlubG9ja2VkIHNpbmNl IGR1cmF0aW9uCj4gQEAgLTQ1NzcsMTAgKzQ1ODQsMjMgQEAgc3RhdGljIGludCBfZHdjMl9oY2Rf cmVzdW1lKHN0cnVjdCB1c2JfaGNkICpoY2QpCj4gICAJCXNwaW5fbG9ja19pcnFzYXZlKCZoc290 Zy0+bG9jaywgZmxhZ3MpOwo+ICAgCX0KPiAgIAo+IC0JLyogRXhpdCBwYXJ0aWFsX3Bvd2VyX2Rv d24gKi8KPiAtCXJldCA9IGR3YzJfZXhpdF9wYXJ0aWFsX3Bvd2VyX2Rvd24oaHNvdGcsIHRydWUp Owo+IC0JaWYgKHJldCAmJiAocmV0ICE9IC1FTk9UU1VQUCkpCj4gLQkJZGV2X2Vycihoc290Zy0+ ZGV2LCAiZXhpdCBwYXJ0aWFsX3Bvd2VyX2Rvd24gZmFpbGVkXG4iKTsKPiArCWlmIChoc290Zy0+ cGFyYW1zLnBvd2VyX2Rvd24gPT0gRFdDMl9QT1dFUl9ET1dOX1BBUkFNX1BBUlRJQUwpIHsKPiAr CQkvKgo+ICsJCSAqIFNldCBIVyBhY2Nlc3NpYmxlIGJpdCBiZWZvcmUgcG93ZXJpbmcgb24gdGhl IGNvbnRyb2xsZXIKPiArCQkgKiBzaW5jZSBhbiBpbnRlcnJ1cHQgbWF5IHJpc2UuCj4gKwkJICov Cj4gKwkJc2V0X2JpdChIQ0RfRkxBR19IV19BQ0NFU1NJQkxFLCAmaGNkLT5mbGFncyk7Cj4gKwo+ ICsKeW91IGxlYXZlIGFuIG9kZCBibGFuayBsaW5lIGhlcmUuICBQbGVhc2UgZGVsZXRlIGl0Lgo+ ICsJCS8qIEV4aXQgcGFydGlhbF9wb3dlcl9kb3duICovCj4gKwkJcmV0ID0gZHdjMl9leGl0X3Bh cnRpYWxfcG93ZXJfZG93bihoc290ZywgdHJ1ZSk7Cj4gKwkJaWYgKHJldCAmJiAocmV0ICE9IC1F Tk9UU1VQUCkpCj4gKwkJCWRldl9lcnIoaHNvdGctPmRldiwgImV4aXQgcGFydGlhbF9wb3dlcl9k b3duIGZhaWxlZFxuIik7Cj4gKwl9IGVsc2Ugewo+ICsJCXBjZ2N0bCA9IHJlYWRsKGhzb3RnLT5y ZWdzICsgUENHQ1RMKTsKPiArCQlwY2djdGwgJj0gflBDR0NUTF9TVE9QUENMSzsKPiArCQl3cml0 ZWwocGNnY3RsLCBoc290Zy0+cmVncyArIFBDR0NUTCk7CgpIZXJlIGlmIGNvcmUgZG9lc24ndCBz dXBwb3J0IGJvdGggaGliZXJuYXRpb24gYW5kIHBhcnRpYWwgcG93ZXIgZG93biAKYW5kICJoc290 Zy0+cGFyYW1zLnBvd2VyX2Rvd24iIGlzIGVxdWFsIHRvICJEV0MyX1BPV0VSX0RPV05fUEFSQU1f Tk9ORSIgCndoaWNoIGlzIDAgdGhlbiAiUENHQ1RMX1NUT1BQQ0xLIiBiaXQgaXMgdW5zZXQuCgo+ ICsJfQo+ICAgCj4gICAJaHNvdGctPmx4X3N0YXRlID0gRFdDMl9MMDsKPiAgIAo+IEBAIC00NTky LDEwICs0NjEyLDEyIEBAIHN0YXRpYyBpbnQgX2R3YzJfaGNkX3Jlc3VtZShzdHJ1Y3QgdXNiX2hj ZCAqaGNkKQo+ICAgCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoc290Zy0+bG9jaywgZmxhZ3Mp Owo+ICAgCQlkd2MyX3BvcnRfcmVzdW1lKGhzb3RnKTsKPiAgIAl9IGVsc2Ugewo+IC0JCWR3YzJf dmJ1c19zdXBwbHlfaW5pdChoc290Zyk7Cj4gKwkJaWYgKGhzb3RnLT5wYXJhbXMucG93ZXJfZG93 biA9PSBEV0MyX1BPV0VSX0RPV05fUEFSQU1fUEFSVElBTCkgewo+ICsJCQlkd2MyX3ZidXNfc3Vw cGx5X2luaXQoaHNvdGcpOwo+ICAgCj4gLQkJLyogV2FpdCBmb3IgY29udHJvbGxlciB0byBjb3Jy ZWN0bHkgdXBkYXRlIEQrL0QtIGxldmVsICovCj4gLQkJdXNsZWVwX3JhbmdlKDMwMDAsIDUwMDAp Owo+ICsJCQkvKiBXYWl0IGZvciBjb250cm9sbGVyIHRvIGNvcnJlY3RseSB1cGRhdGUgRCsvRC0g bGV2ZWwgKi8KPiArCQkJdXNsZWVwX3JhbmdlKDMwMDAsIDUwMDApOwo+ICsJCX0KPiAgIAo+ICAg CQkvKgo+ICAgCQkgKiBDbGVhciBQb3J0IEVuYWJsZSBhbmQgUG9ydCBTdGF0dXMgY2hhbmdlcy4K PiAKCkkgaGF2ZSB0ZXN0ZWQgdGhlIHBhdGNoIG9uIEhBUFMtRFguIFdpdGggdGhpcyBwYXRjaCBv ciB3aXRob3V0IGl0IHdoZW4gSSAKaGF2ZSBhIGRldmljZSBjb25uZWN0ZWQgY29yZSAgZW50ZXJz IHRvIHBhcnRpYWwgcG93ZXIgZG93biBhbmQgZG9lc24ndCAKZXhpdCBmcm9tIGl0LiBTbyBJIGNh bm5vdCB1c2UgdGhlIGRldmljZS4K 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.0 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_PASS autolearn=unavailable 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 9BFFEC43219 for ; Mon, 29 Apr 2019 08:43:50 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 4BB592063F for ; Mon, 29 Apr 2019 08:43:50 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=synopsys.com header.i=@synopsys.com header.b="TccqouOd"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=synopsys.onmicrosoft.com header.i=@synopsys.onmicrosoft.com header.b="IRpO70xd" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727669AbfD2Ino (ORCPT ); Mon, 29 Apr 2019 04:43:44 -0400 Received: from smtprelay-out1.synopsys.com ([198.182.61.142]:49460 "EHLO smtprelay-out1.synopsys.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727480AbfD2Ino (ORCPT ); Mon, 29 Apr 2019 04:43:44 -0400 Received: from mailhost.synopsys.com (badc-mailhost1.synopsys.com [10.192.0.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (No client certificate requested) by smtprelay-out1.synopsys.com (Postfix) with ESMTPS id 08A55C00AE; Mon, 29 Apr 2019 08:43:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=synopsys.com; s=mail; t=1556527422; bh=xI5h5MdXnhVD9y3tDSYGBQQ7Nsli3e4FTVtv6zWlr/U=; h=From:To:CC:Subject:Date:References:From; b=TccqouOdCMcNrMf7ERvNWy2BcFsOTPjlQ+MQ9FhllvuNFwdzVkS1cWVf0s2jUFWsV Zm0JdaRq6wJlOkAnwuHLz2RW7yP8CdkAGak4iIHpwkQk0OyC6CY221kSqAelNMEeAf /OB7p5n0lTVQSzB6A5TaRPNYdrYROPFAIFofdSyaW6nHHS28s3ZhIKaksNZ/Xp1OuJ QaK6a1GT6XD9J2BeYtBeeDtC+P9E+BoMXCpjj/a+PrOTHk1EiwJrhEiKoNbFMDJS+u D0H6ViypmhsGqncHDiak22z1bxH9dfu/WTqQWz/Cm0WvQkmcJrXMxGmFSGB4SyD8V4 QAIJkU2qLvUAg== Received: from US01WEHTC3.internal.synopsys.com (us01wehtc3.internal.synopsys.com [10.15.84.232]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mailhost.synopsys.com (Postfix) with ESMTPS id 11651A008E; Mon, 29 Apr 2019 08:43:37 +0000 (UTC) Received: from US01HYBRID2.internal.synopsys.com (10.15.246.24) by US01WEHTC3.internal.synopsys.com (10.15.84.232) with Microsoft SMTP Server (TLS) id 14.3.408.0; Mon, 29 Apr 2019 01:43:37 -0700 Received: from NAM04-CO1-obe.outbound.protection.outlook.com (10.13.134.195) by mrs.synopsys.com (10.15.246.24) with Microsoft SMTP Server (TLS) id 14.3.408.0; Mon, 29 Apr 2019 01:43:37 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=synopsys.onmicrosoft.com; s=selector1-synopsys-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=cLtaK4dBkDbZZHaE01dlvd+2qLnST+ZXlz8Bal5/SMk=; b=IRpO70xdzfiCbg7qqRoA4bzq39hXrQxQi34IFxwU2E2MtmcDfIFYzNJaShjaBNxceh4iynShD/aFjvVeOullm7NmsaPwGoWuehNhimban/xx6/aXUf5Cg+bAA1/GPIJdA58VxieT0y9RFp28IO9Yy3arzPhsvolnoviD17c1CGk= Received: from SN1PR12MB2431.namprd12.prod.outlook.com (52.132.195.146) by SN1PR12MB2493.namprd12.prod.outlook.com (52.132.196.148) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1835.13; Mon, 29 Apr 2019 08:43:35 +0000 Received: from SN1PR12MB2431.namprd12.prod.outlook.com ([fe80::1982:4b45:2adf:9a1f]) by SN1PR12MB2431.namprd12.prod.outlook.com ([fe80::1982:4b45:2adf:9a1f%4]) with mapi id 15.20.1835.010; Mon, 29 Apr 2019 08:43:34 +0000 From: Artur Petrosyan To: Douglas Anderson , Minas Harutyunyan , Felipe Balbi , "heiko@sntech.de" CC: Alan Stern , "amstan@chromium.org" , "linux-rockchip@lists.infradead.org" , William Wu , "linux-usb@vger.kernel.org" , Stefan Wahren , Randy Li , "zyw@rock-chips.com" , "mka@chromium.org" , "ryandcase@chromium.org" , Amelie Delaunay , "jwerner@chromium.org" , "dinguyen@opensource.altera.com" , "Elaine Zhang" , Greg Kroah-Hartman , "linux-kernel@vger.kernel.org" Subject: Re: [PATCH v2 1/5] usb: dwc2: bus suspend/resume for hosts with DWC2_POWER_DOWN_PARAM_NONE Thread-Topic: [PATCH v2 1/5] usb: dwc2: bus suspend/resume for hosts with DWC2_POWER_DOWN_PARAM_NONE Thread-Index: AQHU9XvT/eL2bASAskajIQu3Y3ICkw== Date: Mon, 29 Apr 2019 08:43:34 +0000 Message-ID: References: <20190418001356.124334-1-dianders@chromium.org> <20190418001356.124334-2-dianders@chromium.org> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=arturp@synopsys.com; x-originating-ip: [84.53.141.185] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: dece680f-3687-4750-9416-08d6cc7ec439 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600141)(711020)(4605104)(2017052603328)(7193020);SRVR:SN1PR12MB2493; x-ms-traffictypediagnostic: SN1PR12MB2493: x-ms-exchange-purlcount: 1 x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8273; x-forefront-prvs: 0022134A87 x-forefront-antispam-report: SFV:NSPM;SFS:(10019020)(346002)(39850400004)(396003)(366004)(376002)(136003)(189003)(199004)(55674003)(14444005)(15650500001)(476003)(55016002)(256004)(9686003)(6306002)(99286004)(6246003)(966005)(486006)(316002)(52536014)(76116006)(8936002)(66946007)(66446008)(64756008)(66556008)(91956017)(5660300002)(66476007)(73956011)(33656002)(81156014)(81166006)(97736004)(8676002)(446003)(68736007)(102836004)(4326008)(478600001)(26005)(74316002)(53546011)(86362001)(25786009)(2906002)(7736002)(2501003)(305945005)(71190400001)(71200400001)(186003)(6506007)(6436002)(7416002)(7696005)(54906003)(229853002)(6116002)(66066001)(3846002)(76176011)(53936002)(14454004)(110136005);DIR:OUT;SFP:1102;SCL:1;SRVR:SN1PR12MB2493;H:SN1PR12MB2431.namprd12.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: synopsys.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: PVAMvAtIY6ExilWoGs9GVvpiTp0Lk50DV2PtMF4MlUqVQ4yxJPbyC1ka08CT3JzrnJESy/Pw7TDclDrjS4DTheOogy5RbnZpjnI6AAbkXnfAu7NujCRojC9BAEp+wNERk3HiM5Ong2Dy0uGl/ew9dkdiqcfHl+ktSvEB+cNrJHlf7mpxyQcq0Rl3JwwanFgYGVvkYMwNMxuIdDykT7vbnJrKxSKpaC5nnujCzjJOi+rcyLeANlSAwi/jm9RLwiwXIReKy8gUGAEHvJLB/wWqCEDOON50jCH1dXkEKkNTmZZy24FEj2QnAMtThiu1Ac6FVwnmGrbcpuG1YYgTUPch/vNXiuEspsxSGmQlP/Mj3Is61P/Sbulo8f9QoC3tN2TrfoFmblLkueGcTitFWyPiEg8EldwxijfKltreVaIU40Y= Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: dece680f-3687-4750-9416-08d6cc7ec439 X-MS-Exchange-CrossTenant-originalarrivaltime: 29 Apr 2019 08:43:34.8366 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: c33c9f88-1eb7-4099-9700-16013fd9e8aa X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN1PR12MB2493 X-OriginatorOrg: synopsys.com Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org Message-ID: <20190429084334.k_Q7osCeTMNWiMpVPCy3whFWgGuYnjN25rxrowUwgtc@z> Hi,=0A= =0A= On 4/18/2019 04:15, Douglas Anderson wrote:=0A= > This is an attempt to rehash commit 0cf884e819e0 ("usb: dwc2: add bus=0A= > suspend/resume for dwc2") on ToT. That commit was reverted in commit=0A= > b0bb9bb6ce01 ("Revert "usb: dwc2: add bus suspend/resume for dwc2"")=0A= > because apparently it broke the Altera SOCFPGA.=0A= > =0A= > With all the changes that have happened to dwc2 in the meantime, it's=0A= > possible that the Altera SOCFPGA will just magically work with this=0A= > change now. ...and it would be good to get bus suspend/resume=0A= > implemented.=0A= > =0A= > This change is a forward port of one that's been living in the Chrome=0A= > OS 3.14 kernel tree.=0A= > =0A= > Signed-off-by: Douglas Anderson =0A= > ---=0A= > This patch was last posted at:=0A= > =0A= > https://urldefense.proofpoint.com/v2/url?u=3Dhttps-3A__lkml.kernel.org_r_= 1446237173-2D15263-2D1-2Dgit-2Dsend-2Demail-2Ddianders-40chromium.org&d=3DD= wIDAg&c=3DDPL6_X_6JkXFx7AXWqB0tg&r=3D9hPBFKCJ_nBjJhGVrrlYOeOQjP_HlVzYqrC_D7= niMJI&m=3DMMfe-4lZePyty6F5zfQ54kiYGuJWNulyRat944LkOsc&s=3DnExFpAPP_0plZfO5L= MG1B-mqt1vyCvE35elVcyVgs8Y&e=3D=0A= > =0A= > ...and appears to have died the death of silence. Maybe it could get=0A= > some bake time in linuxnext if we can't find any proactive testing?=0A= > =0A= > I will also freely admit that I don't know tons about the theory=0A= > behind this patch. I'm mostly just re-hashing the original commit=0A= > from Kever that was reverted since:=0A= > * Turning on partial power down on rk3288 doesn't "just work". I=0A= > don't get hotplug events. This is despite dwc2 auto-detecting that=0A= > we are power optimized.=0A= What do you mean by doesn't "just work" ? It seem to me that even after =0A= adding this patch you don't get issues fixed.=0A= You mention that you don't get the hotplug events. Please provide dwc2 =0A= debug logs and register dumps on this issue.=0A= =0A= > * If we don't do something like this commit we don't get into as low=0A= > of a power mode.=0A= > =0A= > Changes in v2: None=0A= > =0A= > drivers/usb/dwc2/hcd.c | 84 ++++++++++++++++++++++++++----------------= =0A= > 1 file changed, 53 insertions(+), 31 deletions(-)=0A= > =0A= > diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c=0A= > index e272d020012e..978232a9e4a8 100644=0A= > --- a/drivers/usb/dwc2/hcd.c=0A= > +++ b/drivers/usb/dwc2/hcd.c=0A= > @@ -4482,6 +4482,7 @@ static int _dwc2_hcd_suspend(struct usb_hcd *hcd)= =0A= > unsigned long flags;=0A= > int ret =3D 0;=0A= > u32 hprt0;=0A= > + u32 pcgctl;=0A= > =0A= > spin_lock_irqsave(&hsotg->lock, flags);=0A= > =0A= > @@ -4497,7 +4498,7 @@ static int _dwc2_hcd_suspend(struct usb_hcd *hcd)= =0A= > if (hsotg->op_state =3D=3D OTG_STATE_B_PERIPHERAL)=0A= > goto unlock;=0A= > =0A= > - if (hsotg->params.power_down !=3D DWC2_POWER_DOWN_PARAM_PARTIAL)=0A= > + if (hsotg->params.power_down > DWC2_POWER_DOWN_PARAM_PARTIAL)=0A= > goto skip_power_saving;=0A= >=0A= =0A= "hsotg->params.power_down" is assigned to "DWC2_POWER_DOWN_PARAM_NONE =3D = =0A= 0" if there is no hibernation or partial power down supported by the =0A= core or power saving features are disabled by =0A= "hsotg->params.power_saving =3D false" , "DWC2_POWER_DOWN_PARAM_PARTIAL" = =0A= if core supports partial power down, "DWC2_POWER_DOWN_PARAM_HIBERNATION =0A= " if the core supports hibernation=0A= =0A= When you check "if (hsotg->params.power_down > =0A= DWC2_POWER_DOWN_PARAM_PARTIAL)" you are saying that "skip_power_saving" =0A= only in that case when core supports Hibernation. But what if core =0A= doesn't support both hibernation and partial power down and the =0A= "hsotg->params.power_down" value us equal to =0A= "DWC2_POWER_DOWN_PARAM_NONE" which is 0.=0A= =0A= With this implementation driver will program entering to suspend when =0A= core doesn't support both hibernation and partial power down.=0A= =0A= > /*=0A= > @@ -4506,21 +4507,35 @@ static int _dwc2_hcd_suspend(struct usb_hcd *hcd)= =0A= > */=0A= > if (!hsotg->bus_suspended) {=0A= > hprt0 =3D dwc2_read_hprt0(hsotg);=0A= > - hprt0 |=3D HPRT0_SUSP;=0A= > - hprt0 &=3D ~HPRT0_PWR;=0A= > - dwc2_writel(hsotg, hprt0, HPRT0);=0A= > - spin_unlock_irqrestore(&hsotg->lock, flags);=0A= > - dwc2_vbus_supply_exit(hsotg);=0A= > - spin_lock_irqsave(&hsotg->lock, flags);=0A= > + if (hprt0 & HPRT0_CONNSTS) { > + hprt0 |=3D HPRT0_SUSP;=0A= Here you set "HPRT0_SUSP" bit but what if core doesn't support both =0A= hibernation and Partial Power down assuming that =0A= hsotg->params.power_down" value us equal to "DWC2_POWER_DOWN_PARAM_NONE" = =0A= which is 0.=0A= > + if (hsotg->params.power_down =3D=3D DWC2_POWER_DOWN_PARAM_PARTIAL)=0A= You make one checking of hsotg->params.power_down mode here.=0A= > + hprt0 &=3D ~HPRT0_PWR;=0A= > + dwc2_writel(hsotg, hprt0, HPRT0);=0A= > + }=0A= > + if (hsotg->params.power_down =3D=3D DWC2_POWER_DOWN_PARAM_PARTIAL) {= =0A= another checking of power_down mode here.=0A= > + spin_unlock_irqrestore(&hsotg->lock, flags);=0A= > + dwc2_vbus_supply_exit(hsotg);=0A= > + spin_lock_irqsave(&hsotg->lock, flags);=0A= > + } else {=0A= > + pcgctl =3D readl(hsotg->regs + PCGCTL);=0A= > + pcgctl |=3D PCGCTL_STOPPCLK;=0A= > + writel(pcgctl, hsotg->regs + PCGCTL);=0A= "PCGCTL_STOPPCLK" bit is set only when core enters to partial power =0A= down. So here if hsotg->params.power_down is not equal to =0A= DWC2_POWER_DOWN_PARAM_PARTIAL and is DWC2_POWER_DOWN_PARAM_NONE the the =0A= bit will be set.=0A= > + }=0A= > }=0A= > =0A= > - /* Enter partial_power_down */=0A= > - ret =3D dwc2_enter_partial_power_down(hsotg);=0A= > - if (ret) {=0A= > - if (ret !=3D -ENOTSUPP)=0A= > - dev_err(hsotg->dev,=0A= > - "enter partial_power_down failed\n");=0A= > - goto skip_power_saving;=0A= > + if (hsotg->params.power_down =3D=3D DWC2_POWER_DOWN_PARAM_PARTIAL) {=0A= one more power_down mode checking here.=0A= I understand that those checking are to make sure that we got partial =0A= power down mode enabled but before this patch it was done with one checking= .=0A= > + /* Enter partial_power_down */=0A= > + ret =3D dwc2_enter_partial_power_down(hsotg);=0A= > + if (ret) {=0A= > + if (ret !=3D -ENOTSUPP)=0A= > + dev_err(hsotg->dev,=0A= > + "enter partial_power_down failed\n");=0A= > + goto skip_power_saving;=0A= > + }=0A= > +=0A= > + /* After entering partial_power_down, hardware is no more accessible *= /=0A= > + clear_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);=0A= > }=0A= > =0A= > /* Ask phy to be suspended */=0A= > @@ -4530,9 +4545,6 @@ static int _dwc2_hcd_suspend(struct usb_hcd *hcd)= =0A= > spin_lock_irqsave(&hsotg->lock, flags);=0A= > }=0A= > =0A= > - /* After entering partial_power_down, hardware is no more accessible */= =0A= > - clear_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);=0A= > -=0A= > skip_power_saving:=0A= > hsotg->lx_state =3D DWC2_L2;=0A= > unlock:=0A= > @@ -4545,6 +4557,7 @@ static int _dwc2_hcd_resume(struct usb_hcd *hcd)=0A= > {=0A= > struct dwc2_hsotg *hsotg =3D dwc2_hcd_to_hsotg(hcd);=0A= > unsigned long flags;=0A= > + u32 pcgctl;=0A= > int ret =3D 0;=0A= > =0A= > spin_lock_irqsave(&hsotg->lock, flags);=0A= > @@ -4555,17 +4568,11 @@ static int _dwc2_hcd_resume(struct usb_hcd *hcd)= =0A= > if (hsotg->lx_state !=3D DWC2_L2)=0A= > goto unlock;=0A= > =0A= > - if (hsotg->params.power_down !=3D DWC2_POWER_DOWN_PARAM_PARTIAL) {=0A= > + if (hsotg->params.power_down > DWC2_POWER_DOWN_PARAM_PARTIAL) {=0A= > hsotg->lx_state =3D DWC2_L0;=0A= > goto unlock;=0A= > }=0A= > =0A= > - /*=0A= > - * Set HW accessible bit before powering on the controller=0A= > - * since an interrupt may rise.=0A= > - */=0A= > - set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);=0A= > -=0A= > /*=0A= > * Enable power if not already done.=0A= > * This must not be spinlocked since duration=0A= > @@ -4577,10 +4584,23 @@ static int _dwc2_hcd_resume(struct usb_hcd *hcd)= =0A= > spin_lock_irqsave(&hsotg->lock, flags);=0A= > }=0A= > =0A= > - /* Exit partial_power_down */=0A= > - ret =3D dwc2_exit_partial_power_down(hsotg, true);=0A= > - if (ret && (ret !=3D -ENOTSUPP))=0A= > - dev_err(hsotg->dev, "exit partial_power_down failed\n");=0A= > + if (hsotg->params.power_down =3D=3D DWC2_POWER_DOWN_PARAM_PARTIAL) {=0A= > + /*=0A= > + * Set HW accessible bit before powering on the controller=0A= > + * since an interrupt may rise.=0A= > + */=0A= > + set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);=0A= > +=0A= > +=0A= you leave an odd blank line here. Please delete it.=0A= > + /* Exit partial_power_down */=0A= > + ret =3D dwc2_exit_partial_power_down(hsotg, true);=0A= > + if (ret && (ret !=3D -ENOTSUPP))=0A= > + dev_err(hsotg->dev, "exit partial_power_down failed\n");=0A= > + } else {=0A= > + pcgctl =3D readl(hsotg->regs + PCGCTL);=0A= > + pcgctl &=3D ~PCGCTL_STOPPCLK;=0A= > + writel(pcgctl, hsotg->regs + PCGCTL);=0A= =0A= Here if core doesn't support both hibernation and partial power down =0A= and "hsotg->params.power_down" is equal to "DWC2_POWER_DOWN_PARAM_NONE" =0A= which is 0 then "PCGCTL_STOPPCLK" bit is unset.=0A= =0A= > + }=0A= > =0A= > hsotg->lx_state =3D DWC2_L0;=0A= > =0A= > @@ -4592,10 +4612,12 @@ static int _dwc2_hcd_resume(struct usb_hcd *hcd)= =0A= > spin_unlock_irqrestore(&hsotg->lock, flags);=0A= > dwc2_port_resume(hsotg);=0A= > } else {=0A= > - dwc2_vbus_supply_init(hsotg);=0A= > + if (hsotg->params.power_down =3D=3D DWC2_POWER_DOWN_PARAM_PARTIAL) {= =0A= > + dwc2_vbus_supply_init(hsotg);=0A= > =0A= > - /* Wait for controller to correctly update D+/D- level */=0A= > - usleep_range(3000, 5000);=0A= > + /* Wait for controller to correctly update D+/D- level */=0A= > + usleep_range(3000, 5000);=0A= > + }=0A= > =0A= > /*=0A= > * Clear Port Enable and Port Status changes.=0A= > =0A= =0A= I have tested the patch on HAPS-DX. With this patch or without it when I = =0A= have a device connected core enters to partial power down and doesn't =0A= exit from it. So I cannot use the device.=0A= =0A= -- =0A= Regards,=0A= Artur=0A=