作者:JEAN-LUC AUFRANC (CNXSOFT) 2023年5月2日
当Rockchip首次推出带有PCIe接口的Rockchip RK3399处理器时,人们最初希望他们可以连接显卡,但由于32MB的寻址限制,这些希望很快就破灭了。
然而,新的Rockchip RK3588处理器上的PCIe实现没有这样的限制,去年11月,Radxa调侃了一个演示,该演示使用AMD Radeon Pro WX 5100 PCIe显卡连接到Rock 5B SBC,在Radeon GPU上运行glxgears演示。
我找不到任何重现此设置的说明,但这引起了Jasbir的兴趣,他试图用Radxa Rock 5B做一个自己的测试,该5B通过“M.2 Key M Extender Cable to PCIE x16 Graphics Card Riser Adapter”(Aliexpress售价14美元,外加税费https://fave.co/3oZ7gBw)连接到AMD Radeon R7 520(https://amzn.to/3oXQPWa),并由LR1007(https://s.click.aliexpress.com/e/_DkZIZnr) 120W 12VDC ATX板供电。
实验基本上是成功的,因为他成功地在他的设置中运行了kmscube、glmark2-drm和glmark2-es2-drm 3D图形演示,正如你从下面嵌入的3分钟视频中看到的那样。
视频链接:
B站:https://www.bilibili.com/vide...
Youtube:https://youtu.be/ZqTd7LbIbMM
然而,这并不是开箱即用的,因为首先他必须用显卡驱动程序和修复程序构建一个自定义内核,并用它更新Radxa的Debian映像。这一开始不起作用,主要有两个原因:
1.PCIe DMA传输的内存分配限制为32位,虽然具有4GB RAM的板可能看不到问题,但用于测试的8GB板可能选择了4GB以上的地址范围。
2.AMD卡依赖于PCIe snooping,RK3588互连上没有CPU snooping。因此,同一设备内存块的任何缓存副本都不会被更新以保持同步。
在实现了上述两个问题的解决方案后,kmstest示例成功运行,但kmscube最终出现了一个错误:
After implementing workarounds for the two issues above, kmstest sample ran successfully, but kmscube ended up with an error:
GL_MESA_framebuffer_flip_y GL_EXT_depth_clamp GL_EXT_texture_query_lod "
===================================
Using modifier ffffffffffffff
Modifiers failed!
Bus error
Jasbir解释说,需要进行另一次修复:
为了修复Radeon内核驱动程序,我们正在确保卡内存映射为“设备内存”类型的Device nGNE。如果是“正常内存”,则允许未对齐的访问。这意味着在遇到这些错误时修复用户空间驱动程序/应用程序,因为这些应用程序可以直接占用卡内存。对于这个特定的总线错误,它是由radeon gallium驱动器中的memcpy引起的,并在那里进行了修复,如视频中所示
修复后,视频中显示的所有图形示例都可以正常运行。然而,运行startx以着色器编译器错误结束,这将需要更多的工作。VAPPI的视频播放也不成功。因此,尽管它看起来很有前景,但仍然不可能像将eGPU与x86迷你PC一起使用那样,将PCIe显卡与Rockchip RK3588 SBC一起使用(https://www.cnx-software.com/2021/03/14/using-an-egpu-with-a-mini-pc-intel-nuc-7-8/),但这可能是在未来。
你可以在Jasbir的帖子(https://jas-hacks.blogspot.com/2023/04/rk3588-adventures-with-external-gpu.html)中找到更多细节。请注意,他没有提供修复和解决方法,只是完成步骤并解释错误,所以如果没有一些认真的工作,你将无法轻松地复制他的演示。