跳到主要内容

Rockchip DRM Display Driver Development Guide

:::info 文档信息

发布版本:1.0 · 页数:28 · 语言:英文

原始文档:Rockchip_DRM_Display_Driver_Development_Guide_V1.0.pdf

:::

章节大纲​

  • 前言(P3)
  • 目录(P4)
  • 1 DRM概述(P6)
    • 1.1 基本概念(P6)
    • 1.2 DRM显示通路(P6)
    • 1.3 DRM驱动和libdrm交互过程(P6)
  • 2 DRM驱动(P7)
    • 2.1 uboot驱动(P7)
      • 2.1.1 驱动目录(P7)
      • 2.1.2 驱动文件(P7)
      • 2.1.3 接口说明(P7)
    • 2.2 kernel驱动(P8)
      • 2.2.1 驱动目录(P8)
      • 2.2.2 驱动文件(P8)
      • 2.2.3 内核驱动加载流程(P9)
  • 3 Display feature(P10)
    • 3.1 各平台支持的显示接口及属性(P10)
    • 3.2 最大输出分辨率和协议标准(P10)
      • 3.2.1 RK3036平台(P10)
      • 3.2.2 RK312X/PX3SE平台(P10)
      • 3.2.3 RK322X/RK312XH平台(P10)
      • 3.2.4 RK3288X平台(P10)
      • 3.2.5 RK3308平台(P11)
      • 3.2.6 RK322XH/RK332X平台(P11)
      • 3.2.7 RK3326/px30平台(P11)
      • 3.2.8 RK3368/PX5平台(P11)
      • 3.2.9 RK3399平台(P11)
  • 4 硬件相关(P11)
    • 4.1 RGB输出/TTL模式硬件连接(P11)
      • 4.1.1 RGB888 24BIT屏(P11)
      • 4.1.2 RGB666 18 bit屏(P12)
      • 4.1.3 RGB565 16 bit屏(P13)
      • 4.1.4 MCU屏(P13)
    • 4.2 LVDS Data Mapping(P15)
      • 4.2.1 6 bit output mode(P15)
      • 4.2.2 8 bit output mode(P15)
      • 4.2.3 10 bit output mode(P16)
  • 5 扫描时序说明(P18)
    • 5.1 常见的扫描时序图(P18)
    • 5.2 DRM对扫描时序的定义(P19)
    • 5.3 软件配置的对应关系(P19)
  • 6 常用的debug手段(P19)
    • 6.1 dump当前的显示状态(P19)
      • 6.1.1 使用命令(P19)
      • 6.1.2 参数说明(P20)
    • 6.2 调整drm log等级抓log(P21)
    • 6.3 查看当前的显示时钟(P21)
    • 6.4 强行开关显示设备(P21)
    • 6.5 查看drm buffer使用情况(P22)
    • 6.6 查看gpio的状态(P22)
    • 6.7 modetest使用(P22)
    • 6.8 界面暂停、启动(P22)
    • 6.9 查看EDID信息(P23)
    • 6.10 查看HDMI的状态信息(P23)
    • 6.11 Dump当前显示的buffer(P23)
      • 6.11.1 使用说明(P23)
      • 6.11.2 例子(P23)
  • 7 FAQ(P23)
    • 7.1 uboot logo切换到内核logo出现闪屏/无法显示问题(P23)
      • 7.1.1 DDR变频导致(P23)
      • 7.1.2 clk tree变化导致(P23)
      • 7.1.3 时钟被关闭导致(P24)
      • 7.1.4 uboot logo图片和kernel logo图片大小不一致(P24)
      • 7.1.5 内核初始化过程一些电源/GPIO被重新初始化(P24)
      • 7.1.6 VOP优先级配置问题(P24)
      • 7.1.7 测试相关电源和信号(P24)
    • 7.2 如何开关uboot logo显示(P24)
    • 7.3 VOP POST_BUF_EMPTY(P25)
      • 7.3.1 带宽不够(P25)
      • 7.3.2 iommu出错(P25)
      • 7.3.3 logic电压太低(P25)
      • 7.3.4 AFBDC/IFBDC对齐要求(P25)
    • 7.4 drm驱动bind(P25)
    • 7.5 uboot logo要求(P26)
    • 7.6 部分机器开机动画显示异常,桌面显示正常(P26)
    • 7.7 显示效果调节(P27)
    • 7.8 屏无法点亮/休眠唤醒显示异常/不显示问题(P27)
    • 7.9 rk3308 显示特殊性(P27)
      • 7.9.1 uboot显示(P27)
      • 7.9.2 CMA_SIZE的修改(P27)
    • 7.10 OLED屏余晖确认(P28)
    • 7.11 各种接口屏配置(P28)
  • 8参考文档(P28)

