T820开源GPU数据异常问题分析报告
1 关键字 GPU;panfrost;mesa; 2 问题描述 系统版本:OpenHarmony 3.1 Release 代码版本:OpenHarmony-v3.1-Release 问题现象: 1、OH + mesa +linux 5.10 + panfrost:桌面显示异常,整体背景都为空白,无图标,仅有文字 2、Buildroot + mesa + linux 5.10 + panfrost:
1 关键字
GPU;panfrost;mesa;
2 问题描述
系统版本:OpenHarmony 3.1 Release
代码版本:OpenHarmony-v3.1-Release
问题现象:
1、OH + mesa +linux 5.10 + panfrost:桌面显示异常,整体背景都为空白,无图标,仅有文字
2、Buildroot + mesa + linux 5.10 + panfrost:桌面无显示
3 问题原因
3.1 正常机制
使用开源GPU后,panfrost驱动正常,界面可以正常显示
3.2 异常机制
使用开源GPU后,panfrost驱动异常,界面无法正常显示
4 解决方案
mesa3d中关闭afbc帧缓冲压缩特性
5 定位过程
-
使用开源GPU后,内核出现报错。渲染job中有少量job会报错
panfrost 60000000.gpu: js fault, js=0, status=DATA_INVALID_FAULT, head=0x6006680, tail=0x6006680
从错误提示看,可以知道数据有问题,1个画面渲染有很多不同类型的job,1次job的数据内容也太多。不知道哪个数据字段有问题。
查看panfrost驱动代码,该异常状态是在job中断中,从寄存器中读出。
// kernel\linux\linux-5.10\drivers\gpu\drm\panfrost\panfrost_job.c
#define job_read(dev, reg) readl(dev->iomem + (reg))
static irqreturn_t panfrost_job_irq_handler(int irq, void *data)
-
打开mesa3d的trace,dump job的情况,找到异常的job。
Job Header (6006680): Exception Status: 131672 First Incomplete Task: 0 Fault Pointer: 0x6006000
-
网上查看开源GPU的类似问题,大多数反馈是用户态mesa3d提交的数据问题。mesa3d也有近似问题的处理记录。从高版本mesa回合代码,将job的head也dump出来,这样根据内核打印的异常job head可以对应上mesa3d提交的job内容,找到异常的job。
对比发现有很多数据不一样,也有一两个疑点。比如下面这个地址指针异常。
但mesa的代码很复杂,短时间看不到这些数据是哪里写入的。
-
求助GPU方面专家,专家指出数据head和tail一样是有问题的,结合job情况,推测跟AFBC有关,让关闭AFBC进行测试。
-
修改mesa3d代码,关闭afbc特性,修改后验证GPU显示正常。
-
确认内核驱动代码,panfrost驱动不支持AFBC,没有DRM_PANFROST_PARAM_AFBC_FEATURES这个属性。
-
但是,mesa3d上次查询函数,查不到这个属性的时候, 会返回默认值true表示支持该特性。导致用户态配置的属性,跟内核实际支持的属性不匹配。
-
-
找8541e芯片厂家确认,该芯片确实没有开启afbc。
6 知识分享
1、【技术】AFBC-帧缓冲压缩技术 RK3288提升GPU法宝
2、mesa3d trace打开方法
export PAN_MESA_DEBUG=trace
export MESA_DEBUG=1
3、Buildroot下运行weston和glmark2的方法
mkdir /tmp/xdg
export XDG_RUNTIME_DIR=/tmp/xdg
weston --tty=1 &
glmark2-es2-wayland
更多推荐
所有评论(0)