1. SA8155平台概述
1.1 SA8155芯片架构总览
SA8155(Snapdragon 8155)是高通第三代汽车数字座舱平台的核心SoC,采用7nm制程工艺。其整体架构围绕高性能计算、多屏异构显示和AI加速三大能力设计,在车载IVI(In-Vehicle Infotainment)和数字仪表领域占据主流地位。
芯片内部主要包含以下关键模块:
- CPU集群:Kryo 485(1+3+4三丛集),最高主频2.84GHz,用于通用计算和驱动栈调度。
- GPU:Adreno 640(或Adreno 650,视具体SKU),负责图形渲染、合成与UI绘制。
- DPU:Display Processing Unit,高通自研显示控制器,负责图层合成、色彩管理、时序生成。
- DSP:Hexagon 690,用于音频、传感器和低功耗视觉处理。
- VPU:视频编解码单元,支持多路4K H.264/H.265。
- 安全岛:SPU(Secure Processing Unit),保障仪表和关键显示数据安全。
关键点:在DRM驱动开发中,我们主要关注GPU → DPU → 显示接口这条渲染与输出链路。CPU和DSP负责上层应用与合成策略,但不直接参与帧缓冲的硬件扫描输出。
1.2 显示子系统组成
SA8155的显示子系统是一个多流水线、多图层、多接口的复杂结构。它支持最多4路独立显示输出(仪表、中控、副驾娱乐、后座娱乐或HUD),每路输出可配置不同的分辨率和刷新率。
| 显示组件 | 功能描述 | DRM对应对象 |
|---|---|---|
| GPU (Adreno) | 3D渲染、合成、GPU合成(GL/CL) | dma-buf生产者 |
| DPU (Display Processing Unit) | 图层混合、色彩校正、伽马、DSC、时序生成 | struct drm_encoder + crtc |
| DSI/DP TX | 物理层发送器,连接面板或外部显示器 | struct drm_connector |
| MDP (Mobile Display Processor) | 旧称,在SA8155中功能已并入DPU | 历史兼容层 |
| SDE (Software Display Engine) | 高通msm DRM驱动中的显示引擎抽象 | drm_crtc + drm_plane |
开发提示:在SA8155的msm DRM驱动中,
dpu_kms是核心显示管理结构,它封装了所有DPU硬件寄存器操作。GPU渲染完成的帧通过drm_gem_prime_export导出为dma-buf,再通过drm_atomic_set_fb_for_plane绑定到DPU的plane上。
1.3 GPU (Adreno) 与 DPU 的硬件连接关系
Adreno GPU与DPU之间通过系统内存(System Memory / DDR)进行数据交换,而非直接点对点连接。这种架构称为统一内存访问(UMA),GPU渲染结果写入内存中的dma-buf,DPU再从同一内存区域读取帧数据进行合成输出。
具体连接流程如下:
- GPU渲染:Adreno通过Command Queue接收渲染指令,将绘制结果写入分配好的dma-buf(通常为Ion buffer或drm_gem_object)。
- Buffer共享:渲染完成后,GPU通过写屏障保证数据一致性,DPU通过硬件旋转锁(hw rotator lock)或fence机制等待buffer就绪。
- DPU读取:DPU的VIG(VIG: Virtual Image Generator)流水线从DDR中fetch帧数据,经过图层混合、色彩转换后输出到显示接口。
- 扫描输出:DPU内部的时序控制器(Timing Controller)生成VSYNC/HSYNC信号,驱动DSI或DP TX将数据发送到物理面板。
避坑指南:在SA8155上,GPU和DPU共享同一DDR带宽。如果同时开启多路4K显示且GPU负载较高,可能出现带宽争抢导致掉帧。此时需要调整
dpu_mdss_hw中的带宽预算(bandwidth budget)参数,或启用DSC(Display Stream Compression)降低DPU带宽需求。
1.4 显示流水线关键路径
从GPU渲染到最终面板显示,数据经过以下关键路径:
| 步骤 | 硬件模块 | 数据形态 | DRM对象 |
|---|---|---|---|
| 1. 渲染 | Adreno GPU | GPU虚拟地址 → 物理页 | drm_gem_object |
| 2. 导出 | ION / dma-buf | 物理连续/非连续内存 | dma_buf |
| 3. 提交 | msm DRM (atomic commit) | drm_framebuffer | drm_plane + drm_crtc |
| 4. 合成 | DPU VIG + Mixer | 图层叠加后的RGB数据 | drm_crtc (内部) |
| 5. 输出 | DPU Timing Controller | MIPI DSI / eDP / DP | drm_encoder + drm_connector |
架构要点:SA8155的显示架构是解耦的——GPU只负责渲染,不直接控制显示时序;DPU只负责合成和输出,不参与3D渲染。这种设计使得GPU可以专注于图形负载,而DPU独立管理多屏输出和图层合成,是DRM atomic模式设计的硬件基础。
1.5 多显示输出拓扑
SA8155支持最多4路独立显示,典型拓扑如下:
- Display 0:仪表盘(1920x720 @ 60fps,通过DSI-0连接)
- Display 1:中控屏(1920x1080 @ 60fps,通过DSI-1连接)
- Display 2:副驾娱乐屏(1920x1080 @ 60fps,通过DP TX-0连接)
- Display 3:后座娱乐或HUD(1280x720 @ 30fps,通过DP TX-1连接)
每路显示在DPU内部拥有独立的VIG流水线和Mixer,共享同一个DDR控制器但拥有独立的QoS(Quality of Service)优先级设置。
开发提示:在msm DRM驱动中,每个显示输出对应一个
dpu_crtc实例。通过dpu_crtc_state可以查询当前crtc绑定的VIG和Mixer硬件资源。多屏同步需要关注VBlank偏移,否则可能出现跨屏撕裂。