在线预览​

若预览无法显示,请直接下载 PDF 后用本地阅读器打开。


DRM 概述​

DRM 全称是Direct Rendering Manager,进行显示输出管理、buffer 分配、帧缓冲。对应userspace 库为libdrm,,libdrm 库提供了一系列友好的控制封装,使用户可以方便的进行显示的控制和buffer 申请。DRM的设备节点为"/dev/dri/cardX",X 为0-15 的数值,默认使用的是/dev/dri/card0。从linux 4.4 内核开始,Rockchip 显示驱动全部切到DRM 显示框架。

1.1​

基本概念​

CRTC:显示控制器,在rockchip 平台是SOC 内部VOP(部分文档也称为LCDC)模块的抽象;Plane:图层,在rockchip 平台是SOC 内部VOP(LCDC)模块win 图层的抽象;Encoder:输出转换器,指RGB、LVDS、DSI、eDP、HDMI、CVBS、VGA 等显示接口;Connector:连接器,指encoder 和panel 之间交互的接口部分;Bridge:桥接设备,一般用于注册encoder 后面另外再接的转换芯片,如DSI2HDMI 转换芯片。Panel:泛指屏,各种LCD、HDMI 等显示设备的抽象;GEM:buffer 管理和分配,类似android 下的ion。

1.2​

DRM 显示通路​

1.3​

DRM 驱动和 libdrm 交互过程​

第 1 页

DRM 驱动​

2.1​

uboot 驱动​

2.1.1​

驱动目录​

2.1.2​

drivers/video/drm/

驱动文件​

DriverFile
Corerockchip display.c _ rockchip crtc.c _ rockchip connector.c _ rockchip phy.c _ rockchip panel.c _
VOProckchip vop.c _ rockchip vop reg.c _ _
eDProckchip analogix dp.c _ _ rockchip analogix dp reg.c _ _ _
MIPI-DSIrockchip mipi dsi.c _ _ rockchip-dw-mipi-dsi.c inno video phy.c _ _
LVDSrockchip lvds.c _ inno video phy.c _ _
RGBrockchip rgb.c _ inno video phy.c _ _
HDMIdw hdmi.c _ rockchip dw hdmi.c _ _ rockchip-inno-hdmi-phy.c
TVE/CVBSrockchip drm tve.c _ _
Panelpanel simple.c _ rockchip dsi panel.c _ _

2.1.3​

接口说明​

(1) void rockchip_show_logo(void)显示U-Boot logo 和kernel logo (2) void rockchip_show_bmp(const char *bmp)显示指定的bmp 图片,目前主要用于充电logo 的显示:(3) rockchip_display_fixup(void *blob)将U-Boot 中确定的一些变量通过dtb 文件传递给内核,包括kernel logo 的大小、地址、格式、输出扫描时序以及过扫描的配置等信息。

第 2 页

2.2​

kernel 驱动​

2.2.1​

驱动目录​

drivers/gpu/drm/rockchip/ drivers/gpu/drm/bridge/analogix/ drivers/gpu/drm/bridge/synopsys/

2.2.2​

drivers/phy/rockchip/

驱动文件​

DriverFileDoc
Corerockchip drm drv.c _ _ rockchip drm fb.c _ _ rockchip drm fbdev.c _ _rockchip-drm.txt
VOProckchip drm vop.c _ _ rockchip vop reg.c _ _rockchip-vop.txt
LVDSrockchip lvds.c _ phy-rockchip-inno-video-phy.crockchip-lvds.txt
MIPI-DSIdw-mipi-dsi.c phy-rockchip-inno-video-phy.cdw mipi dsi rockchip.txt _ _ _ phy-rockchip-inno-video-combo-phy .txt
eDPanalogix dp-rockchip.c _ analogix dp core.c _ _ analogix dp reg.c _ _ phy-rockchip-dp.canalogix dp-rockchip.txt _ analogix dp.txt _ rockchip-dp-phy.txt
HDMIinno hdmi.c _ dw-hdmi.c dw hdmi-rockchip.c _ dw-hdmi-hdcp.c dw-hdmi-cec.c dw-hdmi-i2s-audio.c phy-rockchip-inno-hdmi-phy.cinno hdmi-rockchip.txt _ dw hdmi-rockchip.txt _ phy-rockchip-inno-hdmi-phy.txt
TVE/CVBSrockchip drm tve.c _ _rockchip drm tve.txt _ _
Panelpanel-simple.csimple-panel.txt

