From patchwork Mon May 20 17:56:03 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Doug Anderson X-Patchwork-Id: 10952165 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 2EAB914C0 for ; Mon, 20 May 2019 17:56:42 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1BD6228846 for ; Mon, 20 May 2019 17:56:42 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0F204288DC; Mon, 20 May 2019 17:56:42 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=unavailable version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id AF29A28846 for ; Mon, 20 May 2019 17:56:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Vm7j9dlgxVqj3Xco7nmT4kCMr3WrsIN97TL+P7DLTdE=; b=FEc09JPyhY4Kwi 94AOjn970y75xjH8zxkAN6rEowzKrrWiVGi6LucEKxUGua4fOVTHQKErnNZm+c1CydZcxBGJTOV88 bpcYJPU6Ywt7q+aRZaQ1O3JwUorq2HuzcxJU3SEymT486idASOG+UwLCPJQd7BUphuVmN//l8wcoJ Hz1gRxRONXn9jjly0HOJbZz5F3xzqYe0PIPqtRR3JWul38xnBWVIId5/DFHvXxOcu4dMOpuzRCS2i FMkFYO9cNTN+vMvn9bdXG6Fpcg6oNyud2cJ0ISiNgbmcImSgi4GnxHrC0c8AlH3kHC5vo1wDHuyh0 M0W68PHUazu3P2YlFVMA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1hSmWb-0008Hg-W3; Mon, 20 May 2019 17:56:38 +0000 Received: from mail-pf1-x441.google.com ([2607:f8b0:4864:20::441]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1hSmWE-0007lV-Cu for linux-rockchip@lists.infradead.org; Mon, 20 May 2019 17:56:19 +0000 Received: by mail-pf1-x441.google.com with SMTP id v80so7594618pfa.3 for ; Mon, 20 May 2019 10:56:14 -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 :mime-version:content-transfer-encoding; bh=4CUjhStx9Q1czDRNZdSf4vceu5KbZk+h2BQP0hsuERo=; b=MFNW8y7mNTo6N1VqA5T5Mo6RzW9jVYQYoQ6qYJl5we7NYdFnZFDyx0sLkY0ogXYLwn enWsfvygO1Z23KozLJnz0N3qWtFlricRqhBNrAnq4nJz3++GH7QK0Drjjj2wHUSWnds0 fpeGcp4z76OpMh6bXOsowHGITGPi2pbzJqyJo= 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:mime-version:content-transfer-encoding; bh=4CUjhStx9Q1czDRNZdSf4vceu5KbZk+h2BQP0hsuERo=; b=HgPLsqrYVxXbHaIs21TxbTk1fIrbvwoPi04l6c5xyGJzyS5byzqQDlMFxfaJiVnlgf 7mDI8gLTg10BkEPHz/ANvuq+w3bJx0B+AEPmg7hcUnZb2TvO7ya5jT0+zFGj3ztWo0im akzwud1qSClmSUtTjDfH7XgsR8FQ0+RYMgvnD9rcVSc0Y2OEvOmuoTHsj6ZEvhu9LUoI 4HJsZt5TOphxlPpbiYpFq/lHpSZFjptntcjnmskA7dVSti2vOWpaqZsNeoyY0KFzrFhf 7CBTghfyWYGkvJLvIyxErbhNBXiiGFg5fanjyWGXqaJFXv/05mwupW1+lCiUPDf18zh/ G2EQ== X-Gm-Message-State: APjAAAU+uf27qCLSj9QucUz6/qM4KxdEiAGBwWaViVh0238hZrCtuRc/ Ykuzx3ggavfWzvRbO+0SuyyGDQ== X-Google-Smtp-Source: APXvYqx8PLoZmRIV8cyPnbkbGG132pIi5rrVAVnCDXIAjwYFv8VXCCCG4c1elHrOmzAQBdfYcMChEw== X-Received: by 2002:a62:6341:: with SMTP id x62mr80813484pfb.63.1558374973618; Mon, 20 May 2019 10:56:13 -0700 (PDT) Received: from tictac2.mtv.corp.google.com ([2620:15c:202:1:24fa:e766:52c9:e3b2]) by smtp.gmail.com with ESMTPSA id o2sm16852723pgq.1.2019.05.20.10.56.11 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 20 May 2019 10:56:12 -0700 (PDT) From: Douglas Anderson To: Minas Harutyunyan , Felipe Balbi , heiko@sntech.de Subject: [PATCH v3 1/3] Documentation: dt-bindings: Add snps, need-phy-for-wake for dwc2 USB Date: Mon, 20 May 2019 10:56:03 -0700 Message-Id: <20190520175605.2405-2-dianders@chromium.org> X-Mailer: git-send-email 2.21.0.1020.gf2820cf01a-goog In-Reply-To: <20190520175605.2405-1-dianders@chromium.org> References: <20190520175605.2405-1-dianders@chromium.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190520_105614_877201_F06A90A9 X-CRM114-Status: GOOD ( 16.58 ) X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Stefan Wahren , Artur Petrosyan , Amelie Delaunay , Randy Li , amstan@chromium.org, devicetree@vger.kernel.org, Greg Kroah-Hartman , zyw@rock-chips.com, linux-usb@vger.kernel.org, Douglas Anderson , Rob Herring , linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org, mka@chromium.org, Alan Stern , Elaine Zhang , jwerner@chromium.org, William Wu , ryandcase@chromium.org, Mark Rutland Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+patchwork-linux-rockchip=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP Some SoCs with a dwc2 USB controller may need to keep the PHY on to support remote wakeup. Allow specifying this as a device tree property. Signed-off-by: Douglas Anderson Reviewed-by: Rob Herring --- For relevant prior discussion on this patch, see: https://lkml.kernel.org/r/1435017144-2971-3-git-send-email-dianders@chromium.org I didn't make any changes from the prior version since I never found out what Rob thought of my previous arguments. If folks want a change, perhaps they could choose from these options: 1. Assume that all dwc2 hosts would like to keep their PHY on for suspend if there's a USB wakeup enabled, thus we totally drop this binding. This doesn't seem super great to me since I'd bet that many devices that use dwc2 weren't designed for USB wakeup (they may not keep enough clocks or rails on) so we might be wasting power for nothing. 2. Rename this property to "snps,wakeup-from-suspend-with-phy" to make it more obvious that this property is intended both to document that wakeup from suspend is possible and that we need the PHY for said wakeup. 3. Rename this property to "snps,can-wakeup-from-suspend" and assume it's implicit that if we can wakeup from suspend that we need to keep the PHY on. If/when someone shows that a device exists using dwc2 where we can wakeup from suspend without the PHY they can add a new property. NOTE FOR REPOST: - In v2 Rob said [1] he'd prefer something based on the SoC compatibility string, but that doesn't work because not all boards will have the regulator setup / board design / suspend logic necessary to make this work. [1] https://lkml.kernel.org/r/20190430012328.GA25660@bogus Changes in v3: None Changes in v2: None Documentation/devicetree/bindings/usb/dwc2.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Documentation/devicetree/bindings/usb/dwc2.txt b/Documentation/devicetree/bindings/usb/dwc2.txt index 49eac0dc86b0..aafff3a6904d 100644 --- a/Documentation/devicetree/bindings/usb/dwc2.txt +++ b/Documentation/devicetree/bindings/usb/dwc2.txt @@ -42,6 +42,8 @@ Refer to phy/phy-bindings.txt for generic phy consumer properties - g-rx-fifo-size: size of rx fifo size in gadget mode. - g-np-tx-fifo-size: size of non-periodic tx fifo size in gadget mode. - g-tx-fifo-size: size of periodic tx fifo per endpoint (except ep0) in gadget mode. +- snps,need-phy-for-wake: If present indicates that the phy needs to be left + on for remote wakeup during suspend. - snps,reset-phy-on-wake: If present indicates that we need to reset the PHY when we detect a wakeup. This is due to a hardware errata. @@ -58,4 +60,5 @@ Example: clock-names = "otg"; phys = <&usbphy>; phy-names = "usb2-phy"; + snps,need-phy-for-wake; }; From patchwork Mon May 20 17:56:04 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Doug Anderson X-Patchwork-Id: 10952163 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 5319D16C1 for ; Mon, 20 May 2019 17:56:40 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3E06B28846 for ; Mon, 20 May 2019 17:56:40 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 31404288DC; Mon, 20 May 2019 17:56:40 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=unavailable version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 98BBC28846 for ; Mon, 20 May 2019 17:56:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=qaItVE/mOghwo4pDje6g9/0Ikl68JKhOxD4xd116xFY=; b=Kq9Ns/DZjtgKs3 Gg1ua7yaed+/uBX8zXJhX/xf5k0nSmIa15++YrfvtvpVEckGTxjt7+7kgmi5inueyXq/KYNkIGW28 PaV9xK5QYVTLv763Uajen5mp/Zkljaqzv8zqlU8ptE5mF7veDNW5r/gzh1pxfpWsG6lmUJFwBBdQ1 kxL4OlW/3ZKSZCr6dVVmZya5YFQUaZRqStp1oT+65Vl0LEstmYLy8uGaZ9ibB4vXyo2mNBNxFEIIn mVogVSfU8iIk4YL1I41IfisaYFszXv575BVS0+kWL91NGovxb/N0Vyh+ez2IiPy6sJu0mrYNXuSD2 UimafYrJUX6rA3wfDM4g==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1hSmWa-0008FZ-KY; Mon, 20 May 2019 17:56:36 +0000 Received: from mail-pg1-x543.google.com ([2607:f8b0:4864:20::543]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1hSmWF-0007o5-VN for linux-rockchip@lists.infradead.org; Mon, 20 May 2019 17:56:20 +0000 Received: by mail-pg1-x543.google.com with SMTP id 145so7126533pgg.9 for ; Mon, 20 May 2019 10:56:15 -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 :mime-version:content-transfer-encoding; bh=3sdiqccgDJXtFrjjl4K/P/M1SmaN+5PXQCYKXAqHDcE=; b=FiXpYT81ZnLjNm2EkX/LKALMKY0iF/oE+2o+nrgvF0uGX/0EEkeEeU5tM5EoIC1L9J yJ7P0aF9BL7bVJUMit3At2Fx3tKAXnmRbW+K36MW/9sDUNaGnd/skuQgNfjMrPJnnTZg ssB85hNIZHc8N+6KtyEBpXMuA0P8RzGk7xmhA= 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:mime-version:content-transfer-encoding; bh=3sdiqccgDJXtFrjjl4K/P/M1SmaN+5PXQCYKXAqHDcE=; b=cTy8VpLiHGli3eAUSBS1rdZn9wtKChUliIfxlvDX7VQJOt8jXv0pGEDb5jjq3nY8yG dDiQ6KanTbVgnjZd9anI/Bzq/EA+8VIfPH9CyRhFwlC5qWcfzTmd8rVT+jTljLJDDN2F oVgA/yR+SirxVaQjL4Ra97rHvJj0XjFl5Wn+iBfrkDyUvHqi/yE4Wd0UK/Ow50M6VgZH 80/bweCAB+f5jYSzqSISn1YPsIB4Lx6o0DUFiNfg4wRJWJrb/orj3nTQjBnSsRbZv7mQ YMf5Gr0EOrL18vz3pgORan2/pOLw2o6njronAy4aOo1IDiRe/yUp6Hm45INVJOXhbYPe Y8Jg== X-Gm-Message-State: APjAAAUukiC4yojSlHehPoGNqvMUlwvIdBq+mz1hSisJ1bvhtJxbs1LD KSU/9OEQOFngoWOR2MyL9UzwPQ== X-Google-Smtp-Source: APXvYqyesrrZw3c6wnWIYKskRfQzbmGey2GoXlGuQ2obakNmbEU9VplgKM4DwUU5orVX5Nf76vXgJw== X-Received: by 2002:a62:2703:: with SMTP id n3mr81869816pfn.199.1558374975284; Mon, 20 May 2019 10:56:15 -0700 (PDT) Received: from tictac2.mtv.corp.google.com ([2620:15c:202:1:24fa:e766:52c9:e3b2]) by smtp.gmail.com with ESMTPSA id o2sm16852723pgq.1.2019.05.20.10.56.13 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 20 May 2019 10:56:14 -0700 (PDT) From: Douglas Anderson To: Minas Harutyunyan , Felipe Balbi , heiko@sntech.de Subject: [PATCH v3 2/3] USB: dwc2: Don't turn off the usbphy in suspend if wakeup is enabled Date: Mon, 20 May 2019 10:56:04 -0700 Message-Id: <20190520175605.2405-3-dianders@chromium.org> X-Mailer: git-send-email 2.21.0.1020.gf2820cf01a-goog In-Reply-To: <20190520175605.2405-1-dianders@chromium.org> References: <20190520175605.2405-1-dianders@chromium.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190520_105616_545650_6FD5860F X-CRM114-Status: GOOD ( 23.84 ) X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Stefan Wahren , Artur Petrosyan , Amelie Delaunay , Randy Li , amstan@chromium.org, Greg Kroah-Hartman , zyw@rock-chips.com, linux-usb@vger.kernel.org, Douglas Anderson , linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org, mka@chromium.org, Alan Stern , Elaine Zhang , jwerner@chromium.org, William Wu , ryandcase@chromium.org Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+patchwork-linux-rockchip=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP If the 'snps,need-phy-for-wake' is set in the device tree then: - We know that we can wakeup, so call device_set_wakeup_capable(). The USB core will use this knowledge to enable wakeup by default. - We know that we should keep the PHY on during suspend if something on our root hub needs remote wakeup. This requires the patch (USB: Export usb_wakeup_enabled_descendants()). Note that we don't keep the PHY on at suspend time if it's not needed because it would be a power draw. If we later find some users of dwc2 that can support wakeup without keeping the PHY on we may want to add a way to call device_set_wakeup_capable() without keeping the PHY on at suspend time. Signed-off-by: Douglas Anderson Signed-off-by: Chris Zhong --- For relevant prior discussion of this idea, see: https://lkml.kernel.org/r/1436207224-21849-4-git-send-email-dianders@chromium.org If I'm reading all the responses correctly folks were of the opinion that this patch is still the right way to go. Changes in v3: - Fixed kbuild test robot error. Changes in v2: - Rebased to mainline atop rk3288 remote wake quirk series. drivers/usb/dwc2/core.h | 8 ++++++++ drivers/usb/dwc2/hcd.c | 19 +++++++++++++++++++ drivers/usb/dwc2/platform.c | 23 ++++++++++++++++++++--- 3 files changed, 47 insertions(+), 3 deletions(-) diff --git a/drivers/usb/dwc2/core.h b/drivers/usb/dwc2/core.h index 152ac41dfb2d..d08d070a0fb6 100644 --- a/drivers/usb/dwc2/core.h +++ b/drivers/usb/dwc2/core.h @@ -861,6 +861,9 @@ struct dwc2_hregs_backup { * @hibernated: True if core is hibernated * @reset_phy_on_wake: Quirk saying that we should assert PHY reset on a * remote wakeup. + * @phy_off_for_suspend: Status of whether we turned the PHY off at suspend. + * @need_phy_for_wake: Quirk saying that we should keep the PHY on at + * suspend if we need USB to wake us up. * @frame_number: Frame number read from the core. For both device * and host modes. The value ranges are from 0 * to HFNUM_MAX_FRNUM. @@ -1049,6 +1052,8 @@ struct dwc2_hsotg { unsigned int ll_hw_enabled:1; unsigned int hibernated:1; unsigned int reset_phy_on_wake:1; + unsigned int need_phy_for_wake:1; + unsigned int phy_off_for_suspend:1; u16 frame_number; struct phy *phy; @@ -1438,6 +1443,7 @@ int dwc2_restore_host_registers(struct dwc2_hsotg *hsotg); int dwc2_host_enter_hibernation(struct dwc2_hsotg *hsotg); int dwc2_host_exit_hibernation(struct dwc2_hsotg *hsotg, int rem_wakeup, int reset); +bool dwc2_host_can_poweroff_phy(struct dwc2_hsotg *dwc2); static inline void dwc2_host_schedule_phy_reset(struct dwc2_hsotg *hsotg) { schedule_work(&hsotg->phy_reset_work); } #else @@ -1463,6 +1469,8 @@ static inline int dwc2_host_enter_hibernation(struct dwc2_hsotg *hsotg) static inline int dwc2_host_exit_hibernation(struct dwc2_hsotg *hsotg, int rem_wakeup, int reset) { return 0; } +static inline bool dwc2_host_can_poweroff_phy(struct dwc2_hsotg *dwc2) +{ return false; } static inline void dwc2_host_schedule_phy_reset(struct dwc2_hsotg *hsotg) {} #endif diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c index b50ec3714fd8..cc918fe7ddb8 100644 --- a/drivers/usb/dwc2/hcd.c +++ b/drivers/usb/dwc2/hcd.c @@ -5578,3 +5578,22 @@ int dwc2_host_exit_hibernation(struct dwc2_hsotg *hsotg, int rem_wakeup, dev_dbg(hsotg->dev, "Host hibernation restore complete\n"); return ret; } + +bool dwc2_host_can_poweroff_phy(struct dwc2_hsotg *dwc2) +{ + struct usb_device *root_hub = dwc2_hsotg_to_hcd(dwc2)->self.root_hub; + + /* If the controller isn't allowed to wakeup then we can power off. */ + if (!device_may_wakeup(dwc2->dev)) + return true; + + /* + * We don't want to power off the PHY if something under the + * root hub has wakeup enabled. + */ + if (usb_wakeup_enabled_descendants(root_hub)) + return false; + + /* No reason to keep the PHY powered, so allow poweroff */ + return true; +} diff --git a/drivers/usb/dwc2/platform.c b/drivers/usb/dwc2/platform.c index d10a7f8daec3..3e6c3c8a32ff 100644 --- a/drivers/usb/dwc2/platform.c +++ b/drivers/usb/dwc2/platform.c @@ -447,6 +447,10 @@ static int dwc2_driver_probe(struct platform_device *dev) if (retval) goto error; + hsotg->need_phy_for_wake = + of_property_read_bool(dev->dev.of_node, + "snps,need-phy-for-wake"); + /* * Reset before dwc2_get_hwparams() then it could get power-on real * reset value form registers. @@ -478,6 +482,14 @@ static int dwc2_driver_probe(struct platform_device *dev) hsotg->gadget_enabled = 1; } + /* + * If we need PHY for wakeup we must be wakeup capable. + * When we have a device that can wake without the PHY we + * can adjust this condition. + */ + if (hsotg->need_phy_for_wake) + device_set_wakeup_capable(&dev->dev, true); + hsotg->reset_phy_on_wake = of_property_read_bool(dev->dev.of_node, "snps,reset-phy-on-wake"); @@ -516,13 +528,17 @@ static int dwc2_driver_probe(struct platform_device *dev) static int __maybe_unused dwc2_suspend(struct device *dev) { struct dwc2_hsotg *dwc2 = dev_get_drvdata(dev); + bool is_device_mode = dwc2_is_device_mode(dwc2); int ret = 0; - if (dwc2_is_device_mode(dwc2)) + if (is_device_mode) dwc2_hsotg_suspend(dwc2); - if (dwc2->ll_hw_enabled) + if (dwc2->ll_hw_enabled && + (is_device_mode || dwc2_host_can_poweroff_phy(dwc2))) { ret = __dwc2_lowlevel_hw_disable(dwc2); + dwc2->phy_off_for_suspend = true; + } return ret; } @@ -532,11 +548,12 @@ static int __maybe_unused dwc2_resume(struct device *dev) struct dwc2_hsotg *dwc2 = dev_get_drvdata(dev); int ret = 0; - if (dwc2->ll_hw_enabled) { + if (dwc2->phy_off_for_suspend && dwc2->ll_hw_enabled) { ret = __dwc2_lowlevel_hw_enable(dwc2); if (ret) return ret; } + dwc2->phy_off_for_suspend = false; if (dwc2_is_device_mode(dwc2)) ret = dwc2_hsotg_resume(dwc2); From patchwork Mon May 20 17:56:05 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Doug Anderson X-Patchwork-Id: 10952167 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id F17DA14C0 for ; Mon, 20 May 2019 17:56:43 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id DE58728846 for ; Mon, 20 May 2019 17:56:43 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D231C288DC; Mon, 20 May 2019 17:56:43 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 74B5C28846 for ; Mon, 20 May 2019 17:56:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=gZnAdrW9kN9QswRbfm+oEjFOKdi1CM1E5Mw2eYV+9sY=; b=i138BuvZpRrY0w ctVxYT2jHNnWWbtKihahTFHiIA92io7pjJDipSQq2BtblmKjTFeFJWp1twWJS13F8Z3hP5jo5PB0z YunqRuR2qTqLyt9EwtygcfiAdgc9qIQ+R6R2hmNsR+u7LhtgSZSQGz6AyrDJcPZvJG5nuXXxW6ONi Y+uuyobemVMWuOYcB5YwMxtgZqSaYxVJ04QD9lbfoeXy6oCZnw5Ys7L8Dhm1QVtuiMLR85Y7BOfqN dPiTAerFE/otatGvAM37ZPNEpIeGPKNAF90N3t1iw/Xubd5AN+q8M5k71HlWbWcdYAhqdnhoykxgv SyUhfo41JRUPfcj6by1Q==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1hSmWd-0008KH-Nr; Mon, 20 May 2019 17:56:39 +0000 Received: from mail-pg1-x544.google.com ([2607:f8b0:4864:20::544]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1hSmWG-0007pd-UX for linux-rockchip@lists.infradead.org; Mon, 20 May 2019 17:56:24 +0000 Received: by mail-pg1-x544.google.com with SMTP id d30so7133701pgm.7 for ; Mon, 20 May 2019 10:56:16 -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 :mime-version:content-transfer-encoding; bh=YtT3QQC/EcCQGVPUxChzIKDFjejylVy5RwDw6h0rP8Y=; b=CxFoYWn12E2Wfl/DUay6zYNsj7HkCPiuVskqwVaONHUcKwExrtZmQOUQe3Ey65gpym dAOGhlevbrpgGEs202kzU4iLQG4beU2kc1yQsScSMSHPdzEI2Apm3x9wOXfEkc/mhrVz YFNNrU0Y11kLRKndmuzqLvU8tkqX4lUaA3LPk= 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:mime-version:content-transfer-encoding; bh=YtT3QQC/EcCQGVPUxChzIKDFjejylVy5RwDw6h0rP8Y=; b=ZfntLBjDTQjsf6eyOHI8Dg692clnCHzWwHN6f+gk2GGeWD6Y+gihuACK/TIkWLcT54 tt+g+TfhDNdGHkRCPzjdgzXZ06M5oimtpOkKwfnFoDFHkmt8HkWM4Aoia2fEVqZcEI1H ZFk6CIi/O2+O8tutPkoYvD2ROvoOwFHdlyAaZzxt5ightxZYjwSkGMdzVSoLhd3Y2UY/ Qmk54KS6gPU+ur0E25KnEujy+YJ/ZzUNHA4/j1/iscUMX+6+tr2CbLJZorOHViiC76NR ClHsjhzamK6LGdyHNhZWXBkwBmrDtrwSPSA78kyMEIE6hSsyePofypMTBoSqkF5+Y0T3 YWSg== X-Gm-Message-State: APjAAAV/i69tVH/lxifW0W+j71o1cRIJd9CDUEM4yhd3Eu8+XpE+ACOe VX51/FNrHdSBO2jKZ3TxPiTJdQ== X-Google-Smtp-Source: APXvYqwliCorEDZCbklnXSYAbGCutGmLbgJZVbkDQsXYpFHd/ACzt+u6KekgF4vh+NU86UtFjG8ebw== X-Received: by 2002:aa7:9e51:: with SMTP id z17mr81249778pfq.212.1558374976378; Mon, 20 May 2019 10:56:16 -0700 (PDT) Received: from tictac2.mtv.corp.google.com ([2620:15c:202:1:24fa:e766:52c9:e3b2]) by smtp.gmail.com with ESMTPSA id o2sm16852723pgq.1.2019.05.20.10.56.15 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 20 May 2019 10:56:15 -0700 (PDT) From: Douglas Anderson To: Minas Harutyunyan , Felipe Balbi , heiko@sntech.de Subject: [PATCH v3 3/3] ARM: dts: rockchip: Allow wakeup from rk3288-veyron's dwc2 USB ports Date: Mon, 20 May 2019 10:56:05 -0700 Message-Id: <20190520175605.2405-4-dianders@chromium.org> X-Mailer: git-send-email 2.21.0.1020.gf2820cf01a-goog In-Reply-To: <20190520175605.2405-1-dianders@chromium.org> References: <20190520175605.2405-1-dianders@chromium.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190520_105617_447549_AE7B8B5C X-CRM114-Status: GOOD ( 13.44 ) X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Stefan Wahren , Artur Petrosyan , Amelie Delaunay , Randy Li , amstan@chromium.org, devicetree@vger.kernel.org, zyw@rock-chips.com, linux-usb@vger.kernel.org, Douglas Anderson , Rob Herring , linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org, mka@chromium.org, Alan Stern , Elaine Zhang , jwerner@chromium.org, William Wu , ryandcase@chromium.org, Mark Rutland , linux-arm-kernel@lists.infradead.org Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+patchwork-linux-rockchip=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP We want to be able to wake from USB if a device is plugged in that wants remote wakeup. Enable it on both dwc2 controllers. NOTE: this is added specifically to veyron and not to rk3288 in general since it's not known whether all rk3288 boards are designed to support USB wakeup. It is plausible that some boards could shut down important rails in S3. Also note that currently wakeup doesn't seem to happen unless you use the "deep" suspend mode (where SDRAM is turned off). Presumably the shallow suspend mode is gating some sort of clock that's important but I couldn't easily figure out how to get it working. Signed-off-by: Douglas Anderson --- Changes in v3: None Changes in v2: - rk3288-veyron dts patch new for v2. arch/arm/boot/dts/rk3288-veyron.dtsi | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arch/arm/boot/dts/rk3288-veyron.dtsi b/arch/arm/boot/dts/rk3288-veyron.dtsi index 1252522392c7..1d8bfed7830c 100644 --- a/arch/arm/boot/dts/rk3288-veyron.dtsi +++ b/arch/arm/boot/dts/rk3288-veyron.dtsi @@ -424,6 +424,7 @@ &usb_host1 { status = "okay"; + snps,need-phy-for-wake; }; &usb_otg { @@ -432,6 +433,7 @@ assigned-clocks = <&cru SCLK_USBPHY480M_SRC>; assigned-clock-parents = <&usbphy0>; dr_mode = "host"; + snps,need-phy-for-wake; }; &vopb {