Video PL-IP Linux Drivers SDT Reference

Video PL-IP Linux Drivers SDT Reference

This wiki page contains the reference SDT device tree information for both PL HLS and connectivity IPs in different devices

PL HLS Video IPs reference SDT nodes

Video IP

ZynqMP SDT Linux node

ZynqMP system_user.dtsi changes for Linux

Versal SDT Linux node

Versal system_user.dtsi changes for Linux

Other changes

Video IP

ZynqMP SDT Linux node

ZynqMP system_user.dtsi changes for Linux

Versal SDT Linux node

Versal system_user.dtsi changes for Linux

Other changes

TPG

v_tpg@a00e0000 {
compatible = "xlnx,v-tpg-8.2" , "xlnx,v-tpg-8.0";
xlnx,max-width = <3840>;
reset-gpios = <&gpio 96 1>;
xlnx,max-height = <2160>;
xlnx,vtc = <&tpg_input_v_tc_1>;
reg = <0x0 0xa00e0000 0x0 0x10000>;
xlnx,s-axi-ctrl-addr-width = <8>;
xlnx,ppc = <2>;
clock-names = "ap_clk";
xlnx,s-axi-ctrl-data-width = <32>;
tpg_portstpg_input_v_tpg_1: ports {
#address-cells = <1>;
#size-cells = <0>;
tpg_port1tpg_input_v_tpg_1: port@1 {
xlnx,video-width = <8>;
reg = <1>;
xlnx,video-format = <2>;
tpg_outtpg_input_v_tpg_1: endpoint {
remote-endpoint = <&tpg_input_v_frmbuf_wr_0>;
};
};
tpg_port0tpg_input_v_tpg_1: port@0 {
xlnx,video-width = <8>;
reg = <0>;
xlnx,video-format = <2>;
};
};
};

tpg_input_v_tc_1: v_tc@a00d0000 {
clock-names = "clk", "s_axi_aclk";
clocks = <&misc_clk_4>, <&zynqmp_clk 71>;
compatible = "xlnx,v-tc-6.2", "xlnx,v-tc-6.1", "xlnx,bridge-v-tc-6.1";
reg = <0x0 0xa00d0000 0x0 0x10000>;
xlnx,generator ;
};

NA

Same as ZynqMP node.

Processing IPs are same across all platforms.

NA

NA

VPSS Scalar

v_proc_ss@a0080000 {
reset-gpios = <&psng0_axi_gpio_rst 3 1>;
xlnx,max-height = <2160>;
reg = <0x0 0xa0080000 0x0 0x40000>;
xlnx,num-hori-taps = <6>;
xlnx,h-scaler-taps = <6>;
xlnx,topology = <0>;
compatible = "xlnx,v-proc-ss-2.3" , "xlnx,v-vpss-scaler-2.2";
xlnx,csc-enable-window = "true";
xlnx,max-width = <3840>;
xlnx,use-uram = <0>;
xlnx,v-scaler-taps = <6>;
xlnx,video-width = <8>;
xlnx,colorspace-support = <0>;
xlnx,num-vert-taps = <6>;
xlnx,pix-per-clk = <2>;
xlnx,enable-csc = "true";
xlnx,scaler-algorithm = <2>;
xlnx,v-scaler-phases = <64>;
clocks = <&misc_clk_2>, <&misc_clk_2>;
clock-names = "aclk_axis" , "aclk_ctrl";
xlnx,h-scaler-phases = <64>;
xlnx,samples-per-clk = <2>;
scaler_portspsng0_vpss_scaler: ports {
#address-cells = <1>;
#size-cells = <0>;
scaler_port1psng0_vpss_scaler: port@1 {
xlnx,video-width = <8>;
reg = <1>;
xlnx,video-format = <3>;
sca_outpsng0_vpss_scaler: endpoint {
remote-endpoint = <&psng0_v_frmbuf_wr_0psng0_vpss_scaler>;
};
};
scaler_port0psng0_vpss_scaler: port@0 {
xlnx,video-width = <8>;
reg = <0>;
xlnx,video-format = <3>;
psng0_vpss_scalerpsng0_vpss_csc: endpoint {
remote-endpoint = <&csc_outpsng0_vpss_csc>;
};
};
};
};

NA

Same as ZynqMP node.

Processing IPs are same across all platforms.

NA

NA

VPSS CSC

