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

16 KiB
Raw Blame History

用户故事Kaisa Linux HDMIBP 假设投票后续)

来源:BP 头脑风暴 中 H1H6 假设投票后的三条实现/验证故事。
硬件:Google KaisaChromeboxCoreboot同机 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 安装 unsignedcollect-storyc-dmesg.sh save PATCHED → 填表与 H2 结论。
  • 补丁合理性:见下文 「补丁复核」

Story A — 上游最小复现包(假设 H1:固件/拓扑拒参)

状态:暂缓(待真修复后再执行 AC §6 发出上游)。

作为 希望推动 SOF/ALSA 社区协助的维护者,
我希望 按仓库清单整理一份可邮寄或发 Issue 的复现材料,
以便 上游能判断 -EIO 是否属固件侧拒绝或需内核侧进一步信息。

背景

  • 真机已观察到 STREAM_PCM_PARAMS0x60010000 类失败;载荷解码见 patches/ubuntu-hwe-6.17/STREAM_PCM_PARAMS_CHROME_UBUNTU_NOTES.md §5。
  • 示例 dmesgaudio_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* / iDispalsa-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/sofalsa-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 = 0x14stream_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_tagcomp_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.chda-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-genericsignedlinux-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_triggersof_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 仍 -5Story 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 -Cspeaker-test 首个 HDMI → 写 dmesg)。
    • 指定 HDMIsudo ./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 -rdpkg -lsigned ii)。
  2. 换自编 unsigned与 signed 冲突,必读 §2.1

    • 同 ABI 下 linux-image-6.17.0-20-genericsignedlinux-image-unsigned-6.17.0-20-generic 不能同时装
    • 做法:先 重启进 GRUB → Advanced → 选非 .20 的备用内核(如 6.17.0-196.17.0-14uname -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 -fsudo update-grub → 重启选 6.17.0-20-generic
    • 没有备用内核,须先按 OPERATION_… 里「GRUB 里只有 Ubuntu」装出一条可启动的旧版再卸 signed .20。
  3. 0001 侧(自编镜像)

    • 确认:dpkg -l | grep linux-image-unsigned-6.17.0-20ii;必要时 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-genericsigned按 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-genericsigned
    • 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-genericii。再跑 collect-storyc-dmesg.shclear → 试 HDMI → save PATCHED

验收标准AC

  1. 构建或取得0001+0002(或至少 0001)的 linux-image-unsigned-* 与匹配 modules,并成功引导(uname -r 可区分于 stock

  2. 两侧各执行一次 相同复现步骤(播放 HDMI → 失败即可),按 OPERATION_Kaisa_SOF_HDMI_Trace.mdscripts/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-genericABI 相同;是否 signed 见各文件头 dpkg 同上;dpkg -l linux-image-unsigned-6.17.0-20-generic → ii(见 PATCHED 文件)
    采集方式 / 文件 历史 ringdmesg_storyC_STOCK_*_025700.txt…_032031.txt(空) PATCHEDunsigned:早期 …042242 / …042458设备扫全…042627plughw:0,3)、…0426370,4)、…0426460,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:声道显示 Unknown0,2Front Left / Front Right。均 exit 00,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_PAYLOAD0001 的对比叙述。
    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

任务拆分(建议)

  • full-build-620-j4 完成;kernel-src/ 已有 linux-image-unsigned-6.17.0-20-generic_6.17.0-20.20~24.04.1_amd64.debmodules / extra / iwlwifi
  • Stockdmesg_storyC_STOCK_*_20260405_025700.txt(历史 ring…_032031.txt(空)
  • unsigned 安装linux-image-unsigned-6.17.0-20-generic ii(见 042242dpkg
  • Patched042242 / 042458plughw 扫全 0426270,30426370,40426460,2ring 仍无 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_freesof_ipc3_pcm_triggersof_ipc_tx_message_no_replysof_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_idstream_tag、buffer、平台参数等。
为何合理 门控严格:默认用户无日志;与 ipc3.c 里载荷 hex dump 配套。
行为 不修改 pcm 结构体字段,不改变 IPC 内容与顺序。
风险 几乎无;仅在高负载 + 全开 debug 时多几行 log。

应用顺序

00010002(与 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.zstPCM2↔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,4042646/042627/042637ring 仍空H2 无法由本脚本证实/证伪 → 需 OPERATION + sof_debug 或历史 TRACE 对照 §验收标准