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.pswp.cn/bicheng/21958.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/21958.shtml
英文地址,請注明出處:http://en.pswp.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&…