v_proc_ss@a0000000 {
reset-gpios = <&psng0_axi_gpio_rst 2 1>;
xlnx,max-height = <2160>;
reg = <0x0 0xa0000000 0x0 0x10000>;
xlnx,h-scaler-taps = <6>;
xlnx,topology = <3>;
xlnx,csc-enable-window = "false";
compatible = "xlnx,v-proc-ss-2.3" , "xlnx,v-vpss-csc";
xlnx,max-width = <3840>;
xlnx,use-uram = <0>;
xlnx,v-scaler-taps = <6>;
xlnx,video-width = <8>;
xlnx,colorspace-support = <0>;
xlnx,scaler-algorithm = <2>;
xlnx,v-scaler-phases = <64>;
clocks = <&misc_clk_2>;
clock-names = "aclk";
xlnx,h-scaler-phases = <64>;
csc_portspsng0_vpss_csc: ports {
#address-cells = <1>;
#size-cells = <0>;
csc_port1psng0_vpss_csc: port@1 {
xlnx,video-width = <8>;
reg = <1>;
xlnx,video-format = <3>;
csc_outpsng0_vpss_csc: endpoint {
remote-endpoint = <&psng0_vpss_scalerpsng0_vpss_csc>;
};
};
csc_port0psng0_vpss_csc: port@0 {
xlnx,video-width = <8>;
reg = <0>;
xlnx,video-format = <3>;
psng0_vpss_cscpsng0_vg0: endpoint {
remote-endpoint = <&gamma_outpsng0_vg0>;
};
};
};
};

NA

Same as ZynqMP node.

Processing IPs are same across all platforms.

NA

NA

Demosaic

v_demosaic@a0010000 {
compatible = "xlnx,v-demosaic-1.1" , "xlnx,v-demosaic";
xlnx,max-width = <3840>;
reset-gpios = <&psng0_axi_gpio_rst 0 1>;
xlnx,max-height = <2160>;
xlnx,use-uram = <0>;
reg = <0x0 0xa0010000 0x0 0x10000>;
clocks = <&misc_clk_2>;
xlnx,s-axi-ctrl-addr-width = <6>;
clock-names = "ap_clk";
xlnx,s-axi-ctrl-data-width = <32>;
demosaic_portspsng0_dm0: ports {
#address-cells = <1>;
#size-cells = <0>;
demosaic_port1psng0_dm0: port@1 {
reg = <1>;
demo_outpsng0_dm0: endpoint {
remote-endpoint = <&psng0_vg0psng0_dm0>;
};
};
demosaic_port0psng0_dm0: port@0 {
reg = <0>;
psng0_dm0csirx_0: endpoint {
remote-endpoint = <&mipi_csirx_outcsirx_0>;
};
};
};
};

NA

Same as ZynqMP node.

Processing IPs are same across all platforms.

NA

NA

Gamma Lut

v_gamma_lut@a0020000 {
compatible = "xlnx,v-gamma-lut-1.1" , "xlnx,v-gamma-lut";
xlnx,max-width = <3840>;
reset-gpios = <&psng0_axi_gpio_rst 1 1>;
xlnx,max-height = <2160>;
reg = <0x0 0xa0020000 0x0 0x10000>;
clocks = <&misc_clk_2>;
xlnx,s-axi-ctrl-addr-width = <13>;
clock-names = "ap_clk";
xlnx,s-axi-ctrl-data-width = <32>;
gamma_portspsng0_vg0: ports {
#address-cells = <1>;
#size-cells = <0>;
gamma_port1psng0_vg0: port@1 {
xlnx,video-width = <8>;
reg = <1>;
gamma_outpsng0_vg0: endpoint {
remote-endpoint = <&psng0_vpss_cscpsng0_vg0>;
};
};
gamma_port0psng0_vg0: port@0 {
xlnx,video-width = <8>;
reg = <0>;
psng0_vg0psng0_dm0: endpoint {
remote-endpoint = <&demo_outpsng0_dm0>;
};
};
};
};

NA

Same as ZynqMP node.

Processing IPs are same across all platforms.

NA

NA

Mixer

