From: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
To: vkoul@kernel.org, perex@perex.cz, tiwai@suse.com,
lgirdwood@gmail.com, broonie@kernel.org,
srinivas.kandagatla@oss.qualcomm.com
Cc: linux-sound@vger.kernel.org, kai.vehmanen@linux.intel.com,
yung-chuan.liao@linux.intel.com, pierre-louis.bossart@linux.dev,
daniel.baluta@nxp.com
Subject: [PATCH v4 00/26] ALSA compress / ASoC compress / SOF: Compressed audio support with IPC4
Date: Wed, 16 Sep 2026 15:02:54 +0300 [thread overview]
Message-ID: <20260916120320.18318-1-peter.ujfalusi@linux.intel.com> (raw)
Hi,
Changes sinve v3:
- Drop the tuple size validation from patch 18 in ipc4-loader and add a
comment to note the trusted source of the data
- Add validation of the PCM format in patch 22 within the ipc4-compress.c
file
Changes since v2:
- Split "ASoC: SOF: compress: Rename compress ops with ipc3 prefix" into a
first patch moving the IPC agnostic helpers to sof-audio.c and a second
doing the rename itself (Pierre-Louis).
- New patch "ASoC: SOF: sof-audio: Fix the pipeline_list population": the
pipeline count was incremented before the array slot was written and a
widget with no spipe could be added as a NULL entry.
- "ASoC: SOF: ipc4-pcm: harden pipeline teardown races" is now "ASoC: SOF:
ipc4-pcm: Serialize the PCM free with the pipeline triggers" and only
moves the pipeline_state_mutex and clears the freed list's count, as the
defensive !spipe checks it carried became redundant with the patch above.
- Moved "ASoC: SOF: ops: Add new platform-specific ops for compress" from
the middle of the series to right before "ASoC: SOF: Add support for IPC4
compressed" (Pierre-Louis).
- Reworded the "ASoC: SOF: ipc4: Add definition of module data in init_ext
object type" commit message to explain what the new object type is used
for (Pierre-Louis).
Kept unchanged after review:
- The ALSA_MAGIC_MASK -> SOF_MAGIC_MASK rename stays: the notification magic
is no longer ALSA control specific, the EOS/drain-complete notification
reuses the same scheme.
- Compress is enabled for TGL and newer rather than keyed on IPC4, since APL
and older platforms also run IPC4 but compress is only enabled from TGL on.
- The series is posted as one set, as the ALSA, soc-compress and SOF
preparatory patches only carry their justification in the context of the
full compress enablement.
Changes since v1:
- Add patch to snd_card_file_add/remove for compress
- Hanlde the SND_COMPR_TRIGGER_NEXT_TRACK in soc_compr_trigger_fe()
Cover letter:
This series adds compressed audio support for SOF with IPC4 firmware.
Supported formats are PCM, MP3, AAC and VORBIS, the feature set is
PAUSE_PUSH/RELEASE, DRAIN and position reporting.
Patches 1-5 are prerequisites in the ALSA compress core and in
soc-compress.c.
These are core fixes rather than driver level workarounds on purpose.
The other users of compressed DPCM have DSP internal ports on their
BEs, driven by code they own. An Intel/SOF BE ends at a third party
CODEC driver which is shared with the non DPCM case and has no reason
to know that the FE is compressed. That set of CODECs is open ended,
so teaching each of them to cope with a compressed FE does not scale.
The core has to hand a BE the same substream state whether the FE is
a PCM or a compressed one.
Two of these patches change behaviour for the existing users of
compressed DPCM, so they would need a look from Qualcomm and NXP:
- "ASoC: soc-compress: Implement trigger FE-BE sequencing as with
normal PCMs" makes the FE/BE trigger order follow
dai_link->trigger[], the way dpcm_fe_dai_do_trigger() does it.
Neither sound/soc/qcom/ nor sound/soc/fsl/ sets it, so both default
to SND_SOC_DPCM_TRIGGER_PRE: START keeps the current order, but
STOP, SUSPEND and PAUSE_PUSH now trigger the BE before the FE.
- "ASoC: soc-compress: Stop running dpcm on free" sends a STOP trigger
from soc_compr_free_fe() if the DPCM is still in START state, which
is the case when the last trigger the stream received was a DRAIN.
Patches 6-20 implement the IPC4 compressed support, patch 21 is a
Kconfig cleanup. The last two patches enable the feature, in Kconfig
for TGL and later and in the topology parser, so the compressed device
type only becomes usable once the code behind it is in place.
Testing:
- IPC4: Arrow Lake, compressed playback on speaker and headphone
(cs42l43), MP3, AAC and VORBIS.
- IPC3: tested by NXP. This does not cover the STOP on free path
above, as they do not implement DRAIN.
Regards,
Peter
---
Peter Ujfalusi (19):
ALSA: compress: pin card module while stream is open
ALSA: compress: register the open file with the card
ALSA: compress: stop active streams on disconnect
ASoC: soc-compress: Provide a runtime for the compressed FE substream
ASoC: soc-compress: Implement trigger FE-BE sequencing as with normal
PCMs
ASoC: soc-compress: Stop running dpcm on free
ASoC: SOF: sof-audio: Fix the pipeline_list population
ASoC: SOF: ipc4-pcm: Serialize the PCM free with the pipeline triggers
ASoC: SOF: sof-audio: do not dereference swidget->spipe
unconditionally on free
ASoC: SOF: ipc4: Add definition of module data in init_ext object type
ASoC: SOF: ipc4-topology: Support init_ext_module_data for process
modules
ASoC: SOF: ipc4-pcm: Make the timestamp info usable outside of
ipc4-pcm.c
ASoC: SOF: ipc4/ipc4-loader: Add SOF_INFO and CODEC_INFO to
fw_config_params
ASoC: SOF: ipc4-pcm: Handle COMPR DRAIN triggers as EOS pipeline state
ASoC: SOF: ipc4-topology: Set FAST_MODE for host copier in compr mode
ASoC: SOF: Add support for IPC4 compressed
ASoC: SOF: ipc4: Handle compressed drain done notification from
firmware
ASoC: SOF: Intel: Kconfig: Remove redundant IPC version selects
ASoC: SOF: Intel: Kconfig: Select compress support for TGL+ platforms
Ranjani Sridharan (7):
ASoC: SOF: compress: Move the IPC agnostic helpers to sof-audio.c
ASoC: SOF: compress: Rename compress ops with ipc3 prefix
ASoC: SOF: sof-audio: Expose a couple of functions
ASoC: SOF: pcm: Modify the signature of a couple of PCM IPC ops
ASoC: SOF: intel: hda-stream: Clear the current position when
releasing stream
ASoC: SOF: ops: Add new platform-specific ops for compress
ASoC: SOF: topology: Add support for decoder and encoder widgets
include/sound/compress_driver.h | 2 +
include/sound/sof/ipc4/header.h | 24 +-
sound/core/compress_offload.c | 86 +-
sound/soc/soc-compress.c | 200 ++++-
sound/soc/sof/Makefile | 4 +-
sound/soc/sof/core.c | 10 +-
sound/soc/sof/intel/Kconfig | 9 +-
sound/soc/sof/intel/hda-common-ops.c | 8 +
sound/soc/sof/intel/hda-pcm.c | 142 ++++
sound/soc/sof/intel/hda-stream.c | 70 +-
sound/soc/sof/intel/hda.h | 15 +
sound/soc/sof/{compress.c => ipc3-compress.c} | 145 +---
sound/soc/sof/ipc3-pcm.c | 29 +-
sound/soc/sof/ipc3-priv.h | 3 +
sound/soc/sof/ipc4-compress.c | 782 ++++++++++++++++++
sound/soc/sof/ipc4-loader.c | 37 +
sound/soc/sof/ipc4-pcm.c | 114 ++-
sound/soc/sof/ipc4-priv.h | 45 +
sound/soc/sof/ipc4-topology.c | 115 ++-
sound/soc/sof/ipc4-topology.h | 9 +
sound/soc/sof/ipc4.c | 13 +-
sound/soc/sof/ops.h | 74 ++
sound/soc/sof/pcm.c | 18 +-
sound/soc/sof/sof-audio.c | 95 ++-
sound/soc/sof/sof-audio.h | 23 +-
sound/soc/sof/sof-priv.h | 12 +
sound/soc/sof/topology.c | 2 +
27 files changed, 1776 insertions(+), 310 deletions(-)
rename sound/soc/sof/{compress.c => ipc3-compress.c} (66%)
create mode 100644 sound/soc/sof/ipc4-compress.c
--
2.55.0
next reply other threads:[~2026-09-16 12:03 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-16 12:02 Peter Ujfalusi [this message]
2026-09-16 12:02 ` [PATCH v4 01/26] ALSA: compress: pin card module while stream is open Peter Ujfalusi
2026-09-16 12:02 ` [PATCH v4 02/26] ALSA: compress: register the open file with the card Peter Ujfalusi
2026-10-06 10:35 ` Mark Brown
2026-10-06 10:59 ` Péter Ujfalusi
2026-09-16 12:02 ` [PATCH v4 03/26] ALSA: compress: stop active streams on disconnect Peter Ujfalusi
2026-09-16 12:02 ` [PATCH v4 04/26] ASoC: soc-compress: Provide a runtime for the compressed FE substream Peter Ujfalusi
2026-09-16 12:02 ` [PATCH v4 05/26] ASoC: soc-compress: Implement trigger FE-BE sequencing as with normal PCMs Peter Ujfalusi
2026-10-06 9:12 ` Mark Brown
2026-10-06 9:50 ` Péter Ujfalusi
2026-10-06 10:11 ` Mark Brown
2026-09-16 12:03 ` [PATCH v4 06/26] ASoC: soc-compress: Stop running dpcm on free Peter Ujfalusi
2026-09-16 12:03 ` [PATCH v4 07/26] ASoC: SOF: compress: Move the IPC agnostic helpers to sof-audio.c Peter Ujfalusi
2026-09-16 12:03 ` [PATCH v4 08/26] ASoC: SOF: compress: Rename compress ops with ipc3 prefix Peter Ujfalusi
2026-09-16 12:03 ` [PATCH v4 09/26] ASoC: SOF: sof-audio: Fix the pipeline_list population Peter Ujfalusi
2026-09-16 12:03 ` [PATCH v4 10/26] ASoC: SOF: ipc4-pcm: Serialize the PCM free with the pipeline triggers Peter Ujfalusi
2026-09-16 12:03 ` [PATCH v4 11/26] ASoC: SOF: sof-audio: do not dereference swidget->spipe unconditionally on free Peter Ujfalusi
2026-09-16 12:03 ` [PATCH v4 12/26] ASoC: SOF: sof-audio: Expose a couple of functions Peter Ujfalusi
2026-09-16 12:03 ` [PATCH v4 13/26] ASoC: SOF: pcm: Modify the signature of a couple of PCM IPC ops Peter Ujfalusi
2026-09-16 12:03 ` [PATCH v4 14/26] ASoC: SOF: intel: hda-stream: Clear the current position when releasing stream Peter Ujfalusi
2026-09-16 12:03 ` [PATCH v4 15/26] ASoC: SOF: ipc4: Add definition of module data in init_ext object type Peter Ujfalusi
2026-09-16 12:03 ` [PATCH v4 16/26] ASoC: SOF: ipc4-topology: Support init_ext_module_data for process modules Peter Ujfalusi
2026-09-16 12:03 ` [PATCH v4 17/26] ASoC: SOF: ipc4-pcm: Make the timestamp info usable outside of ipc4-pcm.c Peter Ujfalusi
2026-09-16 12:03 ` [PATCH v4 18/26] ASoC: SOF: ipc4/ipc4-loader: Add SOF_INFO and CODEC_INFO to fw_config_params Peter Ujfalusi
2026-09-16 12:03 ` [PATCH v4 19/26] ASoC: SOF: ipc4-pcm: Handle COMPR DRAIN triggers as EOS pipeline state Peter Ujfalusi
2026-09-16 12:03 ` [PATCH v4 20/26] ASoC: SOF: ipc4-topology: Set FAST_MODE for host copier in compr mode Peter Ujfalusi
2026-09-16 12:03 ` [PATCH v4 21/26] ASoC: SOF: ops: Add new platform-specific ops for compress Peter Ujfalusi
2026-09-16 12:03 ` [PATCH v4 22/26] ASoC: SOF: Add support for IPC4 compressed Peter Ujfalusi
2026-10-06 9:37 ` Mark Brown
2026-10-06 11:32 ` Péter Ujfalusi
2026-09-16 12:03 ` [PATCH v4 23/26] ASoC: SOF: ipc4: Handle compressed drain done notification from firmware Peter Ujfalusi
2026-09-16 12:03 ` [PATCH v4 24/26] ASoC: SOF: Intel: Kconfig: Remove redundant IPC version selects Peter Ujfalusi
2026-09-16 12:03 ` [PATCH v4 25/26] ASoC: SOF: Intel: Kconfig: Select compress support for TGL+ platforms Peter Ujfalusi
2026-09-16 12:03 ` [PATCH v4 26/26] ASoC: SOF: topology: Add support for decoder and encoder widgets Peter Ujfalusi
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=20260916120320.18318-1-peter.ujfalusi@linux.intel.com \
--to=peter.ujfalusi@linux.intel.com \
--cc=broonie@kernel.org \
--cc=daniel.baluta@nxp.com \
--cc=kai.vehmanen@linux.intel.com \
--cc=lgirdwood@gmail.com \
--cc=linux-sound@vger.kernel.org \
--cc=perex@perex.cz \
--cc=pierre-louis.bossart@linux.dev \
--cc=srinivas.kandagatla@oss.qualcomm.com \
--cc=tiwai@suse.com \
--cc=vkoul@kernel.org \
--cc=yung-chuan.liao@linux.intel.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