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/4] usb: dwc2: optionally assert phy reset when waking up From: Matthias Kaehlcke Message-Id: <20190412235633.GY112750@google.com> Date: Fri, 12 Apr 2019 16:56:33 -0700 To: Douglas Anderson Cc: Rob Herring , Minas Harutyunyan , Heiko Stuebner , Felipe Balbi , amstan@chromium.org, linux-rockchip@lists.infradead.org, linux-usb@vger.kernel.org, Randy Li , ryandcase@chromium.org, jwerner@chromium.org, Elaine Zhang , Yunzhi Li , Greg Kroah-Hartman , linux-kernel@vger.kernel.org List-ID: T24gRnJpLCBBcHIgMTIsIDIwMTkgYXQgMDM6NDE6NDdQTSAtMDcwMCwgRG91Z2xhcyBBbmRlcnNv biB3cm90ZToKPiBPbiB0aGUgcmszMjg4IFVTQiBob3N0LW9ubHkgcG9ydCAodGhlIG9uZSB0aGF0 J3Mgbm90IHRoZSBPVEctZW5hYmxlZAo+IHBvcnQpIHRoZSBQSFkgY2FuIGdldCBpbnRvIGEgYmFk IHN0YXRlIHdoZW4gYSB3YWtldXAgaXMgYXNzZXJ0ZWQgKG5vdAo+IGp1c3QgYSB3YWtldXAgZnJv bSBmdWxsIHN5c3RlbSBzdXNwZW5kIGJ1dCBhbHNvIGEgd2FrZXVwIGZyb20KPiBhdXRvc3VzcGVu ZCkuCj4gCj4gV2UgY2FuIGdldCB0aGUgUEhZIG91dCBvZiBpdHMgYmFkIHN0YXRlIGJ5IGFzc2Vy dGluZyBpdHMgInBvcnQgcmVzZXQiLAo+IGJ1dCB1bmZvcnR1bmF0ZWx5IHRoYXQgc2VlbXMgdG8g YXNzZXJ0IGEgcmVzZXQgb250byB0aGUgVVNCIGJ1cyBzbyBpdAo+IGNvdWxkIGNvbmZ1c2UgdGhp bmdzIGlmIHdlIGRvbid0IGFjdHVhbGx5IGRlZW51bWVyYXRlIC8gcmVlbnVtZXJhdGUgdGhlCj4g ZGV2aWNlLgo+IAo+IFdlIGNhbiBhbHNvIGdldCB0aGUgUEhZIG91dCBvZiBpdHMgYmFkIHN0YXRl IGJ5IGZ1bGx5IHJlc2V0dGluZyBpdCB1c2luZwo+IHRoZSByZXNldCBmcm9tIHRoZSBDUlUgKGNs b2NrIHJlc2V0IHVuaXQpLCB3aGljaCBkb2VzIGEgbW9yZSBmdWxsCj4gcmVzZXQuICBUaGUgQ1JV LWJhc2VkIHJlc2V0IGFwcGVhcnMgdG8gYWN0dWFsbHkgY2F1c2UgZGV2aWNlcyBvbiB0aGUgYnVz Cj4gdG8gYmUgcmVtb3ZlZCBhbmQgcmVpbnNlcnRlZCwgd2hpY2ggZml4ZXMgdGhlIHByb2JsZW0g KGFsYmVpdCBpbiBhIGhhY2t5Cj4gd2F5KS4KPiAKPiBJdCdzIHVuZm9ydHVuYXRlIHRoYXQgd2Ug bmVlZCB0byBkbyBhIGZ1bGwgcmUtZW51bWVyYXRpb24gb2YgZGV2aWNlcyBhdAo+IHdha2V1cCB0 aW1lLCBidXQgdGhpcyBpcyBiZXR0ZXIgdGhhbiBhbHRlcm5hdGl2ZSBvZiBsZXR0aW5nIHRoZSBi dXMgZ2V0Cj4gd2VkZ2VkLgo+IAo+IFNpZ25lZC1vZmYtYnk6IERvdWdsYXMgQW5kZXJzb24gPGRp YW5kZXJzQGNocm9taXVtLm9yZz4KPiBTaWduZWQtb2ZmLWJ5OiBZdW56aGkgTGkgPGx5ekByb2Nr LWNoaXBzLmNvbT4KPiAtLS0KPiAKPiAgZHJpdmVycy91c2IvZHdjMi9jb3JlLmggICAgICB8ICA1 ICsrKysrCj4gIGRyaXZlcnMvdXNiL2R3YzIvY29yZV9pbnRyLmMgfCAxMiArKysrKysrKysrKysK PiAgZHJpdmVycy91c2IvZHdjMi9oY2QuYyAgICAgICB8IDE2ICsrKysrKysrKysrKystLS0KPiAg ZHJpdmVycy91c2IvZHdjMi9wbGF0Zm9ybS5jICB8ICA5ICsrKysrKysrKwo+ICA0IGZpbGVzIGNo YW5nZWQsIDM5IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvdXNiL2R3YzIvY29yZS5oIGIvZHJpdmVycy91c2IvZHdjMi9jb3JlLmgKPiBpbmRl eCAzMGJhYjg0NjNjOTYuLmYzMDc0OGY0ZmU3ZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3VzYi9k d2MyL2NvcmUuaAo+ICsrKyBiL2RyaXZlcnMvdXNiL2R3YzIvY29yZS5oCj4gQEAgLTg1OSw2ICs4 NTksOCBAQCBzdHJ1Y3QgZHdjMl9ocmVnc19iYWNrdXAgewo+ICAgKiBAZ2FkZ2V0X2VuYWJsZWQ6 CVBlcmlwaGVyYWwgbW9kZSBzdWItZHJpdmVyIGluaXRpYWxpemF0aW9uIGluZGljYXRvci4KPiAg ICogQGxsX2h3X2VuYWJsZWQ6CVN0YXR1cyBvZiBsb3ctbGV2ZWwgaGFyZHdhcmUgcmVzb3VyY2Vz Lgo+ICAgKiBAaGliZXJuYXRlZDoJCVRydWUgaWYgY29yZSBpcyBoaWJlcm5hdGVkCj4gKyAqIEBy ZXNldF9waHlfb25fd2FrZToJUXVpcmsgc2F5aW5nIHRoYXQgd2Ugc2hvdWxkIGFzc2VydCBQSFkg cmVzZXQgb24gYQo+ICsgKgkJCXJlbW90ZSB3YWtldXAuCj4gICAqIEBmcmFtZV9udW1iZXI6ICAg ICAgIEZyYW1lIG51bWJlciByZWFkIGZyb20gdGhlIGNvcmUuIEZvciBib3RoIGRldmljZQo+ICAg KgkJCWFuZCBob3N0IG1vZGVzLiBUaGUgdmFsdWUgcmFuZ2VzIGFyZSBmcm9tIDAKPiAgICoJCQl0 byBIRk5VTV9NQVhfRlJOVU0uCj4gQEAgLTk3Miw2ICs5NzQsNyBAQCBzdHJ1Y3QgZHdjMl9ocmVn c19iYWNrdXAgewo+ICAgKiBAc3RhdHVzX2J1Zl9kbWE6ICAgICBETUEgYWRkcmVzcyBmb3Igc3Rh dHVzX2J1Zgo+ICAgKiBAc3RhcnRfd29yazogICAgICAgICBEZWxheWVkIHdvcmsgZm9yIGhhbmRs aW5nIGhvc3QgQS1jYWJsZSBjb25uZWN0aW9uCj4gICAqIEByZXNldF93b3JrOiAgICAgICAgIERl bGF5ZWQgd29yayBmb3IgaGFuZGxpbmcgYSBwb3J0IHJlc2V0Cj4gKyAqIEBwaHlfcmVzZXRfd29y azogICAgIFdvcmsgc3RydWN0dXJlIGZvciBkb2luZyBhIFBIWSByZXNldAo+ICAgKiBAb3RnX3Bv cnQ6ICAgICAgICAgICBPVEcgcG9ydCBudW1iZXIKPiAgICogQGZyYW1lX2xpc3Q6ICAgICAgICAg RnJhbWUgbGlzdAo+ICAgKiBAZnJhbWVfbGlzdF9kbWE6ICAgICBGcmFtZSBsaXN0IERNQSBhZGRy ZXNzCj4gQEAgLTEwNDUsNiArMTA0OCw3IEBAIHN0cnVjdCBkd2MyX2hzb3RnIHsKPiAgCXVuc2ln bmVkIGludCBnYWRnZXRfZW5hYmxlZDoxOwo+ICAJdW5zaWduZWQgaW50IGxsX2h3X2VuYWJsZWQ6 MTsKPiAgCXVuc2lnbmVkIGludCBoaWJlcm5hdGVkOjE7Cj4gKwl1bnNpZ25lZCBpbnQgcmVzZXRf cGh5X29uX3dha2U6MTsKPiAgCXUxNiBmcmFtZV9udW1iZXI7Cj4gIAo+ICAJc3RydWN0IHBoeSAq cGh5Owo+IEBAIC0xMTQ3LDYgKzExNTEsNyBAQCBzdHJ1Y3QgZHdjMl9oc290ZyB7Cj4gIAo+ICAJ c3RydWN0IGRlbGF5ZWRfd29yayBzdGFydF93b3JrOwo+ICAJc3RydWN0IGRlbGF5ZWRfd29yayBy ZXNldF93b3JrOwo+ICsJc3RydWN0IHdvcmtfc3RydWN0IHBoeV9yZXNldF93b3JrOwo+ICAJdTgg b3RnX3BvcnQ7Cj4gIAl1MzIgKmZyYW1lX2xpc3Q7Cj4gIAlkbWFfYWRkcl90IGZyYW1lX2xpc3Rf ZG1hOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9kd2MyL2NvcmVfaW50ci5jIGIvZHJpdmVy cy91c2IvZHdjMi9jb3JlX2ludHIuYwo+IGluZGV4IDE5YWUyNTk1ZjFjMy4uMTZmZjMzNTc0MTE2 IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvdXNiL2R3YzIvY29yZV9pbnRyLmMKPiArKysgYi9kcml2 ZXJzL3VzYi9kd2MyL2NvcmVfaW50ci5jCj4gQEAgLTQzNSw2ICs0MzUsMTggQEAgc3RhdGljIHZv aWQgZHdjMl9oYW5kbGVfd2FrZXVwX2RldGVjdGVkX2ludHIoc3RydWN0IGR3YzJfaHNvdGcgKmhz b3RnKQo+ICAJCQkvKiBSZXN0YXJ0IHRoZSBQaHkgQ2xvY2sgKi8KPiAgCQkJcGNnY2N0bCAmPSB+ UENHQ1RMX1NUT1BQQ0xLOwo+ICAJCQlkd2MyX3dyaXRlbChoc290ZywgcGNnY2N0bCwgUENHQ1RM KTsKPiArCj4gKwkJCS8qCj4gKwkJCSAqIElmIHdlJ3ZlIGdvdCB0aGlzIHF1aXJrIHRoZW4gdGhl IFBIWSBpcyBzdHVjayB1cG9uCj4gKwkJCSAqIHdha2V1cC4gIEFzc2VydCByZXNldC4gIFRoaXMg d2lsbCBwcm9wYWdhdGUgb3V0IGFuZAo+ICsJCQkgKiBldmVudHVhbGx5IHdlJ2xsIHJlLWVudW1l cmF0ZSB0aGUgZGV2aWNlLiAgTm90IGdyZWF0Cj4gKwkJCSAqIGJ1dCB0aGUgYmVzdCB3ZSBjYW4g ZG8uICBXZSBjYW4ndCBjYWxsIHBoeV9yZXNldCgpCj4gKwkJCSAqIGF0IGludGVycnVwdCB0aW1l IGJ1dCB0aGVyZSdzIG5vIGh1cnJ5LCBzbyB3ZSdsbAo+ICsJCQkgKiBzY2hlZHVsZSBpdCBmb3Ig bGF0ZXIuCj4gKwkJCSAqLwo+ICsJCQlpZiAoaHNvdGctPnJlc2V0X3BoeV9vbl93YWtlKQo+ICsJ CQkJc2NoZWR1bGVfd29yaygmaHNvdGctPnBoeV9yZXNldF93b3JrKTsKPiArCj4gIAkJCW1vZF90 aW1lcigmaHNvdGctPndrcF90aW1lciwKPiAgCQkJCSAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZp ZXMoNzEpKTsKPiAgCQl9IGVsc2Ugewo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9kd2MyL2hj ZC5jIGIvZHJpdmVycy91c2IvZHdjMi9oY2QuYwo+IGluZGV4IDNmMDg3OTYyZjQ5OC4uMzMyMzQ5 MTQ4ZDNmIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvdXNiL2R3YzIvaGNkLmMKPiArKysgYi9kcml2 ZXJzL3VzYi9kd2MyL2hjZC5jCj4gQEAgLTQzNzYsNiArNDM3NiwxNyBAQCBzdGF0aWMgdm9pZCBk d2MyX2hjZF9yZXNldF9mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiAgCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJmhzb3RnLT5sb2NrLCBmbGFncyk7Cj4gIH0KPiAgCj4gK3N0YXRpYyB2 b2lkIGR3YzJfaGNkX3BoeV9yZXNldF9mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiAr ewo+ICsJc3RydWN0IGR3YzJfaHNvdGcgKmhzb3RnID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVj dCBkd2MyX2hzb3RnLAo+ICsJCQkJCQlwaHlfcmVzZXRfd29yayk7Cj4gKwlpbnQgcmV0Owo+ICsK PiArCXJldCA9IHBoeV9yZXNldChoc290Zy0+cGh5KTsKPiArCWlmIChyZXQpCj4gKwkJZGV2X3dh cm4oaHNvdGctPmRldiwgIlBIWSByZXNldCBmYWlsZWRcbiIpOwo+ICt9Cj4gKwo+ICAvKgo+ICAg KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Cj4gICAqICBMaW51eCBIQyBEcml2ZXIgRnVuY3Rpb25zCj4gQEAg LTUyNzEsMTEgKzUyODIsMTAgQEAgaW50IGR3YzJfaGNkX2luaXQoc3RydWN0IGR3YzJfaHNvdGcg Kmhzb3RnKQo+ICAJCWhzb3RnLT5oY19wdHJfYXJyYXlbaV0gPSBjaGFubmVsOwo+ICAJfQo+ICAK PiAtCS8qIEluaXRpYWxpemUgaHNvdGcgc3RhcnQgd29yayAqLwo+ICsJLyogSW5pdGlhbGl6ZSB3 b3JrICovCj4gIAlJTklUX0RFTEFZRURfV09SSygmaHNvdGctPnN0YXJ0X3dvcmssIGR3YzJfaGNk X3N0YXJ0X2Z1bmMpOwo+IC0KPiAtCS8qIEluaXRpYWxpemUgcG9ydCByZXNldCB3b3JrICovCj4g IAlJTklUX0RFTEFZRURfV09SSygmaHNvdGctPnJlc2V0X3dvcmssIGR3YzJfaGNkX3Jlc2V0X2Z1 bmMpOwo+ICsJSU5JVF9XT1JLKCZoc290Zy0+cGh5X3Jlc2V0X3dvcmssIGR3YzJfaGNkX3BoeV9y ZXNldF9mdW5jKTsKCllvdSBhbHNvIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHdvcmsgaXMg Y2FuY2VsbGVkIHdoZW4gdGhlCmNvbnRyb2xsZXIgaXMgc3RvcHBlZC9yZW1vdmVkLiBJdCBzZWVt cyBkd2MyX2hjZF9zdG9wKCkgd291bGQgYmUgYQpzdWl0YWJsZSBwbGFjZSBmb3IgdGhhdC4K 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=-8.5 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,T_DKIMWL_WL_HIGH,URIBL_BLOCKED,USER_AGENT_MUTT 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 C301EC10F0E for ; Fri, 12 Apr 2019 23:56:42 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 872E42084E for ; Fri, 12 Apr 2019 23:56:42 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="nzbn5mKj" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727006AbfDLX4g (ORCPT ); Fri, 12 Apr 2019 19:56:36 -0400 Received: from mail-pf1-f193.google.com ([209.85.210.193]:46482 "EHLO mail-pf1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726765AbfDLX4f (ORCPT ); Fri, 12 Apr 2019 19:56:35 -0400 Received: by mail-pf1-f193.google.com with SMTP id 9so5831121pfj.13 for ; Fri, 12 Apr 2019 16:56:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=Yu1IkjIYt9va9FkTgPsXk3ZRt/tLDiVtYlOdjbiYM30=; b=nzbn5mKjS3+/O5R/JNXON4yJy7yW7onU03yGHp/5MUlKtazcPKTQI1vq1VMWSso2Oz ebbVylJAHRbM2g9kH07CpwycrWCCl7QRA8DzxUx1MU08zHb59RggjSv+sT/r7FhNDv6E 6KjPNrrX0ys4tMnIra8WkqWIYWdXWgJkzQ0qY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=Yu1IkjIYt9va9FkTgPsXk3ZRt/tLDiVtYlOdjbiYM30=; b=PVHj6ojnRIQGJ5Ve/JVMUsVrSUShQBdMrv/dHlUbu0bVW580AKfDSeGN8ZSS75/QzE 1pTMGZwqr0HbLUKyCqwrdiycdK5YTxNygASebu9NrwuHp+oxb5Sw6oRGNGCePSXkm2rT d+CJaPgBmKGAsJYhkrP/MVXRwCPWRh4D8FwfD8qO00hEnL07+rgmRvKdLMWzxbMzktAb 4v5RpvF0Hl25IWW/ZSd0s615j9bZYAYpWbXo8AYHFJ6RzjJrp3KwhHAAd3K7eKdjKqKr HzMmEEpOwlC33RuxhqTn3uvC3hS85zPGV3yfEb0tx0h/cxKfTbSi5rGnRvUI8hwzJAEV Z1mg== X-Gm-Message-State: APjAAAXExw+56X2GHtso3DmmTkMPgAkmOksGYJCYW6qzlDyDY4xpEFyI Ve0LXFFUVoFHHCl9KxXUxOYlfg== X-Google-Smtp-Source: APXvYqwD5y08nH2PWJP+1qni5sP51BwbJuMKfLETfiSHTzzSGRX05V265S328hnuXFFam3VDIOJtdg== X-Received: by 2002:a63:c104:: with SMTP id w4mr56885927pgf.409.1555113395043; Fri, 12 Apr 2019 16:56:35 -0700 (PDT) Received: from localhost ([2620:15c:202:1:75a:3f6e:21d:9374]) by smtp.gmail.com with ESMTPSA id s9sm30565812pfe.183.2019.04.12.16.56.34 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 12 Apr 2019 16:56:34 -0700 (PDT) Date: Fri, 12 Apr 2019 16:56:33 -0700 From: Matthias Kaehlcke To: Douglas Anderson Cc: Rob Herring , Minas Harutyunyan , Heiko Stuebner , Felipe Balbi , amstan@chromium.org, linux-rockchip@lists.infradead.org, linux-usb@vger.kernel.org, Randy Li , ryandcase@chromium.org, jwerner@chromium.org, Elaine Zhang , Yunzhi Li , Greg Kroah-Hartman , linux-kernel@vger.kernel.org Subject: Re: [PATCH 2/4] usb: dwc2: optionally assert phy reset when waking up Message-ID: <20190412235633.GY112750@google.com> References: <20190412224149.106971-1-dianders@chromium.org> <20190412224149.106971-3-dianders@chromium.org> MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Disposition: inline In-Reply-To: <20190412224149.106971-3-dianders@chromium.org> User-Agent: Mutt/1.10.1 (2018-07-13) Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org Message-ID: <20190412235633.9DJjGLEbie2QWf76nRueG8L6VgImc-pgNLGE-3s6ygQ@z> On Fri, Apr 12, 2019 at 03:41:47PM -0700, Douglas Anderson wrote: > On the rk3288 USB host-only port (the one that's not the OTG-enabled > port) the PHY can get into a bad state when a wakeup is asserted (not > just a wakeup from full system suspend but also a wakeup from > autosuspend). > > We can get the PHY out of its bad state by asserting its "port reset", > but unfortunately that seems to assert a reset onto the USB bus so it > could confuse things if we don't actually deenumerate / reenumerate the > device. > > We can also get the PHY out of its bad state by fully resetting it using > the reset from the CRU (clock reset unit), which does a more full > reset. The CRU-based reset appears to actually cause devices on the bus > to be removed and reinserted, which fixes the problem (albeit in a hacky > way). > > It's unfortunate that we need to do a full re-enumeration of devices at > wakeup time, but this is better than alternative of letting the bus get > wedged. > > Signed-off-by: Douglas Anderson > Signed-off-by: Yunzhi Li > --- > > drivers/usb/dwc2/core.h | 5 +++++ > drivers/usb/dwc2/core_intr.c | 12 ++++++++++++ > drivers/usb/dwc2/hcd.c | 16 +++++++++++++--- > drivers/usb/dwc2/platform.c | 9 +++++++++ > 4 files changed, 39 insertions(+), 3 deletions(-) > > diff --git a/drivers/usb/dwc2/core.h b/drivers/usb/dwc2/core.h > index 30bab8463c96..f30748f4fe7e 100644 > --- a/drivers/usb/dwc2/core.h > +++ b/drivers/usb/dwc2/core.h > @@ -859,6 +859,8 @@ struct dwc2_hregs_backup { > * @gadget_enabled: Peripheral mode sub-driver initialization indicator. > * @ll_hw_enabled: Status of low-level hardware resources. > * @hibernated: True if core is hibernated > + * @reset_phy_on_wake: Quirk saying that we should assert PHY reset on a > + * remote wakeup. > * @frame_number: Frame number read from the core. For both device > * and host modes. The value ranges are from 0 > * to HFNUM_MAX_FRNUM. > @@ -972,6 +974,7 @@ struct dwc2_hregs_backup { > * @status_buf_dma: DMA address for status_buf > * @start_work: Delayed work for handling host A-cable connection > * @reset_work: Delayed work for handling a port reset > + * @phy_reset_work: Work structure for doing a PHY reset > * @otg_port: OTG port number > * @frame_list: Frame list > * @frame_list_dma: Frame list DMA address > @@ -1045,6 +1048,7 @@ struct dwc2_hsotg { > unsigned int gadget_enabled:1; > unsigned int ll_hw_enabled:1; > unsigned int hibernated:1; > + unsigned int reset_phy_on_wake:1; > u16 frame_number; > > struct phy *phy; > @@ -1147,6 +1151,7 @@ struct dwc2_hsotg { > > struct delayed_work start_work; > struct delayed_work reset_work; > + struct work_struct phy_reset_work; > u8 otg_port; > u32 *frame_list; > dma_addr_t frame_list_dma; > diff --git a/drivers/usb/dwc2/core_intr.c b/drivers/usb/dwc2/core_intr.c > index 19ae2595f1c3..16ff33574116 100644 > --- a/drivers/usb/dwc2/core_intr.c > +++ b/drivers/usb/dwc2/core_intr.c > @@ -435,6 +435,18 @@ static void dwc2_handle_wakeup_detected_intr(struct dwc2_hsotg *hsotg) > /* Restart the Phy Clock */ > pcgcctl &= ~PCGCTL_STOPPCLK; > dwc2_writel(hsotg, pcgcctl, PCGCTL); > + > + /* > + * If we've got this quirk then the PHY is stuck upon > + * wakeup. Assert reset. This will propagate out and > + * eventually we'll re-enumerate the device. Not great > + * but the best we can do. We can't call phy_reset() > + * at interrupt time but there's no hurry, so we'll > + * schedule it for later. > + */ > + if (hsotg->reset_phy_on_wake) > + schedule_work(&hsotg->phy_reset_work); > + > mod_timer(&hsotg->wkp_timer, > jiffies + msecs_to_jiffies(71)); > } else { > diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c > index 3f087962f498..332349148d3f 100644 > --- a/drivers/usb/dwc2/hcd.c > +++ b/drivers/usb/dwc2/hcd.c > @@ -4376,6 +4376,17 @@ static void dwc2_hcd_reset_func(struct work_struct *work) > spin_unlock_irqrestore(&hsotg->lock, flags); > } > > +static void dwc2_hcd_phy_reset_func(struct work_struct *work) > +{ > + struct dwc2_hsotg *hsotg = container_of(work, struct dwc2_hsotg, > + phy_reset_work); > + int ret; > + > + ret = phy_reset(hsotg->phy); > + if (ret) > + dev_warn(hsotg->dev, "PHY reset failed\n"); > +} > + > /* > * ========================================================================= > * Linux HC Driver Functions > @@ -5271,11 +5282,10 @@ int dwc2_hcd_init(struct dwc2_hsotg *hsotg) > hsotg->hc_ptr_array[i] = channel; > } > > - /* Initialize hsotg start work */ > + /* Initialize work */ > INIT_DELAYED_WORK(&hsotg->start_work, dwc2_hcd_start_func); > - > - /* Initialize port reset work */ > INIT_DELAYED_WORK(&hsotg->reset_work, dwc2_hcd_reset_func); > + INIT_WORK(&hsotg->phy_reset_work, dwc2_hcd_phy_reset_func); You also want to make sure that the work is cancelled when the controller is stopped/removed. It seems dwc2_hcd_stop() would be a suitable place for that.