hdmi_output_v_mix_0: v_mix@a0070000 {
reset-gpios = <&gpio 98 1>;
reg = <0x0 0xa0070000 0x0 0x10000>;
xlnx,s-axi-ctrl-addr-width = <13>;
xlnx,ppc = <2>;
interrupt-names = "interrupt";
compatible = "xlnx,v-mix-5.2" , "xlnx,mixer-3.0" , "xlnx,mixer-4.0" , "xlnx,mixer-5.0";
xlnx,num-layers = <9>;
xlnx,video-format = <0>;
interrupt-parent = <&imux>;
xlnx,bpc = <8>;
interrupts = < 0 95 4 >;
clocks = <&misc_clk_0>;
xlnx,dma-addr-width = <64>;
clock-names = "ap_clk";
xlnx,s-axi-ctrl-data-width = <32>;
xlnx,max-rows = <2160>;
xlnx,max-data-width = <8>;
crtc_mixer_porthdmi_output_v_mix_0: port@0 {
reg = <0>;
mixer_crtchdmi_output_v_mix_0: endpoint {
remote-endpoint = <&hdmi_output_v_hdmi_tx_ss_0hdmi_output_v_mix_0>;
};
};
xx_mix_masterhdmi_output_v_mix_0: layer_0 {
xlnx,layer-primary;
xlnx,layer-max-height = <2160>;
xlnx,vformat = "BG24";
dmas = <&hdmi_output_v_frmbuf_rd_0 0>;
xlnx,layer-id = <0>;
xlnx,layer-streaming;
dma-names = "dma0";
xlnx,layer-max-width = <3840>;
};
xx_mix_overlay_1hdmi_output_v_mix_0: layer_1 {
xlnx,vformat = "NV12";
xlnx,layer-id = <1>;
xlnx,layer-max-width = <1920>;
};
xx_mix_overlay_2hdmi_output_v_mix_0: layer_2 {
xlnx,vformat = "NV12";
xlnx,layer-id = <2>;
xlnx,layer-max-width = <1920>;
};
xx_mix_overlay_3hdmi_output_v_mix_0: layer_3 {
xlnx,vformat = "NV12";
xlnx,layer-id = <3>;
xlnx,layer-max-width = <1920>;
};
xx_mix_overlay_4hdmi_output_v_mix_0: layer_4 {
xlnx,vformat = "NV12";
xlnx,layer-id = <4>;
xlnx,layer-max-width = <1920>;
};
xx_mix_overlay_5hdmi_output_v_mix_0: layer_5 {
xlnx,vformat = "NV12";
xlnx,layer-id = <5>;
xlnx,layer-max-width = <1920>;
};
xx_mix_overlay_6hdmi_output_v_mix_0: layer_6 {
xlnx,vformat = "NV12";
xlnx,layer-id = <6>;
xlnx,layer-max-width = <1920>;
};
xx_mix_overlay_7hdmi_output_v_mix_0: layer_7 {
xlnx,vformat = "NV12";
xlnx,layer-id = <7>;
xlnx,layer-max-width = <1920>;
};
xx_mix_overlay_8hdmi_output_v_mix_0: layer_8 {
xlnx,vformat = "NV12";
xlnx,layer-id = <8>;
xlnx,layer-max-width = <1920>;
};
xx_mix_logohdmi_output_v_mix_0: logo {
xlnx,logo-width = <64>;
xlnx,logo-height = <64>;
xlnx,layer-id = <9>;
};
};

NA

Same as ZynqMP node.

Processing IPs are same across all platforms.

NA

NA

Frame Buffer Write

v_frmbuf_wr@a0070000 {
reset-gpios = <&psng0_axi_gpio_rst 4 1>;
xlnx,max-height = <2160>;
reg = <0x0 0xa0070000 0x0 0x10000>;
xlnx,s-axi-ctrl-addr-width = <0x7>;
xlnx,pixels-per-clock = <2>;
interrupt-names = "interrupt";
compatible = "xlnx,v-frmbuf-wr-2.5" , "xlnx,axi-frmbuf-wr-v2.2";
xlnx,max-width = <3840>;
xlnx,vid-formats = "rgb888" , "bgr888" , "xbgr8888" , "xrgb8888" , "uyvy" , "y8" , "vuy888" , "xvuy8888" , "yuyv" , "nv12" , "nv16";
interrupt-parent = <&imux>;
xlnx,video-width = <8>;
interrupts = < 0 107 4 >;
clocks = <&misc_clk_2>;
xlnx,dma-align = <16>;
xlnx,dma-addr-width = <32>;
clock-names = "ap_clk";
xlnx,s-axi-ctrl-data-width = <0x20>;
#dma-cells = <1>;
};

NA

Same as ZynqMP node.

Processing IPs are same across all platforms.

NA

NA

Frame Buffer Read

v_frmbuf_rd@a0040000 {
reset-gpios = <&psng0_axi_gpio_rst 5 1>;
xlnx,max-height = <2160>;
reg = <0x0 0xa0060000 0x0 0x10000>;
xlnx,s-axi-ctrl-addr-width = <0x7>;
xlnx,pixels-per-clock = <2>;
interrupt-names = "interrupt";
compatible = "xlnx,v-frmbuf-rd-2.5" , "xlnx,axi-frmbuf-rd-v2.2";
xlnx,max-width = <3840>;
xlnx,vid-formats = "bgr888";
interrupt-parent = <&imux>;
xlnx,video-width = <8>;
interrupts = < 0 106 4 >;
clocks = <&misc_clk_2>;
xlnx,dma-align = <16>;
xlnx,dma-addr-width = <32>;
clock-names = "ap_clk";
xlnx,s-axi-ctrl-data-width = <0x20>;
#dma-cells = <1>;
}

NA

Same as ZynqMP node.

Processing IPs are same across all platforms.

NA

NA

Multi-scalar

v_multi_scaler_0: v_multi_scaler@a0020000 {
reset-gpios = <&axi_gpio_0 0 1>;
xlnx,max-height = <2160>;
reg = <0x0 0xa0020000 0x0 0x20000>;
xlnx,pixels-per-clock = <2>;
interrupt-names = "interrupt";
compatible = "xlnx,v-multi-scaler-1.2" , "xlnx,v-multi-scaler-v1.0";
xlnx,max-width = <3840>;
xlnx,max-chan = <8>;
xlnx,num-taps = <6>;
xlnx,vid-formats = "rgb888" , "xrgb8888" , "bgr888" , "xbgr8888" , "xbgr2101010" , "uyvy" , "y8" , "y10" , "vuy888" , "xvuy8888" , "yuvx2101010" , "yuyv" , "nv12" , "nv16" , "xv20" , "xv15";
interrupt-parent = <&imux>;
interrupts = < 0 89 4 >;
clocks = <&zynqmp_clk 71>;
xlnx,dma-addr-width = <0x40>;
clock-names = "ap_clk";
};

