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 v3 00/26] ALSA compress / ASoC compress / SOF: Compressed audio support with IPC4
Date: Fri, 11 Sep 2026 14:21:26 +0300 [thread overview]
Message-ID: <20260911112152.28528-1-peter.ujfalusi@linux.intel.com> (raw)
Hi,
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 | 776 ++++++++++++++++++
sound/soc/sof/ipc4-loader.c | 51 ++
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, 1784 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-11 11:21 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-11 11:21 Peter Ujfalusi [this message]
2026-09-11 11:21 ` [PATCH v3 01/26] ALSA: compress: pin card module while stream is open Peter Ujfalusi
2026-09-11 11:21 ` [PATCH v3 02/26] ALSA: compress: register the open file with the card Peter Ujfalusi
2026-09-11 11:21 ` [PATCH v3 03/26] ALSA: compress: stop active streams on disconnect Peter Ujfalusi
2026-09-11 11:21 ` [PATCH v3 04/26] ASoC: soc-compress: Provide a runtime for the compressed FE substream Peter Ujfalusi
2026-09-11 11:21 ` [PATCH v3 05/26] ASoC: soc-compress: Implement trigger FE-BE sequencing as with normal PCMs Peter Ujfalusi
2026-09-11 11:21 ` [PATCH v3 06/26] ASoC: soc-compress: Stop running dpcm on free Peter Ujfalusi
2026-09-11 11:21 ` [PATCH v3 07/26] ASoC: SOF: compress: Move the IPC agnostic helpers to sof-audio.c Peter Ujfalusi
2026-09-11 11:21 ` [PATCH v3 08/26] ASoC: SOF: compress: Rename compress ops with ipc3 prefix Peter Ujfalusi
2026-09-11 11:21 ` [PATCH v3 09/26] ASoC: SOF: sof-audio: Fix the pipeline_list population Peter Ujfalusi
2026-09-11 11:21 ` [PATCH v3 10/26] ASoC: SOF: ipc4-pcm: Serialize the PCM free with the pipeline triggers Peter Ujfalusi
2026-09-11 11:21 ` [PATCH v3 11/26] ASoC: SOF: sof-audio: do not dereference swidget->spipe unconditionally on free Peter Ujfalusi
2026-09-11 11:21 ` [PATCH v3 12/26] ASoC: SOF: sof-audio: Expose a couple of functions Peter Ujfalusi
2026-09-11 11:21 ` [PATCH v3 13/26] ASoC: SOF: pcm: Modify the signature of a couple of PCM IPC ops Peter Ujfalusi
2026-09-11 11:21 ` [PATCH v3 14/26] ASoC: SOF: intel: hda-stream: Clear the current position when releasing stream Peter Ujfalusi
2026-09-11 11:21 ` [PATCH v3 15/26] ASoC: SOF: ipc4: Add definition of module data in init_ext object type Peter Ujfalusi
2026-09-11 11:21 ` [PATCH v3 16/26] ASoC: SOF: ipc4-topology: Support init_ext_module_data for process modules Peter Ujfalusi
2026-09-11 11:21 ` [PATCH v3 17/26] ASoC: SOF: ipc4-pcm: Make the timestamp info usable outside of ipc4-pcm.c Peter Ujfalusi
2026-09-11 11:21 ` [PATCH v3 18/26] ASoC: SOF: ipc4/ipc4-loader: Add SOF_INFO and CODEC_INFO to fw_config_params Peter Ujfalusi
2026-09-11 21:01 ` Mark Brown
2026-09-11 11:21 ` [PATCH v3 19/26] ASoC: SOF: ipc4-pcm: Handle COMPR DRAIN triggers as EOS pipeline state Peter Ujfalusi
2026-09-11 11:21 ` [PATCH v3 20/26] ASoC: SOF: ipc4-topology: Set FAST_MODE for host copier in compr mode Peter Ujfalusi
2026-09-11 11:21 ` [PATCH v3 21/26] ASoC: SOF: ops: Add new platform-specific ops for compress Peter Ujfalusi
2026-09-11 11:21 ` [PATCH v3 22/26] ASoC: SOF: Add support for IPC4 compressed Peter Ujfalusi
2026-09-11 20:50 ` Mark Brown
2026-09-11 11:21 ` [PATCH v3 23/26] ASoC: SOF: ipc4: Handle compressed drain done notification from firmware Peter Ujfalusi
2026-09-11 11:21 ` [PATCH v3 24/26] ASoC: SOF: Intel: Kconfig: Remove redundant IPC version selects Peter Ujfalusi
2026-09-11 11:21 ` [PATCH v3 25/26] ASoC: SOF: Intel: Kconfig: Select compress support for TGL+ platforms Peter Ujfalusi
2026-09-11 11:21 ` [PATCH v3 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=20260911112152.28528-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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.