Repository navigation
topology2: uaol: Expose both stream pairs of the UAOL link - #11395
Merged
Merged
Conversation
A UAOL link runs two streams per direction on the current hardware, and the kernel creates a backend for each of them, named UAOL<link>-Play<n> and UAOL<link>-Cap<n> in the order Play0, Cap0, Play1, Cap1. The first pair keeps the two consecutive dai link IDs it had. Rename the backends of the UAOL function to UAOL0-Play0 and UAOL0-Cap0 and take the hw_config names from the same variables. Add the second pair of paths in platform/intel/uaol-stream1.conf, the same paths on the UAOL_*1_* variables, pulled in when UAOL_NUM_STREAMS is 2. Its deep buffer is a second instance of the deepbuffer-playback pipeline in platform/intel/uaol-deep-buffer1.conf, on the UAOL_DB1_* variables, because platform/intel/deep-buffer.conf works on the global DEEP_BUFFER_* variables and can only be pulled in once. Both the development sof-hda-generic-uaol topology and the cavs-uaol function topology of the sof_sdw card expose both pairs, UAOL0 on PCM 21 and UAOL1 on PCM 22, the PCM names carrying the same ordinal as the route kcontrols; the sof_sdw one has a deep buffer for each, on PCM 23 and 24. The sof-uaol-id variants take the IDs of all four backends. The backend names stay abbreviated: alsa-lib keeps element ids in SNDRV_CTL_ELEM_ID_NAME_MAXLEN bytes, so once the dai-copier widget name 'dai-copier.UAOL.<backend>.<direction>' reaches 38 characters the ids of its 'dai.word' and 'dai.string' tuple sections collide and one set is silently dropped from the topology. Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
The development sof-hda-generic-uaol topology had no deep buffer for its UAOL PCMs: the first stream's deep buffer came from platform/intel/deep-buffer.conf, which builds its pipeline and PCM from the global DEEP_BUFFER_* variables and so can only be pulled in once per topology, and the HDA jack of sof-hda-generic already has that one. Give the first stream a deep buffer instance of its own, the way the second stream already has: platform/intel/uaol-deep-buffer.conf, the deepbuffer-playback pipeline on the UAOL_DB_* variables, routed into the mixer of the stream itself. UAOL_DEEP_BUFFER now only says whether a topology wants the UAOL deep buffers at all, independent of any other deep buffer it has. The cavs-uaol function topology keeps its two on PCM 23 and 24, and sof-hda-generic-uaol gets the same pair next to the Deepbuffer HDA Analog PCM. Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
…-only machines sof-hda-generic-uaol carries the HDA codec paths, which the machine driver would have dropped by picking sof-hda-generic-idisp on a machine with only an iDisp codec; with the topology named through tplg_filename that selection does not happen, and a backend for a codec the machine does not have fails the whole topology. Build the same file once more without HDA_CONFIG as sof-hda-generic-idisp-uaol, the HDMI passthrough paths of sof-hda-generic-idisp plus the UAOL function, for testing the USB audio offload on such a machine. Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
ujfalusi
requested review from
kv2019i,
lgirdwood,
serhiy-katsyuba-intel and
singalsu
and
a balanced review from Copilot
November 3, 2026 13:16
serhiy-katsyuba-intel
approved these changes
Nov 3, 2026
Contributor
There was a problem hiding this comment.
🔵 Needs a closer look
The incompatible backend layout requires validation against the unavailable companion UAOL kernel series, including both machine drivers’ four-backend mapping and loading of the new HDMI-only HDA variant.
No open issues 🎉
What changed in this PR
Updates SOF topology2 definitions to expose both UAOL stream pairs, matching the kernel’s four-backend layout. These topologies require the corresponding kernel changes.
Changes:
- Exposes UAOL0 and UAOL1 PCMs with separate playback and capture backends.
- Adds a dedicated deep-buffer PCM for each stream pair, allowing coexistence with HDA deep buffers.
- Adds an HDMI-only UAOL development target and updates backend IDs and documentation.
| File | Description |
|---|---|
tools/topology/topology2/README.md |
Documents PCM and pipeline IDs for both stream pairs and deep buffers. |
tools/topology/topology2/production/tplg-targets-sdca-generic.cmake |
Assigns four backend IDs to each UAOL function variant. |
tools/topology/topology2/platform/intel/uaol-stream1.conf |
Defines the second stream pair’s backends, pipelines, PCM, and routes. |
tools/topology/topology2/platform/intel/uaol-generic.conf |
Uses a dedicated deep buffer and conditionally includes the second pair. |
tools/topology/topology2/platform/intel/uaol-deep-buffer1.conf |
Adds the second pair’s deep-buffer PCM and routing. |
tools/topology/topology2/platform/intel/uaol-deep-buffer.conf |
Adds the first pair’s independent deep-buffer PCM and routing. |
tools/topology/topology2/development/tplg-targets.cmake |
Registers the HDMI-only UAOL development target. |
tools/topology/topology2/development/sof-hda-generic-uaol.conf |
Enables both stream pairs and deep buffers in the HDA topology. |
tools/topology/topology2/cavs-uaol.conf |
Configures both stream pairs and deep buffers for the SoundWire function topology. |
Review effort: Balanced
PR 11395: test resultsRun date: 2026-11-03 15:11 UTC Tested commit: b52f44da7f8579c040648d11704d52c9a5afeb44 |
lgirdwood
approved these changes
Nov 3, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A UAOL link runs two streams per direction and the kernel now creates a backend for each of them (UAOL-Play / UAOL-Cap, in the order Play0, Cap0, Play1, Cap1). This PR makes the topologies follow: the UAOL function exposes two PCMs, UAOL0 (21) and UAOL1 (22), each with a deep buffer (23, 24), on both the cavs-uaol function topology of the sof_sdw card and the development sof-hda-generic-uaol.
Second stream pair — backends renamed to UAOL0-Play0/UAOL0-Cap0, second pair added in platform/intel/uaol-stream1.conf behind UAOL_NUM_STREAMS. The names stay short on purpose: alsa-lib keeps element ids in SNDRV_CTL_ELEM_ID_NAME_MAXLEN bytes and a dai-copier widget name of 38+ characters silently loses one of its tuple sections. The sof-uaol-idN variants take the IDs of all four backends.
Deep buffer per stream — platform/intel/uaol-deep-buffer.conf / uaol-deep-buffer1.conf are instances of their own instead of the global deep-buffer.conf, which can only be included once per topology; that lets sof-hda-generic-uaol have them next to the HDA jack's.
sof-hda-generic-idisp-uaol — the development topology without the HDA codec paths, for HDMI-only machines.
Kernel side: the backend-per-stream series on the SOF UAOL branch. A kernel without it does not load these topologies, and the previous single-pair topologies do not load on the new kernel; UAOL has not shipped anywhere yet, so there is nothing to stay compatible with.
Tested on PTL with the sof_sdw card (CUBILUX CA7, two USB PCMs) and the HDA card (Sennheiser full-speed + Yamaha MG-XU with feedback): each PCM and deep buffer alone and all together, 2 playback + 2 capture concurrently, and the route selection controls.