NA

Same as ZynqMP node.

Processing IPs are same across all platforms.

NA

NA

Note: Irrespective of any platform, HLS processing IPs listed in above table will always have similar DT nodes and properties. They are independent of silicon platform and would be same for all example platforms like ZCU102, ZCU106, VCK190 and VEK280.

PL Connectivity Video IPs reference SDT nodes

HDMI 2.0 without HDCP

IP Name

SDT Linux node

system-user.dtsi changes for ZCU102 board

system-user.dtsi changes for VEK280 board

IP Name

SDT Linux node

system-user.dtsi changes for ZCU102 board

system-user.dtsi changes for VEK280 board

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

HDMI Video PHY

vid_phy_controller: vid_phy_controller@80050000 {
xlnx,transceiver-width = <2>;
xlnx,rx-clk-primitive = <0>;
reg = <0x00 0x80050000 0x00 0x10000>;
interrupt-names = "irq";
compatible = "xlnx,vid-phy-controller-2.2" , "xlnx,vid-phy-controller-2.1";
xlnx,rx-max-gt-line-rate = <0x5aa320>;
xlnx,hdmi-fast-switch = <1>;
interrupt-parent = <&imux>;
xlnx,nidru-refclk-sel = <4>;
xlnx,tx-protocol = <1>;
xlnx,input-pixels-per-clock = <2>;
interrupts = < 0 89 4 >;
xlnx,tx-pll-selection = <6>;
clocks = <&zynqmp_clk 71>, <&misc_clk_3>, <&misc_clk_3>, <&misc_clk_4>, <&misc_clk_4>, <&misc_clk_4>, <&misc_clk_4>, <&zynqmp_clk 71>, <&misc_clk_2>, <&zynqmp_clk 71>, <&misc_clk_2>;
clock-names = "drpclk" , "gtsouthrefclk0_in" , "gtsouthrefclk0_odiv2_in" , "mgtrefclk0_pad_n_in" , "mgtrefclk0_pad_p_in" , "mgtrefclk1_pad_n_in" , "mgtrefclk1_pad_p_in" , "vid_phy_axi4lite_aclk" , "vid_phy_rx_axi4s_aclk" , "vid_phy_sb_aclk" , "vid_phy_tx_axi4s_aclk";
xlnx,tx-buffer-bypass = <1>;
xlnx,nidru = <1>;
xlnx,rx-pll-selection = <0>;
xlnx,transceiver-type = <5>;
xlnx,tx-max-gt-line-rate = <0x5aa320>;
xlnx,rx-refclk-sel = <1>;
xlnx,use-gt-ch4-hdmi = <0>;
xlnx,tx-refclk-sel = <0>;
xlnx,rx-protocol = <1>;
xlnx,tx-clk-primitive = <0>;
xlnx,rx-no-of-channels = <3>;
xlnx,tx-no-of-channels = <3>;
vid_phy_controllerrxphy_lane0: vid_phy_rx_axi4s_ch0v_hdmi_rx_ss {
#phy-cells = <4>;
};
vid_phy_controllerrxphy_lane1: vid_phy_rx_axi4s_ch1v_hdmi_rx_ss {
#phy-cells = <4>;
};
vid_phy_controllerrxphy_lane2: vid_phy_rx_axi4s_ch2v_hdmi_rx_ss {
#phy-cells = <4>;
};
vid_phy_controllertxphy_lane0: vid_phy_tx_axi4s_ch0v_hdmi_tx_ss {
#phy-cells = <4>;
};
vid_phy_controllertxphy_lane1: vid_phy_tx_axi4s_ch1v_hdmi_tx_ss {
#phy-cells = <4>;
};
vid_phy_controllertxphy_lane2: vid_phy_tx_axi4s_ch2v_hdmi_tx_ss {
#phy-cells = <4>;
};
};

&zynq_us_ss_0_fmch_axi_iic {
/* Si5324 i2c clock generator /
si5324: clock-generator@68 {
compatible = "silabs,si5324";
reg = <0x68>;
#address-cells = <1>;
#size-cells = <0>;
#clock-cells = <1>;
/ input clock(s); the XTAL is hard-wired on the ZCU102 board /
clocks = <&refhdmi>;
clock-names = "xtal";
/ output clocks /
clk0 {
reg = <0>;
/ HDMI TX reference clock output frequency */
clock-frequency = <27000000>;
};

};

/* DP159 exposes a virtual CCF clock. Upon .set_rate(), it adapts its retiming/driving behaviour */
dp159: hdmi-retimer@5e {
compatible = "ti,dp159";
reg = <0x5e>;
#address-cells = <1>;
#size-cells = <0>;
#clock-cells = <0>;
};
};

