1.接口介绍
先来看看瑞芯微RK3588支持哪些接口
HDMI/eDP TX interface
◼ Support two HDMI/eDP TX combo interface, but HDMI and eDP can not work at the RK3588 Datasheet Rev 1.5 Copyright 2022 ©Rockchip Electronics Co., Ltd. 12 same time for each interface ◼ Support x1, x2 and x4 configuration for each interface ◼ Support all the data rates for HDMI FRL: 3, 6, 8, 10 and 12Gbps ◼ Support 1.62Gbps, 2.7Gbps and 5.4Gbps for eDP ◼ Support up to 7680x4320@60Hz for HDMI TX, and 4K@60Hz for eDP ◼ Support RGB/YUV(up to 10bit) format for HDMI TX ◼ Support RGB, YCbCr 4:4:4, YCbCr 4:2:2 and 8/10 bit per component video format for eDP ◼ Support DSC 1.2a for HDMI TX ◼ Support HDCP2.3 for HDMI TX, and HDCP1.3 for eDP ⚫ DP TX interface ◼ Support 2 DP TX 1.4a interface which combo with USB3.1 Gen1 ◼ Support 1/2/4lanes for each interface ◼ Support 1.62Gbps, 2.7Gbps, 5.4Gbps and 8.1Gbps Serializer ◼ Support up to 7680x4320@30Hz ◼ Support RGB/YUV(up to 10bit) format ◼ Support Single Stream Transport(SST) ◼ Support DP Alt mode on USB Type-C ◼ Support HDCP2.3, HDCP 1.3 ⚫ MIPI DSI interface ◼ Support 2 MIPI DPHY 2.0 or CPHY 1.1 interface ◼ Support 4 data lanes and 4.5Gbps maximum data rate per lane for DPHY ◼ Support 3 data trios and 2.0Gsps maximum data rate per trio for CPHY ◼ Support max resolution 4K@60Hz ◼ Support dual MIPI display: left-right mode ◼ Support RGB(up to 10bit) format ◼ Support DSC 1.1/1.2a ⚫ BT.1120 video output interface ◼ Support up to 1920x1080@60Hz ◼ Support RGB(up to 8bit) format◼ Up to 150MHz data rate
支持两个 HDMI/eDP TX Combo PHY
支持两个 MIPI D-PHY/C-PHY Combo PHY TX
支持两个 DP1.4 TX PHY(和 USB3.0 Combo)
支持一个 16bit BT1120 输出接口
以上这就是具体的硬件输出接口。
在送到输出接口,有个视频输出处理,即VOP(Video Output Processor)。
框架如下
2.DRM
RK3588使用 DRM 显⽰框架。
DRM 全称是 Direct Rendering Manager,进⾏显⽰输出管理、buffer 分配、帧缓冲。对应的 userspace 库为 libdrm,libdrm 库提供了⼀系列友好的控制封装,使⽤⼾可以⽅便的进⾏显⽰的控制和 buffer 申请。DRM 的设备节点为 "/dev/dri/cardX", X 为 0-15 的数值,默认使⽤的是 /dev/dri/card0。
DRM 概念:
显示通路
DRM 驱动和 libdrm 的交互过程
3.显示驱动
3.1 uboot驱动
显⽰驱动在 U-Boot 中主要提供开机 logo 显⽰和充电界⾯显⽰这两个功能。
在 Rockchip 平台上,开机 logo ⼀般分为两个阶段:显⽰ U-Boot logo 和 显⽰ Kernel logo。
这两个 LOGO 图⽚默认放在 Linux kernel 根⽬录下(logo.bmp 和 logo_kernel.bmp),Linux Kernel 在编译的时候会把他们打包到resource.img 中,再打包进⼊ Boot.img。
U-Boot 启动的时候会把这两个⽂件加载到内存中,U-Boot LOGO 在 U-Boot 阶段就开始显⽰,Kernel LOGO 在内存中的地址会被 U-Boot传递给 Linux kernel,在 Linux Kernel 的 drm 驱动初始化阶段显⽰。
驱动⽬录:drivers/video/drm/
驱动⽂件
Driver | File |
Core | rockchip_display.c rockchip_crtc.c rockchip_connector.c rockchip_phy.c rockchip_panel.c rockchip_bridge.c |
VOP | rockchip_vop.c rockchip_vop_reg.c rockchip_vop2.c rockchip_vop2_reg.c |
RGB | rockchip_rgb.c inno_video_combo_phy.c |
LVDS | rockchip_lvds.c inno_video_combo_phy.c |
MIPI-DSI | drm_mipi_dsi.c dw_mipi_dsi2.c inno_mipi_phy.c inno_video_combo_phy.c samsung_mipi_dcphy.c |
eDP | rockchip_analogix_dp.c rockchip_analogix_dp_reg.c |
HDMI | dw_hdmi.c rockchip_dw_hdmi.c rockchip-inno-hdmi-phy.c inno_hdmi.c dw_hdmi_qp.c rockchip_dw_hdmi_qp.cphy-rockchip-samsung-hdptx-hdmi.c |
TVE /CVBS | rockchip_drm_tve.c |
DP | dw-dp.c drm_dp_helper.c phy-rockchip-usbdp.c |
3.2 linux驱动
驱动⽂件:
drivers/gpu/drm/rockchip/ drivers/gpu/drm/bridge/analogix/ drivers/gpu/drm/bridge/synopsys/ drivers/phy/rockchip/
驱动⽬录:
Driver | File | Doc |
Core | rockchip_drm_drv.c rockchip_drm_fb.c rockchip_drm_fbdev.c rockchip_drm_gem.c rockchip_drm_logo.c rockchip_drm_direct_show.c panel-simple.c | rockchip-drm.txt or rockchip-drm.yaml |
VOP | rockchip_drm_vop.c rockchip_vop_reg.c rockchip_drm_vop2.c rockchip_vop2_reg.c | rockchip-vop.txt or rockchip-vop.yaml |
RGB | rocckhip_rgb.cphy-rockchip-inno-video-combo-phy.c | rockchip-rgb.txt |
LVDS | rockchip_lvds.cphy-rockchip-inno-video-combo-phy.c | rockchip-lvds.txt |
MIPI-DSI | dw-mipi-dsi.cphy-rockchip-inno-dsidphy.cphy-rockchip-inno-video-combo-phy.c dw-mipi-dsi2-rockchip.cphy-rockchip-samsung-dcphy.c | dw_mipi_dsi_rockchip.txt phy-rockchip-inno-mipi-dphy.txt |
eDP | analogix_dp_core.c analogix_dp-rockchip.c analogix_dp_reg.c phy-rockchip-dp.c | analogix_dp-rockchip.txt analogix_dp.txt rockchip-dp-phy.txt |
DP | cdn-dp-core.c cdn-dp-reg.c dw-dp.cphy-rockchip-usbdp.cphy-rockchip-samsung-hdptx-hdmi.c | cdn-dp-rockchip.txt |
HDMI | inno_hdmi.cdw-hdmi.cdw_hdmi-rockchip.cphy-rockchip-inno-hdmi-phy.cdw-hdmi-qp.cphy-rockchip-samsung-hdptx-hdmi.c | inno_hdmi-rockchip.txt dw_hdmi-rockchip.txtphy-rockchip-inno-hdmi-phy.txt |
TVE/CVBS | rockchip_drm_tve.c | rockchip_drm_tve.txt |
需要注意的是,DRM 驱动是⼀系列显⽰相关模块的驱动的结合,他包含了 backlight、panel、rgb、lvds、dsi、edp、lvds、hdmi、vop 等等显⽰通路上的依赖模块。只有这些相互依赖的模块都加载起来,整个 drm 系统才能启动成功。
因为这些复杂的依赖关系,在 drm 系统初始化的过程中,可能会出现某个资源暂时未就绪,而导致某个模块暂时⽆法顺利加载的情况,为了解决这种问题,drm 驱动利⽤了 Linux 驱动 中的 deferred probe 机制,当发现某个依赖的资源未就绪的时候,驱动返回 - EPROBE_DEFER(-517) , 然后退出。Linux kernel 会在稍后再次尝试加载这个驱动,直到依赖的资源就绪,驱动顺利加载为⽌。