RK3576 video output (VOP)
this page describes the display pipeline of the rockchip rk3576 soc used in flipper one video output processor (vop) video ports (vp0, vp1, vp2) display interfaces each port can drive how to reroute an interface to a different port at the device tree level rk3576 has a single vop ip instance compatible = "rockchip,rk3576 vop" , handled by the mainline vop2 driver (although earlier rockchip reference and some issue titles refer to vop1 / vop2 as separate blocks ) "vop2" is the driver family, not a second controller the three independent display pipelines are video ports , not separate vops architecture overview the vop is one hardware block at 0x27d00000 it composes several overlay windows into up to three independent display streams, one per video port each video port has its own pixel clock ( dclk vp0/1/2 ) and its own interrupt, and is steered to a physical display interface (hdmi, edp, mipi dsi, displayport) through an interface multiplexer flowchart lr subgraph vop\["vop (rk3576 vop)"] direction tb subgraph wins\["overlay windows"] direction tb c0\["cluster0 ยท 4k"] c1\["cluster1 ยท 4k"] e0\["esmart0 ยท 4k"] e1\["esmart1 ยท 4k"] e2\["esmart2 ยท 2k"] e3\["esmart3 ยท 2k"] end sel{{"layer select\<br/>(window โ port)"}} vp0\["vp0 ยท 4k"] vp1\["vp1 ยท 2 5k"] vp2\["vp2 ยท 1080p"] c0 > sel c1 > sel e0 > sel e1 > sel e2 > sel e3 > sel sel > vp0 sel > vp1 sel > vp2 end vp0 > mux{{"interface\<br/>mux"}} vp1 > mux vp2 > mux mux > hdmi\["hdmi0"] mux > edp\["edp0"] mux > dsi\["mipi dsi0"] mux > dp0\["dp0"] mux > dp1\["dp1"] mux > dp2\["dp2"] video ports each video port is a fixed display controller with its own maximum timing windows are assigned to a port by the overlay layer select logic; the port is then connected to exactly one active interface at a time video port max resolution max refresh can drive vp0 4096x2160 120 hz hdmi0, edp0, mipi dsi0, dp0 vp1 2560x1600 60 hz hdmi0, edp0, mipi dsi0, dp0, dp1 vp2 1920x1080 60 hz hdmi0, mipi dsi0, dp1, dp2 4k\@120 on vp0 is reachable over hdmi 2 1 or displayport; edp0 cannot drive it the interface a port drives is selected in hardware by the rk3576 dsp if mux field inside the per interface rk3576 dsp if ctrl registers (hdmi0 at 0x184 , edp0 at 0x188 , dp0 at 0x18c , dp1 at 0x1a4 ) the mux field holds the vp id, so each interface is pointed at the port that should feed it the mainline driver programs these from the device tree routing described below โ you do not write them by hand routing interfaces to ports (device tree) in mainline rk3576 dtsi the vop vp0 / vp1 / vp2 ports are declared empty โ unlike rk3588, no in vpn endpoints are pre defined a routing is a pair of of graph endpoints you add in the board dts one in the interface's in port pointing at the vp, and the matching one in \&vpn pointing back (bsp kernels ship pre baked \&hdmi in vp0 { status = "okay"; } endpoints; that pattern does not exist in mainline ) example usage three screen routing, one interface per port \&hdmi { status = "okay"; }; \&dsi { status = "okay"; }; \&dp { status = "okay"; }; \&hdmi in { hdmi in vp0 endpoint { remote endpoint = <\&vp0 out hdmi>; }; }; \&dp0 in { dp0 in vp1 endpoint { remote endpoint = <\&vp1 out dp0>; }; }; \&dsi in { dsi in vp2 endpoint { remote endpoint = <\&vp2 out dsi>; }; }; \&vp0 { vp0 out hdmi endpoint\@0 { reg = <0>; remote endpoint = <\&hdmi in vp0>; }; }; \&vp1 { vp1 out dp0 endpoint\@0 { reg = <0>; remote endpoint = <\&dp0 in vp1>; }; }; \&vp2 { vp2 out dsi endpoint\@0 { reg = <0>; remote endpoint = <\&dsi in vp2>; }; }; this drives three independent screens at once (same or different content), each capped by its port's maximum timing note mainline rarely enables mipi dsi and usually drives displayport on vp1 rerouting an interface to a different port to move an interface, repoint both ends of its endpoint pair at the new vp example โ displayport defaults to vp2 (capped at 1920x1080\@60); moving it to vp0 unlocks 4k\@120 / was dp0 > vp2 / \&dp0 in { dp0 in vp0 endpoint { remote endpoint = <\&vp0 out dp0>; }; }; \&vp0 { vp0 out dp0 endpoint\@0 { reg = <0>; remote endpoint = <\&dp0 in vp0>; }; }; pick a target port that the interface is allowed to drive (see the video ports table docid dx3kqdetbrqzwvvutkp0 ) and that is not already bound to another active interface when a vp feeds more than one interface across the tree, give each \&vpn endpoint a distinct reg / endpoint\@n a port can feed only one active interface at a time, and an interface must be routed to a port it actually supports enabling two in vpn endpoints for the same interface, or routing to an unsupported port, can produce no/unstable output references rk3576 specific bit brick ssom 3576 hdmi driver docs https //docs bit brick com/docs/ssom 3576/software/peripheral driver/hdmi โ hdmi to vp binding from a board vendor perspective rockchip rk3576 quick datasheet https //boardcon com/download/rk3576 brief datasheet v1 2 20240311 pdf โ high level overview of rk3576 capabilities, which does mention video capabilities code and driver info rk3576 dtsi https //github com/torvalds/linux/blob/master/arch/arm64/boot/dts/rockchip/rk3576 dtsi โ mainline vop node, video port port\@0/1/2 definitions, clocks, and interrupts (see lines dsi 1430 https //github com/torvalds/linux/blob/master/arch/arm64/boot/dts/rockchip/rk3576 dtsi#l1430 , hdmi 1458 https //github com/torvalds/linux/blob/master/arch/arm64/boot/dts/rockchip/rk3576 dtsi#l1458 , dp 1499 https //github com/torvalds/linux/blob/master/arch/arm64/boot/dts/rockchip/rk3576 dtsi#l1499 ) drm/rockchip vop2 add support for rk3576 https //patchwork kernel org/project/linux rockchip/patch/20240827103211 3132728 4 andyshrk\@163 com/ โ vp to interface routing, rk3576 dsp if ctrl mux drm/rockchip vop2 add support for rk3576 โ v15 thread https //www mail archive com/dri devel\@lists freedesktop org/msg533130 html โ mailing list review thread for the mainline vop2 rk3576 patch series deepwiki friendlyarm/kernel rockchip vop section https //deepwiki com/friendlyarm/kernel rockchip/2 1 drm and video output processor (vop) โ general rockchip vop architecture overview related methods on other boards firefly roc rk3576 pc display usage https //wiki t firefly com/en/roc rk3576 pc/usage display html โ device tree in vpn routing and rerouting examples firefly aio 3576c display usage https //wiki t firefly com/en/aio 3576c/usage display html โ second board's display guide, confirms per port routing behavior
Have a question?
Our support team and an awesome community will get you an answer in a flash. Please leave your questions in English.
To ask a question or participate in discussions, you'll need to authenticate first.