第 3 页

2.2.3​

内核驱动加载流程​

第 4 页

Display feature​

3.1​

各平台支持的显示接口及属性​

3.2​

最大输出分辨率和协议标准​

3.2.1​

RK3036 平台​

显示接口最大输出协议标准
HDMI1920x1080@60hz支持HDMI 1.4a 协议标准
CVBS720x480i@60hz/720x576@50hz支持NTSC/PAL 标准输出

3.2.2​

RK312X/PX3SE 平台​

显示接口最大输出协议标准
RGB1280x800@60hz支持RGB666/sRGB888
LVDS1280x800@60hz支持VESA 和JEIDA LVDS 数据格式
MIPI1280x800@60hz支持DSI v1.0,DCS v1.0,DPHY v1.0 协议标准
HDMI1920x1080@60hz支持HDMI 1.4a 协议标准

3.2.3​

RK322X/RK312XH 平台​

显示接口最大输出协议标准
HDMI4096x2160@60hz支持HDMI 1.4a 和2.0 协议标准
CVBS720x480i@60hz/720x576@50hz支持NTSC/PAL 标准输出

3.2.4​

RK3288X 平台​

显示接口最大输出协议标准
RGB1920X1080@60hz支持RGB888/RGB666/sRGB888
LVDS单通道:1280x800@60hz 双通道:1920x1080@60hz支持VESA 和JEIDA LVDS 数据格式
eDP2560x1600@60hz支持DP1.2a 和eDP1.3 协议标准
MIPI单通道:1920x1080@60hz 双通道:2560x1600@60hz支持DSI v1.1,DCS v1.1,DPHY v1.1 协议标准

第 5 页HDMI VOP BIG::3840x2160@60hz支持HDMI 1.4a 和2.0 协议标准

3.2.5​

RK3308 平台​

VOP LIT: 1920x1080@60hz

显示接口最大输出协议标准
RGB1280x800@60hz支持RGB888/RGB666/sRGB888/MCU

3.2.6​

RK322XH/RK332X 平台​

显示接口最大输出协议标准
HDMI4096x2160@60hz支持HDMI 1.4a 和2.0 协议标准
CVBS720x480i@60hz/720x576@50hz支持NTSC/PAL 标准输出

3.2.7​

RK3326/px30 平台​

显示接口最大输出协议标准
RGB1280x800@60hz支持RGB888/RGB666/sRGB888/MCU
LVDS1280x800@60hz支持VESA 和JEIDA LVDS 数据格式
MIPI1920x1080@60hz支持DSI v1.0,DCS v1.0,DPHY v1.0 协议标准

3.2.8​

RK3368/PX5 平台​

显示接口最大输出协议标准
RGB1920X1080@60hz支持RGB888/RGB666/sRGB888
LVDS1280x800@60hz支持VESA 和JEIDA LVDS 数据格式
eDP2560x1600@60hz支持DP1.2a 和eDP1.3 协议标准
MIPI1920x1080@60hz支持DSI v1.0,DCS v1.0, DPHY v1.0 协议标准
HDMIVOP BIG::4096X2160@60hz支持HDMI 1.4a 和2.0 协议标准

3.2.9​

RK3399 平台​

显示接口最大输出协议标准
eDPVOP BIG: 3840x2160@60hz VOP LITE: 2560x1600@60hz支持DP1.2a 和eDP1.3 协议标准
MIPI单通道:1920x1080@60hz 双通道:2560x1600@60hz支持DSI v1.1,DCS v1.1,DPHY v1.1 协议标准准
HDMIVOP BIG::4096X2160@60hz VOP LITE: 2560x1600@60hz支持HDMI 1.4a 和2.0a 协议标准
DPVOP BIG::4096X2160@60hz VOP LITE: 2560x1600@60hz支持DP 1.2 协议标准

硬件相关​

4.1​

RGB 输出/TTL 模式硬件连接​

4.1.1​

RGB888 24BIT 屏​

