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 定位过程

  1. 使用开源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)    

 

  1. 打开mesa3d的trace,dump job的情况,找到异常的job。

    Job Header (6006680):
      Exception Status: 131672
      First Incomplete Task: 0
      Fault Pointer: 0x6006000
  2. 网上查看开源GPU的类似问题,大多数反馈是用户态mesa3d提交的数据问题。mesa3d也有近似问题的处理记录。从高版本mesa回合代码,将job的head也dump出来,这样根据内核打印的异常job head可以对应上mesa3d提交的job内容,找到异常的job。

    对比发现有很多数据不一样,也有一两个疑点。比如下面这个地址指针异常。

    但mesa的代码很复杂,短时间看不到这些数据是哪里写入的。

  3. 求助GPU方面专家,专家指出数据head和tail一样是有问题的,结合job情况,推测跟AFBC有关,让关闭AFBC进行测试。

  4. 修改mesa3d代码,关闭afbc特性,修改后验证GPU显示正常。

    1. 确认内核驱动代码,panfrost驱动不支持AFBC,没有DRM_PANFROST_PARAM_AFBC_FEATURES这个属性。

    2. 但是,mesa3d上次查询函数,查不到这个属性的时候, 会返回默认值true表示支持该特性。导致用户态配置的属性,跟内核实际支持的属性不匹配。

       

       

  5. 找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 

 

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