From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: ARC-Seal: i=1; a=rsa-sha256; t=1524097146; cv=none; d=google.com; s=arc-20160816; b=X9s4CNRYDJTgtar/A0wbMt038779wdgSMdj2HMpQj6W2nPyjW4uQ4k9kWFTQCznXxf CyQvaIeBaEoBeJAvLs8lOFsKqiovPyJgetaqJjBasK9PdjgFKkXw5u2Rs9sX+1hQaPo6 jwwj2ZRe7+BVy54O7x24sJ6Kx/O6bhmtC9c0SBNi08fzk12QtrqKuxlW0p73TZNGFWZd tD91OKokMD5taZLGnkVyHZAVW5mOx/F5C0ufZV6I9j1UtTndV6g+2+k2Rl4kNKbgPhOU bBwgWgWHMXqnkdU1BHW9MMo3daU6ThbrCZyFx/WDWIveOR0WpAz/Y6otkbvEa57ldafG 42pA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=message-id:date:subject:cc:to:from:dkim-signature :arc-authentication-results; bh=KBPNMxaXO5BRdA+16kGJLSjfpSPzl0mJ7vCw/WhluSg=; b=GwnFDDA8Z93mWzHGjzZC8D/cpikLdhr6ZBTjn0O80ab8lKkiQJCROOLlODJHcJyeQ/ 9pCsSVdxaquw7Wp5cG9Gqx5eNHGoibiUaZVxf64MOa+O5sLG5LSV4sh19HoEbdIybNAC qZI8E+qsHCxGxcJk2jXmWp1yZvT09ImPsQx7zYfmAXwJgrPM7W5oaB9HcUJOI606ubz/ 6afHIOuV32PBBEdKcnmCdODEZwVdIPhp3iAxbcbTyu4WcI3qmwnkRxxQNzRtaAXoRPC3 LdCyWrhl8NU+JE0ZYUzCujhbezTtLdN6bhp5ODYVNLPM1zehcQCWPEUdjTpKNOnabGWH mrWQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=XWE6aDKc; spf=pass (google.com: domain of ravisadineni@chromium.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=ravisadineni@chromium.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Authentication-Results: mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=XWE6aDKc; spf=pass (google.com: domain of ravisadineni@chromium.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=ravisadineni@chromium.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org X-Google-Smtp-Source: AIpwx49Y0yzxzwyVTA9N0AfiXHpSVT5aoYNoCZFKsJ4sNmXRXZN9AHrQsEU4qxh281sTs92gNjpxiQ== From: Ravi Chandra Sadineni To: stern@rowland.harvard.edu, gregkh@linuxfoundation.org, martin.blumenstingl@googlemail.com, ravisadineni@google.com, chunfeng.yun@mediatek.com, johan@kernel.org, arvind.yadav.cs@gmail.com, dtor@google.com, anton.bondarenko.sama@gmail.com, f.fainelli@gmail.com, keescook@chromium.org, mathias.nyman@linux.intel.com, felipe.balbi@linux.intel.com, ekorenevsky@gmail.com, peter.chen@nxp.com, joe@perches.com Cc: tbroch@google.com, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, rajatja@google.com, bleung@google.com, Ravi Chandra Sadineni Subject: [PATCH] USB: Increment wakeup count on remote wakeup. Date: Wed, 18 Apr 2018 17:18:50 -0700 Message-Id: <20180419001850.133110-1-ravisadineni@chromium.org> X-Mailer: git-send-email 2.17.0.484.g0c8726318c-goog X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: =?utf-8?q?1598131689368834523?= X-GMAIL-MSGID: =?utf-8?q?1598131689368834523?= X-Mailing-List: linux-kernel@vger.kernel.org List-ID: On chromebooks we depend on wakeup count to identify the wakeup source. But currently USB devices do not increment the wakeup count when they trigger the remote wake. This patch addresses the same. Resume condition is reported differently on USB 2.0 and USB 3.0 devices. On USB 2.0 devices, a wake capable device, if wake enabled, drives resume signal to indicate a remote wake (USB 2.0 spec section 7.1.7.7). The upstream facing port then sets C_PORT_SUSPEND bit and reports a port change event (USB 2.0 spec section 11.24.2.7.2.3). Thus if a port has resumed before driving the resume signal from the host and C_PORT_SUSPEND is set, then the device attached to the given port might be the reason for the last system wakeup. Increment the wakeup count for the same. On USB 3.0 devices, a function may signal that it wants to exit from device suspend by sending a Function Wake Device Notification to the host (USB3.0 spec section 8.5.6.4) Thus on receiving the Function Wake, increment the wakeup count. Signed-off-by: ravisadineni@chromium.org --- drivers/usb/core/hcd.c | 1 + drivers/usb/core/hub.c | 12 ++++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c index 777036ae63674..79f95a878fb6e 100644 --- a/drivers/usb/core/hcd.c +++ b/drivers/usb/core/hcd.c @@ -2375,6 +2375,7 @@ void usb_hcd_resume_root_hub (struct usb_hcd *hcd) { unsigned long flags; + pm_wakeup_event(dev, 0); spin_lock_irqsave (&hcd_root_hub_lock, flags); if (hcd->rh_registered) { set_bit(HCD_FLAG_WAKEUP_PENDING, &hcd->flags); diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index f6ea16e9f6bb9..6abc5be1bcbf5 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c @@ -653,12 +653,17 @@ void usb_wakeup_notification(struct usb_device *hdev, unsigned int portnum) { struct usb_hub *hub; + struct usb_port *port_dev; if (!hdev) return; hub = usb_hub_to_struct_hub(hdev); if (hub) { + port_dev = hub->ports[portnum - 1]; + if (port_dev && port_dev->child) + pm_wakeup_event(&port_dev->child->dev, 0); + set_bit(portnum, hub->wakeup_bits); kick_hub_wq(hub); } @@ -3432,10 +3437,13 @@ int usb_port_resume(struct usb_device *udev, pm_message_t msg) usb_lock_port(port_dev); - /* Skip the initial Clear-Suspend step for a remote wakeup */ status = hub_port_status(hub, port1, &portstatus, &portchange); - if (status == 0 && !port_is_suspended(hub, portstatus)) + /* Skip the initial Clear-Suspend step for a remote wakeup */ + if (status == 0 && !port_is_suspended(hub, portstatus)) { + if (portchange & USB_PORT_STAT_C_SUSPEND) + pm_wakeup_event(&udev->dev, 0); goto SuspendCleared; + } /* see 7.1.7.7; affects power usage, but not budgeting */ if (hub_is_superspeed(hub->hdev)) -- 2.13.5 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: Increment wakeup count on remote wakeup. From: Ravi Chandra Sadineni Message-Id: <20180419001850.133110-1-ravisadineni@chromium.org> Date: Wed, 18 Apr 2018 17:18:50 -0700 To: stern@rowland.harvard.edu, gregkh@linuxfoundation.org, martin.blumenstingl@googlemail.com, ravisadineni@google.com, chunfeng.yun@mediatek.com, johan@kernel.org, arvind.yadav.cs@gmail.com, dtor@google.com, anton.bondarenko.sama@gmail.com, f.fainelli@gmail.com, keescook@chromium.org, mathias.nyman@linux.intel.com, felipe.balbi@linux.intel.com, ekorenevsky@gmail.com, peter.chen@nxp.com, joe@perches.com Cc: tbroch@google.com, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, rajatja@google.com, bleung@google.com, Ravi Chandra Sadineni List-ID: T24gY2hyb21lYm9va3Mgd2UgZGVwZW5kIG9uIHdha2V1cCBjb3VudCB0byBpZGVudGlmeSB0aGUg d2FrZXVwIHNvdXJjZS4KQnV0IGN1cnJlbnRseSBVU0IgZGV2aWNlcyBkbyBub3QgaW5jcmVtZW50 IHRoZSB3YWtldXAgY291bnQgd2hlbiB0aGV5CnRyaWdnZXIgdGhlIHJlbW90ZSB3YWtlLiBUaGlz IHBhdGNoIGFkZHJlc3NlcyB0aGUgc2FtZS4KClJlc3VtZSBjb25kaXRpb24gaXMgcmVwb3J0ZWQg ZGlmZmVyZW50bHkgb24gVVNCIDIuMCBhbmQgVVNCIDMuMCBkZXZpY2VzLgoKT24gVVNCIDIuMCBk ZXZpY2VzLCBhIHdha2UgY2FwYWJsZSBkZXZpY2UsIGlmIHdha2UgZW5hYmxlZCwgZHJpdmVzCnJl c3VtZSBzaWduYWwgdG8gaW5kaWNhdGUgYSByZW1vdGUgd2FrZSAoVVNCIDIuMCBzcGVjIHNlY3Rp b24gNy4xLjcuNykuClRoZSB1cHN0cmVhbSBmYWNpbmcgcG9ydCB0aGVuIHNldHMgQ19QT1JUX1NV U1BFTkQgYml0IGFuZCByZXBvcnRzIGEKcG9ydCBjaGFuZ2UgZXZlbnQgKFVTQiAyLjAgc3BlYyBz ZWN0aW9uIDExLjI0LjIuNy4yLjMpLiBUaHVzIGlmIGEgcG9ydApoYXMgcmVzdW1lZCBiZWZvcmUg ZHJpdmluZyB0aGUgcmVzdW1lIHNpZ25hbCBmcm9tIHRoZSBob3N0IGFuZApDX1BPUlRfU1VTUEVO RCBpcyBzZXQsIHRoZW4gdGhlIGRldmljZSBhdHRhY2hlZCB0byB0aGUgZ2l2ZW4gcG9ydCBtaWdo dApiZSB0aGUgcmVhc29uIGZvciB0aGUgbGFzdCBzeXN0ZW0gd2FrZXVwLiBJbmNyZW1lbnQgdGhl IHdha2V1cCBjb3VudCBmb3IKdGhlIHNhbWUuCgpPbiBVU0IgMy4wIGRldmljZXMsIGEgZnVuY3Rp b24gbWF5IHNpZ25hbCB0aGF0IGl0IHdhbnRzIHRvIGV4aXQgZnJvbSBkZXZpY2UKc3VzcGVuZCBi eSBzZW5kaW5nIGEgRnVuY3Rpb24gV2FrZSBEZXZpY2UgTm90aWZpY2F0aW9uIHRvIHRoZSBob3N0 IChVU0IzLjAKc3BlYyBzZWN0aW9uIDguNS42LjQpIFRodXMgb24gcmVjZWl2aW5nIHRoZSBGdW5j dGlvbiBXYWtlLCBpbmNyZW1lbnQgdGhlCndha2V1cCBjb3VudC4KClNpZ25lZC1vZmYtYnk6IHJh dmlzYWRpbmVuaUBjaHJvbWl1bS5vcmcKLS0tCiBkcml2ZXJzL3VzYi9jb3JlL2hjZC5jIHwgIDEg KwogZHJpdmVycy91c2IvY29yZS9odWIuYyB8IDEyICsrKysrKysrKystLQogMiBmaWxlcyBjaGFu Z2VkLCAxMSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZl cnMvdXNiL2NvcmUvaGNkLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCmluZGV4IDc3NzAzNmFl NjM2NzQuLjc5Zjk1YTg3OGZiNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMK KysrIGIvZHJpdmVycy91c2IvY29yZS9oY2QuYwpAQCAtMjM3NSw2ICsyMzc1LDcgQEAgdm9pZCB1 c2JfaGNkX3Jlc3VtZV9yb290X2h1YiAoc3RydWN0IHVzYl9oY2QgKmhjZCkKIHsKIAl1bnNpZ25l ZCBsb25nIGZsYWdzOwogCisJcG1fd2FrZXVwX2V2ZW50KGRldiwgMCk7CiAJc3Bpbl9sb2NrX2ly cXNhdmUgKCZoY2Rfcm9vdF9odWJfbG9jaywgZmxhZ3MpOwogCWlmIChoY2QtPnJoX3JlZ2lzdGVy ZWQpIHsKIAkJc2V0X2JpdChIQ0RfRkxBR19XQUtFVVBfUEVORElORywgJmhjZC0+ZmxhZ3MpOwpk aWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9odWIuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaHVi LmMKaW5kZXggZjZlYTE2ZTlmNmJiOS4uNmFiYzViZTFiY2JmNSAxMDA2NDQKLS0tIGEvZHJpdmVy cy91c2IvY29yZS9odWIuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCkBAIC02NTMsMTIg KzY1MywxNyBAQCB2b2lkIHVzYl93YWtldXBfbm90aWZpY2F0aW9uKHN0cnVjdCB1c2JfZGV2aWNl ICpoZGV2LAogCQl1bnNpZ25lZCBpbnQgcG9ydG51bSkKIHsKIAlzdHJ1Y3QgdXNiX2h1YiAqaHVi OworCXN0cnVjdCB1c2JfcG9ydCAqcG9ydF9kZXY7CiAKIAlpZiAoIWhkZXYpCiAJCXJldHVybjsK IAogCWh1YiA9IHVzYl9odWJfdG9fc3RydWN0X2h1YihoZGV2KTsKIAlpZiAoaHViKSB7CisJCXBv cnRfZGV2ID0gaHViLT5wb3J0c1twb3J0bnVtIC0gMV07CisJCWlmIChwb3J0X2RldiAmJiBwb3J0 X2Rldi0+Y2hpbGQpCisJCQlwbV93YWtldXBfZXZlbnQoJnBvcnRfZGV2LT5jaGlsZC0+ZGV2LCAw KTsKKwogCQlzZXRfYml0KHBvcnRudW0sIGh1Yi0+d2FrZXVwX2JpdHMpOwogCQlraWNrX2h1Yl93 cShodWIpOwogCX0KQEAgLTM0MzIsMTAgKzM0MzcsMTMgQEAgaW50IHVzYl9wb3J0X3Jlc3VtZShz dHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgcG1fbWVzc2FnZV90IG1zZykKIAogCXVzYl9sb2NrX3Bv cnQocG9ydF9kZXYpOwogCi0JLyogU2tpcCB0aGUgaW5pdGlhbCBDbGVhci1TdXNwZW5kIHN0ZXAg Zm9yIGEgcmVtb3RlIHdha2V1cCAqLwogCXN0YXR1cyA9IGh1Yl9wb3J0X3N0YXR1cyhodWIsIHBv cnQxLCAmcG9ydHN0YXR1cywgJnBvcnRjaGFuZ2UpOwotCWlmIChzdGF0dXMgPT0gMCAmJiAhcG9y dF9pc19zdXNwZW5kZWQoaHViLCBwb3J0c3RhdHVzKSkKKwkvKiBTa2lwIHRoZSBpbml0aWFsIENs ZWFyLVN1c3BlbmQgc3RlcCBmb3IgYSByZW1vdGUgd2FrZXVwICovCisJaWYgKHN0YXR1cyA9PSAw ICYmICFwb3J0X2lzX3N1c3BlbmRlZChodWIsIHBvcnRzdGF0dXMpKSB7CisJCWlmIChwb3J0Y2hh bmdlICYgVVNCX1BPUlRfU1RBVF9DX1NVU1BFTkQpCisJCQlwbV93YWtldXBfZXZlbnQoJnVkZXYt PmRldiwgMCk7CiAJCWdvdG8gU3VzcGVuZENsZWFyZWQ7CisJfQogCiAJLyogc2VlIDcuMS43Ljc7 IGFmZmVjdHMgcG93ZXIgdXNhZ2UsIGJ1dCBub3QgYnVkZ2V0aW5nICovCiAJaWYgKGh1Yl9pc19z dXBlcnNwZWVkKGh1Yi0+aGRldikpCg==