硬件可以参考下面表格 screen_face 为 OUT_P888 的连接,软件在 RGB 节点配置:bus-format = <MEDIA_BUS_FMT_RGB888_1X24>;

第 6 页传输时序:

4.1.2​

RGB666 18 bit 屏​

硬件有两种连接方式: (1). 硬件按下面表格 screen_face 为 OUT_D888_P666 的方式连接,软件在 RGB 节点配置:

bus-format = <MEDIA_BUS_FMT_RGB666_1X24_CPADHI>;

(2). 硬件按下面表格 screen_face 为 OUT_P666 的方式连接,软件在 RGB 节点配置:bus-format = <MEDIA_BUS_FMT_RGB666_1X18>;传输时序:

第 7 页

4.1.3​

RGB565 16 bit 屏​

按下面表格 screen_face 为 OUT_D888_P565 的方式连接,软件在 RGB 节点配置:bus-format = <MEDIA_BUS_FMT_RGB565_1X16>;传输时序:

4.1.4​

MCU 屏​

硬件连接可以参考上面(1),(2),(3)的连接方式,MCU 比较特殊的是 RGB 模式下的DCLK/VSYNC/HSYNC/DEN 在 MCU 模式下对应 RS/CS/WEN/REN 引脚;

第 8 页

Display modeRGB RGB RGB RGB RGB ITU656 ITU656 ITU656 MCU mode Paralle Parallel Parallel Parallel Parallel Mode0 Mode1 Mode2 l 24-bit 18-bit 18-bit 16-bit 16-bit
Screen _ faceOUT P OUT D88 OUT P66 OUT D88 OUT P56 OUT S8 OUT S88 OUT S888 OUT P888 _ _ _ _ _ _ _ _ _ 888 8 P666 6 8 P565 5 88/OUT 8/OUT S8 /OUT S88 _ _ _ _ S888D 88DUMY 8DUMY _ UMY
DCLK VSYNC HSYNC DENDCLK DCLK DCLK DCLK DCLK DCLK DCLK DCLK RS VSYNC VSYNC VSYNC VSYNC VSYNC CS HSYNC HSYNC HSYNC HSYNC HSYNC WEN DEN DEN DEN DEN DEN REN
DATADATA[2 DATA[23:1 DATA[17:0 DATA[23:1 DATA[15:0 DATA[7:0 DATA[15:8 DATA[14:7] 3:0] 8] ] 9] ] ] ] DATA[15:1 DATA[15:1 0] 0] DATA[7:2] DATA[7: 3]
D23R7 R5 - R4 - - - - D23
D22R6 R4 - R3 - - - - D22
D21R5 R3 - R2 - - - - D21
D20R4 R2 - R1 - - - - D20
D19R3 R1 - R0 - - - - D19
D18R2 R0 - - - - - - D18
D17R1 - R5 - - - - - D17
D16R0 - R4 - - - - - D16
D15G7 G5 R3 G5 R4 - D7 - D15
D14G6 G4 R2 G4 R3 - D6 D7 D14
D13G5 G3 R1 G3 R2 - D5 D6 D13
D12G4 G2 R0 G2 R1 - D4 D5 D12
D11G3 G1 G5 G1 R0 - D3 D4 D11
D10G2 G0 G4 G0 G5 - D2 D3 D10
D9G1 - G3 - G4 - D1 D2 D9
D8G0 - G2 - G3 - D0 D1 D8
D7B7 B5 G1 B4 G2 D7 - D0 D7
D6B6 B4 G0 B3 G1 D6 - - D6
D5B5 B3 B5 B2 G0 D5 - - D5
D4B4 B2 B4 B1 B4 D4 - - D4
D3B3 B1 B3 B0 B3 D3 - - D3
D2B2 B0 B2 - B2 D2 - - D2
D1B1 - B1 - B1 D1 - - D1
D0B0 - B0 - B0 D0 - - D0

第 9 页

4.2​

LVDS Data Mapping​

可以通过dts 文件LVDS 节点下的rockchip,data-mapping 属性和rockchip,data-width 属性来配置

4.2.1​

6 bit output mode​

哪种模式输出。

采用 4+1 的传输模式,即 4 组数据信号加一组时钟信号,最后一组数据信号传输无效数据。JEIDA_6BIT:

bus-format = <MEDIA_BUS_FMT_RGB666_1X7X3_SPWG>;

4.2.2​

8 bit output mode​

采用 4+1 的传输模式,即 4 组数据信号加一组时钟信号。VESA_8BIT:

