RGA 多核 2D 加速架构
1. 功能
RGA执行:
- copy/blit;
- crop和scale;
- rotate/mirror;
- colorspace/format conversion;
- alpha blend;
- fill/palette等。
2. 三代目录
rga/:旧RGA;rga2/:RGA2;rga3/:Multi-RGA,统一管理多类核心。
RK3588 vendor defconfig启用ROCKCHIP_MULTI_RGA。
3. RGA3对象划分
| 文件 | 作用 |
|---|---|
rga_drv.c |
platform/misc device/ioctl/PM |
rga_job.c |
job、queue、运行与完成 |
rga_policy.c |
core选择和调度策略 |
rga_mm.c |
内存对象管理 |
rga_dma_buf.c |
dma-buf import/map |
rga_iommu.c |
IOMMU映射 |
rga_fence.c |
async fence |
rga_hw_config.c |
hardware capabilities |
rga2_reg_info.c、rga3_reg_info.c |
请求到寄存器转换 |
rga_debugger.c |
proc/debugfs |
4. 用户入口
RGA3注册misc device,rga_ioctl处理同步、异步、import/release和版本/能力等命令。Compat当前复用同一handler,因此UAPI结构必须保持32/64位布局可兼容。
5. 数据路径
1 | request |
6. Buffer
支持dma-buf等来源。每个plane都要验证:
- width/height;
- stride;
- format plane count;
- offset;
- required bytes;
- chroma alignment;
- address width;
- read/write direction。
7. 多核策略
Policy根据格式、尺寸、scale比例、功能和core忙闲选择硬件。不是所有RGA core支持同一操作。
8. Async
ROCKCHIP_RGA_ASYNC依赖sync_file。Input fences表示producer完成;output fence在RGA完成后signal。
同步请求等待job completion;等待超时后不能立即释放仍被硬件访问的buffer。
9. IOMMU
IOMMU把scatter-gather dma-buf映射到设备地址。Fault通常来自offset/size错误、提前unmap、设备地址位宽或IOMMU domain问题。
10. Reset
Timeout/error需:
1 | stop queue |
11. 性能
关键瓶颈常是DDR带宽而非计算。避免无意义格式转换、重复scale和cache bounce;批量提交可降低ioctl/PM开销。
12. 安全
Vendor ioctl直接驱动DMA硬件,必须防:
- integer overflow导致buffer越界;
- 任意寄存器写;
- fence cycle/deadlock;
- job队列DoS;
- IOMMU fault storm;
- secure/non-secure buffer混用。
13. 调试
可选procfs/debugfs由ROCKCHIP_RGA_DEBUGGER构建。结合job/core状态、IRQ、IOMMU fault、clock和fence timeline定位。
正在加载留言…