From: Bjorn Andersson <bjorn.andersson@linaro.org>
To: Matthias Kaehlcke <mka@chromium.org>
Cc: Sandeep Maheswaram <quic_c_sanm@quicinc.com>,
Andy Gross <agross@kernel.org>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Felipe Balbi <balbi@kernel.org>,
Stephen Boyd <swboyd@chromium.org>,
Doug Anderson <dianders@chromium.org>,
Mathias Nyman <mathias.nyman@intel.com>,
linux-arm-msm@vger.kernel.org, linux-usb@vger.kernel.org,
linux-kernel@vger.kernel.org, quic_pkondeti@quicinc.com,
quic_ppratap@quicinc.com
Subject: Re: [PATCH v9 1/5] usb: host: xhci: plat: Add suspend quirk for dwc3 controller
Date: Mon, 1 Nov 2021 13:50:31 -0700 [thread overview]
Message-ID: <YYBTFxU8biWxNeJ5@ripper> (raw)
In-Reply-To: <YYA4/rjSN/QvIM+w@google.com>
On Mon 01 Nov 11:59 PDT 2021, Matthias Kaehlcke wrote:
> Hi Sandeep,
>
> On Mon, Nov 01, 2021 at 01:23:40PM +0530, Sandeep Maheswaram wrote:
> > During suspend check if any wakeup capable devices are connected to the
> > controller (directly or through hubs), and set the wakeup capable property
> > for xhci plat device.
> >
> > Signed-off-by: Sandeep Maheswaram <quic_c_sanm@quicinc.com>
> > ---
> > drivers/usb/host/xhci-plat.c | 12 ++++++++++++
> > 1 file changed, 12 insertions(+)
> >
> > diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c
> > index c1edcc9..7ab272b 100644
> > --- a/drivers/usb/host/xhci-plat.c
> > +++ b/drivers/usb/host/xhci-plat.c
> > @@ -431,6 +431,14 @@ static int xhci_plat_remove(struct platform_device *dev)
> > return 0;
> > }
> >
> > +static void xhci_dwc3_suspend_quirk(struct usb_hcd *hcd, struct device *dev)
> > +{
> > + if (usb_wakeup_enabled_descendants(hcd->self.root_hub))
> > + device_set_wakeup_capable(dev, true);
> > + else
> > + device_set_wakeup_capable(dev, false);
>
> IIUC wakeup capability is typically a static property that reflects the
> actual hardware (or firmware) support for wakeup. In that sense it doesn't
> seem a good idea to change it dynamically at suspend time, depending on
> what is connected to the bus. I understand though that the odd split
> of the dwc3 driver makes it hard to do things properly ...
>
> Earlier in this discussion Felipe suggested to add a function like
> device_children_wakeup_capable(), to avoid having to call
> usb_wakeup_enabled_descendants() from the dwc3 drivers.
>
> Below is an initial implementation for device_children_wakeup_capable(),
> could you try if calling it from dwc3_suspend/resume_common() and
> dwc3_qcom_suspend() would work instead of relying on the wakeup
> capability?
>
> Thanks
>
> Matthias
>
> From 97c838334045ed67c3943f8e035ac70acd12b89b Mon Sep 17 00:00:00 2001
> From: Matthias Kaehlcke <mka@chromium.org>
> Date: Mon, 1 Nov 2021 11:37:19 -0700
> Subject: [PATCH] PM / wakeup: Add device_children_wakeup_capable()
>
> Add device_children_wakeup_capable() which checks whether the device itself
> or one if its descendants is wakeup capable.
>
> Change-Id: Ib359eb5ac8650ddf9889c7d1f77707f50777fe99
> Suggested-by: Felipe Balbi <balbi@kernel.org>
> Signed-off-by: Matthias Kaehlcke <mka@chromium.org>
Looks neat and useful.
Reviewed-by: Bjorn Andersson <bjorn.andersson@linaro.org>
(Without the Change-Id of course...)
Regards,
Bjorn
> ---
> drivers/base/power/wakeup.c | 17 +++++++++++++++++
> include/linux/pm_wakeup.h | 6 ++++++
> 2 files changed, 23 insertions(+)
>
> diff --git a/drivers/base/power/wakeup.c b/drivers/base/power/wakeup.c
> index 9c0932603642..2aee7fa8230f 100644
> --- a/drivers/base/power/wakeup.c
> +++ b/drivers/base/power/wakeup.c
> @@ -483,6 +483,23 @@ int device_set_wakeup_enable(struct device *dev, bool enable)
> }
> EXPORT_SYMBOL_GPL(device_set_wakeup_enable);
>
> +static int __device_children_wakeup_capable(struct device *dev, void *dummy)
> +{
> + return device_may_wakeup(dev) ||
> + device_for_each_child(dev, NULL, __device_children_wakeup_capable);
> +}
> +
> +/**
> + * device_children_wakeup_capable - Check whether a device or one of its descendants is
> + * wakeup capable.
> + * @dev: Device to handle.
> + */
> +bool device_children_wakeup_capable(struct device *dev)
> +{
> + return __device_children_wakeup_capable(dev, NULL);
> +}
> +EXPORT_SYMBOL_GPL(device_children_wakeup_capable);
> +
> /**
> * wakeup_source_not_registered - validate the given wakeup source.
> * @ws: Wakeup source to be validated.
> diff --git a/include/linux/pm_wakeup.h b/include/linux/pm_wakeup.h
> index 661efa029c96..a0ca42aac6d6 100644
> --- a/include/linux/pm_wakeup.h
> +++ b/include/linux/pm_wakeup.h
> @@ -97,6 +97,7 @@ extern int device_wakeup_disable(struct device *dev);
> extern void device_set_wakeup_capable(struct device *dev, bool capable);
> extern int device_init_wakeup(struct device *dev, bool val);
> extern int device_set_wakeup_enable(struct device *dev, bool enable);
> +extern bool device_children_wakeup_capable(struct device *dev);
> extern void __pm_stay_awake(struct wakeup_source *ws);
> extern void pm_stay_awake(struct device *dev);
> extern void __pm_relax(struct wakeup_source *ws);
> @@ -167,6 +168,11 @@ static inline bool device_may_wakeup(struct device *dev)
>
> static inline void device_set_wakeup_path(struct device *dev) {}
>
> +static inline bool device_children_wakeup_capable(struct device *dev)
> +{
> + return false;
> +}
> +
> static inline void __pm_stay_awake(struct wakeup_source *ws) {}
>
> static inline void pm_stay_awake(struct device *dev) {}
next prev parent reply other threads:[~2021-11-01 20:48 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-11-01 7:53 [PATCH v9 0/5] USB DWC3 host wake up support from system suspend Sandeep Maheswaram
2021-11-01 7:53 ` [PATCH v9 1/5] usb: host: xhci: plat: Add suspend quirk for dwc3 controller Sandeep Maheswaram
2021-11-01 18:59 ` Matthias Kaehlcke
2021-11-01 20:50 ` Bjorn Andersson [this message]
2021-11-01 21:05 ` Matthias Kaehlcke
2021-11-01 7:53 ` [PATCH v9 2/5] usb: dwc3: core: Host wake up support from system suspend Sandeep Maheswaram
2021-11-17 0:28 ` Brian Norris
2021-11-17 1:14 ` Matthias Kaehlcke
2021-11-17 3:09 ` Brian Norris
2021-11-17 6:01 ` Pavan Kondeti
2021-11-01 7:53 ` [PATCH v9 3/5] usb: dwc3: qcom: Add helper functions to enable,disable wake irqs Sandeep Maheswaram
2021-11-01 16:18 ` Matthias Kaehlcke
2021-11-01 16:39 ` Bjorn Andersson
2021-11-01 7:53 ` [PATCH v9 4/5] usb: dwc3: qcom: Change the IRQ flag for DP/DM hs phy irq Sandeep Maheswaram
2021-11-01 16:31 ` Bjorn Andersson
2021-11-18 11:45 ` Sandeep Maheswaram
2021-11-01 7:53 ` [PATCH v9 5/5] usb: dwc3: qcom: Keep power domain on to support wakeup Sandeep Maheswaram
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YYBTFxU8biWxNeJ5@ripper \
--to=bjorn.andersson@linaro.org \
--cc=agross@kernel.org \
--cc=balbi@kernel.org \
--cc=dianders@chromium.org \
--cc=gregkh@linuxfoundation.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=mathias.nyman@intel.com \
--cc=mka@chromium.org \
--cc=quic_c_sanm@quicinc.com \
--cc=quic_pkondeti@quicinc.com \
--cc=quic_ppratap@quicinc.com \
--cc=swboyd@chromium.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.