bus-format = <MEDIA_BUS_FMT_RGB888_1X7X4_SPWG>;

JEIDA_8BIT:

bus-format = <MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA>;

第 10 页

4.2.3​

10 bit output mode​

采用 5+1 的传输模式,即 5 组数据信号加一组时钟信号。目前 DRM 驱动尚未加入该支持。

第 11 页第 12 页

扫描时序说明​

5.1​

常见的扫描时序图​

第 13 页

5.2​

DRM 对扫描时序的定义​

5.3​

软件配置的对应关系​

常用的 debug 手段​

6.1​

dump 当前的显示状态​

6.1.1​

使用命令​

cat /sys/kernel/debug/dri/0/summary

第 14 页

6.1.2​

参数说明​

(1) 两个红色方框表示两个显示设备使用的 vop 分别是 ff900000.vop 和 ff8f0000.vop;(2) 绿色部分表示 connector 信息,两个显示设备分别为 eDP 屏和 MIPI 屏;(3) 粉色部分为显示模式,可以知道具体的时序、DCLK 以及帧率,上图中两个设备分别为分辨率为1536x2048p60 的 eDP 屏和分辨率 1280x720p29 的 MIPI 屏;(4) 蓝色部分是 VOP 图层信息,第一个显示设备打开 win0 图层,大小为 1536x2048 格式为 XRGB第二个显示设备打开 win0 图层,大小 1280x720 格式为 XRGB, src 和 dst 表示源数据和显示的大小和位置,如下图所示:

第 15 页(5) 橙色部分为 VOP HDR、CSC 的一些状态信息;

6.2​

调整drm log 等级抓 log​

debug:Enable debug output, where each bit enables a debug category. Bit 0 (0x01) will enable CORE messages (drm core code) Bit 1 (0x02) will enable DRIVER messages (drm controller code) Bit 2 (0x04) will enable KMS messages (modesetting code) Bit 3 (0x08) will enable PRIME messages (prime code) Bit 4 (0x10) will enable ATOMIC messages (atomic code) Bit 5 (0x20) will enable VBL messages (vblank code) (int)示例: echo 0x0c > /sys/module/drm/parameters/debug 打开了 KMS, PRIME 这些的打印, kernel驱动中使用 DRM_DEBUG_KMS 和 DRM_DEBUG_PRIME 打印的信息都可以打印出来。

6.3​

查看当前的显示时钟​

有时候需要知道 VOP dclk 和 aclk 的值,以及 pll 源,可以通过下面的命令获取:

cat /sys/kernel/debug/clk/clk_summary

如果只要关注 vop 的时钟,可以使用:

cat /sys/kernel/debug/clk/clk_summary | grep vop

6.4​

强行开关显示设备​

以 LVDS 为例:关 LVDS: echo off > /sys/class/drm/card0-LVDS-1/status开 LVDS: echo on > /sys/class/drm/card0-LVDS-1/status第 16 页

6.5​

查看drm buffer 使用情况​

cat /sys/kernel/debug/dri/0/mm_dump,可以知道当前 drm 这边 buffer 的使用情况。

6.6​

查看gpio 的状态​

cat /sys/kernel/debug/gpio,通过这个命令可以知道当前一些 GPIO 的状态,确认和屏相关的 GPIO是否有被正常设置。

6.7​

modetest 使用​

6.8​

界面暂停、启动​

暂停进程(只能短暂暂停,一段时间后会自动恢复) kill -STOP `pgrep surfaceflinger`恢复进程kill -CONT `pgrep surfaceflinger`

第 17 页

6.9​

查看EDID 信息​

以 HDMI 为例:cat /sys/class/drm/card0-HDMI-A-1/edid > /data/edid.bin

6.10​

查看HDMI 的状态信息​

cat /sys/kernel/debug/dw-hdmi/status

6.11​

Dump 当前显示的buffer​

6.11.1​

使用说明​

6.11.2​

例子​

(1) dump 一帧当前显示的 buffer:

echo dump > /sys/kernel/debug/dri/0/ff900000.vop/vop_dump/dump

(2) 连续 dump n 帧显示的 buffer

FAQ​

echo dumpn > /sys/kernel/debug/dri/0/ff900000.vop/vop_dump/dump

(3) dump 出来的文件保存在/data/vop_buf/,可以使用 7yuv 软件查看。

7.1​

uboot logo 切换到内核 logo 出现闪屏/无法显示问题​

