Received: by 10.192.165.148 with SMTP id m20csp500935imm; Fri, 20 Apr 2018 10:08:43 -0700 (PDT) X-Google-Smtp-Source: AIpwx4/Y+mzWUwshZqybRd15lnxQ+PDtXTaY+PIIVwNcafRk/4vptRLk+PTb6G8PjbR0ac0fiXUU X-Received: by 10.98.35.215 with SMTP id q84mr3426348pfj.31.1524244123834; Fri, 20 Apr 2018 10:08:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524244123; cv=none; d=google.com; s=arc-20160816; b=YAhZPDMRmDWjjW2844WX1D1RNBS/KoFa2hPYCyAHevnvEqOd/0Ao/OgndJzoXnyHqK xN9zH5jEm77nJu8UWts6T2bL9WaM967pAmG6CVWivykXH3CSilIVhm3zj2wcvX3u3zYE ur7v2nUaSfPDqgSBGWjO3o/3Y8BMAaj1HQ57xqXJsUBTAroPXqfEr9rnTlS/hWiAyCZF eJmm4Ep4zqnjuNKS5239LZ9xuAqS+lhCsoIkWD4pJ8aYuD4JwjchhB+JkstI/LpQwQer 8FBXQ+wU1Q/5bQ0HF6lwxUiaFM7SQqIqFYQ76jDdrr91a1XdDoH6IpvERHksstclgUJS 6Bfw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=IJcslkYGesauzl6TVxbuvV3c5ps4eRzuc75nE3TlN9Y=; b=azKHqUniig4EGmnkOnMnj403ofgYstjOOQngw0XIlyHmio2sIYmASEwo0VHsvWL3JK lUXjKN5ZhDxHCTKX4gaM4MM02J1+Rf2U6TBPZTjpu1hHZ1270/++qjwqn6nrqfRx8KJ3 0vwtunjLwROM8kNsFbgHuUGoHEzmiAMQCQKMVFsUlX5a7qrYlr7FiA0fEIGKhnXagdB+ TrnoNkXsWO6uZFC8q2VQUTPy9E6fLXjM0o9bY921J8yLdS51uAax4y0gW8oL4EWzLjI8 7UfVBFgydSdEA0yfmFgOIccvJK/XHspbkSyIABIQvoqvoaq6K3+1ELb6WKbKE+eNhoGS ny9Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=Fgszt4fq; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a7si5250990pgd.690.2018.04.20.10.08.29; Fri, 20 Apr 2018 10:08:43 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=Fgszt4fq; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753696AbeDTRFx (ORCPT + 99 others); Fri, 20 Apr 2018 13:05:53 -0400 Received: from mail-pg0-f66.google.com ([74.125.83.66]:39923 "EHLO mail-pg0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753683AbeDTRFt (ORCPT ); Fri, 20 Apr 2018 13:05:49 -0400 Received: by mail-pg0-f66.google.com with SMTP id b9so4292526pgf.6 for ; Fri, 20 Apr 2018 10:05:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=IJcslkYGesauzl6TVxbuvV3c5ps4eRzuc75nE3TlN9Y=; b=Fgszt4fqmVVlnuiCSzb0XM6exHy8EvlQTx3s077Ftu9EhvsCD3+DxOB+XXtnt7kEfi VOKYGXX1HFGdIFy3Ho1/1n5XDXpODLKnBvVTci9t+zL/FLZNaf1VGsbOBQqdtmKm5xM4 WKpltM4FuboW+sbYUbdUgqCu7XzHbPKE/r3i4= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=IJcslkYGesauzl6TVxbuvV3c5ps4eRzuc75nE3TlN9Y=; b=Psvbc+CA+Dspo3+pIOvO/HIW891RS2gIZTM+13Lb85G41yv5t8j6xQcCLZmUw2gxhr ZdnCfRj3FkU5n0G/d3VpCMHscMkKn2dphFg1+IIIBq8KCi2669l5zaG3n1BGtFNwhQ7y xF6yzEsXGV1QeuqO5bqfoIwDTddSwuDghGns8+FN2tkLHAMS/gx/JcIymq/w7H4itKDo Ww3bKOnaYtxTSRihbCA68gIFDSauvoMUgJ6E4IODiacjqUjPPTGLUa4exDEWu74Pa+vu Xdg1iObfqT8WKcikpc5eVShOEIWMnOsodQ8OPuZ02A2aSXlDiBmuVGjtLOs+FNHMHECJ Fm7g== X-Gm-Message-State: ALQs6tDeJ4DaEVZxILA9TGNryBeZ+tOMrJdCcrcfkUgcw1lcOu+w37SW W2Ky1GW67ExsygdsjvIOwWXFzg== X-Received: by 10.99.121.6 with SMTP id u6mr9402237pgc.112.1524243949014; Fri, 20 Apr 2018 10:05:49 -0700 (PDT) Received: from ravisadineni0.mtv.corp.google.com ([2620:0:1000:1501:22d6:f20d:f2b7:3315]) by smtp.gmail.com with ESMTPSA id t18sm14136538pfg.103.2018.04.20.10.05.47 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 20 Apr 2018 10:05:48 -0700 (PDT) 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 V3] USB: Increment wakeup count on remote wakeup. Date: Fri, 20 Apr 2018 10:05:27 -0700 Message-Id: <20180420170527.143240-1-ravisadineni@chromium.org> X-Mailer: git-send-email 2.17.0.484.g0c8726318c-goog In-Reply-To: References: Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 | 2 ++ drivers/usb/core/hub.c | 10 +++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c index 777036ae63674..b8024ae4fdcaa 100644 --- a/drivers/usb/core/hcd.c +++ b/drivers/usb/core/hcd.c @@ -2375,6 +2375,8 @@ void usb_hcd_resume_root_hub (struct usb_hcd *hcd) { unsigned long flags; + if (hcd->rh_registered) + pm_wakeup_event(&hcd->self.root_hub->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..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