IEP、RVE、DVBM 与视频隧道
1. IEP
iep.o由:
iep_drv.o;hw_iep_reg.o;iep_iommu_ops.o;- DRM启用时的
iep_iommu_drm.o
组成。
IEP提供图像增强/处理,注册misc device,通过ioctl提交图像参数和buffer。
2. IEP数据路径
1 | open |
3. IEP与IEP2
旧IEP位于独立iep/;IEP2作为MPP backend由ROCKCHIP_MPP_IEP2构建。二者ABI和调度路径不同,不应仅按名称混用。
4. RVE
RVE目录包含:
- driver/ioctl;
- job;
- register conversion;
- fence;
- debugger。
它同样注册misc device,异步路径需维护input/output fence和job lifetime。
5. DVBM
Direct Video Buffer Manager用于视频producer/consumer间buffer状态协调。它不负责codec或scanout本身,而是减少复制并管理直接视频路径。
关键问题:
- producer不能覆盖consumer仍在用的buffer;
- generation/sequence避免ABA;
- disconnect后唤醒所有waiter;
- timeout不能留下永久占用slot。
6. Video Tunnel
rkvtunnel.c注册misc device,提供open/release/ioctl/compat ioctl。Tunnel建立producer/consumer及buffer传递关系。
7. Tunnel生命周期
1 | create/connect |
进程异常退出必须触发disconnect cleanup。
8. dma-buf与Fence
零拷贝并不意味着无同步:
- dma-buf解决共享;
- IOMMU解决device address;
- fence解决完成顺序;
- cache maintenance解决CPU/device一致性;
- ownership protocol解决谁能写。
9. 配置
IEP;ROCKCHIP_RVE及可选proc/debugfs;ROCKCHIP_DVBM;ROCKCHIP_VIDEO_TUNNEL,默认n。
10. RK3588
Vendor defconfig明确启用IEP;RVE/DVBM/tunnel需以产品最终.config为准。节点存在但status disabled时不会probe。
11. 错误处理
硬件timeout必须fail fence并回收映射;tunnel disconnect必须使阻塞ioctl返回;IOMMU fault后不能继续复用已损坏task。
12. 安全
- 对fd/handle建立每session ownership;
- 禁止猜测别人的buffer ID;
- 校验plane边界;
- 限制队列深度;
- 防止close与IRQ double free;
- debugfs/procfs不要暴露地址和敏感帧信息;
- secure video buffer不得映射到普通CPU/userspace路径。
13. 调试
按“节点→session→buffer→fence→job→IRQ→IOMMU→clock/reset”顺序定位。只看到ioctl timeout时不要直接归因于codec,可能是consumer未release或fence未signal。
正在加载留言…