sof icon indicating copy to clipboard operation
sof copied to clipboard

sof-icl-es8336-ssp0.tplg: HDMI PCM/pipeline ids (5/6/7) mismatch iDisp/HDA token IDs (3/4/5) — causes sof IPC hw_params errors

Open marmabiswas123 opened this issue 2 months ago • 16 comments

Summary When booting with intel/sof/sof-icl.ri + topology intel/sof-tplg/sof-icl-es8336-ssp0.tplg, the SOF driver reports IPC errors for HDMI playback streams and ASoC hw_params failures (ipc tx error ... -5, sof_ipc3_pcm_hw_params), caused by a mismatch between HDMI PCM IDs / pipeline indices and the iDisp/HDA IDs encoded in the topology. This causes HDMI PCM hw_params IPC failures (HDMI streams fail to start). See dmesg excerpts below and attached decompiled topology file.

Impact

HDMI PCM (iDisp) playback streams fail to set hw_params → audio over HDMI unavailable.

IPC errors reported in dmesg: ipc tx error for 0x60010000 ... -5 and sof_ipc3_pcm_hw_params: pcm6 (HDMI 2) ... STREAM_PCM_PARAMS ipc failed.

Affects machines using this topology with ES8336 codec + ICL SOF firmware.

Environment / versions (from dmesg)

Linux dmesg excerpt (relevant lines):

[    0.068320] software IO TLB: area num 4.
[    0.679839] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <[email protected]>
[    0.784715] PCI-DMA: Using software bounce buffering for IO (SWIOTLB)
[    0.784718] software IO TLB: mapped [mem 0x000000000b000000-0x000000000f000000] (64MB)
[    4.090941] sof-audio-pci-intel-icl 0000:00:1f.3: enabling device (0000 -> 0002)
[    4.091097] sof-audio-pci-intel-icl 0000:00:1f.3: DSP detected with PCI class/subclass/prog-if 0x040380
[    4.091161] sof-audio-pci-intel-icl 0000:00:1f.3: bound 0000:00:02.0 (ops intel_audio_component_bind_ops [i915])
[    4.098595] sof-audio-pci-intel-icl 0000:00:1f.3: use msi interrupt mode
[    4.113422] sof-audio-pci-intel-icl 0000:00:1f.3: hda codecs found, mask 4
[    4.113427] sof-audio-pci-intel-icl 0000:00:1f.3: BT link detected in NHLT tables: 0x0
[    4.113429] sof-audio-pci-intel-icl 0000:00:1f.3: DMICs detected in NHLT tables: 0
[    4.113431] sof-audio-pci-intel-icl 0000:00:1f.3: NHLT device I2S(4) detected, ssp_mask 0x1
[    4.113433] sof-audio-pci-intel-icl 0000:00:1f.3: Overriding topology with MCLK mask 0x1 from NHLT
[    4.120484] sof-audio-pci-intel-icl 0000:00:1f.3: Firmware paths/files for ipc type 0:
[    4.120490] sof-audio-pci-intel-icl 0000:00:1f.3:  Firmware file:     intel/sof/sof-icl.ri
[    4.120493] sof-audio-pci-intel-icl 0000:00:1f.3:  Topology file:     intel/sof-tplg/sof-icl-es8336-ssp0.tplg
[    4.121155] sof-audio-pci-intel-icl 0000:00:1f.3: Firmware info: version 2:2:0-57864
[    4.121160] sof-audio-pci-intel-icl 0000:00:1f.3: Firmware: ABI 3:22:1 Kernel ABI 3:23:1
[    4.210820] sof-audio-pci-intel-icl 0000:00:1f.3: Firmware info: version 2:2:0-57864
[    4.210827] sof-audio-pci-intel-icl 0000:00:1f.3: Firmware: ABI 3:22:1 Kernel ABI 3:23:1
[    4.220599] sof-essx8336 sof-essx8336: quirk mask 0x0
[    4.220604] sof-essx8336 sof-essx8336: quirk SSP0
[    4.221463] sof-audio-pci-intel-icl 0000:00:1f.3: Topology: ABI 3:22:1 Kernel ABI 3:23:1
[    4.221650] sof-essx8336 sof-essx8336: ASoC: Parent card not yet available, widget card binding deferred
[    4.551088] sof-essx8336 sof-essx8336: hda_dsp_hdmi_build_controls: no PCM in topology for HDMI converter 3
[    4.564017] input: sof-essx8336 Headset as /devices/pci0000:00/0000:00:1f.3/sof-essx8336/sound/card0/input12
[    4.564073] input: sof-essx8336 HDMI/DP,pcm=5 as /devices/pci0000:00/0000:00:1f.3/sof-essx8336/sound/card0/input13
[    4.564116] input: sof-essx8336 HDMI/DP,pcm=6 as /devices/pci0000:00/0000:00:1f.3/sof-essx8336/sound/card0/input14
[    4.564168] input: sof-essx8336 HDMI/DP,pcm=7 as /devices/pci0000:00/0000:00:1f.3/sof-essx8336/sound/card0/input15
[    8.620950] sof-audio-pci-intel-icl 0000:00:1f.3: ipc tx error for 0x60010000 (msg/reply size: 108/20): -5
[    8.620960] sof-audio-pci-intel-icl 0000:00:1f.3: sof_ipc3_pcm_hw_params: pcm6 (HDMI 2), dir 0: STREAM_PCM_PARAMS ipc failed for stream_tag 1
[    8.620964] sof-audio-pci-intel-icl 0000:00:1f.3: ASoC error (-5): at snd_soc_pcm_component_hw_params() on 0000:00:1f.3

Reproduction steps

Boot the machine with the included topology (intel/sof-tplg/sof-icl-es8336-ssp0.tplg) and SOF firmware intel/sof/sof-icl.ri.

Attempt to open an HDMI playback device (e.g., play audio to HDMI or run aplay -D hw:0,6 ... for PCM6).

Observe dmesg errors shown above and that HDMI audio is not available.

Raw evidence / logs

Key topology pieces (excerpts from the decompiled file):

sof-icl-es8336-ssp0-tplg.conf.txt

SectionPCM shows:

SectionPCM {
	'ES8336' {
		dai.'ES8336 0'.id 0
		pcm {
			playback.capabilities 'Passthrough Playback 0'
			capture.capabilities 'Low Latency Capture 0'
		}
	}
	'HDMI 1' {
		id 5
		dai.'HDMI 1 5'.id 5
		pcm.playback.capabilities 'Passthrough Playback 5'
	}
	'HDMI 2' {
		id 6
		dai.'HDMI 2 6'.id 6
		pcm.playback.capabilities 'Passthrough Playback 6'
	}
	'HDMI 3' {
		id 7
		dai.'HDMI 3 7'.id 7
		pcm.playback.capabilities 'Passthrough Playback 7'
	}
}

SectionBE shows:

SectionBE {
	SSP0-Codec.data 'SSP0-Codec:tuple0'
	iDisp1 {
		id 3
		default_hw_conf_id 3
		data 'iDisp1:tuple0'
	}
	iDisp2 {
		id 4
		default_hw_conf_id 4
		data 'iDisp2:tuple0'
	}
	iDisp3 {
		id 5
		default_hw_conf_id 5
		data 'iDisp3:tuple0'
	}
}

Vendor tuples (HDA3/HDA4/HDA5) encode token155 values:

HDA3.OUT:tuple0 → token155 3

HDA4.OUT:tuple0 → token155 4

HDA5.OUT:tuple0 → token155 5

Observation: PCM indexes for HDMI are 5,6,7 while iDisp / HDA token indices are 3,4,5. Pipelines are declared with indices 5/6/7 (for PCM5/6/7) but HDA tuple token155 values refer to 3/4/5. This mismatch between the pipeline/PCM IDs and the HDA/iDisp IDs leads to incorrect mapping when SOF builds the IPC objects for HDMI, causing STREAM_PCM_PARAMS IPC to be sent with wrong IDs/params and the firmware to return error (-5).

Root cause (analysis)

The topology assigns PCM / pipeline IDs 5, 6, 7 to HDMI PCMs (SectionPCM and pipeline sections), but the iDisp/HDA endpoints and their tuples (SectionBE VendorTuples token155) are encoded as 3, 4, 5. The mismatch results in the driver building IPC messages referencing pipelines/devices that do not match the HDA endpoint IDs encoded in the topology, and the firmware rejects the hw_params IPC (error -5). In short: HDA token/pipeline indices are inconsistent inside the topology (PCM/pipeline indices ≠ HDA/iDisp token indices).

Proposed fix (concrete)

There are two consistent fixes — pick one and apply to the topology:

Option A (recommended): Update the iDisp entries and the token155 values in the HDA tuples to match PCM/pipeline IDs (5/6/7). This is minimally invasive because the PCM/pipeline blocks already use 5/6/7.

Option B (alternate): Renumber the PCM/pipeline entries to 3/4/5 to match current iDisp/HDA token indices. This would require renaming the PCM playback capability names (PCM5P/PCM6P/PCM7P etc.) and pipeline indices accordingly.

