当前位置: 首页 > news >正文

记录:rk3568适配开源GPU驱动(panfrost)

rk3568采用的GPU是Mali-G52,该型号的GPU已在5.10内核的panfrost驱动中被支持。下面记录下移植过程。
1.内核dts修改:
kernel 5.10: arch/arm64/boot/dts/rockchip/rk3568.dtsi

        gpu: gpu@fde60000 {compatible = "rockchip,rk3568-mali", "arm,mali-bifrost";reg = <0x0 0xfde60000 0x0 0x4000>;interrupts = <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>,<GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>,<GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>;interrupt-names = "job", "mmu", "gpu";upthreshold = <40>;downdifferential = <10>;clocks = <&scmi_clk 1>, <&cru CLK_GPU>;clock-names = "gpu", "bus";power-domains = <&power RK3568_PD_GPU>;#cooling-cells = <2>;operating-points-v2 = <&gpu_opp_table>;status = "disabled";gpu_power_model: power-model {compatible = "simple-power-model";leakage-range= <5 15>;ls = <(-24002) 22823 0>;static-coefficient = <100000>;dynamic-coefficient = <953>;ts = <(-108890) 63610 (-1355) 20>;thermal-zone = "gpu-thermal";};};gpu_opp_table: opp-table2 {compatible = "operating-points-v2";mbist-vmin = <825000 900000 950000>;nvmem-cells = <&gpu_leakage>, <&core_pvtm>, <&mbist_vmin>, <&gpu_opp_info>,<&specification_serial_number>, <&remark_spec_serial_number>;nvmem-cell-names = "leakage", "pvtm", "mbist-vmin", "opp-info","specification_serial_number", "remark_spec_serial_number";rockchip,supported-hw;rockchip,max-volt = <1000000>;rockchip,temp-hysteresis = <5000>;rockchip,low-temp = <0>;rockchip,low-temp-adjust-volt = </* MHz    MHz    uV */0      800    50000>;rockchip,pvtm-voltage-sel = <0        84000   084001    87000   187001    91000   291001    100000  3>;rockchip,pvtm-ch = <0 5>;/* RK3568 && RK3568M gpu OPPs */opp-200000000 {opp-hz = /bits/ 64 <200000000>;opp-microvolt = <850000>;};opp-300000000 {opp-hz = /bits/ 64 <300000000>;opp-microvolt = <850000>;};opp-400000000 {opp-hz = /bits/ 64 <400000000>;opp-microvolt = <850000>;};opp-600000000 {opp-hz = /bits/ 64 <600000000>;opp-microvolt = <900000>;opp-microvolt-L0 = <900000>;opp-microvolt-L1 = <875000>;opp-microvolt-L2 = <850000>;opp-microvolt-L3 = <850000>;};opp-700000000 {opp-hz = /bits/ 64 <700000000>;opp-microvolt = <950000>;opp-microvolt-L0 = <950000>;opp-microvolt-L1 = <925000>;opp-microvolt-L2 = <900000>;opp-microvolt-L3 = <875000>;};opp-800000000 {opp-supported-hw = <0xf9 0xffff>;opp-hz = /bits/ 64 <800000000>;opp-microvolt = <1000000>;opp-microvolt-L0 = <1000000>;opp-microvolt-L1 = <975000>;opp-microvolt-L2 = <950000>;opp-microvolt-L3 = <925000>;};};

2.修改内核配置

CONFIG_DRM_PANFROST=y
# CONFIG_DRM_IGNORE_IOTCL_PERMIT is not set

注意:CONFIG_DRM_IGNORE_IOTCL_PERMIT宏不要打开,不然ubuntu启动桌面的时候会报错。

[   14.891337] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000018
[   14.900242] Mem abort info:
[   14.903080]   ESR = 0x96000005
[   14.906264]   EC = 0x25: DABT (current EL), IL = 32 bits
[   14.911698]   SET = 0, FnV = 0
[   14.914844]   EA = 0, S1PTW = 0
[   14.918061] Data abort info:
[   14.921001]   ISV = 0, ISS = 0x00000005
[   14.924865]   CM = 0, WnR = 0
[   14.927892] user pgtable: 4k pages, 39-bit VAs, pgdp=0000000013099000
[   14.934362] [0000000000000018] pgd=0000000000000000, p4d=0000000000000000, pud=0000000000000000
[   14.943125] Internal error: Oops: 96000005 [#1] SMP
[   14.948006] Modules linked in:
[   14.951071] CPU: 0 PID: 804 Comm: gnome-shell Not tainted 5.10.198 #295
[   14.957681] Hardware name: Rockchip RK3568 ISG505 Board (DT)
[   14.963341] pstate: 40400009 (nZcv daif +PAN -UAO -TCO BTYPE=--)
[   14.969359] pc : drm_getunique+0x38/0x120
[   14.973369] lr : drm_getunique+0x30/0x120
[   14.977375] sp : ffffffc00be9bc70
[   14.980695] x29: ffffffc00be9bc70 x28: ffffffc00be9bd78 
[   14.986008] x27: ffffffc00be9bd78 x26: 0000000000000001 
[   14.991319] x25: ffffff800b4a8800 x24: 00000000c0106401 
[   14.996631] x23: 0000000000000000 x22: ffffff800b4a8800 
[   15.001943] x21: 0000000000000000 x20: ffffff8005dd70a8 
[   15.007254] x19: ffffffc00be9bd78 x18: 0000000000000000 
[   15.012567] x17: 0000000000000000 x16: 0000000000000000 
[   15.017878] x15: 0000007ffb143bf8 x14: 0000000000000000 
[   15.023190] x13: 0000000000000000 x12: 0000000000000000 
[   15.028501] x11: 0000000000000000 x10: 0000000000000000 
[   15.033811] x9 : ffffffc00956319c x8 : ffffff800d0c5400 
[   15.039122] x7 : 000000000e200081 x6 : ffffffc00be9bd88 
[   15.044434] x5 : ffffffc00be9bd88 x4 : ffffff800d0c5400 
[   15.049745] x3 : 0000000000000000 x2 : ffffff800d0c5400 
[   15.055056] x1 : 0000000000000000 x0 : 0000000000000000 
[   15.060369] Call trace:
[   15.062825]  drm_getunique+0x38/0x120
[   15.066486]  drm_ioctl_kernel+0xbc/0x104
[   15.070411]  drm_ioctl+0x230/0x480
[   15.073819]  __arm64_sys_ioctl+0xb0/0xf4
[   15.077747]  el0_svc_common.constprop.0+0x70/0x1d0
[   15.082538]  do_el0_svc+0x24/0x30
[   15.085861]  el0_svc+0x20/0x30
[   15.088918]  el0_sync_handler+0xb0/0xb4
[   15.092756]  el0_sync+0x1a0/0x1c0

如果不想关闭CONFIG_DRM_IGNORE_IOTCL_PERMIT宏也可参考下面代码进行修改。

diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c
index 6172f786012b..dbdfaa755bea 100644
--- a/drivers/gpu/drm/drm_ioctl.c
+++ b/drivers/gpu/drm/drm_ioctl.c
@@ -121,6 +121,13 @@ int drm_getunique(struct drm_device *dev, void *data,mutex_lock(&dev->master_mutex);master = file_priv->master;
+
+       if (master == NULL) {
+               u->unique_len = 0;
+               mutex_unlock(&dev->master_mutex);
+               return 0;
+       }
+if (u->unique_len >= master->unique_len) {if (copy_to_user(u->unique, master->unique, master->unique_len)) {mutex_unlock(&dev->master_mutex);

正常启动后内核log如下:

linaro@linaro-alip:~$ dmesg | grep panf
[    6.924978] panfrost fde60000.gpu: clock rate = 594000000
[    6.924997] panfrost fde60000.gpu: bus_clock rate = 500000000
[    6.925906] panfrost fde60000.gpu: mali-g52 id 0x7402 major 0x1 minor 0x0 status 0x0
[    6.925921] panfrost fde60000.gpu: features: 00000000,13de77ff, issues: 00000000,00000400
[    6.925932] panfrost fde60000.gpu: Features: L2:0x07110206 Shader:0x00000002 Tiler:0x00000209 Mem:0x1 MMU:0x00002823 AS:0xff JS:0x7
[    6.925940] panfrost fde60000.gpu: shader_present=0x1 l2_present=0x1
[    6.927235] [drm] Initialized panfrost 1.1.0 20180908 for fde60000.gpu on minor 1

3.文件系统
因为我用的是ubuntu20.04的文件系统,系统中使用的mesa版本是21.2.6,该版本中已经对Mali-G52提供了支持,所以不需要在进行移植,但是因为panfrost驱动不依赖闭源mali库上的那些修改,所以需要将libdrm和xserver切换回公版的版本,不在使用RK修改过的版本,并且因为不在使用libmali库,所以如果之前有装过,这个也需要卸载掉。

sudo apt-get remove --purge libmali*

对于其他文件系统如果mesa的版本过低,请升级到支持Mali-G52的版本。这点可以在mesa源码的"src/panfrost"下进行搜索,看看GPU型号是否支持。

http://www.dtcms.com/a/320076.html

相关文章:

  • Linux中Docker Swarm实践
  • 12-netty基础-手写rpc-编解码-04
  • ubuntu 2024 安装拼音输入法
  • 【macOS操作系统部署开源DeepSeek大模型,搭建Agent平台,构建私有化RAG知识库完整流程】
  • Linux综合练习2
  • 电气设备与互感器全解析
  • 智能制造网络质量保障:德承 DX-1200多网口工控机在windows系统下的网络性能测试指南
  • 操作系统与并发底层原理多道技术
  • docker容器导出为镜像
  • 深度学习入门Day7:Transformer架构原理与实战全解析
  • 亚马逊广告运营:有什么好用的辅助工具
  • Redis配置、测试及分布式缓存实现
  • Android 之 Jetpack - Paging
  • 《C语言》函数练习题--2
  • ElasticSearch相关术语介绍
  • 使用 decimal 包解决 go float 浮点数运算失真
  • 小鸡模拟器安卓版:经典街机游戏的移动体验
  • 利用Axure与JavaScript打造动态图片上传原型:设计案例分享
  • spring-cglib代理-初探01
  • 深度学习-卷积神经网络CNN-1×1卷积层
  • Flink-1.19.0源码详解9-ExecutionGraph生成-后篇
  • UE5多人MOBA+GAS 39、制作角色上半身UI
  • 字符串匹配(重点解析KMP算法)
  • 6 大模块!重构物业运营方式
  • 跨境电商增长突围:多维变局下的战略重构与技术赋能
  • 数智先锋 | Bonree ONE 赋能通威股份有限公司提升全栈可观测性能力
  • 深入解析NVIDIA Nsight工具套件:原理、功能与实战指南
  • 房产证识别在房产行业的技术实现及应用原理
  • Python Socket 脚本深度解析与开发指南
  • 扣扣号码展示网站源码_号码售卖展示系统源码 全开源 带后台(源码下载)