7.1.1​

DDR 变频导致​

DDR 变频导致,可以做如下修改尝试:(1) 关闭 dts 文件中 ddr 变频节点,保证内核阶段不做 DDR 变频,修改方法如下:

&dmc {

status = “disabled”;}; (2) 关闭 DDR 变频时对 DCLK 的调整,修改方法如下:

&dmc {
vop-dclk-mode = <1>;

7.1.2​

clk tree 变化导致​

};

部分平台 uboot 中的 clk tree 配置和内核的 clk tree 配置是独立的,如果两个驱动的 clk 策略不一致,第 18 页就会出现在 clk 重新初始化的时候出现闪屏问题,以 RK3399 为例,可以按如下方法确认:(1) 在 rk3399_clk_init()@kernel/drivers/clk/rockchip/clk-rk3399.c 函数入口处加上 while(1);确认是否会有闪屏问题;(2) 在 rk3399_clk_init()@kernel/drivers/clk/rockchip/clk-rk3399.c 函数结束处加上 while(1),确认是否会有闪屏问题;(3) 如果步骤 a 中无闪屏现象步骤 b 中有闪屏现象,那基本可以确认是 clk tree 变化导致闪屏问题,可

7.1.3​

以直接找对应平台 cru 负责人或者提交 remdine 并说明转给 pll 相关负责人。

时钟被关闭导致​

有一些流程上的问题或者软件上的 bug 可能存在一些必要的时钟在驱动注册的时候没有被使能,导致这些时钟在内核跑完后被框架自动关闭从而导致显示异常,可以尝试按下面的修改默认不关闭时钟做测试:在 dts 文件中,找到 chosen 节点,在 bootargs 末尾加上 clk_ignore_unused:如 bootargs = "xxxx clk_ignore_unused”;

7.1.4​

uboot logo 图片和kernel logo 图片大小不一致​

rockchip 平台有要求 uboot logo 和 kernel logo 的图片分辨率大小一样,如果出现 uboot logo 显示正常,到内核阶段显示异常,可以确认下 kernel 目录下 logo.bmp 和 logo_kernel.bmp 分辨率是否一致;

7.1.5​

内核初始化过程一些电源/GPIO 被重新初始化​

该问题涉及的可能性很多,总之在新项目 porting 过程中要及时确认显示相关的 GPIO 电源是否和其他模块有冲突;如果 dts 确认无误,可以在内核代码搜索串口中的关键字,通过二分法在各个模块加载的位置 while 住,

7.1.6​

VOP 优先级配置问题​

逐步确认导致闪屏问题;

如果 VOP 优先级没有被配置最高,有可能在内核加载阶段被其他 IP 抢占总线导致闪屏问题,该问题一

7.1.7​

般会在 SDK 发布前 Fix。

测试相关电源和信号​

如果以上还未找到闪屏问题,请使用示波器抓取 clk、data 和电源等相关信号从 uboot 到内核阶段的波形图并提交 redmine。

7.2​

如何开关uboot logo 显示​

以 eDP 为例,可以在 dts 文件里找到 route_edp 节点,配置 status 状态:

第 19 页如果 uboot logo 关闭,需要等到安卓起来后屏才会正常显示;

7.3​

VOP POST_BUF_EMPTY​

7.3.1​

带宽不够​

如果系统带宽不够会导致 VOP 不能及时取到数据,从而报 post empty,可以做如下尝试:(1) 尝试将 ddr 固定最高频率;

7.3.2​

iommu 出错​

(2) 将屏的消隐期加长,提高一行的取数时间;

确认是否如下图所示的 iommu pagefault 错误,如果有,请先尝试更新到最新代码测试,如果最新代码还存在该问题,请提交 remine 系统,并附上相关 log;

7.3.3​

logic 电压太低​

7.3.4​

AFBDC/IFBDC 对齐要求​

logic 电压太低会导致 VOP 异常,可以尝试提高 100mv 测试;

对于 px30/rk3326、rk3368、rk3399 平台如果屏的分辨率非 16pixel 对齐可以尝试关闭 afbdc/ifbdc功能,修改方法参考文档《FAQ-DRM-HWC》 1.3.1 章节。

7.4​

drm 驱动 bind​

如果看到下面 log 红色部分说明 drm 驱动已经正常加载成功:

