4. MDP通路基础
在SA8155平台中,MDP(Mobile Display Processor)是显示子系统的核心硬件模块,负责将GPU、VPU、Camera以及系统内存中的图层数据,经过格式转换、缩放、旋转、混合后,通过DSI、DP等显示接口输出到屏幕。理解MDP通路的硬件组成与数据流,是后续调试显示异常、性能瓶颈和色彩问题的前提。
一、MDP硬件组成与数据流
MDP并不是单一模块,而是一组围绕显示流水线协同工作的硬件单元。从数据源到屏幕,典型通路包括:DMA通道从DDR读取图层数据,进入Layer Mixer进行图层叠加,再经过Scaler缩放、Rotator旋转、CSC色彩空间转换,最终由Display Interface输出。每个阶段都有独立的寄存器配置和带宽需求。
二、图层混合与Z-order
Layer Mixer支持多图层叠加,每个图层有独立的Z-order、Alpha和混合模式。常见混合模式包括:源覆盖(Src over)、源叠加(Src alpha)、目标覆盖(Dst over)等。调试时若出现图层遮挡错误,应优先检查Z-order寄存器配置和Alpha预乘设置。
典型混合公式:
out.rgb = src.rgb * src.a + dst.rgb * (1 - src.a)
out.a = src.a + dst.a * (1 - src.a)
三、缩放、旋转与色彩空间转换
Scaler负责将图层从源分辨率缩放到目标分辨率,支持多相滤波。缩放比例过大时可能引入模糊或振铃,需调整滤波系数。Rotator支持0°、90°、180°、270°旋转,旋转后DMA的步长和地址需要重新计算。CSC模块完成RGB与YUV之间的转换,涉及色彩矩阵、偏移量和范围(Full/Limited)。
| 模块 | 关键寄存器/参数 | 常见问题 |
|---|---|---|
| DMA | SRC_ADDR、STRIDE、FORMAT | 地址越界、带宽不足 |
| Layer Mixer | ZORDER、ALPHA、BLEND_MODE | 图层遮挡、透明异常 |
| Scaler | SRC_W/H、DST_W/H、FILTER | 模糊、振铃、比例失真 |
| Rotator | ROT_ANGLE、STRIDE | 旋转后花屏、步长错误 |
| CSC | MATRIX、OFFSET、RANGE | 偏色、灰阶异常 |
四、DMA通道与显示接口
SA8155的MDP通常提供多个DMA通道,每个通道可绑定到不同的图层。DMA通道的带宽仲裁直接影响显示流畅度。显示接口方面,DSI用于MIPI屏幕,DP/eDP用于外接显示器,HDMI用于高清输出。不同接口的时序参数(如HFP、HBP、HSA、VFP、VBP、VSA)需要与屏幕规格严格匹配。
调试建议:使用 cat /sys/kernel/debug/dri/0/mdp 查看MDP寄存器状态;使用 dmesg | grep mdp 过滤MDP驱动日志;通过 echo 1 > /sys/kernel/debug/dri/0/mdp_dump 触发寄存器快照。
五、案例与误区复盘
案例:某项目在播放4K视频时出现画面撕裂。排查发现DMA通道带宽不足,Scaler输出分辨率超过MDP处理能力。通过降低缩放比例、启用压缩格式、调整DMA仲裁优先级后问题解决。
误区:很多开发者认为MDP只是简单的“叠加”,忽略了DMA带宽、CSC范围、旋转步长等细节。实际上,MDP通路的每个环节都可能成为显示异常的根因。建议在调试时按照“DMA→Layer Mixer→Scaler→Rotator→CSC→Display Interface”的顺序逐级排查,结合寄存器dump和日志分析,快速定位问题。
注意:修改MDP寄存器前务必确认时钟和电源域已开启,否则可能导致总线挂死。调试完成后应恢复默认配置,避免影响正常显示。