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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/21958.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT_UI设计

mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE //命名空间 namespace Ui { class MainWindow; } //ui_MainWindow文件里定义的类&#xff0c;外部声明 QT_END_NAMESPACEclass MainWindow : public QMainWindow {Q_O…

AccessibilityEvent的生成和处理

在 Android 框架层&#xff0c;AccessibilityEvent 的生成和处理是通过系统的 UI 框架和辅助功能服务框架密切协作来实现的。这个机制涉及几个关键的部分&#xff1a;UI 组件、辅助功能服务、事件监听和事件分发。以下是对这些部分和它们如何协同工作的详细解释&#xff1a; 1…

httprunner接口自动化测试框架使用说明【保姆级教程】

背景介绍&#xff1a; httprunner是国内开源的一个接口自动化框架&#xff0c;已经有部分公司开始使用这种框架来完成自己公司的接口自动化编写&#xff0c;本文主要是从简单的流程上去讲解咋使用的&#xff08;PS&#xff1a;开发者本尊的官网教程写的是真的烂。。。&#xf…

JVM调优实战

如果老年代能回收掉大部分&#xff0c;说明年轻代太小了&#xff0c;放不下 OOM 1数据量一次性申请的内存过多&#xff0c;比如数据库查询返回值大多&#xff0c;所以做个分页 2.并发过高的情况下&#xff0c;一些连接未释放 3.堆内存不够

DP-Kmaens密度峰值聚类算法

我有个问题 关于 [密度值>密度阈值] 的判定这里&#xff0c;新进来的新数据怎么确定他的密度值&#xff1f;密度阈值又是怎样确定的呢&#xff1f;

正则表达式 0.1v

正则表达式 扩展 --> :% s/\///g //文件里面所有的 / 去掉 * 通配符 \ //转义&#xff0c;让字符变成原本的意思 ^ //行首 $ //行尾 [0-9] //数字 [a-z] //小写字母 [A-Z] //大写字母 把文件的小写字母替换为大写字母&#xff1f; 固定写法 :% s/[a-…

Vscode git 插件

超好用的git记录 软件 安装之后&#xff0c;鼠标在哪一行就可以看最新一次是谁提交的&#xff0c;真的超好用&#xff01;&#xff01;&#xff01;

43页 | 2024年企业级BI平台白皮书(免费下载)

【1】关注本公众号&#xff0c;转发当前文章到微信朋友圈 【2】私信发送 2024年企业级BI平台白皮书 【3】获取本方案PDF下载链接&#xff0c;直接下载即可。 诚挚邀请您微信扫码加入以下方案驿站知识星球&#xff0c;获取上万份PPT/WORD解决方案&#xff01;&#xff01;&…

【NOI】C++程序结构入门之循环结构二-for循环

文章目录 前言一、for循环1.导入2.语法3.使用场景4.条件控制5.小结 二、例题讲解问题&#xff1a;1264 - 4位反序数问题&#xff1a;1085 - 寻找雷劈数问题&#xff1a;1057 - 能被5整除且至少有一位数字是5的所有整数的个数问题&#xff1a;1392 - 回文偶数&#xff1f;问题&a…

Linux命令 netstat -anp | grep 的用法

文章目录 1、第一种解释2、第二种解释3、第三种解释4、第四种解释5、第五种解释6、netstat --help 在Windows中&#xff0c;杀死端口占用的博客链接 1、第一种解释 在Unix和Linux系统中&#xff0c;netstat -anp 命令用于显示所有的网络连接&#xff08; -a 表示所有&#xff…

文件md5加密

使用场景&#xff1a;为了避免上传资源空间的浪费&#xff0c;通过对文件进行md5摘要加密获取唯一的值&#xff0c;从数据库中查询是否已有该md5码存在&#xff0c;不存在的就上传&#xff0c;存在的话使用之前已存储的文件信息。 如何加密 下载插件browser-md5-file 【之前有…

maridb10.4.30数据库数据迁移

1.新建数据存储文件夹&#xff0c;例如E:\maridb_data 2.修改原数据所在目录的my.ini文件&#xff0c;例如D:\Program Files\MariaDB 10.4\data\my.ini 3.剪切除my.ini文件外的其他所有文件到迁移目的地文件(E:\maridb_data) 结果如下&#xff1a; 原数据文件目录&#xff1a…

聊聊限流的一些事儿

一、背景 最近几年&#xff0c;随着微服务的流行&#xff0c;服务与服务之间依赖越来越强&#xff0c;调用也越来越复杂&#xff0c;服务间的稳定性变突显出来。特别是在遇到突发请求时&#xff0c;常常需要通过缓存、限流、熔断降级、负载均衡等多种方式保证服务的稳定性。其…

C++命名空间(详解)

C基础语法 C基于C语言的改进&#xff1a;c在C语言的基础上引入并扩充了面向对象的概念 C基础概念&#xff1a;C是基于C语言而产生的,它即可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计 在1998年 出现C98…

爱普生差分晶振在光模块中的重要角色

光模块是现代通信设备中的重要组成部分&#xff0c;主要用于实现光电转换和信号传输&#xff0c;它是一种将光信号转换为电信号&#xff0c;或者将电信号转换为光信号的设备。在光纤通信中&#xff0c;光模块扮演着至关重要的角色。 光模块的主要组成部分包括光源、光接收器、…

OSPF学习笔记(状态机)

1、邻居关系 OSPF设备启动后&#xff0c;会通过OSPF接口向外发送Hello报文&#xff0c;收到Hello报文的OSPF设备会检查报文中所定义的参数&#xff0c;如果双方一致就会形成邻居关系&#xff0c;两端设备互为邻居 2、邻接关系 形成邻居关系后&#xff0c;如果两端设备成功交…

【代码随想录】【算法训练营】【第27天】 [39]组合总和 [40] 组合总和II [131]分割回文串

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day26&#xff0c; 休息的周末~ day 27&#xff0c;周一&#xff0c;库存没了&#xff0c;哭死~ 题目详情 [39] 组合总和 题目描述 39 组合总和 解题思路 前提&#xff1a;组合的子集问题&…

C# :IQueryable IEnumerable

文章目录 1. IEnumerable2. IQueryable3. LINQ to SQL4. IEnumerable & IQueryable4.1 Expression4.2 Provider 1. IEnumerable namespace System.Collections: public interface IEnumerable {public IEnumerator GetEnumerator (); }public interface IEnumerator {pubi…

气泡式水位计施工技术要求

1、气泡式水位计压力气管出气口应安装并固定在最低水位处&#xff0c;其压力气管也应固定&#xff0c;有条件的可用金属管或塑料管保护。气泡式水位计安装示意图见附图。 2、安装要求 1&#xff09;检查气泡式水位计气管外观有无破损及变形&#xff1b; 2&#xff09;旋开带有…

面试数据库八股文十问十答第十期

面试数据库八股文十问十答第十期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01;关注专栏后就能收到持续更新&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1&#xff09;为什么不推荐多表Join&…