Toybrick

标题: RK3588-RGA IOMMU超过4G的问题 [打印本页]

作者: Jasonuiao    时间: 2025-7-10 18:00
标题: RK3588-RGA IOMMU超过4G的问题
3588是3个RGA core,RGA3 40bit IOMMU,RGA2是32bit。
我现在使用dma-buf申请的内存给到rga用,处理两个进程的视频输入、RGA转换、显示正常。但是开三路视频给到RGA处理,就出现了这个报错:
[ 1875.904909] rga_mm: RGA_MMU unsupported memory larger than 4G!
根据<librga_souce_path>/samples/allocator_demo/src/rga_allocator_dma32_demo.cpp的解决方案,想去申请32位内存,但是系统下没有这个节点。只有/dev/dma_heap/system


请问有什么建议吗?

使用importbuffer_xx提前将外部内存导入到RGA驱动内部。
cat /sys/kernel/debug/rkrga/load
num of scheduler = 3
================= load ==================
scheduler[0]: rga3
         load = 17%
-----------------------------------
scheduler[1]: rga3
         load = 0%
-----------------------------------
scheduler[2]: rga2
         load = 0%
-----------------------------------



作者: Jasonuiao    时间: 2025-7-11 10:56
多进程暂时解决,基本方案就是:
1.importbuffer_* 接口配置
2.DMA32、graphicbuffer(USAGE_WITHIN_4G)等限制内存分配范围。
3.修改内存映射范围。
作者: Chronolyth-90s    时间: 2025-8-19 14:20
遇见一样的问题了,请问楼主具体是怎么修改内存映射范围的??
作者: Jasonuiao    时间: 2025-9-4 17:01
Chronolyth-90s 发表于 2025-8-19 14:20
遇见一样的问题了,请问楼主具体是怎么修改内存映射范围的??

1.我是使用importbuffer_vaddr接口,导入虚拟地址,使用handle接口,再去resize或者imfill操作。
2.如果以上方法还不行,和rk或者代理商申请patch,可以在/dev/dma_buf/文件系统下生成32位的节点,申请32位的dma buf。
3.还是不行,可以试试申请drm内存,以上两步就解决我的问题了,就没有继续追踪。
作者: Jasonuiao    时间: 2025-9-4 17:08
Chronolyth-90s 发表于 2025-8-19 14:20
遇见一样的问题了,请问楼主具体是怎么修改内存映射范围的??

更正:刚才回复的不准确,修改映射应该是要改到uboot,我没有涉及到这一步。理论上前两步足够满足绝大部分使用情况了。




欢迎光临 Toybrick (https://t.rock-chips.com/) Powered by Discuz! X3.3