&v_hdmi_tx_ss {
clocks = <&misc_clk_1>, <&zynqmp_clk 71>, <&audio_ss_0_clk_wiz 0>, <&zynqmp_clk 72>, <&misc_clk_0>, <&si5324 0>, <&dp159>;
clock-names = "link_clk" , "s_axi_cpu_aclk" , "s_axis_audio_aclk" , "s_axis_video_aclk" , "video_clk","txref-clk", "retimer-clk";
};

&vid_phy_controller{
clock-names = "drpclk" , "gtsouthrefclk0_in" , "gtsouthrefclk0_odiv2_in" , "mgtrefclk0_pad_n_in" , "mgtrefclk0_pad_p_in" , "mgtrefclk1_pad_n_in" , "mgtrefclk1_pad_p_in" , "vid_phy_axi4lite_aclk" , "vid_phy_rx_axi4s_aclk" , "vid_phy_sb_aclk" , "vid_phy_tx_axi4s_aclk", "dru-clk";
clocks = <&zynqmp_clk 71>, <&misc_clk_2>, <&misc_clk_2>, <&misc_clk_3>, <&misc_clk_3>, <&misc_clk_3>, <&misc_clk_3>, <&zynqmp_clk 71>, <&misc_clk_1>, <&zynqmp_clk 71>, <&misc_clk_1>, <&si570_2>;
};

 

 

 

 

 

 

 

 

 

 

 

HDMI RxSs v2.0

v_hdmi_rx_ss: v_hdmi_rx_ss@80000000 {
xlnx,audio-enabled;
interrupts = < 0 90 4 >;
compatible = "xlnx,v-hdmi-rx-ss-3.2" , "xlnx,v-hdmi-rx-ss-3.1";
interrupts = <0x00 0x5a 0x04>;
xlnx,edid-ram-size = <256>;
interrupt-parent = <&imux>;
reg = <0x0 0x80000000 0x0 0x10000>;
clocks = <&misc_clk_2>, <&zynqmp_clk 71>, <&zynqmp_clk 71>, <&zynqmp_clk 72>, <&misc_clk_1>;
xlnx,vid-interface = <0>;
xlnx,max-bits-per-component = <8>;
xlnx,snd-pcm = <&audio_ss_audio_formatter_0>;
phy-names = "hdmi-phy0" , "hdmi-phy1" , "hdmi-phy2";
phys = <&vid_phy_controllerrxphy_lane0 0 1 1 0>, <&vid_phy_controllerrxphy_lane1 0 1 1 0>, <&vid_phy_controllerrxphy_lane2 0 1 1 0>;
clock-names = "link_clk" , "s_axi_cpu_aclk" , "s_axis_audio_aclk" , "s_axis_video_aclk" , "video_clk";
xlnx,input-pixels-per-clock = <2>;
interrupt-names = "irq";
hdmirx_portsv_hdmi_rx_ss: ports {
#address-cells = <1>;
#size-cells = <0>;
hdmirx_portv_hdmi_rx_ss: port@0 {
reg = <0>;
xlnx,video-width = <10>;
xlnx,video-format = <0>;
hdmirx_outv_hdmi_rx_ss: endpoint {
remote-endpoint = <&v_frmbuf_wrv_hdmi_rx_ss>;
};
};
};
};

 

 

 

 

 

 

 

 

 

HDMI TxSs v2.0

v_hdmi_tx_ss: v_hdmi_tx_ss@80020000 {
xlnx,audio-enabled;
interrupts = < 0 91 4 >;
compatible = "xlnx,v-hdmi-tx-ss-3.2" , "xlnx,v-hdmi-tx-ss-3.1";
xlnx,xlnx-hdmi-acr-ctrl = <&audio_ss_hdmi_acr_ctrl_0>;
interrupt-parent = <&imux>;
reg = <0x0 0x80020000 0x0 0x20000>;
clock-names = "link_clk" , "s_axi_cpu_aclk" , "s_axis_audio_aclk" , "s_axis_video_aclk" , "video_clk";
clocks = <&misc_clk_2>, <&zynqmp_clk 71>, <&misc_clk_0>, <&zynqmp_clk 72>, <&misc_clk_1>;
xlnx,vid-interface = <0>;
xlnx,max-bits-per-component = <8>;
xlnx,snd-pcm = <&audio_ss_audio_formatter_0>;
phy-names = "hdmi-phy0" , "hdmi-phy1" , "hdmi-phy2";
phys = <&vid_phy_controllertxphy_lane0 0 1 1 1>, <&vid_phy_controllertxphy_lane1 0 1 1 1>, <&vid_phy_controllertxphy_lane2 0 1 1 1>;
xlnx,input-pixels-per-clock = <2>;
interrupt-names = "irq";
hdmitx_portsv_hdmi_tx_ss: ports {
#address-cells = <1>;
#size-cells = <0>;
encoder_hdmi_portv_hdmi_tx_ss: port@0 {
reg = <0>;
encoderv_hdmi_tx_ss: endpoint {
remote-endpoint = <&v_frmbuf_rdv_hdmi_tx_ss>;
};
};
};
};

HDMI 2.1 without HDCP

