8.1 KiB
8.1 KiB
ChromiumOS 5.15 与 Ubuntu HWE 6.17 源码对比分析(HDMI / SOF / 板级)
体例:../meta/DOCUMENTATION_STYLE.md。单文件 API 对照(set_idisp_hdmi_link):CHROMEOS_VS_UBUNTU_HDMI_NOTES.md。STREAM_PCM_PARAMS 三文件链:STREAM_PCM_PARAMS_CHROME_UBUNTU_NOTES.md。
本文汇总两树上与 Kaisa / sof-rt5682 / iDisp 相关的 diff -u 可读结论,并指向 reference/ 与专项笔记。
对照树(相对仓库根):
| 树 | 路径 |
|---|---|
| ChromiumOS 5.15 | chromiumos_kernel/v5.15/ |
| Ubuntu HWE 6.17 | kernel-src/linux-hwe-6.17-6.17.0/ |
重新生成 diff(路径以本机为准):
./scripts/export-boards-chrome-ubuntu-diff.sh
./scripts/export-chromeos-ubuntu-sound-file-diffs.sh
# 输出默认:patches/ubuntu-hwe-6.17/reference/(可能被 .gitignore)
1. 参考文件体量(行数)
对 reference/diff-u_*.txt 作 wc -l 的数量级(随双树版本略有浮动):
| 文件 | 约行数 | 主题 |
|---|---|---|
diff-u_sound_soc_intel_boards_sof_board_helpers.c.txt |
~360 | 板级 helper:DAI link、ctx、dpcm_*→playback_only/capture_only、新增 HDA 外置 codec 链 |
diff-u_sound_soc_intel_boards_sof_rt5682.c.txt |
~720 | sof_rt5682:quirk 位域迁到公共头、DMI 表、Rex 行、codec_init/hw_params |
diff-u_sound_soc_sof_ipc3-pcm.c.txt |
~170 | IPC3 PCM:asoc_substream_to_rtd→snd_soc_substream_to_rtd、日志与载荷可观测性 |
diff-u_sound_soc_sof_ipc3.c.txt |
~290 | IPC3 核心(与 PCM/流控相邻) |
diff-u_sound_soc_sof_pcm.c.txt |
~690 | SOF 通用 pcm.c |
diff-u_sound_soc_sof_intel_hda-dai.c.txt |
~1365 | HDA DAI / Link DMA:5.15 与 6.17 架构级差异,非逐行可移植 |
2. sof_board_helpers.c:行为与 API 迁移
2.1 DAI link 标志(与 ASoC 上游一致)
- 5.15(Chrome):
struct snd_soc_dai_link仍大量使用dpcm_playback/dpcm_capture。 - 6.17:上游已统一为
playback_only/capture_only(语义对应,见include/sound/soc.h)。
对 HDMI 的含义:set_idisp_hdmi_link 在 5.15 为 dpcm_playback = 1,在 6.17 为 playback_only = 1。勿把旧标志名机械写回 6.17 补丁。
2.2 6.17 新增能力(与 Kaisa 无直接冲突)
SOF_LINK_HDA:set_hda_codec_link()、Analog/Digital 与 HDA 外置 codec 相关 widget/route(hda_init等),在calculate_num_links/sof_intel_board_set_dai_link中增加分支。- 与 iDisp HDMI:
set_idisp_hdmi_link()的 CPU=iDispN Pin、codec=ehdaudio0D2/intel-hdmi-hifiN结构在两边仍可对齐阅读;差异主要在 周边(DPCM 标志名、EXPORT、模块 NS)。
2.3 辅助符号重构
- 5.15:导出
get_codec_dai_by_name()。 - 6.17:改为
sof_intel_board_get_ctx(),在 ctx 中解析board_quirk→hdmi_num(默认 3)、SSP 端口、BT offload、HDMI-In mask 等,与 KERNEL_SRC_LINUX_HWE617_HDMI_3.5MM_PATHS.md 一致。
2.4 类型与头文件
- Codec/AMP 类型由
enum sof_ssp_codec+sof_ssp_get_codec_name等,迁为enum snd_soc_acpi_intel_codec+snd_soc_acpi_intel_get_codec_name(ACPI 匹配层统一)。
3. sof_rt5682.c:quirk 模型与 Google Rex
3.1 Quirk 位域
- 5.15:本文件内自定义
SOF_RT5682_SSP_CODEC、SOF_RT5682_NUM_HDMIDEV、SOF_BT_OFFLOAD_SSP等宏。 - 6.17:上述位移入
sof_board_helpers.h等公共定义:SOF_SSP_PORT_CODEC、SOF_NUM_IDISP_HDMI、SOF_SSP_PORT_BT_OFFLOAD、SOF_BT_OFFLOAD_PRESENT等,避免 machine 驱动各自重复。
3.2 DMI 表差异
- 部分 5.15 独有 条目(如 Google_Hatch、部分 Ice Lake)在 6.17 上游 可能被合并、移动或删除;以
diff-u_sound_soc_intel_boards_sof_rt5682.c.txt为准。 - Google_Rex:
- 5.15 常显式带
SOF_RT5682_NUM_HDMIDEV(3)(或等价位域)。 - 6.17 Rex 行往往 不写
SOF_NUM_IDISP_HDMI,依赖sof_intel_board_get_ctx()默认hdmi_num = 3(与 KERNEL_SRC_LINUX_HWE617_HDMI_3.5MM_PATHS.md 小结一致)。
- 5.15 常显式带
3.3 codec_init / hw_params
- MCLK / legacy:由直接测
sof_rt5682_quirk & SOF_RT5682_MCLK_BYTCHT_EN,改为ctx->rt5682.is_legacy_cpu等 ctx 字段(更清晰,利于多板共用)。
4. ipc3-pcm.c:IPC 载荷与仓库补丁
- API:
asoc_substream_to_rtd→snd_soc_substream_to_rtd(上游重命名)。 STREAM_PCM_PARAMS填充:struct sof_ipc_pcm_params各字段语义 在两边 一致(详见 STREAM_PCM_PARAMS_CHROME_UBUNTU_NOTES.md §1)。- 6.17 上游 已增加
spcm_dbg、可选SOF_DBG_DUMP_IPC_MESSAGE_PAYLOAD下的字段摘要(与仓库 0002 诊断思路同向)。 - FREE / trigger:5.15 使用
sof_ipc_tx_message等待回复 的路径与 Ubuntu 原版 no_reply 差异,由仓库 0001 对齐;不改变hw_params/STREAM_PCM_PARAMS构造逻辑(见 DIFF_SUMMARY.txt)。
5. hda-dai.c:为何不宜整文件移植
- 5.15:以
hda_pipe_params、hda_check_fes等为中心的传统 link/stream 路径。 - 6.17:引入
hda_dai_config()经 tplg_ops->dai_config;Link DMA 经hda_dai_widget_dma_ops(get_hlink/get_hext_stream/snd_hdac_ext_bus_link_set_stream_id等),并配合 IPC4 头文件、DSpless 等分支。
结论:~千行量级 unified diff 表明 整文件 backport 不可行;排查 HDMI 应 针对具体函数(如 hda_link_dma_hw_params)与 trace,见 STREAM_PCM_PARAMS_CHROME_UBUNTU_NOTES.md §3、§6。
6. 与专项文档的映射
| 主题 | 文档 |
|---|---|
STREAM_PCM_PARAMS / hda-pcm format_val / 下一刀优先级 |
STREAM_PCM_PARAMS_CHROME_UBUNTU_NOTES.md |
| 补丁说明、0001/0002/0003、smoke 对象文件 | DIFF_SUMMARY.txt、patches/ubuntu-hwe-6.17/README.md |
全 sound/soc 自动对照摘要 |
meta/CHROMEOS_vs_UBUNTU617_SOUND_AUTODIFF.md |
| ChromeOS 5.15 单树路径笔记 | CHROMEOS_KAISA_AUDIO_KERNEL_PATHS.md |
| HWE 6.17 单树路径笔记 | KERNEL_SRC_LINUX_HWE617_HDMI_3.5MM_PATHS.md |
| 路线图与修复阶段 | Linux_HDMI_Audio_Roadmap.md |
| 可执行修复计划(阶段 A–D、决策分支) | FIX_PLAN_HDMI_FROM_SOURCE_ANALYSIS.md |
7. 小结
| 层次 | Chrome 5.15 vs Ubuntu 6.17 |
|---|---|
| 板级 HDMI/SSP | 逻辑同构(iDispN、SSP-Codec),差异主要是 ASoC 标志名、quirk 宏归属、6.17 额外 HDA 外置 codec 链 |
IPC3 STREAM_PCM_PARAMS |
载荷构造一致;差异在 日志与诊断;行为修复见 0001(FREE/trigger),非 hw_params 盲改 |
| HDA Link DMA | 架构重写;仅宜 点状 对照与实验,见 STREAM_PCM_PARAMS 笔记 §6 |
以上与「先用户态基线 → 0001 自编内核 → hda-dai/trace/上游」的仓库路线图一致;逐步执行见 FIX_PLAN_HDMI_FROM_SOURCE_ANALYSIS.md。