转载DSC 问题排查

DSC 问题排查

Display Driver 问题处理手册 (mediatek.com)

How to check dsc config

完成 DSC 的相关配置之后,如果因为 DSC Porting 导致的显示异常问题,可以按照以下方法去 check dsc config,包括平台和屏端的检查。

如果是 lk dsc config 和 kernel dsc config 都有显示异常问题,那么我们可以在进入 kernel 之后,做完休眠唤醒之后再去 debug 问题。

从 Figure 3-1 可以理解 dsc config 出现问题,可能是 AP 端 DSC Encoder 的压缩设定问题,也可能是 Panel 端 DSC Decoder 的解压设定问题。

1.check mtk dsc config

目的:检查 AP 端 DSC Encoder 的 PPS 相关设定

排查:

问题机器从开机起来吃的还是 lk 的 dsc 配置,先做休眠唤醒,这样会吃 kernel 的 dsc 配置。

输入以下指令,抓一份 mtkfb diagnose,初步去 check mtk dsc config 是否符合预期理论值。

adb shell "echo logger:on > /proc/mtkfb"

adb shell "echo enable_idlemgr:0 > /proc/mtkfb"

adb shell "echo diagnose > /proc/mtkfb && cat /proc/mtkfb" > mtkfb.txt

打开 mtkfb.txt,全局搜索 dsc 关键字,就可以找到相关的 dsc 寄存器打印。

检查 DISP_DSC_PPS0~DISP_DSC_PPS19 的配置是否符合预期,偏移地址是 0x080~0x0CC。

举例:

(1) 按照上面的步骤,抓取真实的 dsc pps 寄存器配置:
[76061.441339]== DSC0 REGS:0x0x000000001400c000 ==
[76061.441340]== DSC0 offset:0x0 ==
[76061.441341](0x000)DSC_START=0x10089
[76061.441341](0x020)DSC_SLICE_WIDTH=0xcb0262
[76061.441342](0x024)DSC_SLICE_HIGHT=0x40e1000b
[76061.441343](0x018)DSC_WIDTH=0x19604c4
[76061.441344](0x01c)DSC_HEIGHT=0xa970a97
[76061.441345](0x228)DSC_SHADOW=0x1
[76061.441345]-- Start dump dsc registers --
[76061.441347]DSC+0x000: 0x10089 0x0 0x1 0x0
[76061.441348]DSC+0x010: 0x707 0x0 0x19604c4 0xa970a97
[76061.441350]DSC+0x020: 0xcb0262 0x40e1000b 0x262 0x1c98
[76061.441351]DSC+0x030: 0x10001 0x28 0x1 0x4c40262
[76061.441353]DSC+0x040: 0x0 0x0 0x0 0x0
[76061.441355]DSC+0x050: 0x0 0x0 0x0 0x0
[76061.441356]DSC+0x060: 0x200 0x6cbe 0x46ce 0x0
[76061.441358]DSC+0x070: 0x800000c8 0x1900190 0x0 0x0
[76061.441359]DSC+0x080: 0xc80ab 0x2320200 0x1310020 0xc0008
[76061.441361]DSC+0x090: 0x77b08bb 0x10f01800 0x20001007 0x330f0f06
[76061.441362]DSC+0x0a0: 0x382a1c0e 0x69625446 0x7b797770 0x7e7d
[76061.441364]DSC+0x0b0: 0x1040900 0xf9450125 0xe967f167 0xe187e167
[76061.441366]DSC+0x0c0: 0xd9c7e1a7 0xd209d9e9 0xd22bd229 0xd271
[76061.441367]DSC+0x0d0: 0x0 0x0 0x0 0x0
[76061.441369]DSC+0x0e0: 0x0 0x0 0x0 0x0
[76061.441370]DSC+0x0f0: 0x0 0x0 0x0 0x0
[76061.441372]DSC+0x100: 0xc12 0xd08 0x10001572 0x10001572
[76061.441374]DSC+0x110: 0x0 0x0 0x0 0x0
[76061.441375]DSC+0x120: 0x0 0x0 0x0 0x0
[76061.441377]DSC+0x130: 0x10141072 0x3014708c 0x510051 0x2358
[76061.441379]DSC+0x140: 0xaf00bb 0x6ca 0x6ca00c3 0x6ca008a
[76061.441380]DSC+0x150: 0xac3b0 0x0 0x0 0x0
[76061.441382]DSC+0x160: 0xa0442030 0xc054a048 0x0 0x0
[76061.441383]DSC+0x170: 0x0 0xffffffff 0x0 0x0
[76061.441385]DSC+0x180: 0x0 0x0 0x0 0x0
[76061.441386]DSC+0x190: 0x0 0x0 0x0 0x0
[76061.441388]DSC+0x1a0: 0x0 0x0 0x0 0x0
[76061.441390]DSC+0x1b0: 0x0 0x0 0x0 0x0
[76061.441391]DSC+0x1c0: 0x0 0x0 0x0 0x0
[76061.441393]DSC+0x1d0: 0x0 0x0 0x0 0x0
[76061.441394]DSC+0x1e0: 0x0 0x0 0x0 0x0
[76061.441396]DSC+0x1f0: 0x0 0x0 0x0 0x0

(2) 找屏厂要对应 128 bytes PPS,利用 DSC_Parse_tool 计算出 result.txt,查看理论的 dsc pps 寄存器配置:

================================================================
| DSC PPS Parameter Register 0 ~ 19                            |
================================================================
0x80  DISP_REG_DSC_PPS00  0x000c80ab
0x84  DISP_REG_DSC_PPS01  0x02320200
0x88  DISP_REG_DSC_PPS02  0x01310020
0x8c  DISP_REG_DSC_PPS03  0x000c0008
0x90  DISP_REG_DSC_PPS04  0x077b08bb
0x94  DISP_REG_DSC_PPS05  0x10f01800
0x98  DISP_REG_DSC_PPS06  0x20001007
0x9c  DISP_REG_DSC_PPS07  0x330f0f06
0xa0  DISP_REG_DSC_PPS08  0x382a1c0e
0xa4  DISP_REG_DSC_PPS09  0x69625446
0xa8  DISP_REG_DSC_PPS10  0x7b797770
0xac  DISP_REG_DSC_PPS11  0x00007e7d
0xb0  DISP_REG_DSC_PPS12  0x01040900
0xb4  DISP_REG_DSC_PPS13  0xf9450125
0xb8  DISP_REG_DSC_PPS14  0xe967f167
0xbc  DISP_REG_DSC_PPS15  0xe187e167
0xc0  DISP_REG_DSC_PPS16  0xd9c7e1a7
0xc4  DISP_REG_DSC_PPS17  0xd209d9e9
0xc8  DISP_REG_DSC_PPS18  0xd22bd229
0xcc  DISP_REG_DSC_PPS19  0x0000d271

(3) 对比真实的 dsc pps 寄存器设定和理论的 dsc pps 设定是否一致。如果二者不一致,请按照 DSC 参数配置 => 4.mtk dsc config 再排查一遍相关配置是否正确。

如果配置没有问题,请初步排查为什么代码实际配置不是理论预期,然后提 case 给 MTK 分析。

2.check mtk dsc params

目的:检查 AP 端 DSC Encoder 的非 PPS 其他设定

排查:如果直接从 dsc register 排查设定是比较难排查的,我们可以初步排查 sw code 是否有正确配置,避免手不听话敲错代码犯了低级错误。

举例:按照 DSC 参数配置 => 3.mtk dsc params 排查下面的相关配置是否正确,是否和 DSC_Parse_tool 计算出来的 result.txt 理论值相同。

1) .dsc_param_load_mode 是 kernel-6.1 之后才需要配置的,往前的版本不需要配置

2) .dsc_params 的 .dsc_cg 需要特别留意

3) .dsc_params 的 .ext_pps_cfg 在 kernel-5.15 之后支援,如果采用该方式也需要排查相关配置

3.check panel dsc init

目的:检查 Panel 端的 DSC Decoder 的相关设定

排查:

1) 找屏厂确认,如何检查 panel dsc init code 是否有完整正确下到屏端,是否有可读的寄存器确认,理论的寄存器值等等。

2) 找屏厂确认,屏端初始化的时候下 dsc init code 是否有什么特殊要求,如是否存在什么特殊的时序要求等等。

3)找屏厂确认,屏端初始化的 dsc init code 是否合理,如有些屏厂是完整版设定 128 Bytes、有些是精简版等。

4)找屏厂确认,屏端初始化是否正常,有没有可能是因为 dsc init code 比较长,而发 init code 的时间有限,导致其他的 init code 没有来的及发到屏端

4.check 128 bytes PPS

目的:有些时候屏厂提供的 128 bytes PPS 不一定是合理的,maybe 他们也是在 try,所以有必要排查 128 bytes PPS 是否合理

排查:

1)如果用的是平台提供的 DSC Parse Tool 计算的 result.txt,请先检查 dump 出来的 128 bytes PPS 是否正确,避免坏了大事咯,干了无用功;

2)找屏厂排查 128 bytes PPS 是否合理。

比如,屏厂是否可以根据 128 bytes PPS 去设定屏端,不吃 AP 的送图,直接喂图给屏端,看看屏端是否可以正确显示,这样子可以排除 AP 设定的问题;

5.如果通过前面的初步排查,都没有办法确认到问题点,思考一下会不会不是 dsc porting 导致的问题呢,而是其他 module 导致的异常呢?

1) 按照 "点屏不亮的check" 和 "点屏中的异常处理",排查基础问题,如供电是否正常、屏端初始化时序是否正常、屏端是否有正确初始化等等;

2)如果经过上面的排查,屏端状态都是 OK 的,平台的相关设定也没有发现问题,可以考虑把 DSC 关掉看看,确认是不是真的是因为开了 DSC 导致的问题:

6.如果上述的初步排查均无效,请提供以下材料,提 case 到 MTK 具体问题具体分析:

1) 提供屏厂给的完整 128 bytes PPS;

2)提供 lk 和 kernel 的 panel driver .c 和 .h 文件,至少需要包括 dsc init code & dsc params;

3)提供平台显示相关的 source code

lk code: (lk or lk2 看具体项目)

/vendor/mediatek/proprietary/bootable/bootloader/lk/platform/mt6xxx/

/vendor/mediatek/proprietary/bootable/bootloader/lk2/platform/mediatek/mt6xxx/disp/

Note: 如果贵司内部有上传代码限制,可以只上传对应目录下的 ddp_dsc.c 和 ddp_reg_dsc.h

kernel code: (mediatek or mediatek_v2 看具体项目)

kernel-xxx/drivers/gpu/drm/mediatek/

kernel-xxx/drviers/gpu/drm/mediatek/mediatek_v2/

Note: 如果贵司内部有上传代码限制,可以只上传对应目录下的 mtk_disp_dsc.c 和 mtk_disp_dsc.h

4)提供异常显示时的 mtkfb diagnose

adb shell "echo logger:on > /proc/mtkfb"

adb shell "echo enable_idlemgr:0 > /proc/mtkfb"

adb shell "echo diagnose > /proc/mtkfb && cat /proc/mtkfb" > mtkfb.txt

  • 25
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值