Files
chromebox_10th_audio_driver/_bmad-output/stories-hdmi-kaisa-bp-2026-04-04.md
2026-04-05 04:34:42 +08:00

214 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 用户故事Kaisa Linux HDMIBP 假设投票后续)
来源:**BP 头脑风暴** 中 H1H6 假设投票后的三条实现/验证故事。
硬件:**Google Kaisa**ChromeboxCoreboot**同机 ChromeOS/Windows HDMI 正常**Ubuntu 下 **HDMI 无声**、**3.5mm 正常**。
### 当前策略2026-04-05 更新)
- **Story A上游****暂缓**——先有**可验证的行为性修复**再发 Issue/邮件;材料清单仍保留,便于日后一次贴齐。
- **Story C****优先**——**`full-build-620-j4` 已完成**deb 在 **`kernel-src/`****Stock** 已采(见执行记录与 `audio_topology/collected/dmesg_storyC_STOCK_*`**下一步**:按 **`OPERATION_Install_CustomKernel_Ubuntu_HWE617.md` §2.1** 安装 **unsigned****`collect-storyc-dmesg.sh save PATCHED`** → 填表与 H2 结论。
- **补丁合理性**:见下文 **「补丁复核」**。
---
## Story A — 上游最小复现包(假设 **H1**:固件/拓扑拒参)
**状态:暂缓**(待真修复后再执行 AC §6 发出上游)。
**作为** 希望推动 SOF/ALSA 社区协助的维护者,
**我希望** 按仓库清单整理一份可邮寄或发 Issue 的复现材料,
**以便** 上游能判断 `-EIO` 是否属固件侧拒绝或需内核侧进一步信息。
### 背景
- 真机已观察到 **`STREAM_PCM_PARAMS``0x60010000`** 类失败;载荷解码见 `patches/ubuntu-hwe-6.17/STREAM_PCM_PARAMS_CHROME_UBUNTU_NOTES.md` §5。
- 示例 dmesg`audio_topology/collected/dmesg_sof_TRACE_PAYLOAD_jack-Kaisa_6.17.0-20-generic_20260404_210954.txt`
### 验收标准AC
1. **硬件与对照**写清机型、Coreboot、同机 ChromeOS HDMI 正常(与 `UPSTREAM_SOF_Kaisa_HDMI_REPRO.md` §1 一致)。
2. **软件版本**填实测:`uname -r`、发行版;若用自编内核,附 `dpkg -l | grep linux-image` 相关行。
3. **必附日志**:完整 `dmesg`(含 `STREAM_PCM_PARAMS` / `ipc` / `pcm*` / `iDisp``alsa-info` 或等效 `aplay -L` + `/proc/asound` 片段。
4. **固件与拓扑**:按 `docs/linux-hdmi/SOF_FIRMWARE_TOPO_Kaisa_CHECKLIST.md` 附路径与 `sha256sum`
5. **可选增强(建议完成)**:带 **`sof_debug=0x800`** 的 IPC 载荷 dmesg采集步骤见 `docs/linux-hdmi/OPERATION_Kaisa_SOF_HDMI_Trace.md`
6. **正文**:使用或改编自 `docs/linux-hdmi/UPSTREAM_SOF_Kaisa_HDMI_REPRO.md` §6 模板,发出至 **thesofproject/sof****alsa-devel**(或两者之一),并**记录链接/邮件 Message-ID** 到本仓库 `audio_topology/collected/README*.md` 或本文件「执行记录」小节。
### 参考路径
- `docs/linux-hdmi/UPSTREAM_SOF_Kaisa_HDMI_REPRO.md`
- `docs/linux-hdmi/SOF_FIRMWARE_TOPO_Kaisa_CHECKLIST.md`
- `patches/ubuntu-hwe-6.17/STREAM_PCM_PARAMS_CHROME_UBUNTU_NOTES.md`
### 任务拆分(建议)
- [ ] 填齐 §2 版本与 §4 固件快照
- [ ] 采集/更新 dmesg 与 alsa-info
- [ ] 粘贴模板、发送、登记链接
---
## Story B — 链路 / stream_tag / iDisp 一致性核对(假设 **H3**
**作为** 负责驱动与拓扑对照的实现者,
**我希望** 把 dmesg 与拓扑里的 **comp_id、stream_tag、HDMI/iDisp 管道** 对齐核实,
**以便** 确认是否存在 **Link DMA / DAI** 与 SOF 拓扑不一致导致的参数被拒。
### 背景
- 载荷示例:`comp_id = 0x14``stream_tag = 1`、48 kHz、2 ch见 §5 解码表与上述 collected dmesg
- 代码差异背景:`patches/ubuntu-hwe-6.17/reference/``hda-dai.c` 等与 Chrome 树 diff说明见 `STREAM_PCM_PARAMS_CHROME_UBUNTU_NOTES.md` §3。
### 验收标准AC
1. **列出** 当前失败场景下 dmesg 中的 **`pcmN (HDMI*)`**、**`iDisp*`**、**`stream_tag`**、**`comp_id`**(与 IPC 载荷或 `0002` 诊断行一致即可)。
2. **对照** 所用 **tplg/固件** 中对应 PCM/DAI 节点(路径来自 Story A 或 `SOF_FIRMWARE_TOPO_Kaisa_CHECKLIST.md`),说明 **stream_tag / link / widget** 是否与主机侧配置一致;结论写为 **「一致 / 不一致 / 无法判定」** 之一,并附**证据**(拓扑片段名、行号或截图路径)。
3. **记录** 若发现不一致:拟议的**下一代码入口**(例如 `sound/soc/sof/intel/hda-dai.c``hda-pcm.c` 中的函数名),写入本文件「执行记录」或 `docs/linux-hdmi/REANALYSIS_Linux_HDMI_Audio_Kaisa.md` 的追加小节(二选一,避免重复粘贴大段日志)。
### 参考路径
- `patches/ubuntu-hwe-6.17/STREAM_PCM_PARAMS_CHROME_UBUNTU_NOTES.md` §5、§3
- `docs/linux-hdmi/CHROMEOS_VS_UBUNTU_HDMI_NOTES.md`
- `audio_topology/` 下拓扑与 collected 日志
### 任务拆分(建议)
- [ ] 从 dmesg/载荷提取 comp_id、stream_tag、pcm/iDisp 名称
- [ ] 在 tplg 或文档中定位对应节点
- [ ] 写下一致性结论与后续代码假设
---
## Story C — 0001 内核 A/B 与 trace假设 **H2**
**状态:进行中****`full-build-620-j4` 已成功产出 deb**;真机 **当前多为官方 `linux-image-6.17.0-20-generic`signed****`linux-image-unsigned` 未装**时,**补丁在 vmlinuz 里的部分不会生效**,须按 **`OPERATION_Install_CustomKernel_Ubuntu_HWE617.md` §2.1** 与 signed **二选一**后再测。
**作为** 验证「FREE/TRIGGER 是否需等 DSP 回复」的维护者,
**我希望****带 `0001` 补丁的自编 6.17****.stock 内核** 上各采一轮相同 trace
**以便** 判断 **PCM_PARAMS 失败是否仍出现**、时序是否变化。
### 背景
- `0001` 仅将 `sof_ipc3_pcm_hw_free` / `sof_ipc3_pcm_trigger``sof_ipc_tx_message_no_reply` 改为 `sof_ipc_tx_message`(见 `patches/ubuntu-hwe-6.17/0001-*.patch`**不修改** `sof_ipc3_pcm_hw_params`
- 构建与安装:`docs/kernel-build/OPERATION_Install_CustomKernel_Ubuntu_HWE617.md`;低并行构建建议 `CONCURRENCY_LEVEL=4`(见 `_bmad-output/problem-solution-2026-04-04-linux-hdmi-kaisa.md`)。
- **历史旁证**`audio_topology/collected/dmesg_sof_STREAM_PCM_PARAMS_HDMI3_jack-Kaisa_6.17.0-19-generic_20260404.txt` 注释称 **已含 0001 时 `STREAM_PCM_PARAMS` 仍 -5****Story C** 仍应在 **6.17.0-20 + j4 构建** 上再采一轮,与 **stock .20** 对照,避免内核版本混杂。
### Story C 操作卡片(本仓库路径)
**前提**deb 在 **`$REPO_ROOT/kernel-src/`**,版本 **`6.17.0-20.20~24.04.1`**(以 `ls *.deb` 为准)。
1. **Stock 侧(先采或补采)**
-**仍使用官方 signed `6.17.0-20`** 时:**一键**`sudo ./scripts/collect-storyc-dmesg.sh auto STOCK`(内部 **`dmesg -C``speaker-test` 首个 HDMI → 写 dmesg**)。
- 指定 HDMI`sudo ./scripts/collect-storyc-dmesg.sh auto STOCK plughw:0,3`(或 `sudo -E env STORYC_HDMI_PLUGHW=plughw:0,3 …`
- 分步:`clear` → 手动试 HDMI → `save STOCK`
- 产出:`audio_topology/collected/dmesg_storyC_STOCK_<uname -r>_<主机>_<时间戳>.txt`
- 记录:`uname -r``dpkg -l`signed **ii**)。
2. **换自编 unsigned与 signed 冲突,必读 §2.1**
- **同 ABI 下** `linux-image-6.17.0-20-generic`signed**`linux-image-unsigned-6.17.0-20-generic`** **不能同时装**
- **做法**:先 **重启进 GRUB → Advanced → 选非 .20 的备用内核**(如 **6.17.0-19****6.17.0-14**`uname -r` **不得**仍是 `6.17.0-20-generic` → 再
`sudo apt remove linux-image-6.17.0-20-generic`(按提示可一并卸 `linux-modules-6.17.0-20-generic`)→ 再 **`dpkg -i`** 自编 **`linux-image-unsigned` + `linux-modules` + `linux-modules-extra` + `linux-modules-iwlwifi`**(同目录一次装齐)→ `sudo apt-get install -f``sudo update-grub` → 重启选 **6.17.0-20-generic**
-**没有备用内核**,须先按 **`OPERATION_…`** 里「GRUB 里只有 Ubuntu」装出一条可启动的旧版再卸 signed .20。
3. **0001 侧(自编镜像)**
- 确认:`dpkg -l | grep linux-image-unsigned-6.17.0-20`**ii**;必要时 `grep '' /proc/version` 与 stock 对照。
- 同样步骤采 **HDMI** trace →
- `audio_topology/collected/dmesg_storyC_PATCHED_6.17.0-20-generic_<主机>_<日期>.txt`
4. **填下方对比表**,并写 **H2支持 / 削弱 / 无变化**
5. **回滚**:需要恢复官方栈时,再 **boot 备用内核**`apt install` 装回 **linux-image-6.17.0-20-generic**signed按 apt 提示),或保留 GRUB 多版本切换。
6. **安装 unsigned命令摘要完整说明见 `OPERATION_Install_CustomKernel_Ubuntu_HWE617.md` §2.1**
- **必须先**从 GRUB 进入 **非 `6.17.0-20-generic`** 的备用内核,`uname -r` 确认后再 `apt remove linux-image-6.17.0-20-generic`signed
-**`kernel-src/`** 同目录一次装齐(版本号以 `ls *.deb` 为准):
```bash
REPO_ROOT="$HOME/文档/chromebox_10th_audio_driver"
cd "$REPO_ROOT/kernel-src"
sudo dpkg -i \
linux-image-unsigned-6.17.0-20-generic_6.17.0-20.20~24.04.1_amd64.deb \
linux-modules-6.17.0-20-generic_6.17.0-20.20~24.04.1_amd64.deb \
linux-modules-extra-6.17.0-20-generic_6.17.0-20.20~24.04.1_amd64.deb \
linux-modules-iwlwifi-6.17.0-20-generic_6.17.0-20.20~24.04.1_amd64.deb
sudo apt-get install -f
sudo update-grub
```
- 重启选 **6.17.0-20-generic**,确认 **`dpkg -l linux-image-unsigned-6.17.0-20-generic`** 为 **ii**。再跑 **`collect-storyc-dmesg.sh`** 的 **clear → 试 HDMI → save PATCHED**。
### 验收标准AC
1. **构建或取得** 带 **0001+0002**(或至少 **0001**)的 `linux-image-unsigned-*` 与匹配 **modules**,并成功引导(`uname -r` 可区分于 stock
2. **两侧各执行一次** 相同复现步骤(播放 HDMI → 失败即可),按 `OPERATION_Kaisa_SOF_HDMI_Trace.md` 或 `scripts/collect-kaisa-sof-trace.sh` 采集 **dmesg**;建议 **`sof_debug=0x800`** 一致。
3. **对比表**(写入本文件「执行记录」即可):
| 项目 | Stock 内核(官方 **signed** `linux-image-6.17.0-20-generic` | 0001 内核(**`linux-image-unsigned` + 0001/0002** |
|------|------------|-----------|
| `uname -r` | 均为 **`6.17.0-20-generic`**ABI 相同;是否 signed 见各文件头 `dpkg` | 同上;**`dpkg -l linux-image-unsigned-6.17.0-20-generic` → ii**(见 PATCHED 文件) |
| 采集方式 / 文件 | 历史 ring`dmesg_storyC_STOCK_*_025700.txt``…_032031.txt`(空) | **PATCHEDunsigned**:早期 `…042242` / `…042458`**设备扫全**`…042627`**plughw:0,3**)、`…042637`**0,4**)、`…042646`**0,2** |
| 是否出现 `STREAM_PCM_PARAMS` / `ipc tx error` / `0x60010000` | **025700** 中有 `0x60010000`、pcm2、iDisp 等 | **上述 PATCHED 文件**在 **`dmesg -C` + 短 `speaker-test` 后****过滤区与「未过滤全文」均为空****ring 内无任何新内核行****无法**与 **STREAM_PCM_PARAMS** 对照 |
| `speaker-test` 侧记 | — | **0,3 / 0,4**:声道显示 **Unknown****0,2****Front Left / Front Right**。均 **exit 0****`0,2`≠3.5mm 那条**(本机 **选对 plughw 时模拟耳机可播**);短测可能**不向 dmesg 打 SOF printk**(与 **`OPERATION_Kaisa_SOF_HDMI_Trace.md` + `sof_debug=0x800`** 的采法不同) |
4. **结论H2****仍无法从本套 Story C 采集判定 H2**——不是「0001 无效」的证明,而是 **当前脚本路径下 ring 为空**,看不到 IPC。要观察 **`STREAM_PCM_PARAMS` / -5**,请改用:**`sof_debug=0x800` + `dynamic_debug` + 复现失败**(见 **`OPERATION_Kaisa_SOF_HDMI_Trace.md`**),或保留 **历史 025700 / TRACE_PAYLOAD** 与 **0001** 的对比叙述。
**0001 对 HDMI 无声**:本 Story **既不能证实也不能证伪**。
### 参考路径
- `patches/ubuntu-hwe-6.17/0001-ASoC-SOF-ipc3-pcm-await-DSP-reply-for-FREE-and-trigger.patch`
- `docs/kernel-build/OPERATION_Install_CustomKernel_Ubuntu_HWE617.md`
- `docs/linux-hdmi/OPERATION_Kaisa_SOF_HDMI_Trace.md`
- `scripts/collect-kaisa-sof-trace.sh`
### 任务拆分(建议)
- [x] `full-build-620-j4` 完成;`kernel-src/` 已有 **`linux-image-unsigned-6.17.0-20-generic_6.17.0-20.20~24.04.1_amd64.deb`** 及 **modules / extra / iwlwifi** 等
- [x] **Stock**`dmesg_storyC_STOCK_*_20260405_025700.txt`(历史 ring`…_032031.txt`(空)
- [x] **unsigned 安装**`linux-image-unsigned-6.17.0-20-generic` **ii**(见 **042242** 内 `dpkg`
- [x] **Patched**`042242` / `042458`**plughw 扫全** `042627`0,3、`042637`0,4、`042646`0,2— **ring 仍无 SOF 行**H2 见上表结论
---
## 补丁复核0001 / 0002Story C 前置)
结论先说:**两则补丁在技术上都「合理、可装车做 A/B」****0002 零行为风险(仅诊断)****0001 是小而正当的 IPC 契约收紧**,与 Chromium 5.15 路径一致,但**不保证**解决 HDMI `STREAM_PCM_PARAMS -5`。
### 0001 — FREE / TRIGGER 等待 DSP 回复
| 项 | 说明 |
|----|------|
| **改什么** | `sof_ipc3_pcm_hw_free`、`sof_ipc3_pcm_trigger``sof_ipc_tx_message_no_reply` → **`sof_ipc_tx_message(..., &reply, sizeof(reply))`**。 |
| **为何合理** | 与 **`sof_ipc3_pcm_hw_params`** 一样走「发 IPC + 等 mailbox 回复」;固件对 FREE/TRIGGER 若返回 **`reply.error < 0`**,现在能**向上传递**,避免主机以为成功而 DSP 已报错。 |
| **栈 / ABI** | 局部 `struct sof_ipc_reply reply` 与现有 **`hw_params`** 用法一致;`sizeof(reply)` 与 IPC3 通用 reply 布局匹配。 |
| **风险** | **延迟**:多一次等待回复(通常可忽略)。若极老旧固件对某子命令**从不回包**,理论上可能挂起——标准 SOF IPC3 下罕见Kaisa 使用常规模板,可接受。 |
| **与 HDMI 关系** | **不直接改** `STREAM_PCM_PARAMS` 发送路径;仅当失败根因是 **FREE/TRIGGER 不同步导致的脏状态** 时,才可能间接改善。 |
### 0002 — `STREAM_PCM_PARAMS` 字段 `spcm_dbg`
| 项 | 说明 |
|----|------|
| **改什么** | 在 **`sof_ipc_tx_message(..., &pcm, ...)` 之前**,若 **`sof_debug_check_flag(SOF_DBG_DUMP_IPC_MESSAGE_PAYLOAD)`**`0x800`),打印 `comp_id`、`stream_tag`、buffer、平台参数等。 |
| **为何合理** | **门控严格**:默认用户无日志;与 `ipc3.c` 里载荷 hex dump 配套。 |
| **行为** | **不修改** `pcm` 结构体字段,**不改变** IPC 内容与顺序。 |
| **风险** | 几乎无;仅在高负载 + 全开 debug 时多几行 log。 |
### 应用顺序
先 **0001** 再 **0002**(与 `DIFF_SUMMARY.txt` 一致),避免 context 行冲突。
---
## 依赖与顺序
- **Story A****暂缓**;待有行为性修复后再走 `UPSTREAM_SOF_Kaisa_HDMI_REPRO.md`。
- **Story B**:已完成(见执行记录)。
- **Story C**:依赖 **j4 自编 deb**;与 A 无先后绑定。
- 推荐:**C 闭环(装 deb → A/B dmesg** → 再视结果决定是否重启 **A**。
---
## 执行记录(完成后填写)
| 故事 | 执行日期 | 结果摘要 | 链接/文件 |
|------|----------|----------|-----------|
| A | | | |
| B | 2026-04-04 | 真机 `alsatplg` 解码 `sof-cml-rt5682.tplg.zst`PCM2↔HDMI1↔iDisp1↔PIPELINE.4 与 dmesg 一致;`comp_id=0x14` 与拓扑 PGA `token251 20` 对齐H3「错 comp_id」削弱 | [`audio_topology/collected/h3-topology-check-jack-Kaisa_20260404.md`](../audio_topology/collected/h3-topology-check-jack-Kaisa_20260404.md) |
| C | 2026-04-05 | **PATCHED** 已扫 **plughw 0,2/0,3/0,4**`042646`/`042627`/`042637`**ring 仍空****H2 无法由本脚本证实/证伪** → 需 **`OPERATION` + sof_debug** 或历史 **TRACE** 对照 | 见 **§验收标准** |