mbox series

[v6,0/5] Support system sleep with offloaded usb transfers

Message ID 20241106083501.408074-1-guanyulin@google.com (mailing list archive)
Headers show
Series Support system sleep with offloaded usb transfers | expand

Message

Guan-Yu Lin Nov. 6, 2024, 8:32 a.m. UTC
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.

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.

patches depends on series "Introduce QC USB SND audio offloading support" 
https://lore.kernel.org/lkml/20240925010000.2231406-11-quic_wcheng@quicinc.com/T/

changelog
----------
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 sideband usage tracking
  xhci: sideband: add api to trace sideband usage
  usb: host: enable sideband transfer during system sleep

 drivers/usb/core/driver.c         | 87 +++++++++++++++++++++++++++
 drivers/usb/core/hcd.c            |  4 ++
 drivers/usb/core/usb.c            |  4 ++
 drivers/usb/dwc3/core.c           | 97 ++++++++++++++++++++++++++++++-
 drivers/usb/dwc3/core.h           |  1 +
 drivers/usb/host/xhci-plat.c      | 38 ++++++++++--
 drivers/usb/host/xhci-sideband.c  | 92 +++++++++++++++++++++++++++++
 include/linux/usb.h               | 20 +++++++
 include/linux/usb/hcd.h           | 13 +++++
 include/linux/usb/xhci-sideband.h |  5 ++
 10 files changed, 356 insertions(+), 5 deletions(-)

Comments

Thinh Nguyen Nov. 7, 2024, 11:51 p.m. UTC | #1
Hi Guan-Yu,

On Wed, Nov 06, 2024, 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.
> 
> 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.
> 
> patches depends on series "Introduce QC USB SND audio offloading support" 
> https://urldefense.com/v3/__https://lore.kernel.org/lkml/20240925010000.2231406-11-quic_wcheng@quicinc.com/T/__;!!A4F2R9G_pg!YpthUIdOkNF85SqaTIkixxzfpTvUMjWaP_-kFI_ie1biOtI2DXkIOZluZeer0zv5nRWloMT4qG6Vrw7fJHLOkZU$ 
> 
> changelog
> ----------
> 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 sideband usage tracking
>   xhci: sideband: add api to trace sideband usage
>   usb: host: enable sideband transfer during system sleep
> 
>  drivers/usb/core/driver.c         | 87 +++++++++++++++++++++++++++
>  drivers/usb/core/hcd.c            |  4 ++
>  drivers/usb/core/usb.c            |  4 ++
>  drivers/usb/dwc3/core.c           | 97 ++++++++++++++++++++++++++++++-
>  drivers/usb/dwc3/core.h           |  1 +
>  drivers/usb/host/xhci-plat.c      | 38 ++++++++++--
>  drivers/usb/host/xhci-sideband.c  | 92 +++++++++++++++++++++++++++++
>  include/linux/usb.h               | 20 +++++++
>  include/linux/usb/hcd.h           | 13 +++++
>  include/linux/usb/xhci-sideband.h |  5 ++
>  10 files changed, 356 insertions(+), 5 deletions(-)
> 
> -- 
> 2.47.0.199.ga7371fff76-goog
> 

This series is highly dependent on the series "Introduce QC USB SND
audio offloading support". Since that series is still in review and
under active discussion, I'll wait until that series is approved and
merged before reviewing dwc3 related changes.

Thanks,
Thinh