# H3 / Story B:真机拓扑与 IPC `comp_id` 核对(jack-Kaisa) **清单类说明**:[../../docs/linux-hdmi/SOF_FIRMWARE_TOPO_Kaisa_CHECKLIST.md](../../docs/linux-hdmi/SOF_FIRMWARE_TOPO_Kaisa_CHECKLIST.md)。**时间**:2026-04-04 · **内核**:`6.17.0-20-generic` **方法**:`zstd -dc …/sof-cml-rt5682.tplg.zst | alsatplg -d -`;对照 `dmesg` 与 **`STREAM_PCM_PARAMS`** 载荷(`comp_id=0x14`)。 --- ## 1. 本机固件与拓扑文件 | 文件 | SHA256 | |------|--------| | `/lib/firmware/intel/sof-tplg/sof-cml-rt5682.tplg.zst` | `eba6d312a8db5d1dff3ccac18655622fde73d74b834137f70cc5749e4ef3b0ac` | | `/lib/firmware/intel/sof/intel-signed/sof-cml.ri.zst`(→ `sof-cnl.ri.zst`) | `b0aa0f52ccc6dc8c894f43433e9e3ddb8408dd65d90d0348d845b935fccc45c0` | 解压后拓扑约 **35711** 字节,与仓库 `ANALYSIS_Audio.md` 中「Chrome 解压规模一致」类描述相符。 --- ## 2. HDMI 管道(拓扑图语义) 自 `alsatplg` 解码的 **SectionWidget**: | ALSA 名 | 类型 | 说明 | |---------|------|------| | **PCM2P** | `aif_in` | `Passthrough Playback 2` → 对应 **`pcm2` / HDMI1** | | **PGA4.0** | `pga` | `4 Master Playback Volume` | | **BUF4.0 / BUF4.1** | `buffer` | 缓冲 | | **HDA0.OUT** | `dai_in` | **`stream_name 'iDisp1'`** | | **PIPELINE.4.HDA0.OUT** | `scheduler` | pipeline 4 | 同理:**PCM3P → … → iDisp2(HDA1.OUT,PIPELINE.5)**;**PCM4P → … → iDisp3(HDA2.OUT,PIPELINE.6)**。 **SectionGraph** 连接关系(节选): ```text BUF4.0 , , PCM2P PGA4.0 , , BUF4.0 BUF4.1 , , PGA4.0 … → HDA0.OUT / PIPELINE.4.HDA0.OUT ``` 与 dmesg 中 **`pcm2 (HDMI1)`**、`**cmd=1 dai iDisp1 Pin**` 一致。 --- ## 3. 与 IPC 载荷 `comp_id = 0x14 (20)` 的对照 - 已保存载荷(`dmesg_sof_TRACE_PAYLOAD_jack-Kaisa_6.17.0-20-generic_20260404_210954.txt`)在 **`pcm2 (HDMI1)`** 场景下 **`comp_id = 0x00000014`**。 - 解码拓扑中,**HDMI 三路 PGA(PGA4.0 / PGA5.0 / PGA6.0)** 的 tuple 均含 **`token251 20`**(同一模板;**PGA1.0** 为 SSP/Port1 路径,亦有 `token251 20`,属拓扑 token 重复用法,**不等于** 运行时全局 `comp_id` 必然唯一)。 **结论(H3)**: - **「拓扑里根本没有 HDMI / iDisp / PCM2 这条边」** — 已排除;图结构与日志一致。 - **「`comp_id` 与拓扑完全对不上」** — **未证实**;主机侧为 **`pcm2` 填的 `comp_id=20`** 与拓扑中 **PGA 侧 `token251 20`** **一致可作为支持证据**,但 **运行时 PCM 组件全局 ID** 应以固件加载后为准;若要 100% 钉死,需在能导出 **component 表** 的 debug 接口或固件侧确认。 - 在 **`comp_id` 与图一致仍 -5** 的情形下,仓库 **`SOF_FIRMWARE_TOPO_Kaisa_CHECKLIST.md`** 的指引仍成立:更偏向 **H1(固件策略/拒绝)** 或 **需上游一起看 DSP 侧**,而非简单的「拓扑文件装错」。 --- ## 4. `stream_tag`(当前会话 dmesg) 本次抓取中可见 **`pcm0 (Port1)`** 与 **`pcm2 (HDMI1)`** 均出现 **`stream_tag 1`**,且 **`0x60010000`** 后接 **`0x60040000`** 等,**未在同一 grep 窗口内出现 `ipc tx error`**(与历史采集里 **HDMI2/HDMI3 集中 -5** 的片段可能因播放设备/会话不同)。**多条 PCM 共用 `stream_tag 1`** 是否符合固件预期,仍建议在上游讨论中一并写出。 --- ## 5. 复现本解码的命令(真机) ```bash zstd -dc /lib/firmware/intel/sof-tplg/sof-cml-rt5682.tplg.zst > /tmp/sof-cml-rt5682.tplg alsatplg -d /tmp/sof-cml-rt5682.tplg -o /tmp/sof-cml-rt5682-decoded.conf grep -nE 'PCM2P|iDisp1|PGA4|PIPELINE\.4' /tmp/sof-cml-rt5682-decoded.conf ``` --- ## 6. Story B 结论摘要 | 项 | 结论 | |----|------| | 拓扑文件 | `sof-cml-rt5682.tplg.zst`,已解码核对 | | PCM2 / HDMI1 / iDisp1 | 与拓扑 **一致** | | `comp_id` vs 拓扑 token | **与 PGA 模板中 `token251 20` 一致(支持对齐,非最终数学证明)** | | H3「主机配错 comp_id」 | **当前削弱**;优先继续 **H1 + 上游复现** |