記錄: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.pswp.cn/bicheng/92574.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/92574.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/92574.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SMBIOS詳解:系統管理BIOS的工作原理與實現

1. SMBIOS概述 SMBIOS&#xff08;System Management BIOS&#xff09;是由DMTF&#xff08;分布式管理任務組&#xff09;制定的行業標準&#xff0c;旨在為計算機系統提供統一的硬件信息描述框架。它定義了計算機硬件組件&#xff08;如處理器、內存、主板等&#xff09;的標…

8.5 CSS3多列布局

多列布局 CSS3之多列布局columns CSS3中新出現的多列布局(multi-column)是傳統HTML網頁中塊狀布局模式的有力擴充。這種新語法能夠讓WEB開發人員輕松的讓文本呈現多列顯示。 設置列寬 column-width&#xff1a; | auto 設置對象的寬度&#xff1b;使用像素表示。 auto&#…

Chrome插件快速上手

目錄 前言 一、瀏覽器插件的主要功能 二、插件的工作原理 插件結構 manifest.json icons background.js content-scripts 三、插件例子 popup popup.html popup.js styles.css background.js content-script.js manifest.json 四、其它 前言 本文不做特殊說明…

moment和dayjs

一&#xff1a;moment和dayjs 區別moment 大且可變、維護模式&#xff1b;dayjs 小且不可變、插件化、tree?shaking 友好。antd v4 用 moment&#xff1b;antd v5 用 dayjs。請在同一項目中統一其一&#xff0c;避免混用導致組件報錯。二&#xff1a; antd 4.24.16&#xff08…

Flutter Packge - 組件應用

一、組件創建1. 在工程根目錄創建 packages 目錄。mkdir packages #創建文件夾 cd packages 2. 創建純 Dart Package&#xff08;適合工具類/UI組件&#xff09;。flutter create --templatepackage common_network二、組件配置1. 在 common_network 的 pubspec.yaml 中添加…

基于雙塊輕量級神經網絡的無人機拍攝的風力渦輪機圖像去霧方法

基于雙塊輕量級神經網絡的無人機拍攝的風力渦輪機圖像去霧方法 UAV-Taken Wind Turbine Image Dehazing With a Double-Patch Lightweight Neural Network 我是菜雞&#xff01;我是菜雞&#xff01;我是菜雞&#xff01; 如果老師及學姐學長對該文有任何意見&#xff0c;請…

Spring AI Alibaba 項目接入阿里云百煉平臺大模型

1 依賴jdk 21 springboot 3.4.5 spring-ai-alibaba-starter-dashscope 1.0.0.2<properties><java.version>21</java.version><spring-ai.version>1.0.0</spring-ai.version><spring-ai-alibaba.version>1.0.0.2</spring-ai-alibaba.v…

電腦和手機訪問網站,自動檢測跳轉不同網站

自動檢測跳轉不同網站 自動檢測設備手機或電腦來跳轉不同網頁 開箱即用&#xff0c;不過需要自己修改一下跳轉鏈接 源碼截圖&#xff1a; 下載地址&#xff1a;電腦和手機訪問網站&#xff0c;自動檢測跳轉不同網站.zip - 藍奏云

Spring Boot 集成 ShardingSphere 實現讀寫分離實踐

Spring Boot 集成 ShardingSphere 實現讀寫分離實踐 在高并發的業務場景中,數據庫往往是系統性能的瓶頸。為了提高系統的吞吐量和穩定性,讀寫分離是一種常見的優化方案。本文將詳細介紹如何使用 Spring Boot 結合 ShardingSphere 實現數據庫的讀寫分離,并提供完整的配置和實…

以rabbitmq為例演示podman導出導入鏡像文件

1. 導出鏡像為 tar 文件 將鏡像保存為壓縮包&#xff08;默認格式為 docker-archive&#xff09;&#xff1a; podman save -o rabbitmq_management.tar docker.io/rabbitmq:management-o&#xff1a;指定輸出文件名&#xff08;如 rabbitmq_management.tar&#xff09;。鏡像名…

LIS(最長上升子序列)與LCS(最長公共子序列)

