RK3588 VOP图层分配介绍

2024-06-03 21:36
文章标签 介绍 分配 图层 rk3588 vop

本文主要是介绍RK3588 VOP图层分配介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

RK3588 VOP图层分配介绍

RK3588图层介绍

RK3588有8个图层,分别是Custer 0/1/2/3 和Esmart 0/1/2/3,两种图层的能力不一样,具体如下:

  • Custer
  1. 分辨率:最大分辨率包括两种合并集群和单集群,分别为7680x4320和4096x4320。
  2. 数据格式:支持多种数据格式,包括RGBA8888/RGB888/RGB565/RGBA1010102/YUV420(8,10bit)/YUV422(8,10bit)。
  3. 图像支持:支持虚拟宽度、活动偏移、显示偏移、Y镜像、X镜像、旋转90度/270度等。
  4. 集群线缓冲模式:支持三种模式,包括1x4096宽度的模式、2x2048宽度的模式和1x2048宽度的AFBCD旋转层模式。
  5. 集群支持的功能包括:支持高斯滤波、缩放、色彩空间转换等。
  • Esmart
  1. 分辨率:支持分辨率分别为7680x4320和4096x4320。
  2. 数据格式:数据格式包括RGB、YUV、YUYV等,支持多种颜色深度8BPP。
  3. 图像支持: 支持虚拟宽度、活动偏移、显示偏移、Y镜像、颜色交换、YUV剪切等图像功能。
  4. 集群线缓冲模式:支持多区域显示,每个区域最大支持一个像素点,最多支持4个区域。
  5. 支持缩放功能,包括缩放率和缩放模式,支持缩小和放大,缩放率范围为1/8~1,缩放模式包括最近邻插值、双线性插值和三线性插值。
  6. 支持YUV到RGB和RGB到YUV的转换,支持多种色彩空间。

图层分配策略

VOP2 采用统一显示架构,各个独立的 Video Port 共享 VOP 内部的所有图层资源,而且这些图层需要排他性的使用,即某个图层在同一时刻只能为其中一个 Video Port 所独占。

为了充分合理的使用所有图层资源,我们会根据当前产品 dts 配置的接口类型和数量在 U-Boot 中生成了一种默认的图层分配策略,如果有些产品没有开 U-Boot logo 显示或者对图层使用有特殊的需求,可以参考下面的写法在 dts 根据需求自行指定图层分配策略:

rockchip,plane-mask:指定分配给该 VP 的图层 ID 掩码集合,图层 ID 定义在 dt-bindings/display/rockchip_vop.h 中。

rockchip,primary-plane:指定 primary 图层,当前 VP 的 primary 图层一定是 rockchip,plane-mask 中的一个,我们一般选用 Smart 或者 Esmart 图层。

图层分配的基本原则是:把所有图层(rk3568 有 6 个图层,rk3588 有 8 个图层)平均分配给各个使用的 VP,不使用的 VP 一般不分配图层。由于 VOP 内部不同类型(Cluster,Esmart,Smart)的图层,性能,限制不同,一般推荐各种类型的图层平均搭配分配。

如下是一个 RK3568 上的典型图层分配参考, RK3568 VOP 一共有 6 个图层(2 Cluster + 2 Esmart + 2 Smart),该配置支持三屏异显。一般,我们尽量给使用场景最多的屏幕(主屏) 对应的 VP 分配三个以上的图层(在该应用案例下是 VP1),其他接口尽量分配不少于两个图层。

#include <dt-bindings/display/rockchip_vop.h>        // 图层 ID 定义头文件&vp0 {rockchip,plane-mask = <(1 << ROCKCHIP_VOP2_CLUSTER1 | 1 << ROCKCHIP_VOP2_SMART1)>;rockchip,primary-plane = <ROCKCHIP_VOP2_SMART1>;
};&vp1 {rockchip,plane-mask = <(1 << ROCKCHIP_VOP2_CLUSTER0 | 1 << ROCKCHIP_VOP2_ESMART0 | 1 << ROCKCHIP_VOP2_SMART0)>;rockchip,primary-plane = <ROCKCHIP_VOP2_SMART0>;
};&vp2 {rockchip,plane-mask = <(1 << ROCKCHIP_VOP2_ESMART1)>;rockchip,primary-plane = <ROCKCHIP_VOP2_ESMART1>;
};

配置生效后,系统启动的时候可以从 U-Boot 和 Linux kernel 的启动 log 中看到对应的 plane mask 解析信息。

