RK3399平台显示驱动中断与DMA传输优化 - 第1节
1.1 RK3399 芯片架构概览
RK3399 是瑞芯微推出的高性能、低功耗六核 64 位处理器,采用 Big.LITTLE 大小核架构,集成 Mali-T860 MP4 GPU 以及丰富的多媒体处理单元。其显示子系统具备强大的 4K 视频编解码与多屏异显能力,是嵌入式显示驱动开发的核心平台。
1.1.1 芯片关键规格
| 模块 | 规格 | 说明 |
|---|---|---|
| CPU | 2×Cortex-A72 + 4×Cortex-A53 | 大小核异构,主频最高 2.0 GHz |
| GPU | Mali-T860 MP4 | 支持 OpenGL ES 3.2 / Vulkan |
| 显示接口 | HDMI 2.0 / eDP 1.3 / MIPI-DSI / DP 1.2 | 支持 4K@60fps 输出 |
| 视频处理 | H.264/H.265 4K 编解码 | 硬件编解码,降低 CPU 负载 |
| 内存 | 双通道 LPDDR4 / DDR3 | 最高 4GB,带宽充裕 |
| 系统总线 | ACE / AXI / AHB | 多级总线互联,支持 DMA 传输 |
1.1.2 显示相关内部互联
RK3399 的显示数据流从 GPU 或视频解码器出发,经过 VOP(Video Output Processor) 处理后,通过 MIPI DPHY / eDP PHY / HDMI PHY 发送到外部显示设备。DMA 控制器负责在内存与 VOP 之间搬运帧缓冲数据,是优化显示性能的关键路径。
1.2 显示子系统组成
RK3399 的显示子系统由 VOP、显示控制器、PHY 层 和 帧缓冲管理单元 四大部分组成。理解各模块职责是编写高效显示驱动的前提。
1.2.1 核心模块功能对比
| 模块 | 功能 | 中断类型 | DMA 参与 |
|---|---|---|---|
| VOP (Video Output Processor) | 图层合成、缩放、色彩转换、时序生成 | VSYNC / LINE / BUFFER | 帧缓冲读取 |
| 显示控制器 (CRTC) | 管理显示模式、分辨率、刷新率 | VBLANK / HBLANK | 配置寄存器 |
| PHY 层 (MIPI/eDP/HDMI) | 高速串行信号转换、电气特性适配 | HPD / 错误检测 | 无 |
| 帧缓冲管理单元 | 分配、映射、同步帧缓冲内存 | DMA 完成 | 核心搬运引擎 |
1.2.2 VOP 内部管线
VOP 内部包含多个 Win(窗口) 层,每个 Win 支持独立格式、位置和透明度。驱动通过配置 Win 寄存器实现多图层叠加,最终由 VOP 合成并输出到 PHY。
1.3 显示驱动框架简介
RK3399 的显示驱动基于 Linux 内核 DRM (Direct Rendering Manager) 框架,向上对接用户态图形栈(Wayland / X11),向下控制 VOP、PHY 等硬件。驱动核心包括 KMS (Kernel Mode Setting) 和 GEM (Graphics Execution Manager) 两大组件。
1.3.1 DRM 驱动分层
| 层级 | 组件 | 职责 |
|---|---|---|
| 用户空间 | libdrm / Mesa / Wayland | 提交 framebuffer、设置显示模式 |
| 内核 DRM 核心 | drm_framebuffer / drm_crtc / drm_encoder / drm_connector | 抽象显示管线,提供 ioctl 接口 |
| 芯片级驱动 | rockchip_drm_vop / rockchip_drm_dsi / rockchip_drm_hdmi | 硬件寄存器操作、中断处理、DMA 配置 |
| 硬件层 | VOP / PHY / DMA 控制器 | 实际像素处理与信号输出 |
1.3.2 驱动中断与 DMA 的协作位置
在 RK3399 显示驱动中,VSYNC 中断 是驱动调度的核心时钟:
- VSYNC 中断:通知驱动一帧显示完成,触发下一帧的 DMA 传输准备。
- DMA 完成中断:确认帧缓冲数据已搬运到 VOP 内部 FIFO,驱动可释放或复用该 buffer。
- 错误中断:如 FIFO 上溢/下溢、PHY 失锁,驱动需做恢复处理。
1.3.3 驱动初始化流程
- probe:匹配设备树,获取 VOP、PHY 等寄存器基址与中断号。
- component_bind:绑定 CRTC、Encoder、Connector 等 DRM 组件。
- drm_dev_register:注册 DRM 设备,暴露 /dev/dri/card0 接口。
- 中断注册:申请 VSYNC、DMA 完成等中断,绑定处理函数。
- DMA 引擎初始化:配置 DMA 通道、地址映射与传输描述符。
1.3.4 关键数据结构
驱动中常用的数据结构定义在 rockchip_drm_drv.h 和 rockchip_vop_reg.h 中,以下为 VOP 控制结构体示例:
struct vop_ctrl {
void __iomem *base; // VOP 寄存器基址
int irq; // VSYNC 中断号
struct clk *aclk; // AXI 时钟
struct clk *dclk; // 像素时钟
struct drm_crtc crtc; // DRM CRTC 对象
struct completion dma_done; // DMA 完成同步
spinlock_t irq_lock; // 中断自旋锁
};
spin_lock_irqsave 保护共享资源,避免与 DMA 回调产生竞态。本课程第 5 章将专门讲解中断上下文的安全编程。
1.4 本章小结
本章从 RK3399 芯片架构出发,梳理了显示子系统的硬件组成与驱动框架。重点包括:
- RK3399 的 Big.LITTLE 架构与多显示接口能力。
- VOP 内部管线与图层合成原理。
- DRM 驱动分层与中断/DMA 协作位置。
- 驱动初始化流程与关键数据结构。