public inbox for linux-usb@vger.kernel.org
 help / color / mirror / Atom feed
From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
To: Wesley Cheng <quic_wcheng@quicinc.com>,
	mathias.nyman@intel.com, gregkh@linuxfoundation.org,
	lgirdwood@gmail.com, broonie@kernel.org, perex@perex.cz,
	tiwai@suse.com, agross@kernel.org, andersson@kernel.org,
	konrad.dybcio@linaro.org, robh+dt@kernel.org,
	krzysztof.kozlowski+dt@linaro.org, conor+dt@kernel.org,
	srinivas.kandagatla@linaro.org, bgoswami@quicinc.com,
	Thinh.Nguyen@synopsys.com
Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org,
	alsa-devel@alsa-project.org, linux-arm-msm@vger.kernel.org,
	devicetree@vger.kernel.org
Subject: Re: [PATCH v9 00/34] Introduce QC USB SND audio offloading support
Date: Tue, 17 Oct 2023 15:58:20 -0500	[thread overview]
Message-ID: <9942bb93-31ea-4574-940f-98d87a2fc127@linux.intel.com> (raw)
In-Reply-To: <20231017200109.11407-1-quic_wcheng@quicinc.com>

It's been a very long time since I reviewed earlier versions, and I am
still lost on terminology and concepts. The explanations below should
really be added as a .rst file in Documentation for reference, not just
as a cover letter.

> Several Qualcomm based chipsets can support USB audio offloading to a
> dedicated audio DSP, which can take over issuing transfers to the USB
> host controller.  The intention is to reduce the load on the main
> processors in the SoC, and allow them to be placed into lower power modes.
> There are several parts to this design:
>   1. Adding ASoC binding layer
>   2. Create a USB backend for Q6DSP

"backend" is a loaded terms for ASoC. Can you clarify which part of the
ascii art below is a 'backend'?

>   3. Introduce XHCI interrupter support
>   4. Create vendor ops for the USB SND driver
> 
>       USB                          |            ASoC
> --------------------------------------------------------------------
>                                    |  _________________________
>                                    | |sm8250 platform card     |
>                                    | |_________________________|
>                                    |         |           |
>                                    |      ___V____   ____V____
>                                    |     |Q6USB   | |Q6AFE    |  
>                                    |     |"codec" | |"cpu"    |
>                                    |     |________| |_________|
>                                    |         ^  ^        ^
>                                    |         |  |________|
>                                    |      ___V____    |
>                                    |     |SOC-USB |   |
>    ________       ________               |        |   |
>   |USB SND |<--->|QC offld|<------------>|________|   |
>   |(card.c)|     |        |<----------                |
>   |________|     |________|___     | |                |
>       ^               ^       |    | |    ____________V_________
>       |               |       |    | |   |APR/GLINK             |
>    __ V_______________V_____  |    | |   |______________________|
>   |USB SND (endpoint.c)     | |    | |              ^
>   |_________________________| |    | |              |
>               ^               |    | |   ___________V___________
>               |               |    | |->|audio DSP              |
>    ___________V_____________  |    |    |_______________________|
>   |XHCI HCD                 |<-    |
>   |_________________________|      |
> 
> 
> Adding ASoC binding layer:
> soc-usb: Intention is to treat a USB port similar to a headphone jack.

What is a 'port'? USB refers to "interfaces" and "endpoints". Is a
"port" a 1:1 mapping to "endpoint"?

Below I read "AFE port" so not sure what concepts refer to what.

> The port is always present on the device, but cable/pin status can be
> enabled/disabled.  Expose mechanisms for USB backend ASoC drivers to
> communicate with USB SND.
> 
> Create a USB backend for Q6DSP:
> q6usb: Basic backend driver that will be responsible for maintaining the

The asciiart above suggests that q6usb exposes a codec DAI - but the
backend dailink is created by the platform card?

> resources needed to initiate a playback stream using the Q6DSP.  Will

is capture supported? there's explicit references to "num_capture" in
following patches.

> be the entity that checks to make sure the connected USB audio device
> supports the requested PCM format.  If it does not, the PCM open call will
> fail, and userpsace ALSA can take action accordingly.
> 
> Introduce XHCI interrupter support:
> XHCI HCD supports multiple interrupters, which allows for events to be routed
> to different event rings.  This is determined by "Interrupter Target" field
> specified in Section "6.4.1.1 Normal TRB" of the XHCI specification.
> 
> Events in the offloading case will be routed to an event ring that is assigned
> to the audio DSP.
> 
> Create vendor ops for the USB SND driver:
> qc_audio_offload: This particular driver has several components associated
> with it:
> - QMI stream request handler
> - XHCI interrupter and resource management
> - audio DSP memory management
> 
> When the audio DSP wants to enable a playback stream, the request is first
> received by the ASoC platform sound card.  Depending on the selected route,
> ASoC will bring up the individual DAIs in the path.  The Q6USB backend DAI
> will send an AFE port start command (with enabling the USB playback path), and
> the audio DSP will handle the request accordingly.