marmabiswas123 avatar Nov 21 '25 11:11 marmabiswas123

Requesting issue labels to help categorize this report:

  • bug
  • tplg
  • hdmi
  • intel-icl
  • ES8336

This involves topology pipeline/HDA ID mismatch for HDMI PCM 5/6/7 vs iDisp 3/4/5. Thanks! @marc-hb @kv2019i @lrgirdwo

marmabiswas123 avatar Nov 21 '25 11:11 marmabiswas123

@marmabiswas123 Thank you very much for the detailed bug report. Let me move this to the main SOF issue tracker, so it gets more attention. This sof-bin issue tracker is only meant for issues regarding how the binaries are pacakged to Linux distrobutions.

kv2019i avatar Nov 21 '25 13:11 kv2019i

Just in case: https://github.com/thesofproject/linux/issues?q=label%3A%22codec%20ES8336%22

EDIT: I didn't see this label was requested. Added. Easier to remove if wrong than to miss if correct.

marc-hb avatar Nov 21 '25 18:11 marc-hb

@marmabiswas123 do you have a topology fix for option A in progress ?

lgirdwood avatar Nov 24 '25 15:11 lgirdwood

@lgirdwood — thanks for looking into this. I attempted the approach you mentioned, but I don’t currently have a properly configured environment to compile SOF topology files. I tried compiling the decompiled topology locally using alsatplg, however the resulting binary was rejected when the OS attempted to load it.

Could you please advise the recommended toolchain and exact commands/versions to compile this topology for ICL (for example, which alsatplg/tplgtool version or branch of the SOF tools I should use)?

Alternatively, if you can provide a prebuilt .tplg (or a patch that I can apply to the decompiled file), I’d be happy to test it and report results. For reference, the decompiled topology I used is attached here: /mnt/data/sof-tplg.txt.

I’m available to run additional logs or tests as required — thanks again for the help.

marmabiswas123 avatar Nov 24 '25 15:11 marmabiswas123

@marmabiswas123 so for topology 1 used by ICL you dont need any git version of alsatpg, you can just use distro version of alsatplg.

Can you run ./scripts/build-tools -X -C from the SOF scripts directory. This should generate the Cmakefiles to build all topology1 binaries from source, e.g.

/scripts/build-tools.sh -X -C
-- The C compiler identification is GNU 15.2.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- No CMAKE_BUILD_TYPE, defaulting to Debug
-- Looking for include file sys/inotify.h
-- Looking for include file sys/inotify.h - found
-- Configuring done (0.1s)
-- Generating done (0.1s)
-- Build files have been written to: /home/lrg/work/sof/sof/tools/build_tools

Build commands for respective tools:
        ctl:        ninja -C "/home/lrg/work/sof/sof/tools/build_tools" sof-ctl
        logger:     ninja -C "/home/lrg/work/sof/sof/tools/build_tools" sof-logger
        probes:     ninja -C "/home/lrg/work/sof/sof/tools/build_tools" sof-probes
        topologies: ninja -C "/home/lrg/work/sof/sof/tools/build_tools" topologies
        topologies1: ninja -C "/home/lrg/work/sof/sof/tools/build_tools" topologies1
        topologies2: ninja -C "/home/lrg/work/sof/sof/tools/build_tools" topologies2

        test tplgs: ninja -C "/home/lrg/work/sof/sof/tools/build_tools" tests
               (or ./tools/test/topology/tplg-build.sh directly)

        list of targets:
                    ninja -C "/home/lrg/work/sof/sof/tools/build_tools/" help

WARNING: building tools/ is now incremental by default!
         To build from scratch delete: /home/lrg/work/sof/sof/tools/build_tools
         or use the -C option.

You should then be able to build and test your topology change.

lgirdwood avatar Nov 25 '25 12:11 lgirdwood

Hi @lgirdwood , Thank you for the guidance earlier.

I tried following your suggested workflow using ./scripts/build-tools.sh -X -C and the topology1 build structure. However, I ran into a practical issue: the SOF repo does not contain any existing .m4 topology1 file for sof-icl-es8336-ssp0 (or anything close to the ES8336 machine driver for ICL), so there was no reference implementation I could extend.

Since the required topology1 .m4 did not exist in the tree, I attempted the following approach:

1. Decompiling the existing firmware topology

I decompiled the system-provided topology:

/lib/firmware/intel/sof-tplg/sof-icl-es8336-ssp0.tplg

by using : alsatplg -d sof-icl-es8336-ssp0.tplg -o sof-icl-es8336-ssp0.conf

into a .conf, manually corrected the HDMI → pipeline ID mismatches, and recompiled it using alsatplg.

alsatplg -c sof-icl-es8336-ssp0.conf -o sof-icl-es8336-ssp0.tplg

But the kernel rejected the recompiled .tplg with:

No space in tuples array for new tokens
failed to parse SSP tokens
ASoC: topology load failed -22

2. Writing a clean topology1 .m4 file

Since editing raw .conf was unreliable, I attempted to create a proper topology1 .m4 source and compile it through the SOF build system.

However, even after cleaning cached tool outputs, the topology1 build kept pulling in macros that expand to topology2-style pipelines (pipe-host-playback.m4, pipe-volume-playback.m4), which led to:

bad expression in eval: PCM_MAX_RATE / 100 * SCHEDULE_PERIOD / 10000
bad expression in eval: 2 * 4 * PIPELINE_CHANNELS *
fatal error: Invalid parameters to PIPELINE_PCM_ADD

Below is the last version of the topology1 .m4 file I attempted to compile:

dnl ---- includes (use paths that exist in this repo)
include(`common/abi.m4')dnl
include(`common/tlv.m4')dnl
include(`utils.m4')dnl

dnl include the tokens file from the `sof` folder
include(`sof/tokens.m4')dnl

dnl standard helper macros
include(`dai.m4')dnl
include(`pcm.m4')dnl
include(`pipeline.m4')dnl
include(`buffer.m4')dnl

dnl platform helpers
include(`platform/common/hda.m4')dnl
include(`platform/common/ssp.m4')dnl

dnl -----------------------------------------------------------------
dnl SSP hardware blocks
dnl -----------------------------------------------------------------

DECLARE_SSP_HW_CONFIG(5, SSP0, SSP_HS, SSP_CONFIG_FORMAT_I2S)
DECLARE_SSP_HW_CONFIG(6, SSP0, SSP_HS, SSP_CONFIG_FORMAT_I2S)
DECLARE_SSP_HW_CONFIG(7, SSP0, SSP_HS, SSP_CONFIG_FORMAT_I2S)

dnl -----------------------------------------------------------------
dnl PCM + Pipelines
dnl -----------------------------------------------------------------

PIPELINE_ADD_PCM(5, 0, playback, 48000, 2)
PIPELINE_ADD_PCM(6, 0, playback, 48000, 2)
PIPELINE_ADD_PCM(7, 0, playback, 48000, 2)

dnl -----------------------------------------------------------------
dnl HDMI iDisp configs
dnl -----------------------------------------------------------------

DAI_CONFIG(HDA, 5, HDA_OUT, HDA5_conf)
DAI(HDA, 5, 5, HDA5_conf, 0)

DAI_CONFIG(HDA, 6, HDA_OUT, HDA6_conf)
DAI(HDA, 6, 6, HDA6_conf, 0)

DAI_CONFIG(HDA, 7, HDA_OUT, HDA7_conf)
DAI(HDA, 7, 7, HDA7_conf, 0)

dnl -----------------------------------------------------------------
dnl ES8336 Codec on SSP0
dnl -----------------------------------------------------------------

DAI_CONFIG(SSP, 0, ES8336, SSP0_conf)
DAI_CONFIG_DATA(SSP0_conf,
    SSP_CONFIG(SSP0, SSP_MODE_I2S,
        SSP_CLOCK_MASTER,
        48000, 48000,
        SSP_SAMPLE_16BIT, SSP_SAMPLE_16BIT,
        2, 2))

DAI(SSP, 0, 5, SSP0_conf, 0)
DAI(SSP, 0, 6, SSP0_conf, 0)
DAI(SSP, 0, 7, SSP0_conf, 0)

dnl =================================================================
dnl Minimal PCM widgets
dnl =================================================================

WIDGET_PCM_PIPELINE(pcm5_widget, 5, playback)
WIDGET_PCM_PIPELINE(pcm6_widget, 6, playback)
WIDGET_PCM_PIPELINE(pcm7_widget, 7, playback)

Result

Even with a minimal .m4, the topology1 build still fails because the generated configuration pulls in pipeline fragments containing undefined variables (PIPELINE_CHANNELS, SCHEDULE_PERIOD, etc.), which seem to only exist in topology2.

Can you please write a m4 code so that I can test ? I'm attaching the decompiled and modified .conf file here for your reference.

sof-icl-es8336-ssp0.conf.txt

marmabiswas123 avatar Nov 25 '25 23:11 marmabiswas123

@marmabiswas123 I think we can go a little easier here, I've dug out the es8336 topologies from git log

git log | grep -C 4 es8336
commit 57e976ec3854cfe4ca34211f6edc041909c9c24a
Author: Pierre-Louis Bossart <[email protected]>
Date:   Wed Dec 21 10:24:50 2022 -0600

    topology1: add missing ADL-es8336 topologies.
    
    The ADL integration was botched with missing topologies and errors in
    topology names in the kernel.
    
--
commit 9709ef81dcb8e9630c55419d3fe2d3e65a422fe9
Author: Pierre-Louis Bossart <[email protected]>
Date:   Wed Mar 2 11:50:30 2022 -0600

    topology1: sof-glk-es8336: use mclk ID0
    
    It's not clear why the initial contribution used mclk ID1, mclk ID0 is
    used by 99% of devices - and a manual inspection of NHLT supports that
    claim. We will have to deal with the MCLK ID1 case with quirks.
--
commit 04a0d3c1b584acc77c110e12379c15998c2275b2
Author: Pierre-Louis Bossart <[email protected]>
Date:   Tue Feb 15 20:43:33 2022 -0600

    topology1: sof-cml-es8336: use correct 24MHz MCLK
    
    Rookie mistake, the clock can't possibly be 19.2 MHz
    
    Reported-by: Nikolai Kostrigin <[email protected]>
--
commit 24ad7ea0fa2ea33687c2ef3f7eb85efe75430c60
Author: Pierre-Louis Bossart <[email protected]>
Date:   Fri Jul 30 08:21:08 2021 -0500

    topology: sof-glk-es8336: initial support
    
    This topology is used on GLK and TGL. variations include:
    - DMIC supported on TGL and not on GLK

ICL and older Intel devices have not been supported in main branch for some time as they are very old.

Are you able to checkout an older SOF tag that contains the M4 based topologies you need to edit or use as a template. This tooling in this version should be able to build the legacy M4 topologies for you too.

Once you have something that works on your device, we can the upstream into the older stable version tag and the binary into sof-bin.

lgirdwood avatar Nov 28 '25 13:11 lgirdwood

@lgirdwood

After an extensive search across all branches, tags, and historical commits of the SOF repository, I was unable to find any .m4 topology source file for ES8336 on Ice Lake (ICL). The only related files upstream are:

sof-icl-nocodec.m4

ICL topologies for other codecs (RT700, RT711, etc.)

None of these can serve as a template for ES8336 on ICL, because they lack SSP0-Codec definitions, ES8336-specific tokens/tuples, and the associated backend configuration.

Given that no .m4 or .conf source exists upstream, it appears that the following topology was shipped from out-of-tree or unpublished/internal SOF sources:

sof-icl-es8336-ssp0.tplg

Since this binary is present in sof-bin, I would like to kindly request @mengdonglin — who contributed the commit containing this topology — to check whether the original topology source (.m4 or .conf) still exists internally or was part of an unpublished branch.

Having access to the source would allow debugging, reproducibility, and potentially upstreaming proper ES8336 support on Ice Lake.

Thank you very much for looking into this.

marmabiswas123 avatar Nov 28 '25 20:11 marmabiswas123

@marmabiswas123 sorry for delay, I would hope no out of tree would be needed here, yes some Chrome topologies live in the Chrome repos only (and can be searched).

So the differentiation for which SSP port to use is done in the topology makefile. i.e.

commit 57e976ec3854cfe4ca34211f6edc041909c9c24a
Author: Pierre-Louis Bossart <[email protected]>
Date:   Wed Dec 21 10:24:50 2022 -0600

    topology1: add missing ADL-es8336 topologies.
    
    The ADL integration was botched with missing topologies and errors in
    topology names in the kernel.
    
    Link: https://github.com/thesofproject/linux/issues/4111
    Signed-off-by: Pierre-Louis Bossart <[email protected]>

diff --git a/tools/topology/topology1/CMakeLists.txt b/tools/topology/topology1/CMakeLists.txt
index 919cd6e37..3e0b32c5a 100644
--- a/tools/topology/topology1/CMakeLists.txt
+++ b/tools/topology/topology1/CMakeLists.txt
@@ -277,7 +277,17 @@ set(TPLGS
        "sof-glk-es8336\;sof-tgl-es8336-dmic4ch-ssp1\;-DPLATFORM=tgl\;-DSSP_NUM=1\;-DCHANNELS=4"
        "sof-glk-es8336\;sof-tgl-es8336-dmic4ch-ssp2\;-DPLATFORM=tgl\;-DSSP_NUM=2\;-DCHANNELS=4"
 
+       "sof-glk-es8336\;sof-adl-es8336\;-DPLATFORM=adl\;-DSSP_NUM=0\;-DCHANNELS=2"
+       "sof-glk-es8336\;sof-adl-es8336-ssp0\;-DPLATFORM=adl\;-DSSP_NUM=0\;-DCHANNELS=0"
        "sof-glk-es8336\;sof-adl-es8336-ssp1\;-DPLATFORM=adl\;-DSSP_NUM=1\;-DCHANNELS=0"
+       "sof-glk-es8336\;sof-adl-es8336-ssp2\;-DPLATFORM=adl\;-DSSP_NUM=2\;-DCHANNELS=0"
+       "sof-glk-es8336\;sof-adl-es8336-dmic2ch-ssp0\;-DPLATFORM=adl\;-DSSP_NUM=0\;-DCHANNELS=2"
+       "sof-glk-es8336\;sof-adl-es8336-dmic2ch-ssp1\;-DPLATFORM=adl\;-DSSP_NUM=1\;-DCHANNELS=2"
+       "sof-glk-es8336\;sof-adl-es8336-dmic2ch-ssp2\;-DPLATFORM=adl\;-DSSP_NUM=2\;-DCHANNELS=2"
+       "sof-glk-es8336\;sof-adl-es8336-dmic4ch-ssp0\;-DPLATFORM=adl\;-DSSP_NUM=0\;-DCHANNELS=4"
+       "sof-glk-es8336\;sof-adl-es8336-dmic4ch-ssp1\;-DPLATFORM=adl\;-DSSP_NUM=1\;-DCHANNELS=4"
+       "sof-glk-es8336\;sof-adl-es8336-dmic4ch-ssp2\;-DPLATFORM=adl\;-DSSP_NUM=2\;-DCHANNELS=4"
+
        #sof-adl-es8336-ssp1-hdmi-ssp02 supports es8336 codec along with 2xHDMI_over_SSP Capture's.
        "sof-glk-es8336\;sof-adl-es8336-ssp1-hdmi-ssp02\;-DPLATFORM=adl\;-DSSP_NUM=1\;-DCHANNELS=0\;-DHDMI_1_SSP_NUM=0\;-DHDMI_2_SSP_NUM=2"
 

The ES8336 should not need any verbs as these are HDA specific and this is an I2S codec.

https://www.lcsc.com/datasheet/C5145124.pdf

You should be able to checkout a branch using the above commit ID and then build all the ES8336 topologies from source using the script.

I would also check that any modification you do in the topology for I2S mode is also supported in the Linux driver.i.e.

grep -rn 8336 sound/soc/codecs/
sound/soc/codecs/es8316.c:914:	{"ESSX8336", 0},

However, reusing existing SSP params should work.

lgirdwood avatar Dec 04 '25 15:12 lgirdwood

@lgirdwood Well, I've tried a lot of things but nothing came fruitful!

I checked the makefile and found that the icl-es8336 topology was being made from sof-glk-es8336.m4. So based on my assumptions I tried to fix the supposed mismatch in pipeline mapping in that glk topology.

PCM_PLAYBACK_ADD(HDMI 1, 5, PIPELINE_PCM_5)
PCM_PLAYBACK_ADD(HDMI 2, 6, PIPELINE_PCM_6)
PCM_PLAYBACK_ADD(HDMI 3, 7, PIPELINE_PCM_7)

To

PCM_PLAYBACK_ADD(HDMI 1, 3, PIPELINE_PCM_5)
PCM_PLAYBACK_ADD(HDMI 2, 4, PIPELINE_PCM_6)
PCM_PLAYBACK_ADD(HDMI 3, 5, PIPELINE_PCM_7)

But it did no change in the error log!

Previous :

[ 4.550619] sof-essx8336 sof-essx8336: hda_dsp_hdmi_build_controls: no PCM in topology for HDMI converter 3 
[ 4.563519] input: sof-essx8336 Headset as /devices/pci0000:00/0000:00:1f.3/sof-essx8336/sound/card0/input12 
[ 4.563664] input: sof-essx8336 HDMI/DP,pcm=5 as /devices/pci0000:00/0000:00:1f.3/sof-essx8336/sound/card0/input13 
[ 4.563732] input: sof-essx8336 HDMI/DP,pcm=6 as /devices/pci0000:00/0000:00:1f.3/sof-essx8336/sound/card0/input14 
[ 4.563785] input: sof-essx8336 HDMI/DP,pcm=7 as /devices/pci0000:00/0000:00:1f.3/sof-essx8336/sound/card0/input15
[ 8.168578] sof-audio-pci-intel-icl 0000:00:1f.3: ipc tx error for 0x60010000 (msg/reply size: 108/20): -5 
[ 8.168587] sof-audio-pci-intel-icl 0000:00:1f.3: sof_ipc3_pcm_hw_params: pcm4 (HDMI 2), dir 0: STREAM_PCM_PARAMS ipc failed for stream_tag 1 
[ 8.168589] sof-audio-pci-intel-icl 0000:00:1f.3: ASoC error (-5): at snd_soc_pcm_component_hw_params() on 0000:00:1f.3

After:

[ 4.550619] sof-essx8336 sof-essx8336: hda_dsp_hdmi_build_controls: no PCM in topology for HDMI converter 3 
[ 4.563519] input: sof-essx8336 Headset as /devices/pci0000:00/0000:00:1f.3/sof-essx8336/sound/card0/input12 
[ 4.563664] input: sof-essx8336 HDMI/DP,pcm=3 as /devices/pci0000:00/0000:00:1f.3/sof-essx8336/sound/card0/input13 
[ 4.563732] input: sof-essx8336 HDMI/DP,pcm=4 as /devices/pci0000:00/0000:00:1f.3/sof-essx8336/sound/card0/input14 
[ 4.563785] input: sof-essx8336 HDMI/DP,pcm=5 as /devices/pci0000:00/0000:00:1f.3/sof-essx8336/sound/card0/input15
[ 8.168578] sof-audio-pci-intel-icl 0000:00:1f.3: ipc tx error for 0x60010000 (msg/reply size: 108/20): -5 
[ 8.168587] sof-audio-pci-intel-icl 0000:00:1f.3: sof_ipc3_pcm_hw_params: pcm4 (HDMI 2), dir 0: STREAM_PCM_PARAMS ipc failed for stream_tag 1 
[ 8.168589] sof-audio-pci-intel-icl 0000:00:1f.3: ASoC error (-5): at snd_soc_pcm_component_hw_params() on 0000:00:1f.3

So it looks like simply changing the HDMI PCM ids didn’t address the real mismatch, since the hda_dsp_hdmi_build_controls warning is still there. I've tried SSP1 and SSP2. Both were rejected. It was obvious because : [ 4.109020] sof-audio-pci-intel-icl 0000:00:1f.3: NHLT device I2S(4) detected, ssp_mask 0x1 which indicates SSP0. At this point I suspect the HDMI warning is separate from my main issue. On SSP0 I do get audio out of the speakers, but it is very faint with a lot of noise (~90%).

marmabiswas123 avatar Dec 10 '25 15:12 marmabiswas123

So it looks like simply changing the HDMI PCM ids didn’t address the real mismatch, since the hda_dsp_hdmi_build_controls warning is still there.

I think this is OK, @bardliao any comment ?

I've tried SSP1 and SSP2. Both were rejected. It was obvious because : [ 4.109020] sof-audio-pci-intel-icl 0000:00:1f.3: NHLT device I2S(4) detected, ssp_mask 0x1 which indicates SSP0. At this point I suspect the HDMI warning is separate from my main issue. On SSP0 I do get audio out of the speakers, but it is very faint with a lot of noise (~90%).

Ok, this is great work and actually good news as you have proven the correct SSP port and have the codec enabled with it.

So, what you describe with low volume and noise usually means the SSP port and the audio codec are not aligned with the I2S protocol configuration being used. i.e. the frame size, valid bits and whether left/right/i2s justification is used (it does sound like clocking is correct as you have not said its too slow or fast).

Can you check what I2S mode, valid bits, frame size, sample size is being used by the topology as some codec driver may not support all formats. Its worth twiddling these modes/sizes and listening to the results to see what the codec is compatible with.

lgirdwood avatar Dec 15 '25 13:12 lgirdwood

@lgirdwood Here's what I got from sof-glk-es8336.m4 which maps to icl.m4 as the make file says : "sof-glk-es8336\;sof-icl-es8336-ssp0\;-DPLATFORM=icl\;-DSSP_NUM=0\;-DCHANNELS=0"

DAI mode: I2S.

MCLK: 19.2 MHz (ICL platform sets SSP_MCLK_RATE = 19200000).

BCLK: 2,400,000 Hz (2.4 MHz) as set in the GLK DAI config.

FSYNC (LRCLK): 48,000 Hz (48 kHz).

TDM / frame layout: 2 slots (stereo) with 25 BCLK per slot → 50 BCLK per LR-frame.

Valid/sample bits: 24 valid bits (s24). The topology uses 24 valid bits (SSP_CONFIG_DATA / pipeline DAI format shows 24).

Container / pipeline formats: DAI uses s24le; some pipelines are declared s32le (pipeline buffer/container) and will be converted by the pipeline.

for cross check :

sof-glk-es8336.m4.txt

icl.m4.txt

marmabiswas123 avatar Dec 15 '25 13:12 marmabiswas123

So it looks like simply changing the HDMI PCM ids didn’t address the real mismatch, since the hda_dsp_hdmi_build_controls warning is still there.

I think this is OK, @bardliao any comment ?

I don't think it is ok. "%s: no PCM in topology for HDMI converter %d\n" indicates hpcm->pcm = NULL and hpcm->device = SNDRV_PCM_INVALID_DEVICE;

bardliao avatar Dec 16 '25 08:12 bardliao

@marmabiswas123 I think the original topology is ok and problem is something else. The ALSA topology uses running numbers to count multiple different types of objects and this can be at times confusing. In this case:

  • There are PCM numbers, 0....7 and HDMI is using PCM5 to PCM6 (this is correct in your original log)
  • There are pipeline objects, HDMI is using pipes 5,6,7 (it's just a coincinde these are same as PCM numbers, these could be different)
  • There are BE link ids. These need to match the Linux kernel machine driver and sof_es8336.c driver hardcodes the HDMI BE ids to be 3,4,5 (this is maintained whether a PCH digital mic is present or not)

The latest topology code is in https://github.com/thesofproject/sof/tree/stable-v2.2 and in file tools/topology/topology1/sof-glk-es8336.m4 . When you build the topologies, sof-icl-es8336-ssp0.tplg is created from this file.

Can you maybe share full kernel output with alsainfo (https://thesofproject.github.io/latest/getting_started/intel_debug/suggestions.html) if the kernel and mixer logs show something interesting?

And can you share a command line (maybe with aplay) when trying to stream to PCM5/6/7. This is the PCM_PARAMS IPC failing, so maybe something in the requested configuration is wrong.

kv2019i avatar Dec 16 '25 11:12 kv2019i

@lgirdwood Here's what I got from sof-glk-es8336.m4 which maps to icl.m4 as the make file says : "sof-glk-es8336\;sof-icl-es8336-ssp0\;-DPLATFORM=icl\;-DSSP_NUM=0\;-DCHANNELS=0"

DAI mode: I2S.

MCLK: 19.2 MHz (ICL platform sets SSP_MCLK_RATE = 19200000).

BCLK: 2,400,000 Hz (2.4 MHz) as set in the GLK DAI config.

FSYNC (LRCLK): 48,000 Hz (48 kHz).

TDM / frame layout: 2 slots (stereo) with 25 BCLK per slot → 50 BCLK per LR-frame.

Valid/sample bits: 24 valid bits (s24). The topology uses 24 valid bits (SSP_CONFIG_DATA / pipeline DAI format shows 24).

Container / pipeline formats: DAI uses s24le; some pipelines are declared s32le (pipeline buffer/container) and will be converted by the pipeline.

for cross check :

sof-glk-es8336.m4.txt

icl.m4.txt

@marmabiswas123 looks like there is enough clock headroom here for audio, I would put some debug in the codec driver to make sure this data is being used in the codec too.

Fwiw, with 25 bits per channel and a 24 bit frame size there is possibility for poor audio if I2S mode is Left or Right justified (wrt FRAME) and justification is not aligned with codec as this determines where the MSBs are sampled. Does audio sound better when your PCM WAV file is low volume i.e. no MSBs (audacity/sox can generate a low volume size wave if needed).

lgirdwood avatar Dec 16 '25 13:12 lgirdwood

@kv2019i @lgirdwood sorry for delay. here is the full kernel log :

full_kernel_dump.txt

and alsa-info :

alsa-info.txt

command line outputs:

$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: sofessx8336 [sof-essx8336], device 0: ES8336 (*) []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: sofessx8336 [sof-essx8336], device 5: HDMI 1 (*) []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: sofessx8336 [sof-essx8336], device 6: HDMI 2 (*) []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: sofessx8336 [sof-essx8336], device 7: HDMI 3 (*) []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
$ aplay -L
null
    Discard all samples (playback) or generate zero samples (capture)
default
    Playback/recording through the PulseAudio sound server
lavrate
    Rate Converter Plugin Using Libav/FFmpeg Library
samplerate
    Rate Converter Plugin Using Samplerate Library
speexrate
    Rate Converter Plugin Using Speex Resampler
jack
    JACK Audio Connection Kit
oss
    Open Sound System
pulse
    PulseAudio Sound Server
speex
    Plugin using Speex DSP (resample, agc, denoise, echo, dereverb)
upmix
    Plugin for channel upmix (4,6,8)
vdownmix
    Plugin for channel downmix (stereo) with a simple spacialization
hw:CARD=sofessx8336,DEV=0
    sof-essx8336, 
    Direct hardware device without any conversions
hw:CARD=sofessx8336,DEV=5
    sof-essx8336, 
    Direct hardware device without any conversions
hw:CARD=sofessx8336,DEV=6
    sof-essx8336, 
    Direct hardware device without any conversions
hw:CARD=sofessx8336,DEV=7
    sof-essx8336, 
    Direct hardware device without any conversions
plughw:CARD=sofessx8336,DEV=0
    sof-essx8336, 
    Hardware device with all software conversions
plughw:CARD=sofessx8336,DEV=5
    sof-essx8336, 
    Hardware device with all software conversions
plughw:CARD=sofessx8336,DEV=6
    sof-essx8336, 
    Hardware device with all software conversions
plughw:CARD=sofessx8336,DEV=7
    sof-essx8336, 
    Hardware device with all software conversions
sysdefault:CARD=sofessx8336
    sof-essx8336, 
    Default Audio Device
dmix:CARD=sofessx8336,DEV=0
    sof-essx8336, 
    Direct sample mixing device
dmix:CARD=sofessx8336,DEV=5
    sof-essx8336, 
    Direct sample mixing device
dmix:CARD=sofessx8336,DEV=6
    sof-essx8336, 
    Direct sample mixing device
dmix:CARD=sofessx8336,DEV=7
    sof-essx8336, 
    Direct sample mixing device
usbstream:CARD=sofessx8336
    sof-essx8336
    USB Stream Output

the PCM test shows no error but a warning

$ aplay -D hw:0,5 -f S16_LE -c 2 test.wav
Playing WAVE 'test.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
Warning: rate is not accurate (requested = 44100Hz, got = 48000Hz)
         please, try the plug plugin 

tried using HDMI :

$ aplay -D hw:sofessx8336,5 -f S32_LE -c 2 test.wav
Warning: format is changed to S16_LE
Playing WAVE 'test.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
Warning: rate is not accurate (requested = 44100Hz, got = 48000Hz)
         please, try the plug plugin 

same warning for low-volume .wav test and nothing is audible in both of the cases

$ aplay -D hw:0,5 --dump-hw-params /dev/zero
Playing raw data '/dev/zero' : Unsigned 8 bit, Rate 8000 Hz, Mono
HW Params of device "hw:0,5":
--------------------
ACCESS:  MMAP_INTERLEAVED RW_INTERLEAVED
FORMAT:  S16_LE S24_LE S32_LE
SUBFORMAT:  STD MSBITS_MAX
SAMPLE_BITS: [16 32]
FRAME_BITS: [32 64]
CHANNELS: 2
RATE: 48000
PERIOD_TIME: [500 85334)
PERIOD_SIZE: [24 4096]
PERIOD_BYTES: [192 16384]
PERIODS: [2 16]
BUFFER_TIME: [1000 341334)
BUFFER_SIZE: [48 16384]
BUFFER_BYTES: [192 65536]
TICK_TIME: ALL
--------------------
aplay: set_params:1387: Sample format non available
Available formats:
- S16_LE
- S24_LE
- S32_LE

I've done the reverse engineering of the exact driver which my dual booted Windows use, and there is no issue with sound. However I got no static table of rate values for this particular codec, what I understood is they are calculating those values at boot loading dynamically. I've booted back in linux and checked the ACPI device objects and there also couldn't find any useful data.

marmabiswas123 avatar Dec 21 '25 13:12 marmabiswas123

@marmabiswas123 I can see the ipc error on pcm6 and 7, but not on pcm 5.

[    8.546078] sof-audio-pci-intel-icl 0000:00:1f.3: sof_ipc3_pcm_hw_params: pcm6 (HDMI 2), dir 0: STREAM_PCM_PARAMS ipc failed for stream_tag 1
[    8.597131] sof-audio-pci-intel-icl 0000:00:1f.3: sof_ipc3_pcm_hw_params: pcm7 (HDMI 3), dir 0: STREAM_PCM_PARAMS ipc failed for stream_tag 1

Could you confirm that there is no error when you play with pcm 5? Or you just didn't test pcm 5 when you caught the dmesg log?

Also, it seems you got the alsa-info when your sound card was not probed.

[    4.228967] sof-audio-pci-intel-icl 0000:00:1f.3: Failed to set dai config for SSP0-Codec
[    4.229751] sof-audio-pci-intel-icl 0000:00:1f.3: error: failed to load DSP topology -22
[    4.229759] sof-audio-pci-intel-icl 0000:00:1f.3: ASoC error (-22): at snd_soc_component_probe() on 0000:00:1f.3
[    4.229782] sof-essx8336 sof-essx8336: ASoC: failed to instantiate card -22
[    4.230194] sof-essx8336 sof-essx8336: snd_soc_register_card failed: -22
[    4.230200] sof-essx8336 sof-essx8336: probe with driver sof-essx8336 failed with error -22

Can you do it again when you can run the HDMI test?

bardliao avatar Dec 22 '25 03:12 bardliao

@bardliao thanks — that log snippet matches what I saw. You’re right: my previous alsa-info was captured while the card failed to probe, sorry about that.

alsa-info.txt

I’ll run the tests now (or when I next have HDMI available) and attach the files above. If you prefer I try a specific sample rate/format/channel configuration that typically triggers the IPC, tell me which and I’ll include it.

here are the results of these tests:

  1. for pcm 5
Playing WAVE 'test.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
Warning: rate is not accurate (requested = 44100Hz, got = 48000Hz)
         please, try the plug plugin 
  1. for pcm 6
Playing WAVE 'test.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
Warning: rate is not accurate (requested = 44100Hz, got = 48000Hz)
         please, try the plug plugin 
  1. for pcm 7
Playing WAVE 'test.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
Warning: rate is not accurate (requested = 44100Hz, got = 48000Hz)
         please, try the plug plugin 

hw params for each device:

Playing raw data '/dev/zero' : Unsigned 8 bit, Rate 8000 Hz, Mono
HW Params of device "hw:0,5":
--------------------
ACCESS:  MMAP_INTERLEAVED RW_INTERLEAVED
FORMAT:  S16_LE S24_LE S32_LE
SUBFORMAT:  STD MSBITS_MAX
SAMPLE_BITS: [16 32]
FRAME_BITS: [32 64]
CHANNELS: 2
RATE: 48000
PERIOD_TIME: [500 85334)
PERIOD_SIZE: [24 4096]
PERIOD_BYTES: [192 16384]
PERIODS: [2 16]
BUFFER_TIME: [1000 341334)
BUFFER_SIZE: [48 16384]
BUFFER_BYTES: [192 65536]
TICK_TIME: ALL
--------------------
aplay: set_params:1387: Sample format non available
Available formats:
- S16_LE
- S24_LE
- S32_LE
Playing raw data '/dev/zero' : Unsigned 8 bit, Rate 8000 Hz, Mono
HW Params of device "hw:0,6":
--------------------
ACCESS:  MMAP_INTERLEAVED RW_INTERLEAVED
FORMAT:  S16_LE S24_LE S32_LE
SUBFORMAT:  STD MSBITS_MAX
SAMPLE_BITS: [16 32]
FRAME_BITS: [32 64]
CHANNELS: 2
RATE: 48000
PERIOD_TIME: [500 85334)
PERIOD_SIZE: [24 4096]
PERIOD_BYTES: [192 16384]
PERIODS: [2 16]
BUFFER_TIME: [1000 341334)
BUFFER_SIZE: [48 16384]
BUFFER_BYTES: [192 65536]
TICK_TIME: ALL
--------------------
aplay: set_params:1387: Sample format non available
Available formats:
- S16_LE
- S24_LE
- S32_LE
Playing raw data '/dev/zero' : Unsigned 8 bit, Rate 8000 Hz, Mono
HW Params of device "hw:0,7":
--------------------
ACCESS:  MMAP_INTERLEAVED RW_INTERLEAVED
FORMAT:  S16_LE S24_LE S32_LE
SUBFORMAT:  STD MSBITS_MAX
SAMPLE_BITS: [16 32]
FRAME_BITS: [32 64]
CHANNELS: 2
RATE: 48000
PERIOD_TIME: [500 85334)
PERIOD_SIZE: [24 4096]
PERIOD_BYTES: [192 16384]
PERIODS: [2 16]
BUFFER_TIME: [1000 341334)
BUFFER_SIZE: [48 16384]
BUFFER_BYTES: [192 65536]
TICK_TIME: ALL
--------------------
aplay: set_params:1387: Sample format non available
Available formats:
- S16_LE
- S24_LE
- S32_LE

live dmesg dump during tests :

dmesg-live.txt

and dmesg-ipc dump :

dmesg-ipc.txt

marmabiswas123 avatar Dec 27 '25 10:12 marmabiswas123

@marmabiswas123 There is no IPC errors on pcm5. And I don't think aplay really play /dev/zero

aplay: set_params:1387: Sample format non available
Available formats:
- S16_LE
- S24_LE
- S32_LE

Can you try some wav with supported format? Like S16_LE and 48000 rate.

I am guessing it is just a mixer setting issue. Can you adjust below control and play with PCM 5?

	control.48 {
		iface PCM
		device 5
		name 'Playback Channel Map'
		value.0 0
		value.1 0
		value.2 0
		value.3 0
		value.4 0
		value.5 0
		value.6 0
		value.7 0
		comment {
			access 'read write volatile'
			type INTEGER
			count 8
			range '0 - 36'
		}
	}

bardliao avatar Dec 29 '25 03:12 bardliao

@bardliao I tried the wav audio with supported format and rate : sox -n -r 48000 -b 16 test_s16_48k.wav synth 1 sine 440 vol 0.1 channels 2 then : aplay -D hw:0,5 -f S16_LE -c 2 -r 48000 test_s16_48k.wav

the result is : Playing WAVE 'test_s16_48k.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo no audio at all. The controls are likely at invalid default zeros :

numid=48,iface=PCM,name='Playback Channel Map',device=5
numid=49,iface=PCM,name='Playback Channel Map',device=6
numid=50,iface=PCM,name='Playback Channel Map',device=7
$ amixer -c 0 cget numid=48 
amixer -c 0 cget numid=49   
amixer -c 0 cget numid=50   
numid=48,iface=PCM,name='Playback Channel Map',device=5
  ; type=INTEGER,access=rw-v-R--,values=8,min=0,max=36,step=0
  : values=0,0,0,0,0,0,0,0
  | container
    | chmap-variable=FL,FR
numid=49,iface=PCM,name='Playback Channel Map',device=6
  ; type=INTEGER,access=rw-v-R--,values=8,min=0,max=36,step=0
  : values=0,0,0,0,0,0,0,0
  | container
    | chmap-variable=FL,FR
numid=50,iface=PCM,name='Playback Channel Map',device=7
  ; type=INTEGER,access=rw-v-R--,values=8,min=0,max=36,step=0
  : values=0,0,0,0,0,0,0,0
  | container
    | chmap-variable=FL,FR

I tried to change the controls but it seems like the aren't adjustable. sudo amixer -c 0 cset numid=48 0,1,0,0,0,0,0,0 then

amixer -c 0 cget numid=48   # PCM 5
numid=48,iface=PCM,name='Playback Channel Map',device=5
  ; type=INTEGER,access=rw-v-R--,values=8,min=0,max=36,step=0
  : values=0,0,0,0,0,0,0,0
  | container
    | chmap-variable=FL,FR

marmabiswas123 avatar Dec 29 '25 13:12 marmabiswas123

@marmabiswas123 Please provide output of "sudo amixer -Dhw:0 contents" and run this while you are playing audio to PCM5. The HDMI/DP receiver should be visible in the output: `

numid=28,iface=CARD,name='HDMI/DP,pcm=5 Jack'
  ; type=BOOLEAN,access=r-------,values=1
  : **values=òn**
numid=34,iface=CARD,name='HDMI/DP,pcm=6 Jack'
  ; type=BOOLEAN,access=r-------,values=1
  : values=off
numid=40,iface=CARD,name='HDMI/DP,pcm=7 Jack'
  ; type=BOOLEAN,access=r-------,values=1
  : values=off

If above is good, then following mixer control should be enabled. This is typically done by system sound daemon but can be modified manually with "alsamixer":

numid=32,iface=MIXER,name='IEC958 Playback Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : **values=on**

Unless these are both on, the DSP will send audio to the HDMI/DP port, but nothing will be audible at the HDMI/DP receiver.

kv2019i avatar Dec 29 '25 13:12 kv2019i

@kv2019i the output of sudo amixer -Dhw:0 contents while playing test.wav

numid=30,iface=CARD,name='HDMI/DP,pcm=5 Jack'
  ; type=BOOLEAN,access=r-------,values=1
  : values=off
numid=36,iface=CARD,name='HDMI/DP,pcm=6 Jack'
  ; type=BOOLEAN,access=r-------,values=1
  : values=off
numid=42,iface=CARD,name='HDMI/DP,pcm=7 Jack'
  ; type=BOOLEAN,access=r-------,values=1
  : values=off
numid=24,iface=CARD,name='Headphone Jack'
  ; type=BOOLEAN,access=r-------,values=1
  : values=off
numid=25,iface=CARD,name='Headset Mic Jack'
  ; type=BOOLEAN,access=r-------,values=1
  : values=off
numid=27,iface=MIXER,name='Headphone Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=9,iface=MIXER,name='ADC PGA Gain Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=10,step=0
  : values=0
  | dBscale-min=0.00dB,step=3.00dB,mute=0
numid=8,iface=MIXER,name='ADC PGA Volume'
  ; type=INTEGER,access=rw---R--,values=2,min=0,max=5,step=0
  : values=0,0
  | dBscale-min=0.00dB,step=6.00dB,mute=0
numid=10,iface=MIXER,name='ADC Ramp Rate'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=15,step=0
  : values=0
  | dBscale-min=0.00dB,step=1.00dB,mute=0
numid=7,iface=MIXER,name='ADC Capture Volume'
  ; type=INTEGER,access=rw---R--,values=2,min=0,max=255,step=0
  : values=191,191
  | dBscale-min=-95.50dB,step=0.50dB,mute=0
numid=2,iface=MIXER,name='Playback Polarity'
  ; type=ENUMERATED,access=rw------,values=1,items=4
  ; Item #0 'Normal'
  ; Item #1 'R Invert'
  ; Item #2 'L Invert'
  ; Item #3 'L + R Invert'
  : values=0
numid=31,iface=MIXER,name='IEC958 Playback Con Mask'
  ; type=IEC958,access=r-------,values=1
  : values=[AES0=0x0f AES1=0xff AES2=0x00 AES3=0x00]
numid=37,iface=MIXER,name='IEC958 Playback Con Mask',index=1
  ; type=IEC958,access=r-------,values=1
  : values=[AES0=0x0f AES1=0xff AES2=0x00 AES3=0x00]
numid=43,iface=MIXER,name='IEC958 Playback Con Mask',index=2
  ; type=IEC958,access=r-------,values=1
  : values=[AES0=0x0f AES1=0xff AES2=0x00 AES3=0x00]
numid=32,iface=MIXER,name='IEC958 Playback Pro Mask'
  ; type=IEC958,access=r-------,values=1
  : values=[AES0=0x0f AES1=0x00 AES2=0x00 AES3=0x00]
numid=38,iface=MIXER,name='IEC958 Playback Pro Mask',index=1
  ; type=IEC958,access=r-------,values=1
  : values=[AES0=0x0f AES1=0x00 AES2=0x00 AES3=0x00]
numid=44,iface=MIXER,name='IEC958 Playback Pro Mask',index=2
  ; type=IEC958,access=r-------,values=1
  : values=[AES0=0x0f AES1=0x00 AES2=0x00 AES3=0x00]
numid=33,iface=MIXER,name='IEC958 Playback Default'
  ; type=IEC958,access=rw------,values=1
  : values=[AES0=0x04 AES1=0x00 AES2=0x00 AES3=0x00]
numid=39,iface=MIXER,name='IEC958 Playback Default',index=1
  ; type=IEC958,access=rw------,values=1
  : values=[AES0=0x04 AES1=0x00 AES2=0x00 AES3=0x00]
numid=45,iface=MIXER,name='IEC958 Playback Default',index=2
  ; type=IEC958,access=rw------,values=1
  : values=[AES0=0x04 AES1=0x00 AES2=0x00 AES3=0x00]
numid=34,iface=MIXER,name='IEC958 Playback Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
numid=40,iface=MIXER,name='IEC958 Playback Switch',index=1
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
numid=46,iface=MIXER,name='IEC958 Playback Switch',index=2
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
numid=12,iface=MIXER,name='ALC Capture Recovery Level'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=4,step=0
  : values=0
  | dBscale-min=-1.25dB,step=2.50dB,mute=0
numid=11,iface=MIXER,name='ALC Capture Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=14,iface=MIXER,name='ALC Capture Target Level'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=15,step=0
  : values=0
  | dBscale-min=-32.00dB,step=2.00dB,mute=0
numid=13,iface=MIXER,name='ALC Capture Winsize'
  ; type=ENUMERATED,access=rw------,values=1,items=16
  ; Item #0 '0.25db/2  LRCK'
  ; Item #1 '0.25db/4  LRCK'
  ; Item #2 '0.25db/8  LRCK'
  ; Item #3 '0.25db/16  LRCK'
  ; Item #4 '0.25db/32  LRCK'
  ; Item #5 '0.25db/64  LRCK'
  ; Item #6 '0.25db/128  LRCK'
  ; Item #7 '0.25db/256  LRCK'
  ; Item #8 '0.25db/512  LRCK'
  ; Item #9 '0.25db/1024  LRCK'
  ; Item #10 '0.25db/2048  LRCK'
  ; Item #11 '0.25db/4096  LRCK'
  ; Item #12 '0.25db/8192  LRCK'
  ; Item #13 '0.25db/16384  LRCK'
  ; Item #14 '0.25db/32768  LRCK'
  ; Item #15 '0.25db/65536  LRCK'
  : values=0
numid=15,iface=MIXER,name='CROSSTALK1'
  ; type=INTEGER,access=rw------,values=1,min=0,max=31,step=0
  : values=10
numid=16,iface=MIXER,name='CROSSTALK2'
  ; type=INTEGER,access=rw------,values=1,min=0,max=31,step=0
  : values=10
numid=1,iface=MIXER,name='DAC Playback Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=191,step=0
  : values=173
  | dBscale-min=-95.50dB,step=0.50dB,mute=0
numid=3,iface=MIXER,name='DAC Ramp Rate'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=15,step=0
  : values=0
  | dBscale-min=0.00dB,step=1.00dB,mute=0
numid=4,iface=MIXER,name='DRC Recovery Level'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=4,step=0
  : values=0
  | dBscale-min=-1.25dB,step=2.50dB,mute=0
numid=6,iface=MIXER,name='DRC Target Level'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=15,step=0
  : values=0
  | dBscale-min=-32.00dB,step=2.00dB,mute=0
numid=5,iface=MIXER,name='DRC Winsize'
  ; type=ENUMERATED,access=rw------,values=1,items=16
  ; Item #0 '0.25db/2  LRCK'
  ; Item #1 '0.25db/4  LRCK'
  ; Item #2 '0.25db/8  LRCK'
  ; Item #3 '0.25db/16  LRCK'
  ; Item #4 '0.25db/32  LRCK'
  ; Item #5 '0.25db/64  LRCK'
  ; Item #6 '0.25db/128  LRCK'
  ; Item #7 '0.25db/256  LRCK'
  ; Item #8 '0.25db/512  LRCK'
  ; Item #9 '0.25db/1024  LRCK'
  ; Item #10 '0.25db/2048  LRCK'
  ; Item #11 '0.25db/4096  LRCK'
  ; Item #12 '0.25db/8192  LRCK'
  ; Item #13 '0.25db/16384  LRCK'
  ; Item #14 '0.25db/32768  LRCK'
  ; Item #15 '0.25db/65536  LRCK'
  : values=0
numid=19,iface=MIXER,name='HPL Playback Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=191,step=0
  : values=173
  | dBscale-min=-95.50dB,step=0.50dB,mute=0
numid=17,iface=MIXER,name='HPL Volume'
  ; type=INTEGER,access=rw------,values=1,min=0,max=5,step=0
  : values=5
numid=20,iface=MIXER,name='HPR Playback Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=191,step=0
  : values=173
  | dBscale-min=-95.50dB,step=0.50dB,mute=0
numid=18,iface=MIXER,name='HPR Volume'
  ; type=INTEGER,access=rw------,values=1,min=0,max=5,step=0
  : values=5
numid=23,iface=MIXER,name='HPVol SPKVol Switch'
  ; type=ENUMERATED,access=rw------,values=1,items=4
  ; Item #0 'HPVOL: HPL+HPL, SPKVOL: HPL+HPL'
  ; Item #1 'HPVOL: HPL+HPR, SPKVOL: HPL+HPR'
  ; Item #2 'HPVOL: HPL+HPL, SPKVOL: SPKL+SPKR'
  ; Item #3 'HPVOL: HPL+HPR, SPKVOL: SPKL+SPKR'
  : values=3
numid=28,iface=MIXER,name='Headset Mic Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=29,iface=MIXER,name='Internal Mic Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=51,iface=MIXER,name='PGA1.0 1 Master Playback Volume'
  ; type=INTEGER,access=rw---R--,values=2,min=0,max=32,step=0
  : values=32,32
  | dBscale-min=-64.00dB,step=2.00dB,mute=1
numid=52,iface=MIXER,name='PGA2.0 2 PCM 0 Capture Volume'
  ; type=INTEGER,access=rw---R--,values=2,min=0,max=40,step=0
  : values=32,32
  | dBscale-min=-64.00dB,step=2.00dB,mute=1
numid=53,iface=MIXER,name='PGA5.0 5 Master Playback Volume'
  ; type=INTEGER,access=rw---R--,values=2,min=0,max=32,step=0
  : values=32,32
  | dBscale-min=-64.00dB,step=2.00dB,mute=1
numid=54,iface=MIXER,name='PGA6.0 6 Master Playback Volume'
  ; type=INTEGER,access=rw---R--,values=2,min=0,max=32,step=0
  : values=32,32
  | dBscale-min=-64.00dB,step=2.00dB,mute=1
numid=55,iface=MIXER,name='PGA7.0 7 Master Playback Volume'
  ; type=INTEGER,access=rw---R--,values=2,min=0,max=32,step=0
  : values=32,32
  | dBscale-min=-64.00dB,step=2.00dB,mute=1
numid=21,iface=MIXER,name='SPKL Playback Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=191,step=0
  : values=191
  | dBscale-min=-95.50dB,step=0.50dB,mute=0
numid=22,iface=MIXER,name='SPKR Playback Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=191,step=0
  : values=191
  | dBscale-min=-95.50dB,step=0.50dB,mute=0
numid=26,iface=MIXER,name='Speaker Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
numid=35,iface=PCM,name='ELD',device=5
  ; type=BYTES,access=r--v----,values=0
  : values=
numid=48,iface=PCM,name='Playback Channel Map',device=5
  ; type=INTEGER,access=rw-v-R--,values=8,min=0,max=36,step=0
  : values=0,0,0,0,0,0,0,0
  | container
    | chmap-variable=FL,FR
numid=41,iface=PCM,name='ELD',device=6
  ; type=BYTES,access=r--v----,values=0
  : values=
numid=49,iface=PCM,name='Playback Channel Map',device=6
  ; type=INTEGER,access=rw-v-R--,values=8,min=0,max=36,step=0
  : values=0,0,0,0,0,0,0,0
  | container
    | chmap-variable=FL,FR
numid=47,iface=PCM,name='ELD',device=7
  ; type=BYTES,access=r--v----,values=0
  : values=
numid=50,iface=PCM,name='Playback Channel Map',device=7
  ; type=INTEGER,access=rw-v-R--,values=8,min=0,max=36,step=0
  : values=0,0,0,0,0,0,0,0
  | container
    | chmap-variable=FL,FR

marmabiswas123 avatar Dec 29 '25 14:12 marmabiswas123

@marmabiswas123 Thanks. This output does now tell more:

numid=30,iface=CARD,name='HDMI/DP,pcm=5 Jack'
  ; type=BOOLEAN,access=r-------,values=1
  : values=off
numid=36,iface=CARD,name='HDMI/DP,pcm=6 Jack'
  ; type=BOOLEAN,access=r-------,values=1
  : values=off
numid=42,iface=CARD,name='HDMI/DP,pcm=7 Jack'
  ; type=BOOLEAN,access=r-------,values=1
  : values=off

This means there is no audio capable HDMI/DP receiver connected to the system. Either nothing is connected or the negotiation of audio capabilities has failed. You can check the dispay driver's status with:

sudo cat /sys/kernel/debug/dri/0/i915_display_info

Please share the full output of above command. In the "Connector info" section, there should be at least one display connected ("status: connected") and audio support should be reported as "audio support: yes".

kv2019i avatar Dec 29 '25 14:12 kv2019i

@kv2019i In my device I don't have the specific path. Instead I have these directories 0000:00:02.0 1 128 bridges client-3 client-33 client-34 client-41 client-42 client-52 client-54 client-56 client-58 client-59 client-95 client-96 under /sys/kernel/debug/dri/

and all the directories contain a file with the same name

I'm providing the ... /0000:00:02.0/i915_display_info content :

CRTC info
---------
[CRTC:108:pipe A]:
	uapi: enable=yes, active=yes, mode="1920x1080": 48 115150 1920 1968 2000 2142 1080 1083 1089 1120 0x40 0x9
	hw: enable=yes, active=yes
	adjusted_mode="1920x1080": 48 115150 1920 1968 2000 2142 1080 1083 1089 1120 0x40 0x9
	pipe__mode="1920x1080": 48 115150 1920 1968 2000 2142 1080 1083 1089 1120 0x40 0x9
	pipe src=1920x1080+0+0, dither=yes, bpp=18
	port_clock=270000, lane_count=2
	num_scalers=2, scaler_users=0 scaler_id=-1 scaling_filter=0, scalers[0]: use=no, mode=0, scalers[1]: use=no, mode=0
	[ENCODER:264:DDI A/PHY A]: connectors:
		[CONNECTOR:265:eDP-1]
	[PLANE:33:plane 1A]: type=PRI
		uapi: [FB:309] XR30 little-endian (0x30335258),0x100000000000004,1920x1080, visible=visible, src=1920.000000x1080.000000+0.000000+0.000000, dst=1920x1080+0+0, rotation=0 (0x00000001)
		hw: [FB:309] XR30 little-endian (0x30335258),0x100000000000004,1920x1080, visible=yes, src=1920.000000x1080.000000+0.000000+0.000000, dst=1920x1080+0+0, rotation=0 (0x00000001)
	[PLANE:43:plane 2A]: type=OVL
		uapi: [FB:0] n/a,0x0,0x0,, visible=hidden, src=0.000000x0.000000+0.000000+0.000000, dst=0x0+0+0, rotation=0 (0x00000001)
	[PLANE:53:plane 3A]: type=OVL
		uapi: [FB:0] n/a,0x0,0x0,, visible=hidden, src=0.000000x0.000000+0.000000+0.000000, dst=0x0+0+0, rotation=0 (0x00000001)
	[PLANE:63:plane 4A]: type=OVL
		uapi: [FB:0] n/a,0x0,0x0,, visible=hidden, src=0.000000x0.000000+0.000000+0.000000, dst=0x0+0+0, rotation=0 (0x00000001)
	[PLANE:73:plane 5A]: type=OVL
		uapi: [FB:0] n/a,0x0,0x0,, visible=hidden, src=0.000000x0.000000+0.000000+0.000000, dst=0x0+0+0, rotation=0 (0x00000001)
	[PLANE:83:plane 6A]: type=OVL
		uapi: [FB:0] n/a,0x0,0x0,, visible=hidden, src=0.000000x0.000000+0.000000+0.000000, dst=0x0+0+0, rotation=0 (0x00000001)
	[PLANE:93:plane 7A]: type=OVL
		uapi: [FB:0] n/a,0x0,0x0,, visible=hidden, src=0.000000x0.000000+0.000000+0.000000, dst=0x0+0+0, rotation=0 (0x00000001)
	[PLANE:103:cursor A]: type=CUR
		uapi: [FB:0] n/a,0x0,0x0,, visible=hidden, src=64.000000x64.000000+0.000000+0.000000, dst=64x64+1066+608, rotation=0 (0x00000001)
	underrun reporting: cpu=yes pch=yes
[CRTC:185:pipe B]:
	uapi: enable=no, active=no, mode="": 0 0 0 0 0 0 0 0 0 0 0x0 0x0
	hw: enable=no, active=no
	adjusted_mode="": 0 0 0 0 0 0 0 0 0 0 0x0 0x0
	pipe__mode="": 0 0 0 0 0 0 0 0 0 0 0x0 0x0
	pipe src=0x0+0+0, dither=no, bpp=0
	port_clock=0, lane_count=0
	num_scalers=2, scaler_users=0 scaler_id=-1 scaling_filter=0, scalers[0]: use=no, mode=0, scalers[1]: use=no, mode=0
	[PLANE:110:plane 1B]: type=PRI
		uapi: [FB:0] n/a,0x0,0x0,, visible=hidden, src=0.000000x0.000000+0.000000+0.000000, dst=0x0+0+0, rotation=0 (0x00000001)
	[PLANE:120:plane 2B]: type=OVL
		uapi: [FB:0] n/a,0x0,0x0,, visible=hidden, src=0.000000x0.000000+0.000000+0.000000, dst=0x0+0+0, rotation=0 (0x00000001)
	[PLANE:130:plane 3B]: type=OVL
		uapi: [FB:0] n/a,0x0,0x0,, visible=hidden, src=0.000000x0.000000+0.000000+0.000000, dst=0x0+0+0, rotation=0 (0x00000001)
	[PLANE:140:plane 4B]: type=OVL
		uapi: [FB:0] n/a,0x0,0x0,, visible=hidden, src=0.000000x0.000000+0.000000+0.000000, dst=0x0+0+0, rotation=0 (0x00000001)
	[PLANE:150:plane 5B]: type=OVL
		uapi: [FB:0] n/a,0x0,0x0,, visible=hidden, src=0.000000x0.000000+0.000000+0.000000, dst=0x0+0+0, rotation=0 (0x00000001)
	[PLANE:160:plane 6B]: type=OVL
		uapi: [FB:0] n/a,0x0,0x0,, visible=hidden, src=0.000000x0.000000+0.000000+0.000000, dst=0x0+0+0, rotation=0 (0x00000001)
	[PLANE:170:plane 7B]: type=OVL
		uapi: [FB:0] n/a,0x0,0x0,, visible=hidden, src=0.000000x0.000000+0.000000+0.000000, dst=0x0+0+0, rotation=0 (0x00000001)
	[PLANE:180:cursor B]: type=CUR
		uapi: [FB:0] n/a,0x0,0x0,, visible=hidden, src=0.000000x0.000000+0.000000+0.000000, dst=0x0+0+0, rotation=0 (0x00000001)
	underrun reporting: cpu=yes pch=yes
[CRTC:262:pipe C]:
	uapi: enable=no, active=no, mode="": 0 0 0 0 0 0 0 0 0 0 0x0 0x0
	hw: enable=no, active=no
	adjusted_mode="": 0 0 0 0 0 0 0 0 0 0 0x0 0x0
	pipe__mode="": 0 0 0 0 0 0 0 0 0 0 0x0 0x0
	pipe src=0x0+0+0, dither=no, bpp=0
	port_clock=0, lane_count=0
	num_scalers=2, scaler_users=0 scaler_id=-1 scaling_filter=0, scalers[0]: use=no, mode=0, scalers[1]: use=no, mode=0
	[PLANE:187:plane 1C]: type=PRI
		uapi: [FB:0] n/a,0x0,0x0,, visible=hidden, src=0.000000x0.000000+0.000000+0.000000, dst=0x0+0+0, rotation=0 (0x00000001)
	[PLANE:197:plane 2C]: type=OVL
		uapi: [FB:0] n/a,0x0,0x0,, visible=hidden, src=0.000000x0.000000+0.000000+0.000000, dst=0x0+0+0, rotation=0 (0x00000001)
	[PLANE:207:plane 3C]: type=OVL
		uapi: [FB:0] n/a,0x0,0x0,, visible=hidden, src=0.000000x0.000000+0.000000+0.000000, dst=0x0+0+0, rotation=0 (0x00000001)
	[PLANE:217:plane 4C]: type=OVL
		uapi: [FB:0] n/a,0x0,0x0,, visible=hidden, src=0.000000x0.000000+0.000000+0.000000, dst=0x0+0+0, rotation=0 (0x00000001)
	[PLANE:227:plane 5C]: type=OVL
		uapi: [FB:0] n/a,0x0,0x0,, visible=hidden, src=0.000000x0.000000+0.000000+0.000000, dst=0x0+0+0, rotation=0 (0x00000001)
	[PLANE:237:plane 6C]: type=OVL
		uapi: [FB:0] n/a,0x0,0x0,, visible=hidden, src=0.000000x0.000000+0.000000+0.000000, dst=0x0+0+0, rotation=0 (0x00000001)
	[PLANE:247:plane 7C]: type=OVL
		uapi: [FB:0] n/a,0x0,0x0,, visible=hidden, src=0.000000x0.000000+0.000000+0.000000, dst=0x0+0+0, rotation=0 (0x00000001)
	[PLANE:257:cursor C]: type=CUR
		uapi: [FB:0] n/a,0x0,0x0,, visible=hidden, src=0.000000x0.000000+0.000000+0.000000, dst=0x0+0+0, rotation=0 (0x00000001)
	underrun reporting: cpu=yes pch=yes

Connector info
--------------
[CONNECTOR:265:eDP-1]: status: connected
	physical dimensions: 310x170mm
	subpixel order: Unknown
	CEA rev: 0
	DPCD rev: 11
	audio support: no
	DP branch device present: no
	HDCP version: No Connector Support
	max bpc: 0
	fixed modes:
		"1920x1080": 60 143940 1920 1968 2000 2142 1080 1083 1089 1120 0x48 0x9
		"1920x1080": 48 115150 1920 1968 2000 2142 1080 1083 1089 1120 0x40 0x9
	modes:
		"1920x1080": 60 143940 1920 1968 2000 2142 1080 1083 1089 1120 0x48 0x9
		"1920x1080": 48 115150 1920 1968 2000 2142 1080 1083 1089 1120 0x40 0x9
[CONNECTOR:274:HDMI-A-1]: status: disconnected
[CONNECTOR:283:DP-1]: status: disconnected
[CONNECTOR:292:DP-2]: status: disconnected
[CONNECTOR:300:DP-3]: status: disconnected

marmabiswas123 avatar Dec 29 '25 16:12 marmabiswas123

@marmabiswas123 Thanks! That "i915_display_info" now confirms there's nothing connected as an external display! Does this match your test setup?

In general, you cannot play audio to a HDMI/DP receiver unless there is a receiver connected and image is seen on the display. Can you confirm you get display visible on the receiver/monitor you want to play audio to, then check "i915_display_info" and confirm it shows the monitor connected, and then try to play audio?

kv2019i avatar Dec 30 '25 10:12 kv2019i