AI交互之AXI总线架构与DRM overlay

目录

axi总线架构

DRM Overlay Plane 原理图

overlay总体框图

RK3588 VOP2

视频与UI控制融合


使用各种AI 工具学习或者工作,当时与AI聊天,明白了,然而由于AI给出的答案,不像自己一点点学习的,易忘。因而后续针对性记录搭建完整只是结构。

axi总线架构

下面这个网站链接方便编辑mermaid,导出图片。

BOM Management and PCB | Mermaid Chart

上图中有个不对的地方,但好像直接用mermaid改不了,即方向。

1) 接收写响应。应该从SLAVE 到master

2) 读数据同样的。

这个图比较直观的展示了AXI的各个信号及协议交互。

下面这章则描述了各个信号的中文名称。

BOM Management and PCB | Mermaid Chart

DRM Overlay Plane 原理图

overlay总体框图

DRM (Direct Rendering Manager) 是 Linux 内核中负责 GPU 显示管理的子系统。Overlay Plane 是 DRM 框架中一种硬件层面的独立显示图层,与 Primary Plane(主图层)和 Cursor Plane(光标图层)并列。
简单来说,Overlay 就是显示器硬件本身支持的"画中画"功能——它允许系统同时显示多个独立的图像层,由显示控制器硬件直接合成,而无需 CPU/GPU 参与逐像素混合。

  1. 独立处理:每个 Overlay Plane 可以独立进行缩放、裁剪、旋转、颜色空间转换(如 YUV→RGB)。

RK3588 VOP2

[v4] Add VOP2 support on rk3588 | Patchew

\Linux\Common\DISPLAY\Rockchip_VOP2_Plane_Assign.pdf

上面AI生成的图还是挺可靠的,下面是官方文档里面的图。

每个硬件 Window 在 DRM 子系统中注册为一个独立的 Plane

硬件 Window (8个) DRM Plane (8个) ├─ Cluster Win0 ───────→ DRM_PLANE_TYPE_OVERLAY (或 PRIMARY) ├─ Cluster Win1 ───────→ DRM_PLANE_TYPE_OVERLAY ├─ Cluster Win2 ───────→ DRM_PLANE_TYPE_OVERLAY ├─ Cluster Win3 ───────→ DRM_PLANE_TYPE_OVERLAY ├─ Esmart Win0 ───────→ DRM_PLANE_TYPE_OVERLAY (或 PRIMARY) ├─ Esmart Win1 ───────→ DRM_PLANE_TYPE_OVERLAY ├─ Esmart Win2 ───────→ DRM_PLANE_TYPE_OVERLAY └─ Esmart Win3 ───────→ DRM_PLANE_TYPE_OVERLAY
特性Cluster WindowEsmart Window
**DRM Plane 类型**`OVERLAY` / `PRIMARY``OVERLAY` / `PRIMARY`
**AFBC 压缩**✅ 支持❌ 不支持
**RGB 格式**✅ Linear RGB✅ Linear RGB
**YUV 格式**✅ 仅 AFBC YUV✅ Linear YUV (NV12/NV20/NV30)
**最大分辨率**4K\@60Hz4K\@60Hz
**典型用途**视频播放 (AFBC)、主画面UI 层、摄像头预览、普通视频

下表第二列有待验证

Video PortDRM CRTC最大输出可连接接口
VP0CRTC04096×2160HDMI0 / DP0 / MIPI-DSI
VP1CRTC14096×2160HDMI1 / DP1 / MIPI-DSI
VP2CRTC24096×2160eDP / MIPI-DSI
VP3CRTC32048×1080MIPI-DSI / RGB

视频与UI控制融合

显⽰通路

再次浏览这个图。在代码部分分配的framebuffer实际可以不止一个,存在多个,每个对应一个plane。在旧有的知识结构中,可能以为每个显示接口只能一个framebuffer,而通过上面几章的介绍,可以明确了解plane的在这方面的应用。

DRM 驱动Ä libdrm 的交互过程
下图清晰两个事情:

1) DRM的独占性。

2)概念与硬件的关联。例如CRTC对应3588的VOP组件;plane对应3588 内部的cluster等;而encoder和connector则对应具体的显示接口。

分辨率支持

方案设计与设备选项时关注上限支持情况。

RK3588 平台有四路独⽴的 Video Port, 所以在最基础的条件下,RK3568 和 RK3588 可以分别实现 3 路和 4 路独⽴的显⽰输出。


多屏显⽰


Connector-mirror

如图所⽰,在 RK3588 上,通过 connector-mirror 技术,把两路 HDMI/eDP 连接在 VP0 上,把两路 DP 连接在 VP1 上,把两路 MIPI DSI连接在 VP2 上,VP3 通过 BT656,BT1120 可以同时输出 7 路,四组独⽴的显⽰输出,其中每⼀组(同⼀个 VIdeo Port 上的两个显⽰接口)输出的显⽰时序相同,且显⽰内容相同


Connector-split


可以让⼀路 Video Port 输出按照⽔平⽅向平分成左右两路,同时驱动两个显⽰接口,显⽰时序相同,内容独⽴的画⾯

如果在 VP0 上开启 split 模式,则 VP0 的输出可以同时驱动两个显⽰接口(HDMI0/1、eDP0/1 或者其他能与 VP0 连接的显⽰接口),两个显⽰接口上显⽰的内容为 VP0 输出的内容⽔平⽅向左右平分,⽐如VP0 以 3840x1080 的分辨率输出,则两个显⽰接口各显⽰ 1920x1080 的输出。

需要注意的是,每⼀个 VP 上参与 split 输出的两个显⽰接口,输出的时序,帧率必须相同

假设用此种显示方法:

提问AI :

1)现在有两个4K的显示器,如何设置? 请给出mermaid图,从plane VOP 到显示的图。不用太多文字。

2)把视频和UI 图层用两个plane画。 图的方向,plane在左, HDMI在右侧,而非这种上下模式。

AI 给出图示

BOM Management and PCB | Mermaid Chart

BOM Management and PCB | Mermaid Chart

这种显⽰特性可以通过 dts 开关,dts 只要把参与 split 的两个显⽰接口挂接在同⼀个 VP 上,且打开左边显⽰接口的 split-mode 属性。⽐如 ,按照如下配置,打开 hdmi0 和 hdmi1 在 VP0 上的 split 功能:

&hdmi0 { status = "okay"; }; &hdmi1 { status = "okay"; split-mode; //左右咋区分的??? }; &hdmi0_in_vp0 { status = "okay"; }; &hdmi1_in_vp0 { status = "okay"; }; &hdmi0_in_vp1 { status = "disabled"; }; &hdmi0_in_vp2 { status = "disabled"; }; &hdmi1_in_vp1 { status = "disabled"; }; &hdmi1_in_vp2 { status = "disabled"; };

每个Video Port 上进⾏ split 的两个显⽰接口只会向 drm 系统注册⼀个 encoder 和 connector,所以在⽤⼾空间,每⼀ CRTC(Video Port) 上只会看到⼀个 connector 设备,这个信息可以通过 modetest 的输出确认