第 20 页在驱动加载过程中,可能会出现一些显示设备加载失败,那可能是因为显示驱动依赖的一些资源没准备好导致,如果最后能看到上面的 log 我们就认为 drm 驱动已经正常加载。如果一直出现 drm 驱动加载失败 log,产品上比较可能出现的是 GPIO 口被其他设备先注册或者 panel的 compatible 未正确配置导致 panel 注册失败。

7.5​

uboot logo 要求​

(1) uboot logo 和内核 logo 的大小一直;(2) 支持 8bit rle8 压缩的 bmp 图片(生成方式:convert -compress rle -colors 256 logo_old.bmp logo_new.bmp)和 24bit 非压缩的 bmp 图片;

7.6​

部分机器开机动画显示异常,桌面显示正常​

(1) 异常 logo verified-boot 对固件校验时发现校验失败才会重新调用屏端的接口,对应的 log 为:init: Starting service 'exec 1 (/sbin/slideshow)'. (2) 原因system 校验失败,可能是 system 分区太小导致结尾校验 hash 信息丢失或者烧写工具,会导致如下调用关系:draw()@system/extras/slideshow/slideshow.cpp ->drm_flip()bootable/recovery/minui/graphics_drm.cpp ->drmModePageFlip()导致在一些屏上显示黑屏(3) 处理方法可以通过关闭这个加密临时处理,真正解决需要确认烧写工具的版本,具体关闭方法如下:a/fstab.rk30board.bootmode.forceencrypt.emmc b/fstab.rk30board.bootmode.forceencrypt.emmc -/dev/block/platform/fe330000.sdhci/by-name/system /system ext4 ro,noatime,nodiratime,noauto_da_alloc wait,resize,verify=/dev/block/platform/fe330000.sdhci/by-name/verity_mode

+/dev/block/platform/fe330000.sdhci/by-name/system /system ext4 ro,noatime,nodiratime,noauto_da_alloc wait,resize # use this line below instead to enable verity

第 21 页

7.7​

显示效果调节​

RK 平台支持亮度,对比度,饱和度的调节,从 linux 4.4 开始我们默认使用 BCSH 模块来调节效果,可以使用下面命令调节,默认值为 50:

setproppersist.sys.brightness.main50;setproppersist.sys.contrast.main50;setprop
persist.sys.hue.main50;setproppersist.sys.saturation.main50;
setpropsys.display.timelineN-->N的值每次调节加1

7.8​

屏无法点亮/休眠唤醒显示异常/不显示问题​

按以下几个方面做进一步确认:(1) 确认是否有背光;(2) 确认屏的相关电源及复位控制是否正常;(3) 确认上下电时序是否满足屏的 spec 要求;

7.9​

rk3308 显示特殊性​

7.9.1​

uboot 显示​

RK3308 默认关闭 uboot 显示,如果要打开 uboot 显示需要参考如下配置 uboot 中的 defconfig

7.9.2​

CMA_SIZE 的修改​

RK3308 VOP 不支持IOMMU,所以分配内存需要从预留的cma buffer 分配,默认CMA_SIZE 为16M,如果出现分配内存失败,可以参考如下方法修改 CMA_SIZE:第 22 页

7.10​

OLED 屏余晖确认​

传统的 LCD 屏是 16ms 全余晖,而 OLED 一大优势就是低余晖,这可以给 VR 产品带来更舒适的体验。一般 OLED 屏可以调整余晖值,在没有高速 DV 的情况下可以使用 iphone 手机的慢动作模式拍摄屏幕,根据亮度区间和全屏幕的比例关系初步估算出余晖时间,如下面这张图,如果屏按 60fps 扫描,刷一帧需要的时间是 16.6ms,这个时候亮部区域差不多占全屏区域一半,这样可以估算余晖时间大概为 8ms 左右。

7.11​

各种接口屏配置​

8 参考文档​

请参考文档《Rockchip_DRM_Panel_Porting_Guide》。

(1) Rockchip_drm_integration_helper-zh.pdf (2) Rockchip_DRM_Panel_Porting_Guide.pdf (3) Rockchip rk fb development guide.pdf (4) https://en.wikipedia.org/wiki/Direct_Rendering_Manager (5) https://01.org/linuxgraphics/gfx-docs/drm/gpu/index.html (6) https://kernel.readthedocs.io/en/latest/gpu/drm-kms.html#mode-setting (7) https://events.static.linuxfound.org/sites/events/files/slides/brezillon-drm-kms.pdf

第 23 页