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 能否获取完整的帧数据。
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 数据流与内存映射路径
理解数据流是定位显存分配异常的前提。以下是一个典型帧渲染到显示的全路径:
- GPU 渲染:应用程序通过 OpenGL ES / Vulkan 提交渲染指令,GPU 将渲染结果写入预先分配的显存缓冲区(Buffer Object)。
- 缓冲区提交:渲染完成后,驱动将缓冲区句柄(dma-buf / ION)传递给显示 HAL。
- DPU 获取:显示 HAL 将缓冲区地址(GPU 虚拟地址 → IOVA → 物理地址)配置到 DPU 的图层描述符(Layer Descriptor)中。
- DPU 读取:DPU 通过内部 DMA 引擎从 DDR 读取帧数据,经过合成、缩放后输出到 DSI/HDMI。
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 内存映射机制和显存分配异常的具体排查方法。