From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: ARC-Seal: i=1; a=rsa-sha256; t=1524246880; cv=none; d=google.com; s=arc-20160816; b=H9irZfqeEM5lx0GuQGIFKVrB5fVtsgVIMTZU2IQFWcwJreu2caayvsVLo2AhumYnZ7 2gKP9K+aAuTfFZYb8TZUtZjOt1pedRpVUN5lbl6AUCh3GWYg7Z8NnlLvh6iJ5OWrKBUm M4tgJdE/0XkbxRoU+sTz0SNbie8JTORMvIY4oPamuOHjvwCrA5CMNVNA3WrgAFuSy89+ BEMIMayLvyPx2Kzg/GjSIqNkp5gmZA/e1ZmLx+NMVmh8S+YBoCZufUMPd+OMHB1qDQPD F0tQ1Gh9qJyw2ieht/eO/+mnNTJrOEFZuTLZVy8Qenuph0hMWHdZIL4Mn7mLjaKrCQyu 42yw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature:arc-authentication-results; bh=1EGxjyKPxGwXFDxvFmAmpOvl2K7Up1Gjh6yfEh8PPDM=; b=UD0flpcZsvNEsmUqVeY4Uh5M0NmYTNyVWF0tcS0MoDmdQ23cmsRHFSnwNk3PJvS2sH p6FPW888wb2RPrdHGKVrVgTmeHqqxxk2bB2qrMr6ByeYm1oqahiufaUs1/8ncAMXYFoo UX4S2ZQe2l5p5Za7NBBDI6cwOiN+33cvyu/aoYwJcu3O3kbOYUl6C0IqQDGY8uqyA/30 fWNC8o25hde8R2B0tnXYdoxbpNcCUbwLoNl2Y0f0EhS53dN4wrdmAtFq0DpDPJrdL6ek h0G9998EWLZzzDkPwPvqsCfXfvZdQT7Jv0MaUNm++JJr99/dFlDGXn5l/hXcYd5rU2ZY nzRA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=lzINQGCd; 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=lzINQGCd; 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: AIpwx48ybDI8Q7hAVMtgIYPDd/5hPycTFwA2nN34vanKq32KaJ/3Q13oIE78IdkLnCvhXF1EmHKSHg== 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 V4] USB: Increment wakeup count on remote wakeup. Date: Fri, 20 Apr 2018 10:54:10 -0700 Message-Id: <20180420175410.191710-1-ravisadineni@chromium.org> X-Mailer: git-send-email 2.17.0.484.g0c8726318c-goog In-Reply-To: References: X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: =?utf-8?q?1598131689368834523?= X-GMAIL-MSGID: =?utf-8?q?1598288696568449272?= 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: Ravi Chandra Sadineni --- drivers/usb/core/hcd.c | 1 + drivers/usb/core/hub.c | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c index 777036ae63674..00bb8417050ff 100644 --- a/drivers/usb/core/hcd.c +++ b/drivers/usb/core/hcd.c @@ -2377,6 +2377,7 @@ void usb_hcd_resume_root_hub (struct usb_hcd *hcd) spin_lock_irqsave (&hcd_root_hub_lock, flags); if (hcd->rh_registered) { + pm_wakeup_event(&hcd->self.root_hub->dev, 0); set_bit(HCD_FLAG_WAKEUP_PENDING, &hcd->flags); queue_work(pm_wq, &hcd->wakeup_work); } diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index f6ea16e9f6bb9..aa9968d90a48c 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); } @@ -3434,8 +3439,11 @@ int usb_port_resume(struct usb_device *udev, pm_message_t msg) /* 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)) + 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.17.0.484.g0c8726318c-goog 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: [V4] USB: Increment wakeup count on remote wakeup. From: Ravi Chandra Sadineni Message-Id: <20180420175410.191710-1-ravisadineni@chromium.org> Date: Fri, 20 Apr 2018 10:54:10 -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 dGlvbiBXYWtlLCBpbmNyZW1lbnQgdGhlCndha2V1cCBjb3VudC4KClNpZ25lZC1vZmYtYnk6IFJh dmkgQ2hhbmRyYSBTYWRpbmVuaSA8cmF2aXNhZGluZW5pQGNocm9taXVtLm9yZz4KLS0tCiBkcml2 ZXJzL3VzYi9jb3JlL2hjZC5jIHwgIDEgKwogZHJpdmVycy91c2IvY29yZS9odWIuYyB8IDEwICsr KysrKysrKy0KIDIgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigt KQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMgYi9kcml2ZXJzL3VzYi9jb3Jl L2hjZC5jCmluZGV4IDc3NzAzNmFlNjM2NzQuLjAwYmI4NDE3MDUwZmYgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvdXNiL2NvcmUvaGNkLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9oY2QuYwpAQCAtMjM3 Nyw2ICsyMzc3LDcgQEAgdm9pZCB1c2JfaGNkX3Jlc3VtZV9yb290X2h1YiAoc3RydWN0IHVzYl9o Y2QgKmhjZCkKIAogCXNwaW5fbG9ja19pcnFzYXZlICgmaGNkX3Jvb3RfaHViX2xvY2ssIGZsYWdz KTsKIAlpZiAoaGNkLT5yaF9yZWdpc3RlcmVkKSB7CisJCXBtX3dha2V1cF9ldmVudCgmaGNkLT5z ZWxmLnJvb3RfaHViLT5kZXYsIDApOwogCQlzZXRfYml0KEhDRF9GTEFHX1dBS0VVUF9QRU5ESU5H LCAmaGNkLT5mbGFncyk7CiAJCXF1ZXVlX3dvcmsocG1fd3EsICZoY2QtPndha2V1cF93b3JrKTsK IAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jIGIvZHJpdmVycy91c2IvY29y ZS9odWIuYwppbmRleCBmNmVhMTZlOWY2YmI5Li5hYTk5NjhkOTBhNDhjIDEwMDY0NAotLS0gYS9k cml2ZXJzL3VzYi9jb3JlL2h1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKQEAgLTY1 MywxMiArNjUzLDE3IEBAIHZvaWQgdXNiX3dha2V1cF9ub3RpZmljYXRpb24oc3RydWN0IHVzYl9k ZXZpY2UgKmhkZXYsCiAJCXVuc2lnbmVkIGludCBwb3J0bnVtKQogewogCXN0cnVjdCB1c2JfaHVi ICpodWI7CisJc3RydWN0IHVzYl9wb3J0ICpwb3J0X2RldjsKIAogCWlmICghaGRldikKIAkJcmV0 dXJuOwogCiAJaHViID0gdXNiX2h1Yl90b19zdHJ1Y3RfaHViKGhkZXYpOwogCWlmIChodWIpIHsK KwkJcG9ydF9kZXYgPSBodWItPnBvcnRzW3BvcnRudW0gLSAxXTsKKwkJaWYgKHBvcnRfZGV2ICYm IHBvcnRfZGV2LT5jaGlsZCkKKwkJCXBtX3dha2V1cF9ldmVudCgmcG9ydF9kZXYtPmNoaWxkLT5k ZXYsIDApOworCiAJCXNldF9iaXQocG9ydG51bSwgaHViLT53YWtldXBfYml0cyk7CiAJCWtpY2tf aHViX3dxKGh1Yik7CiAJfQpAQCAtMzQzNCw4ICszNDM5LDExIEBAIGludCB1c2JfcG9ydF9yZXN1 bWUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHBtX21lc3NhZ2VfdCBtc2cpCiAKIAkvKiBTa2lw IHRoZSBpbml0aWFsIENsZWFyLVN1c3BlbmQgc3RlcCBmb3IgYSByZW1vdGUgd2FrZXVwICovCiAJ c3RhdHVzID0gaHViX3BvcnRfc3RhdHVzKGh1YiwgcG9ydDEsICZwb3J0c3RhdHVzLCAmcG9ydGNo YW5nZSk7Ci0JaWYgKHN0YXR1cyA9PSAwICYmICFwb3J0X2lzX3N1c3BlbmRlZChodWIsIHBvcnRz dGF0dXMpKQorCWlmIChzdGF0dXMgPT0gMCAmJiAhcG9ydF9pc19zdXNwZW5kZWQoaHViLCBwb3J0 c3RhdHVzKSkgeworCQlpZiAocG9ydGNoYW5nZSAmIFVTQl9QT1JUX1NUQVRfQ19TVVNQRU5EKQor CQkJcG1fd2FrZXVwX2V2ZW50KCZ1ZGV2LT5kZXYsIDApOwogCQlnb3RvIFN1c3BlbmRDbGVhcmVk OworCX0KIAogCS8qIHNlZSA3LjEuNy43OyBhZmZlY3RzIHBvd2VyIHVzYWdlLCBidXQgbm90IGJ1 ZGdldGluZyAqLwogCWlmIChodWJfaXNfc3VwZXJzcGVlZChodWItPmhkZXYpKQo=