Rockchip UBOOT DRM driver version: v1.0.1
VOP have 3 active VP
vp0 have layer nr:2[1 5 ], primary plane: 5
vp1 have layer nr:3[0 2 4 ], primary plane: 4
vp2 have layer nr:1[3 ], primary plane: 3
Using display timing dts
dsi@fe060000:  detailed mode clock 132000 kHz, flags[8000000a]H: 1080 1095 1097 1127V: 1920 1935 1937 1952
bus_format: 100e
VOP update mode to: 1080x1920p0, type: MIPI0 for VP1
VOP VP1 enable Smart0[654x270->654x270@213x825] fmt[2] addr[0x7df04000]
final DSI-Link bandwidth: 876 Mbps x 4
disp info 0, type:11, id:0
xfer: num: 2, addr: 0x50
xfer: num: 2, addr: 0x50
[2.314574] panel-simple-dsi fe060000.dsi.0: Specify missing connector_type
[2.315764] rockchip-vop2 : [drm:vop2_bind] vp0 assign plane mask: 0x22, primary plane phy id: 5
[2.315807] rockchip-vop2 : [drm:vop2_bind] vp1 assign plane mask: 0x15, primary plane phy id: 4
[2.315828] rockchip-vop2 : [drm:vop2_bind] vp2 assign plane mask: 0x8, primary plane phy id: 3
[2.316713] rockchip-drm display-subsystem: bound fe040000.vop (ops vop2_component_ops)
[2.317966] rockchip-drm display-subsystem: bound fe0c0000.edp (ops rockchip_dp_component_ops)
[2.318378] dwhdmi-rockchip : Detected HDMI TX controller v2.11a with HDCP (DWC HDMI 2.0 TX PHY)
[2.319625] dwhdmi-rockchip : registered DesignWare HDMI I2C bus driver
[2.321857] rockchip-drm display-subsystem: bound fe0a0000.hdmi (ops dw_hdmi_rockchip_ops)
[2.322069] rockchip-drm display-subsystem: bound fe060000.dsi (ops dw_mipi_dsi_rockchip_ops)

RK3566 图层分配策略

RK3566 IC 实现上有主图层和镜像图层的区别,即镜像图层 Cluster1 只能从主图层 Cluster0 对应的地址取数,同理 Esmart1/Smart1 只能从 Esmart0/Smart0 对应的地址取数,所以我们需要保证主图层被优先使用。正常产品的 U-Boot 显示驱动中会根据显示接口的类型设置好 plane-mask 属性,如果有些产品没有开 U-Boot logo 显示,可以在 dts 中按以下规则配置:

  1. 只有一个屏显示,可以使用如下配置:
#include <dt-bindings/display/rockchip_vop.h>	//图层 ID 定义头文件&vpx {	//x 取决于使用的 vp id,如 vp0rockchip,plane-mask = <(1 << ROCKCHIP_VOP2_CLUSTER0 | 1 << ROCKCHIP_VOP2_ESMART0 | 1 << ROCKCHIP_VOP2_SMART0 | 1 << ROCKCHIP_VOP2_CLUSTER1 | 1 << ROCKCHIP_VOP2_ESMART1 | 1 << ROCKCHIP_VOP2_SMART1)>;rockchip,primary-plane = <ROCKCHIP_VOP2_SMART0>;
};
  1. 有两个屏显示【RK3566 目前只有 android 产品支持双显,且要求两个屏刷新帧率一致】,那我们让不支持热插拔设备(即始终连接显示的通路)使用主图层,另一个通路使用镜像图层:
#include <dt-bindings/display/rockchip_vop.h>	//图层 ID 定义头文件&vpx {	//x 取决于使用的 vp id,如 vp0rockchip,plane-mask = <(1 << ROCKCHIP_VOP2_CLUSTER0 | 1 << ROCKCHIP_VOP2_ESMART0 | 1 << ROCKCHIP_VOP2_SMART0)>;rockchip,primary-plane = <ROCKCHIP_VOP2_SMART0>;
};	//单显或者双显时不支持热插拔的主显示设备使用主图层&vpx {	//x 取决于使用的 vp id,如 vp1rockchip,plane-mask = <(1 << ROCKCHIP_VOP2_CLUSTER1 | 1 << ROCKCHIP_VOP2_ESMART1 | 1 << ROCKCHIP_VOP2_SMART1)>;rockchip,primary-plane = <ROCKCHIP_VOP2_SMART1>;
};

把某个图层设置为鼠标层

应用如果使用 Atomic 显示接口,可以不区分图层的类型(primary, overlay, cursor), 只需要根据图层支持的格式,使用任意可以使用的图层做各种类型的显示。

但是在 Linux 系统(非 Android) 下,还有一些应用使用 legacy 的 API,这些 API 对图层类型比较在意,比如使用 primary 图层显示桌面背景,使用 overlay 图层播放视频,使用 cursor 图层显示鼠标。

Rockchip drm 驱动默认只注册 primary 图层和 overlay 图层,不注册 cursor 图层,如果一些特殊的 Linux 系统希望使用 cursor 图层,可以在 dts 中对应的 vp 节点下设置 cursor-win-id 属性,为该 VP 对应的 crtc 分配一个 cursor 图层。

&vp0 {cursor-win-id = <ROCKCHIP_VOP2_CLUSTER0>;
};

图层和 VP 之间的的连接关系