IP Name

SDT Linux node

system-user.dtsi changes for ZCU102 board

system-user.dtsi changes for VEK280 board

IP Name

SDT Linux node

system-user.dtsi changes for ZCU102 board

system-user.dtsi changes for VEK280 board

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

HDMI 2.1 PHY

v_hdmi_phy1@80030000 {
xlnx, transceiver-width = <4>;
xlnx, rx-clk-primitive = <0x0>;
reg = <0x00 0x80030000 0x00 0x10000>;
interrupt-names = "irq";
compatible = "xlnx,v-hdmi-phy1-1.0";
xlnx, rx-max-gt-line-rate = <0xc>;
xlnx, hdmi-fast-switch = <1>;
interrupt-parent = <&imux>;
xlnx, nidru-refclk-sel = <4>;
xlnx, tx-protocol = <2>;
xlnx, input-pixels-per-clock = <4>;
interrupts = <0 89 4>;
xlnx, tx-pll-selection = <6>;
xlnx, rx-frl-refclk-sel = <0>;
clock-names = "drpclk", "gtnorthrefclk00_in", "gtnorthrefclk01_in", "gtnorthrefclk0_in", "gtnorthrefclk0_odiv2_in", "gtsouthrefclk0_in", "gtsouthrefclk0_odiv2_in", "mgtrefclk0_pad_n_in", "mgtrefclk0_pad_p_in", "vid_phy_axi4lite_aclk", "vid_phy_rx_axi4s_aclk", "vid_phy_sb_aclk", "vid_phy_tx_axi4s_aclk";
clocks = <&zynqmp_clk 71>, <&misc_clk_3>, <&misc_clk_3>, <&misc_clk_3>, <&misc_clk_3>, <&misc_clk_4>, <&misc_clk_4>, <&misc_clk_3>, <&misc_clk_3>, <&zynqmp_clk 71>, <&misc_clk_0>, <&zynqmp_clk 71>, <&misc_clk_0>;
xlnx, tx-frl-refclk-sel = <2>;
xlnx, tx-buffer-bypass = <1>;
xlnx, nidru = <1>;
xlnx, rx-pll-selection = <0>;
xlnx, transceiver-type = <5>;
xlnx, tx-max-gt-line-rate = <0xc>;
xlnx, rx-refclk-sel = <0>;
xlnx, use-gt-ch4-hdmi = <1>;
xlnx, tx-refclk-sel = <2>;
xlnx, rx-protocol = <2>;
xlnx, tx-clk-primitive = <0>;
xlnx, rx-no-of-channels = <4>;
xlnx, tx-no-of-channels = <4>;
v_hdmi_phyrxphy_lane0: vid_phy_rx_axi4s_ch0v_hdmi_rxss1 {
#phy-cells = <4>;
};
v_hdmi_phyrxphy_lane1: vid_phy_rx_axi4s_ch1v_hdmi_rxss1 {
#phy-cells = <4>;
};
v_hdmi_phyrxphy_lane2: vid_phy_rx_axi4s_ch2v_hdmi_rxss1 {
#phy-cells = <4>;
};
v_hdmi_phyrxphy_lane3: vid_phy_rx_axi4s_ch3v_hdmi_rxss1 {
#phy-cells = <4>;
};
v_hdmi_phytxphy_lane0: vid_phy_tx_axi4s_ch0v_hdmi_txss1 {
#phy-cells = <4>;
};
v_hdmi_phytxphy_lane1: vid_phy_tx_axi4s_ch1v_hdmi_txss1 {
#phy-cells = <4>;
};
v_hdmi_phytxphy_lane2: vid_phy_tx_axi4s_ch2v_hdmi_txss1 {
#phy-cells = <4>;
};
v_hdmi_phytxphy_lane3: vid_phy_tx_axi4s_ch3v_hdmi_txss1 {
#phy-cells = <4>;
};

};

