2. MDP硬件架构详解

MDP(Mobile Display Processor)是高通 SA8155 平台显示子系统的核心处理单元,负责将 GPU/VPU 渲染的帧数据经过合成、缩放、旋转、色彩处理等流水线操作后,最终输出到物理显示接口(DP、DSI、HDMI)或写入内存(Writeback)。理解 MDP 的内部模块划分、数据流路径以及时钟/复位域,是进行显示通路故障排查的基础。

排查要点: 80% 的显示异常(如花屏、闪屏、无显示)可追溯到 MDP 内部某个模块的时钟未使能、复位未释放或数据流路径上的 DMA 配置错误。本章内容将直接指导你在故障树中定位到具体模块。

2.1 MDP 内部模块划分

SA8155 的 MDP 内部由多个专用硬件模块组成,每个模块承担特定的图像处理任务。主要模块包括:

模块名称 缩写 核心功能 故障关联
Layer Mixer LM 将多个输入图层(Layer)按 Z-order 进行 Alpha 混合,生成合成帧 图层顺序错乱、透明通道失效、合成花屏
DMA Engine DMA 负责从系统内存(DDR)搬运帧数据到 MDP 内部管线,或从 MDP 写回内存 数据搬运超时、地址越界、带宽不足导致撕裂
Writeback WB 将 MDP 处理完成的帧数据写回系统内存,用于截屏、录像或后处理 截屏黑屏、录像卡顿、WB 中断未触发
Color Processing CPP 执行色彩空间转换、Gamma 校正、3D LUT、PCC(像素级色彩校正) 偏色、对比度异常、色彩断层
Scaler SC 对输入图层或合成帧进行缩放(Downscale/Upscale),支持多种滤波算法 图像模糊、锯齿、缩放比例错误
Rotator ROT 支持 0°/90°/180°/270° 硬件旋转,减少 GPU 负载 旋转后图像裁切、方向错误
Interface Packs INTF 将 MDP 内部像素流打包为物理接口(DP/eDP/DSI/HDMI)所需的时序和协议 无显示、信号不稳定、分辨率不匹配
关键概念: Layer Mixer 是 MDP 的“心脏”,它决定了最终显示内容的合成结果。在 SA8155 上,MDP 支持最多 8 个硬件图层(Layer)同时输入到 Layer Mixer,每个图层可以独立配置源地址、格式、透明度、裁剪区域和 Z-order。

2.2 数据流路径

MDP 内部的数据流遵循“源 → 处理 → 合成 → 输出”的流水线架构。理解数据流路径有助于在故障排查时快速判断问题发生在哪个阶段。

SA8155 MDP 内部数据流架构图 MDP 内部数据流路径 GPU / VPU 系统内存 (DDR) DMA 搬运 DMA Engine 像素流 Scaler Rotator Layer Mixer Alpha 混合 / Z-order 合成帧 CPP 输出流 INTF Pack Writeback DP/DSI/HDMI 物理显示 写回内存 系统内存 (DDR) 数据流说明: GPU/VPU 渲染帧 → DMA 从 DDR 搬运 → Scaler/Rotator 处理 → Layer Mixer 合成 → CPP 色彩处理 → INTF 输出显示 或 Writeback 写回 DDR。

数据流路径的关键阶段:

  1. 源端(Source): GPU 或 VPU 将渲染完成的帧数据写入系统内存(DDR)中的特定 Buffer。
  2. DMA 搬运: DMA Engine 根据配置的源地址、行跨距(Stride)和像素格式,将数据从 DDR 搬运到 MDP 内部 FIFO。
  3. 预处理: 数据经过 Scaler(缩放)或 Rotator(旋转)进行几何变换。
  4. 合成: 多个图层的像素流进入 Layer Mixer,按照 Z-order 和 Alpha 值进行混合,生成最终的合成帧。
  5. 后处理: 合成帧经过 CPP 模块进行色彩校正和 Gamma 调整。
  6. 输出: 处理完成的像素流被 INTF 模块打包为物理接口时序,或由 Writeback 模块写回 DDR。
