# ChromiumOS 5.15 与 Ubuntu HWE 6.17 源码对比分析(HDMI / SOF / 板级) **体例**:[../meta/DOCUMENTATION_STYLE.md](../meta/DOCUMENTATION_STYLE.md)。**单文件 API 对照**(`set_idisp_hdmi_link`):[CHROMEOS_VS_UBUNTU_HDMI_NOTES.md](CHROMEOS_VS_UBUNTU_HDMI_NOTES.md)。**`STREAM_PCM_PARAMS` 三文件链**:[STREAM_PCM_PARAMS_CHROME_UBUNTU_NOTES.md](../../patches/ubuntu-hwe-6.17/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**(路径以本机为准): ```bash ./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](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](KERNEL_SRC_LINUX_HWE617_HDMI_3.5MM_PATHS.md) 小结一致)。 ### 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](../../patches/ubuntu-hwe-6.17/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](../../patches/ubuntu-hwe-6.17/0001-ASoC-SOF-ipc3-pcm-await-DSP-reply-for-FREE-and-trigger.patch)** 对齐;**不改变** `hw_params` / `STREAM_PCM_PARAMS` 构造逻辑(见 [DIFF_SUMMARY.txt](../../patches/ubuntu-hwe-6.17/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](../../patches/ubuntu-hwe-6.17/STREAM_PCM_PARAMS_CHROME_UBUNTU_NOTES.md) §3、§6。 --- ## 6. 与专项文档的映射 | 主题 | 文档 | |------|------| | `STREAM_PCM_PARAMS` / `hda-pcm` format_val / 下一刀优先级 | [STREAM_PCM_PARAMS_CHROME_UBUNTU_NOTES.md](../../patches/ubuntu-hwe-6.17/STREAM_PCM_PARAMS_CHROME_UBUNTU_NOTES.md) | | 补丁说明、0001/0002/0003、smoke 对象文件 | [DIFF_SUMMARY.txt](../../patches/ubuntu-hwe-6.17/DIFF_SUMMARY.txt)、[patches/ubuntu-hwe-6.17/README.md](../../patches/ubuntu-hwe-6.17/README.md) | | 全 `sound/soc` 自动对照摘要 | [meta/CHROMEOS_vs_UBUNTU617_SOUND_AUTODIFF.md](../meta/CHROMEOS_vs_UBUNTU617_SOUND_AUTODIFF.md) | | ChromeOS 5.15 单树路径笔记 | [CHROMEOS_KAISA_AUDIO_KERNEL_PATHS.md](CHROMEOS_KAISA_AUDIO_KERNEL_PATHS.md) | | HWE 6.17 单树路径笔记 | [KERNEL_SRC_LINUX_HWE617_HDMI_3.5MM_PATHS.md](KERNEL_SRC_LINUX_HWE617_HDMI_3.5MM_PATHS.md) | | 路线图与修复阶段 | [Linux_HDMI_Audio_Roadmap.md](Linux_HDMI_Audio_Roadmap.md) | | **可执行修复计划**(阶段 A–D、决策分支) | [FIX_PLAN_HDMI_FROM_SOURCE_ANALYSIS.md](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](FIX_PLAN_HDMI_FROM_SOURCE_ANALYSIS.md)。