16 KiB
用户故事:Kaisa Linux HDMI(BP 假设投票后续)
来源:BP 头脑风暴 中 H1–H6 假设投票后的三条实现/验证故事。
硬件:Google Kaisa(Chromebox),Coreboot;同机 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)
- 硬件与对照写清:机型、Coreboot、同机 ChromeOS HDMI 正常(与
UPSTREAM_SOF_Kaisa_HDMI_REPRO.md§1 一致)。 - 软件版本填实测:
uname -r、发行版;若用自编内核,附dpkg -l | grep linux-image相关行。 - 必附日志:完整
dmesg(含STREAM_PCM_PARAMS/ipc/pcm*/iDisp);alsa-info或等效aplay -L+/proc/asound片段。 - 固件与拓扑:按
docs/linux-hdmi/SOF_FIRMWARE_TOPO_Kaisa_CHECKLIST.md附路径与sha256sum。 - 可选增强(建议完成):带
sof_debug=0x800的 IPC 载荷 dmesg,采集步骤见docs/linux-hdmi/OPERATION_Kaisa_SOF_HDMI_Trace.md。 - 正文:使用或改编自
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.mddocs/linux-hdmi/SOF_FIRMWARE_TOPO_Kaisa_CHECKLIST.mdpatches/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)
- 列出 当前失败场景下 dmesg 中的
pcmN (HDMI*)、iDisp*、stream_tag、comp_id(与 IPC 载荷或0002诊断行一致即可)。 - 对照 所用 tplg/固件 中对应 PCM/DAI 节点(路径来自 Story A 或
SOF_FIRMWARE_TOPO_Kaisa_CHECKLIST.md),说明 stream_tag / link / widget 是否与主机侧配置一致;结论写为 「一致 / 不一致 / 无法判定」 之一,并附证据(拓扑片段名、行号或截图路径)。 - 记录 若发现不一致:拟议的下一代码入口(例如
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、§3docs/linux-hdmi/CHROMEOS_VS_UBUNTU_HDMI_NOTES.mdaudio_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 为准)。
-
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)。
- 在 仍使用官方 signed
-
换自编 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。
- 同 ABI 下
-
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
- 确认:
-
填下方对比表,并写 H2:支持 / 削弱 / 无变化。
-
回滚:需要恢复官方栈时,再 boot 备用内核 →
apt install装回 linux-image-6.17.0-20-generic(signed)等(按 apt 提示),或保留 GRUB 多版本切换。 -
安装 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为准):
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。
- 必须先从 GRUB 进入 非
验收标准(AC)
-
构建或取得 带 0001+0002(或至少 0001)的
linux-image-unsigned-*与匹配 modules,并成功引导(uname -r可区分于 stock)。 -
两侧各执行一次 相同复现步骤(播放 HDMI → 失败即可),按
OPERATION_Kaisa_SOF_HDMI_Trace.md或scripts/collect-kaisa-sof-trace.sh采集 dmesg;建议sof_debug=0x800一致。 -
对比表(写入本文件「执行记录」即可):
项目 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(空)PATCHED(unsigned):早期 …042242/…042458;设备扫全:…042627(plughw:0,3)、…042637(0,4)、…042646(0,2)是否出现 STREAM_PCM_PARAMS/ipc tx error/0x60010000025700 中有 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的采法不同) -
结论(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.patchdocs/kernel-build/OPERATION_Install_CustomKernel_Ubuntu_HWE617.mddocs/linux-hdmi/OPERATION_Kaisa_SOF_HDMI_Trace.mdscripts/collect-kaisa-sof-trace.sh
任务拆分(建议)
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 等- Stock:
dmesg_storyC_STOCK_*_20260405_025700.txt(历史 ring);…_032031.txt(空) - unsigned 安装:
linux-image-unsigned-6.17.0-20-genericii(见 042242 内dpkg) - Patched:
042242/042458;plughw 扫全042627(0,3)、042637(0,4)、042646(0,2)— ring 仍无 SOF 行,H2 见上表结论
补丁复核(0001 / 0002,Story 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 |
| C | 2026-04-05 | PATCHED 已扫 plughw 0,2/0,3/0,4(042646/042627/042637);ring 仍空;H2 无法由本脚本证实/证伪 → 需 OPERATION + sof_debug 或历史 TRACE 对照 |
见 §验收标准 |