4. SA8155 显示控制器 (MDP):硬件框图、流水线与 DRM 绑定
SA8155 的显示控制器核心是 MDP (Mobile Display Processor),它负责将 GPU/VPU 渲染的帧缓冲区数据,经过合成、缩放、旋转、色彩转换等处理,最终输出到显示接口。理解 MDP 的硬件流水线结构,是掌握 DRM/KMS 驱动绑定与调试的基础。
4.1 MDP 硬件框图
MDP 内部由多个功能模块组成,核心包括:
- SSPP (Source Surface Processor):源图层处理器,每个 SSPP 对应一个独立的 DMA 引擎和图层处理通道,支持从内存抓取帧数据并进行格式转换、缩放、旋转等。
- LMS (Layer Mixer Stage):图层混合器,将多个 SSPP 输出的图层按 Z-order 混合成一张合成图。
- DSPP (Destination Surface Processor):目标图层处理器,对混合后的图像做全局后处理,如色彩校正、伽马、HDR 映射等。
- PP (Post Processor):后处理模块,包含 Dither、Histogram、Ping-Pong 缓冲等。
- INTF (Interface):显示接口控制器,负责将处理好的图像数据打包成 DSI、DP、HDMI 等协议格式发送。
关键概念: SA8155 MDP 支持最多 4 个显示流水线,每个流水线可独立配置输出分辨率、刷新率和接口类型。
4.2 MDP 流水线 (Pipeline) 概念
MDP 的显示处理路径被抽象为 Pipeline(流水线),每个 Pipeline 代表一条从内存到显示接口的完整数据通路。SA8155 通常支持 4 个显示流水线,分别对应不同的物理显示接口。
| 流水线编号 | 典型接口 | 最大分辨率 | 典型用途 |
|---|---|---|---|
| Pipe 0 | DSI 0 (4-lane) | 1920x1080 @60fps | 仪表盘 (Cluster) |
| Pipe 1 | DSI 1 (4-lane) | 1920x1080 @60fps | 中控屏 (IVI) |
| Pipe 2 | DP 0 (eDP/DP) | 3840x2160 @60fps | 副驾屏 / 后排娱乐 |
| Pipe 3 | DP 1 / HDMI | 3840x2160 @60fps | 抬头显示 (HUD) / 外接 |
调试提示: 在 /sys/kernel/debug/dri/0/ 下可以查看每个 CRTC 对应的 MDP 流水线状态,包括 SSPP 分配、图层数量、时钟频率等。
4.3 MDP 与 DRM 的绑定关系
在 DRM/KMS 框架中,MDP 硬件流水线被抽象为以下 DRM 对象:
| DRM 对象 | MDP 硬件对应 | 功能描述 |
|---|---|---|
| CRTC | MDP Pipe (LMS + DSPP + PP) | 管理显示时序、扫描输出、VBLANK 中断 |
| Plane | SSPP (Source Surface Processor) | 管理图层帧缓冲、位置、缩放、旋转 |
| Encoder | INTF (Interface Controller) | 编码像素数据为接口协议 (DSI/DP/HDMI) |
| Connector | 物理接口 + 桥接芯片 | 检测连接状态、EDID 读取、热插拔 |
绑定关系核心: 一个 CRTC 绑定一个 MDP Pipe,一个 Pipe 包含多个 SSPP(Plane),每个 SSPP 对应一个 DRM Plane。Encoder 和 Connector 则绑定在 Pipe 的输出端。
4.4 驱动绑定实现要点
在 SA8155 的 DRM 驱动 (msm_drm) 中,MDP 与 DRM 的绑定通过以下关键数据结构实现:
// mdp5_kms.h - MDP5 硬件抽象层
struct mdp5_hw_pipe {
u32 pipe_num; // 流水线编号 0-3
struct mdp5_ctl *ctl; // 控制寄存器
struct mdp5_smp *smp; // 共享内存池
struct drm_crtc *crtc; // 绑定的 DRM CRTC
};
// mdp5_plane.c - Plane 与 SSPP 绑定
static int mdp5_plane_atomic_check(struct drm_plane *plane,
struct drm_atomic_state *state)
{
struct mdp5_plane_state *pstate = to_mdp5_plane_state(plane->state);
struct mdp5_hw_pipe *hw_pipe = pstate->hw_pipe;
// 检查 SSPP 能力是否满足图层需求
if (hw_pipe->caps & SSPP_CAP_SCALE) {
// 支持缩放
}
return 0;
}
调试注意: 如果 DRM 绑定失败,常见原因包括:dts 中 pipeline 编号与硬件不匹配、SSPP 资源被其他 CRTC 占用未释放、INTF 时钟未使能。建议先检查
/sys/kernel/debug/dri/0/state 确认对象绑定状态。
4.5 本章小结
- MDP 硬件由 SSPP、LMS、DSPP、PP、INTF 组成,每个模块承担不同的显示处理任务。
- MDP 流水线 (Pipeline) 是独立的数据通路,SA8155 支持 4 条流水线,分别对应不同的显示接口。
- DRM 对象与 MDP 硬件存在明确的绑定关系:Plane ↔ SSPP、CRTC ↔ Pipe、Encoder ↔ INTF、Connector ↔ PHY/Bridge。
- 驱动绑定通过 dts 配置和内核数据结构 (mdp5_hw_pipe) 实现,调试时可利用 debugfs 查看绑定状态。