最長上升子序列定義&#xff1a;給出一個數字序列&#xff08;arr&#xff09;&#xff0c;求出其中長度最長的數值嚴格遞增的子序列做法一&#xff1a;使用動態規劃&#xff0c;我們定義dp[i]為以arr[i]結尾的最長上升子序列的長度。#include<bits/stdc.h> using namesp…

javaSE(基礎):5.抽象類和接口

抽象類一.理解抽象類思維&#xff1a;假如我想定義一個Shape&#xff08;圖形類&#xff09;類&#xff0c;我在這個類中寫了一個draw()方法&#xff0c;但是這個方法是不能用來描述圖形形狀的&#xff08;不能有方法體&#xff09;&#xff0c;因為我只要對他進行了準確描述&a…

ESG評級可持續發展之路,ESG評級的好處

在商業文明的演進歷程中&#xff0c;ESG評級正成為衡量企業價值的全新坐標系。這套融合環境&#xff08;Environmental&#xff09;、社會&#xff08;Social&#xff09;和治理&#xff08;Governance&#xff09;三大維度的評估體系&#xff0c;猶如一盞明燈&#xff0c;指引…

camera人臉識別問題之二:【FFD】太陽逆光場景,人像模式后置打開美顏和濾鏡,關閉heif拍攝格式對著人臉拍照,成像口紅出現位置錯誤

【關注我&#xff0c;后續持續新增專題博文&#xff0c;謝謝&#xff01;&#xff01;&#xff01;】 上一篇我們講了&#xff1a; 這一篇我們開始講&#xff1a; camera人臉識別問題之二&#xff1a;【FFD】太陽逆光場景&#xff0c;人像模式后置打開美顏和濾鏡&#xff0c;關…

YOLO-Count:用于文本到圖像生成的可微分目標計數

摘要 https://arxiv.org/pdf/2508.00728v1 我們提出了YOLO-Count&#xff0c;一種可微分的開放詞匯目標計數模型&#xff0c;旨在解決通用計數挑戰并實現文本到圖像(T2I)生成的精確數量控制。核心貢獻是"基數"圖(cardinality map)&#xff0c;這是一種新穎的回歸目標…

Go 的錯誤處理方式深度解析—— error vs panic vs recover:機制原理與實戰取舍

一、Go 的錯誤處理哲學Go 的設計哲學鼓勵明確的、顯式的錯誤處理方式。它不像 Java 或 Python 使用異常機制&#xff0c;而是采用了返回值 error 的方式&#xff0c;讓錯誤成為程序流程的一部分。Go 的錯誤處理核心理念是&#xff1a; 錯誤是值&#xff08;Errors are values&a…

官方Windows系統部署下載工具實踐指南

摘要&#xff1a;本文介紹兩款用于獲取微軟正版系統部署文件的工具&#xff0c;適用于需要快速搭建Windows環境的技術人員。所有工具均基于官方渠道實現&#xff0c;不涉及系統修改或激活功能。一、Windows系統鏡像下載方案工具名稱&#xff1a;Windows鏡像直鏈下載工具 核心功…

Pandas query() 方法詳解

Pandas query() 方法詳解query() 是 Pandas 中一個非常強大的方法&#xff0c;它允許你使用字符串表達式來篩選數據行。這種方法比傳統的布爾索引更簡潔、更易讀。基本語法df.query(expr, inplaceFalse, **kwargs)expr: 查詢字符串表達式inplace: 是否原地修改 DataFrame (默認…

Linux系統層IO

1.c語言文件操作 fopen&#xff1a;打開文件&#xff0c;模式 "w"&#xff08;寫&#xff0c;覆蓋&#xff09;或 "r"&#xff08;讀&#xff09;。 fwrite&#xff1a;fwrite(data, size, count, fp)&#xff0c;按 size 字節寫入 count 次數據。 fread…

QT中的trimmed() 方法(1)

QT中的trimmed() 方法&#xff08;2&#xff09; trimmed() 是 Qt 框架 中 QString 類提供的一個方法&#xff0c;用于 去除字符串首尾的空白字符&#xff08;whitespace characters&#xff09;。它的作用類似于標準 C 中的 std::string 的 trim 操作&#xff0c;但專為 Qt 的…