what about capture, e.g. for a headset?

> Part of the AFE USB port start handling will have an exchange of control
> messages using the QMI protocol.  The qc_audio_offload driver will populate the
> buffer information:
> - Event ring base address
> - EP transfer ring base address
> 
> and pass it along to the audio DSP.  All endpoint management will now be handed
> over to the DSP, and the main processor is not involved in transfers.
> 
> Overall, implementing this feature will still expose separate sound card and PCM
> devices for both the platorm card and USB audio device:

typo: platform

>  0 [SM8250MTPWCD938]: sm8250 - SM8250-MTP-WCD9380-WSA8810-VA-D
>                       SM8250-MTP-WCD9380-WSA8810-VA-DMIC

How do you plan on exposing the USB PCM device?

The lines above are really cryptic, and with no USB reference in any of
the short/long card names it's not obvious that this card is different
from the no-offload case, is it?

>  1 [Audio          ]: USB-Audio - USB Audio
>                       Generic USB Audio at usb-xhci-hcd.1.auto-1.4, high speed

likewise some sort of qualifier would be useful to show that card 0 and
card 1 can target the same USB endpoints.

> This is to ensure that userspace ALSA entities can decide which route to take
> when executing the audio playback.  In the above, if card#1 is selected, then
> USB audio data will take the legacy path over the USB PCM drivers, etc...
> 
> This feature was validated using:
> - tinymix: set/enable the multimedia path to route to USB backend
> - tinyplay: issue playback on platform card

  parent reply	other threads:[~2023-10-17 23:23 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-17 20:00 [PATCH v9 00/34] Introduce QC USB SND audio offloading support Wesley Cheng
2023-10-17 20:00 ` [PATCH v9 01/34] xhci: split free interrupter into separate remove and free parts Wesley Cheng
2023-10-17 20:00 ` [PATCH v9 02/34] xhci: add support to allocate several interrupters Wesley Cheng
2023-10-17 20:00 ` [PATCH v9 03/34] xhci: add helper to stop endpoint and wait for completion Wesley Cheng
2023-10-17 20:00 ` [PATCH v9 04/34] xhci: sideband: add initial api to register a sideband entity Wesley Cheng
2023-10-25  3:24   ` Albert Wang
2023-10-17 20:00 ` [PATCH v9 05/34] usb: host: xhci-mem: Cleanup pending secondary event ring events Wesley Cheng
2023-10-17 20:00 ` [PATCH v9 06/34] usb: host: xhci-mem: Allow for interrupter clients to choose specific index Wesley Cheng
2023-10-17 20:00 ` [PATCH v9 07/34] ASoC: Add SOC USB APIs for adding an USB backend Wesley Cheng
2023-10-17 21:48   ` Pierre-Louis Bossart
2023-10-18  2:07     ` Wesley Cheng
2023-10-17 20:00 ` [PATCH v9 08/34] ASoC: dt-bindings: qcom,q6dsp-lpass-ports: Add USB_RX port Wesley Cheng
2023-10-17 20:00 ` [PATCH v9 09/34] ASoC: qcom: qdsp6: Introduce USB AFE port to q6dsp Wesley Cheng
2023-10-17 21:32   ` Pierre-Louis Bossart
2023-10-18  1:45     ` Wesley Cheng
2023-10-18 13:47       ` Pierre-Louis Bossart
2023-10-18 19:36         ` Wesley Cheng
2023-10-19  1:00           ` Pierre-Louis Bossart
2023-10-19 18:42             ` Wesley Cheng
2023-10-17 20:00 ` [PATCH v9 10/34] ASoC: qdsp6: q6afe: Increase APR timeout Wesley Cheng
2023-10-17 20:00 ` [PATCH v9 11/34] ASoC: qcom: qdsp6: Add USB backend ASoC driver for Q6 Wesley Cheng
2023-10-17 21:46   ` Pierre-Louis Bossart
2023-10-17 20:00 ` [PATCH v9 12/34] ALSA: usb-audio: Introduce USB SND platform op callbacks Wesley Cheng
2023-10-17 20:00 ` [PATCH v9 13/34] ALSA: usb-audio: Export USB SND APIs for modules Wesley Cheng
2023-10-17 20:00 ` [PATCH v9 14/34] dt-bindings: usb: xhci: Add num-hc-interrupters definition Wesley Cheng
2023-10-17 20:00 ` [PATCH v9 15/34] dt-bindings: usb: dwc3: Limit " Wesley Cheng
2023-10-17 20:00 ` [PATCH v9 16/34] usb: dwc3: Specify maximum number of XHCI interrupters Wesley Cheng
2023-10-17 20:00 ` [PATCH v9 17/34] usb: host: xhci-plat: Set XHCI max interrupters if property is present Wesley Cheng
2023-10-17 20:00 ` [PATCH v9 18/34] ALSA: usb-audio: qcom: Add USB QMI definitions Wesley Cheng
2023-10-17 20:00 ` [PATCH v9 19/34] ALSA: usb-audio: qcom: Introduce QC USB SND offloading support Wesley Cheng
2023-10-17 23:21   ` Pierre-Louis Bossart
2023-10-17 20:00 ` [PATCH v9 20/34] ALSA: usb-audio: Check for support for requested audio format Wesley Cheng
2023-10-17 22:29   ` Pierre-Louis Bossart
2023-10-18 20:21     ` Wesley Cheng
2023-10-17 20:00 ` [PATCH v9 21/34] ASoC: usb: Add PCM format check API for USB backend Wesley Cheng
2023-10-17 22:33   ` Pierre-Louis Bossart
2023-10-18 20:33     ` Wesley Cheng
2023-10-17 20:00 ` [PATCH v9 22/34] ASoC: qcom: qdsp6: Ensure PCM format is supported by USB audio device Wesley Cheng
2023-10-17 20:00 ` [PATCH v9 23/34] ALSA: usb-audio: Prevent starting of audio stream if in use Wesley Cheng
2023-10-17 22:37   ` Pierre-Louis Bossart
2023-10-18 20:33     ` Wesley Cheng
2023-10-17 20:00 ` [PATCH v9 24/34] ASoC: dt-bindings: Add Q6USB backend Wesley Cheng
2023-10-17 20:01 ` [PATCH v9 25/34] ASoC: dt-bindings: Update example for enabling USB offload on SM8250 Wesley Cheng
2023-10-17 20:01 ` [PATCH v9 26/34] ASoC: qcom: qdsp6: q6afe: Split USB AFE dev_token param into separate API Wesley Cheng
2023-10-17 22:39   ` Pierre-Louis Bossart
2023-10-19  0:10     ` Wesley Cheng
2023-10-17 20:01 ` [PATCH v9 27/34] ALSA: usb-audio: qcom: Populate PCM and USB chip information Wesley Cheng
2023-10-17 22:41   ` Pierre-Louis Bossart
2023-10-19  0:59     ` Wesley Cheng
2023-10-17 20:01 ` [PATCH v9 28/34] ASoC: qcom: qdsp6: Add support to track available USB PCM devices Wesley Cheng
2023-10-17 22:43   ` Pierre-Louis Bossart
2023-10-19  1:00     ` Wesley Cheng
2023-10-17 20:01 ` [PATCH v9 29/34] ASoC: qcom: qdsp6: Add SND kcontrol to select offload device Wesley Cheng
2023-10-17 22:50   ` Pierre-Louis Bossart
2023-10-19  1:39     ` Wesley Cheng
2023-10-17 20:01 ` [PATCH v9 30/34] ASoC: qcom: qdsp6: Add SND kcontrol for fetching offload status Wesley Cheng
2023-10-17 22:53   ` Pierre-Louis Bossart
2023-10-19  1:41     ` Wesley Cheng
2023-10-19 19:25       ` Wesley Cheng
2023-10-19 20:39         ` Pierre-Louis Bossart
2023-10-17 20:01 ` [PATCH v9 31/34] ASoC: qcom: qdsp6: Add headphone jack for offload connection status Wesley Cheng
2023-10-17 23:03   ` Pierre-Louis Bossart
2023-10-17 20:01 ` [PATCH v9 32/34] ALSA: usb-audio: qcom: Use card and PCM index from QMI request Wesley Cheng
2023-10-17 20:01 ` [PATCH v9 33/34] ALSA: usb-audio: Allow for rediscovery of connected USB SND devices Wesley Cheng
2023-10-17 23:07   ` Pierre-Louis Bossart
2023-10-17 20:01 ` [PATCH v9 34/34] ASoC: usb: Rediscover USB SND devices on USB port add Wesley Cheng
2023-10-17 23:11   ` Pierre-Louis Bossart
2023-10-23 21:54     ` Wesley Cheng
2023-10-24 13:35       ` Pierre-Louis Bossart
2023-10-25 22:31         ` Wesley Cheng
2023-10-17 20:58 ` Pierre-Louis Bossart [this message]
2023-10-18  0:25   ` [PATCH v9 00/34] Introduce QC USB SND audio offloading support Wesley Cheng
2023-10-18 13:54     ` Pierre-Louis Bossart
2023-10-18 20:20       ` Wesley Cheng

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=9942bb93-31ea-4574-940f-98d87a2fc127@linux.intel.com \
    --to=pierre-louis.bossart@linux.intel.com \
    --cc=Thinh.Nguyen@synopsys.com \
    --cc=agross@kernel.org \
    --cc=alsa-devel@alsa-project.org \
    --cc=andersson@kernel.org \
    --cc=bgoswami@quicinc.com \
    --cc=broonie@kernel.org \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=konrad.dybcio@linaro.org \
    --cc=krzysztof.kozlowski+dt@linaro.org \
    --cc=lgirdwood@gmail.com \
    --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=perex@perex.cz \
    --cc=quic_wcheng@quicinc.com \
    --cc=robh+dt@kernel.org \
    --cc=srinivas.kandagatla@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