对于 RK356X/RK3588/RK3562 每一个图层和任意 VP 都有连接的,配置上没有特殊要求;对于 RK3528 和 RK3576 并不是每一个图层都可以连接到任意 VP 上,所以配置 VP 的 cursor 图层的时候需要选择能连接到当前 VP 的图层,以下是不同平台图层和 VP 的连接关系:

  1. RK3528
VP图层
VP0Cluster0、Esmart0、Esmart1、Esmart2
VP1Esmart2、Esmart3
  1. RK3576
VP图层
VP0Cluster0、Cluster1、Esmart0、Esmart2
VP1Cluster0、Cluster1、Esmart1、Esmart3
VP2Esmart0、Esmart1、Esmart2、Esmart3
  • 如果是 Linux 系统(buildroot,Debian 等非 Android 系统),指定 Cluster 图层为鼠标层的话,要配合 Linux SDK 提供的 libdrm-cursor 库。具体细节可参考 《Rockchip_Developer_Guide_Debian_CN.pdf》。

esmart 图层分割

RK3528 和 RK3576 几个 esmart 图层共享 linebuffer,可以根据产品形态对 linebuffer 进行分割来支持不同的图层数量和性能:

RK3528 esmart 图层分割

RK3528 平台的 esmart0/1/2/3 共享 linebuffer,默认配置为:VOP3_ESMART_4K_2K_2K_MODE,即此时除了固定的 cluster 图层,还注册 esmart0[4k],esmart2[2k],esmart3[2k],也可以根据产品需求在 dts 中做修改,如要改成 2 个支持 4k 的图层,可以按以下配置:

&vop {esmart_lb_mode = /bits/ 8 <1>;
};

配置说明:

esmart_lb_modeval图层数量和性能
VOP3_ESMART_4K_4K_MODE1注册 cluster[4k],esmart0[4k],esmart2[4k]
VOP3_ESMART_4K_2K_2K_MODE2注册 cluster[4k],esmart0[4k],esmart2[2k],esmart3[2k]
VOP3_ESMART_2K_2K_2K_2K_MODE3注册 cluster[4k],esmart0[2k],esmart1[2k],esmart2[2k],esmart3[2k]

RK3576 esmart 图层分割

RK3576 平台除了 Cluster0/1[4k] 和 esmart0/1[4k] 是固定的配置之外,esmart2[2k] 和 esmart3[2k] 也是共享 linebuffer 的设计,默认配置是 2 个 2k 的图层,如要改成 1 个支持 4k 的图层,可以按以下配置:

&vop {esmart_lb_mode = /bits/ 8 <4>;
};

配置说明:

esmart_lb_modeval图层数量和性能
VOP3_ESMART_4K_4K_4K_MODE4注册 cluster0[4k],cluster1[4k],esmart0[4k],esmart1[4k],esmart2[4k]
VOP3_ESMART_4K_4K_2K_2K_MODE5注册 cluster0[4k],cluster1[4k],esmart0[4k],esmart1[4k],esmart2[2k],esmart3[2k]

禁止图层迁移

某些 Linux 系统可能希望每个 crtc 上的图层都是唯一独占的,不在 crtc 之间做图层迁移,可以在 vop 节点下设置 disable-win-move 打开该功能。

&vop {disable-win-move;
}

这篇关于RK3588 VOP图层分配介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1028177

相关文章

四种Flutter子页面向父组件传递数据的方法介绍

《四种Flutter子页面向父组件传递数据的方法介绍》在Flutter中,如果父组件需要调用子组件的方法,可以通过常用的四种方式实现,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录方法 1:使用 GlobalKey 和 State 调用子组件方法方法 2:通过回调函数(Callb

Python进阶之Excel基本操作介绍

《Python进阶之Excel基本操作介绍》在现实中,很多工作都需要与数据打交道,Excel作为常用的数据处理工具,一直备受人们的青睐,本文主要为大家介绍了一些Python中Excel的基本操作,希望... 目录概述写入使用 xlwt使用 XlsxWriter读取修改概述在现实中,很多工作都需要与数据打交

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

Python实现NLP的完整流程介绍

《Python实现NLP的完整流程介绍》这篇文章主要为大家详细介绍了Python实现NLP的完整流程,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 编程安装和导入必要的库2. 文本数据准备3. 文本预处理3.1 小写化3.2 分词(Tokenizatio

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

C++——stack、queue的实现及deque的介绍

目录 1.stack与queue的实现 1.1stack的实现  1.2 queue的实现 2.重温vector、list、stack、queue的介绍 2.1 STL标准库中stack和queue的底层结构  3.deque的简单介绍 3.1为什么选择deque作为stack和queue的底层默认容器  3.2 STL中对stack与queue的模拟实现 ①stack模拟实现

Mysql BLOB类型介绍

BLOB类型的字段用于存储二进制数据 在MySQL中,BLOB类型,包括:TinyBlob、Blob、MediumBlob、LongBlob,这几个类型之间的唯一区别是在存储的大小不同。 TinyBlob 最大 255 Blob 最大 65K MediumBlob 最大 16M LongBlob 最大 4G