From: Pierre-Louis Bossart <pierre-louis.bossart@linux.dev>
To: Guan-Yu Lin <guanyulin@google.com>,
gregkh@linuxfoundation.org, Thinh.Nguyen@synopsys.com,
mathias.nyman@intel.com, stern@rowland.harvard.edu,
perex@perex.cz, tiwai@suse.com, sumit.garg@linaro.org,
kekrby@gmail.com, oneukum@suse.com, ricardo@marliere.net,
lijiayi@kylinos.cn, quic_jjohnson@quicinc.com
Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-sound@vger.kernel.org
Subject: Re: [PATCH v9 0/5] Support system sleep with offloaded usb transfers
Date: Fri, 17 Jan 2025 09:55:00 -0600 [thread overview]
Message-ID: <943a7b09-8e77-4813-810a-18fea0e61482@linux.dev> (raw)
In-Reply-To: <20250117145145.3093352-1-guanyulin@google.com>
On 1/17/25 8:48 AM, Guan-Yu Lin wrote:
> Wesley Cheng and Mathias Nyman's USB offload design enables a co-processor
> to handle some USB transfers, potentially allowing the main system to
> sleep and save power. However, Linux's power management system halts the
> USB host controller when the main system isn't managing any USB transfers.
> To address this, the proposal modifies the system to recognize offloaded
> USB transfers and manage power accordingly.
You probably want to expand on the problem statement and clarify quite a few ambiguous statements.
a) "allowing the main system to sleep and save power". What is the 'main system' and what sort of sleep are you referring to?
Traditionally when playing audio the audio devices remain in D0. Support for playback during 'S0 idle' is more complicated, I have yet to see a working solution even without USB offload in the picture.
b) when referring to power management, you have to be specific on whether you mean 'runtime_pm' or regular power management. Not the same thing but there are related issues.
c) for audio offload the transactions that go through the DSP or co-processor are only for audio endpoints. Control transactions rely on endpoint0 and are NOT offloaded to the best of my knowledge. Which means that you would need to track control transactions as well, even if there is no audio streaming. Otherwise you would have a risk of the XHCI controller transitioning in and out of sleep states.
> This involves two key steps:
> 1. Transfer Status Tracking: Propose xhci_sideband_get and
> xhci_sideband_put to track USB transfers on the co-processor, ensuring the
> system is aware of any ongoing activity.
> 2. Power Management Adjustment: Modifications to the USB driver stack
> (dwc3 controller driver, xhci host controller driver, and USB device
> drivers) allow the system to sleep without disrupting co-processor managed
> USB transfers. This involves adding conditional checks to bypass some
> power management operations.
This is even more confusing, initially the point was to prevent the controller from sleeping while there are offloaded transactions, but now the goal would be to allow the system to sleep while there are offloaded transactions. This isn't the same problem, is it?
> patches depends on series "Introduce QC USB SND audio offloading support"
> https://lore.kernel.org/lkml/20241213235403.4109199-1-quic_wcheng@quicinc.com/T/
>
> changelog
> ----------
> Changes in v9:
> - Remove unnecessary white space change.
>
> Changes in v8:
> - Change the runtime pm api to correct the error handling flow.
> - Not flushing endpoints of actively offloaded USB devices to avoid
> possible USB transfer conflicts.
>
> Changes in v7:
> - Remove counting mechanism in struct usb_hcd. The USB device's offload
> status will be solely recorded in each related struct usb_device.
> - Utilizes `needs_remote_wakeup` attribute in struct usb_interface to
> control the suspend flow of USB interfaces and associated USB endpoints.
> This addresses the need to support interrupt transfers generated by
> offloaded USB devices while the system is suspended.
> - Block any offload_usage change during USB device suspend period.
>
> Changes in v6:
> - Fix build errors when CONFIG_USB_XHCI_SIDEBAND is disabled.
> - Explicitly specify the data structure of the drvdata refereced in
> dwc3_suspend(), dwc3_resume().
> - Move the initialization of counters to the patches introducing them.
>
> Changes in v5:
> - Walk through the USB children in usb_sideband_check() to determine the
> sideband activity under the specific USB device.
> - Replace atomic_t by refcount_t.
> - Reduce logs by using dev_dbg & remove __func__.
>
> Changes in v4:
> - Isolate the feature into USB driver stack.
> - Integrate with series "Introduce QC USB SND audio offloading support"
>
> Changes in v3:
> - Integrate the feature with the pm core framework.
>
> Changes in v2:
> - Cosmetics changes on coding style.
>
> [v3] PM / core: conditionally skip system pm in device/driver model
> [v2] usb: host: enable suspend-to-RAM control in userspace
> [v1] [RFC] usb: host: Allow userspace to control usb suspend flows
> ---
>
> Guan-Yu Lin (5):
> usb: dwc3: separate dev_pm_ops for each pm_event
> usb: xhci-plat: separate dev_pm_ops for each pm_event
> usb: add apis for offload usage tracking
> xhci: sideband: add api to trace sideband usage
> usb: host: enable USB offload during system sleep
>
> drivers/usb/core/driver.c | 131 +++++++++++++++++++++++++++++-
> drivers/usb/core/endpoint.c | 8 --
> drivers/usb/core/usb.c | 4 +
> drivers/usb/dwc3/core.c | 105 +++++++++++++++++++++++-
> drivers/usb/dwc3/core.h | 1 +
> drivers/usb/host/xhci-plat.c | 42 +++++++++-
> drivers/usb/host/xhci-sideband.c | 82 +++++++++++++++++++
> include/linux/usb.h | 27 +++++-
> include/linux/usb/hcd.h | 7 ++
> include/linux/usb/xhci-sideband.h | 6 ++
> sound/usb/qcom/qc_audio_offload.c | 3 +
> 11 files changed, 398 insertions(+), 18 deletions(-)
>
next prev parent reply other threads:[~2025-01-17 16:14 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-17 14:48 [PATCH v9 0/5] Support system sleep with offloaded usb transfers Guan-Yu Lin
2025-01-17 14:48 ` [PATCH v9 1/5] usb: dwc3: separate dev_pm_ops for each pm_event Guan-Yu Lin
2025-01-17 14:48 ` [PATCH v9 2/5] usb: xhci-plat: " Guan-Yu Lin
2025-01-17 14:48 ` [PATCH v9 3/5] usb: add apis for offload usage tracking Guan-Yu Lin
2025-01-17 14:48 ` [PATCH v9 4/5] xhci: sideband: add api to trace sideband usage Guan-Yu Lin
2025-01-17 14:48 ` [PATCH v9 5/5] usb: host: enable USB offload during system sleep Guan-Yu Lin
2025-02-06 0:13 ` Michał Pecio
2025-02-07 11:00 ` Guan-Yu Lin
2025-01-17 15:55 ` Pierre-Louis Bossart [this message]
2025-01-22 16:05 ` [PATCH v9 0/5] Support system sleep with offloaded usb transfers Guan-Yu Lin
2025-01-28 15:11 ` Pierre-Louis Bossart
2025-02-03 2:57 ` Guan-Yu Lin
2025-02-03 23:57 ` Pierre-Louis Bossart
2025-02-07 10:54 ` Guan-Yu Lin
2025-02-07 17:28 ` Pierre-Louis Bossart
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=943a7b09-8e77-4813-810a-18fea0e61482@linux.dev \
--to=pierre-louis.bossart@linux.dev \
--cc=Thinh.Nguyen@synopsys.com \
--cc=gregkh@linuxfoundation.org \
--cc=guanyulin@google.com \
--cc=kekrby@gmail.com \
--cc=lijiayi@kylinos.cn \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sound@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=mathias.nyman@intel.com \
--cc=oneukum@suse.com \
--cc=perex@perex.cz \
--cc=quic_jjohnson@quicinc.com \
--cc=ricardo@marliere.net \
--cc=stern@rowland.harvard.edu \
--cc=sumit.garg@linaro.org \
--cc=tiwai@suse.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).