1. SA8155 显示子系统概述

SA8155 是高通第三代车载座舱平台的核心 SoC,其显示子系统专为多屏异构场景设计。理解显示子系统的硬件连接与数据流,是后续排查 GPU 内存映射与显存分配异常的基础。本章从模块级视角拆解 DPU、DSI、HDMI TX 等关键 IP 的拓扑关系与数据通路。

1.1 显示子系统整体架构

SA8155 显示子系统采用 Display Controller (DPU) 集中式架构:所有图形渲染结果(来自 GPU 或 VPU)先写入系统显存(DDR),再由 DPU 通过多个独立显示管道(Display Pipe)读取、合成并输出到不同物理接口。这种架构避免了多路独立显示控制器带来的缓存一致性问题,但对显存带宽和内存映射的连续性提出了更高要求。

关键设计原则:DPU 不直接访问 GPU 内部 SRAM,所有跨模块数据交换必须经过系统内存(DDR)。因此,GPU 显存分配的正确性直接影响 DPU 能否获取完整的帧数据。
SA8155 显示子系统顶层架构 GPU Adreno 640 VPU 视频解码 系统 DDR 显存 / 帧缓冲 LPDDR5 DPU 显示处理单元 3 个显示管道 DSI 0 4-lane DSI 1 4-lane HDMI TX eDP 桥接 渲染输出 解码帧 DMA 读取 图例与说明 GPU/VPU 渲染源 系统显存(DDR) DPU 显示处理 DSI 输出接口 HDMI TX 输出 数据流方向:GPU/VPU → DDR → DPU → DSI/HDMI。所有跨模块数据必须经过 DDR。

1.2 核心模块详解

1.2.1 DPU(显示处理单元)

DPU 是显示子系统的核心,集成 3 个独立显示管道(Pipe 0/1/2),每个管道支持以下能力:

  • 图层合成:硬件叠加最多 8 个图层(Overlay),支持 alpha 混合、颜色转换。
  • 缩放与旋转:内置独立缩放器(Scaler),支持 1/4x ~ 4x 缩放;旋转支持 0°/90°/180°/270°。
  • 色彩管理:3D LUT、Gamma 校正、CSC(色彩空间转换)。
  • 安全显示:支持 TrustZone 保护的安全图层,用于仪表盘等关键内容。
管道编号 最大分辨率 典型用途 输出接口
Pipe 0 3840x2160 @60fps 中控屏 / 副驾屏 DSI 0 或 DSI 1
Pipe 1 1920x1080 @60fps 仪表盘(安全显示) DSI 0 或 DSI 1
Pipe 2 1920x1080 @60fps 后排娱乐 / 抬头显示 HDMI TX(桥接 eDP)
调试提示:当 GPU 显存分配出现跨页不连续时,DPU 的 DMA 引擎可能触发 MMU 缺页中断,导致显示画面撕裂或黑屏。排查时优先检查 Pipe 对应的帧缓冲地址是否在连续物理页内。

1.2.2 DSI(显示串行接口)

SA8155 集成 2 个 DSI 控制器,每个支持 4-lane D-PHY,最高速率 2.5 Gbps/lane。DSI 0 和 DSI 1 可独立工作,也可合并为 8-lane 模式驱动高分辨率面板。

  • 视频模式(Video Mode):DPU 实时推送像素流,适合中控屏、副驾屏。
  • 命令模式(Command Mode):DPU 写入帧缓冲后由 DSI 控制器主动读取,适合仪表盘(低刷新率、低功耗)。

1.2.3 HDMI TX(HDMI 发送器)

HDMI TX 模块负责将 DPU Pipe 2 的输出转换为 HDMI 信号。在 SA8155 参考设计中,HDMI TX 通常外接 eDP 桥接芯片(如 TI SN65DSI86),用于驱动 eDP 接口的抬头显示或后排娱乐屏。

1.3 数据流与内存映射路径

理解数据流是定位显存分配异常的前提。以下是一个典型帧渲染到显示的全路径:

  1. GPU 渲染:应用程序通过 OpenGL ES / Vulkan 提交渲染指令,GPU 将渲染结果写入预先分配的显存缓冲区(Buffer Object)。
  2. 缓冲区提交:渲染完成后,驱动将缓冲区句柄(dma-buf / ION)传递给显示 HAL。
  3. DPU 获取:显示 HAL 将缓冲区地址(GPU 虚拟地址 → IOVA → 物理地址)配置到 DPU 的图层描述符(Layer Descriptor)中。
  4. DPU 读取:DPU 通过内部 DMA 引擎从 DDR 读取帧数据,经过合成、缩放后输出到 DSI/HDMI。
帧数据流与内存映射路径 ① GPU 渲染 写入显存缓冲区 ② 缓冲区提交 dma-buf / ION ③ DPU 配置 图层描述符 ④ DPU 读取 DMA → 合成 → 输出 地址映射关键点 GPU 虚拟地址 (GVA) → IOMMU/MMU → 物理地址 (PA) → DPU 图层描述符 显存分配异常常见原因: • 分配的缓冲区物理地址不连续(DPU 不支持分散-聚集) • GPU 与 DPU 使用不同的地址空间(IOVA 映射错误)

1.4 显存分配的关键约束

SA8155 显示子系统对显存分配有以下硬性约束,违反这些约束将直接导致显示异常:

约束项 要求 违反后果
物理连续性 帧缓冲必须分配在连续物理页(通常 2MB 对齐) DPU DMA 读取时触发 MMU 缺页,画面撕裂
对齐要求 缓冲区起始地址 64 字节对齐;行跨度 16 像素对齐 DPU 图层描述符解析错误,显示偏移或花屏
带宽限制 单管道最大读取带宽 ~12 GB/s(LPDDR5 3200MHz) 高分辨率高帧率场景下掉帧
安全隔离 仪表盘缓冲区必须在安全内存区域(TZ protected) 安全违规导致系统重启
常见陷阱:在调试早期,开发者容易忽略“物理连续性”约束。GPU 驱动默认分配的缓冲区可能是通过 IOMMU 映射的分散页,而 DPU 的 DMA 引擎不支持页表遍历。必须使用 ION 或 DMA-BUF 的连续堆(CONFIG_ION_SYSTEM_CONTIG)来分配帧缓冲。

1.5 本章小结

  • SA8155 显示子系统采用 DPU 集中式架构,GPU/VPU 渲染结果必须经过 DDR 中转。
  • DPU 提供 3 个独立管道,分别驱动 DSI 0、DSI 1 和 HDMI TX(桥接 eDP)。
  • 数据流路径为:GPU → DDR → DPU → DSI/HDMI,其中显存分配的物理连续性和对齐是调试重点。
  • 后续章节将深入 GPU 内存映射机制和显存分配异常的具体排查方法。