&amba_pl {
xfmc: xv_fmc {
compatible = "vfmc";
};

};
&amba {
ref40: ref40m {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <40000000>;
};
};
&v_hdmi_txss1{
xlnx,max-frl-rate = <0x6>;
phy-names = "hdmi-phy0", "hdmi-phy1", "hdmi-phy2", "hdmi-phy3";
phys = <&v_hdmi_phytxphy_lane0 0 1 1 1>, <&v_hdmi_phytxphy_lane1 0 1 1 1>, <&v_hdmi_phytxphy_lane2 0 1 1 1>, <&v_hdmi_phytxphy_lane3 0 1 1 1>;
};
&v_hdmi_phy {
clock-names = "vid_phy_axi4lite_aclk", "drpclk", "tmds_clock", "frl_clock";
clocks = <&zynqmp_clk 71>, <&zynqmp_clk 71>, <&idt_241 1>, <&si5344 1>;
xlnx,hdmi-connector = <&xfmc>;
rxch4-sel-gpios = <&vfmc_ctlr_ss_0_vfmc_gpio 18 0 1>;
};
&i2c1 {
si5344: clock-generator@68 {
compatible = "si5344";
#clock-cells = <1>;
reg = <0x68>;
clocks = <&ref40>;
clock-names = "xtal";
};
onsemi_tx: onsemi-tx@5b {
compatible = "onsemi,onsemi-tx";
#clock-cells = <1>;
reg = <0x5b>;
clocks = <&ref40>;
clock-frequency = <148500000>;
clock-names = "input-xtal";
};
onsemi_rx: onsemi-tx@5c {
compatible = "onsemi,onsemi-rx";
#clock-cells = <1>;
reg = <0x5c>;
clocks = <&ref40>;
clock-frequency = <148500000>;
clock-names = "input-xtal";
};
idt_241: clock-generator@7c {
compatible = "idt,idt8t49";
#clock-cells = <1>;
reg = <0x7c>;
clocks = <&ref40>;
clock-frequency = <148500000>;
clock-names = "input-xtal";
};
expander@75 {
compatible = "expander-fmc";
reg = <0x75>;
};
expander@74 {
compatible = "expander-fmc74";
reg = <0x74>;
};
expander@64 {
compatible = "expander-fmc64";
reg = <0x64>;
};
expander@65 {
compatible = "expander-fmc65";
reg = <0x65>;
};
expander@51 {
compatible = "expander-tipower";
reg = <0x51>;
};
};

&amba_pl {

ref40: ref40m {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <40000000>;
};

xfmc: xv_fmc {
compatible = "vfmc";
};
};
&cips_ss_0_axi_iic_0 {
idt_241: clock-generator@6c {
compatible = "idt,idt8t49";
#clock-cells = <1>;
reg = <0x6c>;
clocks = <&ref40>;
clock-frequency = <148500000>;
clock-names = "input-xtal";
};

ti_tmds1204_tx: ti_tmds1204-tx@5e {
compatible = "ti_tmds1204,ti_tmds1204-tx";
#clock-cells = <1>;
reg = <0x5e>;
clocks = <&ref40>;
clock-frequency = <148500000>;
clock-names = "input-xtal";
};

ti_tmds1204_rx: ti_tmds1204-rx@5b {
compatible = "ti_tmds1204,ti_tmds1204-rx";
#clock-cells = <1>;
reg = <0x5b>;
clocks = <&ref40>;
clock-frequency = <148500000>;
clock-names = "input-xtal";
};

};
&hdmiphy_ss_0_hdmi_gt_controller {
clock-names = "vid_phy_axi4lite_aclk", "drpclk", "tmds_clock";
clocks = <&versal_clk 65>, <&versal_clk 65>, <&idt_241 1>;
xlnx,hdmi-connector = <&xfmc>;
};
&v_hdmi_txss1{
clock-names = "frl_clk" , "s_axi_cpu_aclk" , "s_axis_audio_aclk" , "s_axis_video_aclk" , "video_clk", "link_clk";
clocks = <&misc_clk_4>, <&versal_clk 65>, <&audio_ss_0_clk_wizard 0>, <&misc_clk_3>, <&misc_clk_2>, <&misc_clk_2>;

};
&i2c0 {
expander@74 {
compatible = "expander-fmc74";
reg = <0x74>;
};
};

 

 

 

 

 

 

 

 

 

HDMI RxSs v2.1

v_hdmi_rxss1@80040000 {
interrupts = < 0 90 4 >;
compatible = "xlnx,v-hdmi-rxss1-1.2" , "xlnx,v-hdmi-rx-ss-3.1";
xlnx,edid-ram-size = /bits/ 16 <0x100>;
interrupt-parent = <&imux>;
xlnx,vid-clk-freq-khz = <0x61a80>;
xlnx,frl-clk-freq-khz = <0x6ddd0>;
reg = <0x00 0x80040000 0x00 0x10000>;
clocks = <&misc_clk_5>, <&misc_clk_0>, <&zynqmp_clk 71>, <&audio_ss_0_clk_wiz 0>, <&misc_clk_2>, <&misc_clk_4>;
xlnx,vid-interface = <0>;
xlnx,max-bits-per-component = /bits/ 8 <0xa>;
phys = <&v_hdmi_phyrxphy_lane0 0 1 1 0>, <&v_hdmi_phyrxphy_lane1 0 1 1 0>, <&v_hdmi_phyrxphy_lane2 0 1 1 0>, <&v_hdmi_phyrxphy_lane3 0 1 1 0>;
phy-names = "hdmi-phy0" , "hdmi-phy1" , "hdmi-phy2" , "hdmi-phy3";
clock-names = "frl_clk" , "link_clk" , "s_axi_cpu_aclk" , "s_axis_audio_aclk" , "s_axis_video_aclk" , "video_clk";
xlnx,input-pixels-per-clock = /bits/ 8 <0x8>;
interrupt-names = "irq";
xlnx,max-frl-rate = /bits/ 8 <0x6>;
hdmirx_portsv_hdmi_rxss1: ports {
#address-cells = <1>;
#size-cells = <0>;
hdmirx_portv_hdmi_rxss1: port@0 {
reg = <0>;
xlnx,video-width = <10>;
xlnx,video-format = <0>;
hdmirx_outv_hdmi_rxss1: endpoint {
remote-endpoint = <&v_fb_ss_0_v_frmbuf_wr_0v_hdmi_rxss1>;
};
};
};
};

 

 

 

 

 

 

 

 

 