常见故障点: 如果 DMA 配置的 Stride 与实际 Buffer 的 Stride 不一致,会导致图像“错位”或“撕裂”。这是排查花屏问题时需要优先检查的参数。

2.3 时钟与复位域

MDP 内部模块分布在不同的时钟域(Clock Domain)和复位域(Reset Domain)中。每个域可以独立控制时钟门控和复位状态,以实现功耗优化和模块级故障隔离。

时钟/复位域 包含模块 时钟源 典型频率 故障影响
MDP_CORE_CLK Layer Mixer、CPP、Scaler、Rotator GCC_MDP_CLK 400~600 MHz 合成花屏、色彩异常、缩放失败
MDP_DMA_CLK DMA Engine、Writeback GCC_MDP_DMA_CLK 200~400 MHz 数据搬运超时、截屏黑屏、DMA 错误中断
MDP_INTF_CLK INTF Pack(DP/DSI/HDMI) GCC_MDP_INTF_CLK 根据分辨率动态调整 无显示、信号不稳定、链路训练失败
MDP_AHB_CLK 配置寄存器总线接口(AHB Slave) GCC_MDP_AHB_CLK 100~200 MHz 寄存器读写超时、模块配置无效
排查技巧: 在 SA8155 平台上,MDP 的时钟使能由 mdss_mdp_clk_enable() 函数控制。如果某个模块功能异常,首先通过 clk_summary 或寄存器读取确认对应时钟域是否已使能且频率正确。复位域则通过 mdss_mdp_reset() 控制,复位释放顺序必须遵循硬件手册,否则可能导致模块死锁。
MDP 时钟与复位域分布 MDP 时钟与复位域分布 MDP_CORE_CLK 域 Layer Mixer CPP Scaler Rotator MDP_DMA_CLK 域 DMA Engine Writeback MDP_INTF_CLK 域 INTF Pack (DP / DSI / HDMI) MDP_AHB_CLK 域 配置寄存器总线接口 (AHB Slave) 复位域说明: 每个时钟域对应一个独立的复位域。复位释放顺序必须为:MDP_AHB_CLK → MDP_CORE_CLK → MDP_DMA_CLK → MDP_INTF_CLK。违反顺序可能导致模块寄存器无法访问或数据路径死锁。

2.4 模块间交互与同步机制

MDP 内部模块之间通过以下机制实现数据同步和流控:

  • FIFO 缓冲: 每个模块的输入/输出端口都带有深度可配置的 FIFO,用于吸收跨时钟域的数据速率差异。
  • Start-of-Frame (SOF) 同步: Layer Mixer 以垂直消隐期(VBlank)为同步基准,所有图层必须在 SOF 之前完成配置更新,否则会出现“撕裂”。
  • DMA 完成中断: DMA Engine 在完成一帧数据搬运后触发中断,通知软件更新下一帧的 Buffer 地址。
  • Writeback 完成中断: Writeback 模块在将一帧数据完全写回 DDR 后触发中断,用于截屏或录像的帧同步。
调试建议: 在排查显示异常时,可以通过读取 MDP 内部的状态寄存器(如 MDP_INTF_STATUS、MDP_DMA_STATUS)来确认模块是否处于预期状态。例如,MDP_DMA_STATUS.BUSY 位如果长时间为 1,说明 DMA 搬运未完成,可能原因是时钟不足或地址配置错误。

2.5 故障排查要点总结

故障现象 可能涉及的模块 优先检查项
无显示(黑屏) INTF、Layer Mixer、时钟域 INTF 时钟是否使能、复位是否释放、DP 链路训练状态
花屏/错位 DMA、Scaler、Layer Mixer DMA Stride 配置、Buffer 地址对齐、Scaler 输入输出尺寸
图像撕裂 DMA、Layer Mixer VBlank 同步配置、DMA 完成中断是否及时更新 Buffer
偏色/色彩异常 CPP、Layer Mixer CPP 色彩矩阵配置、Gamma LUT 是否加载、图层 Alpha 值
截屏黑屏/录像卡顿 Writeback、DMA Writeback 时钟使能、WB 输出 Buffer 地址、WB 完成中断