HDMI TxSs v2.1

v_hdmi_txss1@80060000 {
reg = <0x00 0x80060000 0x00 0x20000>;
xlnx,frl-clk-freq-khz = <0x6ddd0>;
phys = <&v_hdmi_phytxphy_lane0 0 1 1 1>, <&v_hdmi_phytxphy_lane1 0 1 1 1>, <&v_hdmi_phytxphy_lane2 0 1 1 1>, <&v_hdmi_phytxphy_lane2 0 1 1 1>;
interrupt-names = "irq";
compatible = "xlnx,v-hdmi-txss1-1.2";
interrupt-parent = <&imux>;
xlnx,xlnx-hdmi-acr-ctrl = <&audio_ss_0_hdmi_acr_ctrl>;
xlnx,vid-clk-freq-khz = <0x61a80>;
xlnx,max-bits-per-component = <10>;
xlnx,vid-interface = <0>;
phy-names = "hdmi-phy0" , "hdmi-phy1" , "hdmi-phy2" , "hdmi-phy3";
xlnx,input-pixels-per-clock = <8>;
xlnx,max-frl-rate = <6>;
interrupts = < 0 91 4 >;
clocks = <&misc_clk_5>, <&misc_clk_0>, <&zynqmp_clk 71>, <&audio_ss_0_clk_wiz 0>, <&misc_clk_2>, <&misc_clk_4>;
clock-names = "frl_clk" , "link_clk" , "s_axi_cpu_aclk" , "s_axis_audio_aclk" , "s_axis_video_aclk" , "video_clk";
hdmitx_portsv_hdmi_txss1: ports {
#address-cells = <1>;
#size-cells = <0>;
encoder_hdmi_portv_hdmi_txss1: port@0 {
reg = <0>;
encoderv_hdmi_txss1: endpoint {
remote-endpoint = <&v_fb_ss_0_v_frmbuf_rd_0v_hdmi_txss1>;
};
};
};

};

 

HDMI v2.1 with HDCP

Video IP

ZynqMP SDT Linux node

ZynqMP system_user.dtsi changes for Linux

Versal SDT Linux node

Versal system_user.dtsi changes for Linux

Other changes

 

Video IP

ZynqMP SDT Linux node

ZynqMP system_user.dtsi changes for Linux

Versal SDT Linux node

Versal system_user.dtsi changes for Linux

Other changes

 

HDMI Rx v2.1 with HDCP (Assume both HDCP 1x and 2x enabled)

            v_hdmi_rxss1: v_hdmi_rxss1@80080000 {

                                    xlnx,fec-enable = <1>;

                                    xlnx,exdes-topology = <0>;

                                    xlnx,hdmi-version = <4>;

                                    xlnx,rable = <0>;

                                    hdcp14-connected = <&v_hdmi_rxss1_hdcp_1_4>;

                                    xlnx,ip-name = "v_hdmi_rxss1";

                                    xlnx,frl-sm-vcke = <1>;

                                    reg = <0x0 0x80080000 0x0 0x80000>;

                                    xlnx,frl-clk-freq-khz = <0x6ddd0>;

                                    xlnx,vrr-support = <1>;

                                    phys = <&v_hdmi_phyrxphy_lane0 0 1 1 0>, <&v_hdmi_phyrxphy_lane1 0 1 1 0>, <&v_hdmi_phyrxphy_lane2 0 1 1 0>, <&v_hdmi_phyrxphy_lane3 0 1 1 0>;

                                    xlnx,include-hdcp-2-2;

                                    xlnx,include-hdcp;

                                    interrupt-names = "hdcp14_irq" , "hdcp14_timer_irq" , "hdcp22_irq" , "hdcp22_timer_irq" , "irq";

                                    xlnx,exdes-axilite-freq = <100>;

                                    xlnx,dsc-en = <0>;

                                    compatible = "xlnx,v-hdmi-rxss1-1.2" , "xlnx,v-hdmi-rx-ss-3.1";

                                    hdcp14-present = <1>;

                                    interrupt-parent = <&imux>;

                                    xlnx,num-of-gt-lane = <4>;

                                    xlnx,vid-clk-freq-khz = <0x61a80>;

                                    xlnx,exdes-nidru;

                                    xlnx,max-bits-per-component = /bits/ 8 <0x8>;

                                    xlnx,vid-interface = <0>;

                                    xlnx,exdes-tx-pll-selection = <6>;

                                    hdcp22-present = <1>;

                                    phy-names = "hdmi-phy0" , "hdmi-phy1" , "hdmi-phy2" , "hdmi-phy3";

                                    xlnx,cd-invert;

                                    status = "okay";

© Copyright 2019 - 2022 Xilinx Inc. Privacy Policy