Xilinx HDMI 2.1 PHY driver
Table of Contents
Introduction
The Xilinx® HDMI PHY Controller LogiCORE IP core is designed for enabling plug-and-play connectivity with Xilinx® HDMI™ 2.1 technology MAC transmit or receive subsystems. The interface between the video MAC and PHY layers are standardized to enable ease of use in accessing shared transceiver resources. The AXI4-Lite interface is provided to enable dynamic accesses of transceiver controls/status.
Driver Overview
The PHY is intended to simplify the use of serial transceivers and adds domain-specific configurability. The HDMI PHY Controller IP/Driver is not intended to be used as a stand alone IP and must be used with Xilinx Video MACs such as the HDMI 2.1 Transmitter/Receiver Subsystems and DisplayPort TX/RX Subsystems. The core enables simpler connectivity between MAC layers for TX and RX paths.
As such PHY Linux Driver is implemented within the kernel PHY framework and is tightly coupled with HDMI 2.1 Rx/Tx Linux drivers. This driver also hosts the common video files shared between the 3 Xilinx connectivity drivers (HDMI PHY, HDMI 2.1 Rx and HDMI 2.1 Tx) and exports the relevant API’s for inter-driver communication. On kernel boot-up both HDMI 2.1 Rx & Tx drivers will request 4 PHY lanes each for Rx & Tx and will defer until PHY driver has been initialized.
IP/Driver Features
IP Feature | 2022.1 | 2024.1 | 2024.2 | 2025.1/2025.2 |
|---|---|---|---|---|
Compatible string for ZynqMP | xlnx,v-hdmi-phy1-1.0 | xlnx,v-hdmi-phy1-1.0 | xlnx,v-hdmi-phy1-1.0 | xlnx,v-hdmi-phy1-1.0 |
Compatible string for Versal | xlnx,v-hdmi-gt-controller-1.0 | xlnx,v-hdmi-gt-controller-1.0 | xlnx,v-hdmi-gt-controller-2.0 | xlnx,v-hdmi-gt-controller-2.0 |
IP Version Supported for ZynqMP | 1.0 | 1.0 | 1.0 | 1.0 |
IP Version Supported for Versal | 1.0 | 1.0 | 2.0 | 2.0 |
AXI4-Lite support for register accesses | Yes | Yes | Yes | Yes |
Protocol Support: HDMI 2.1 | Only HDMI 2.1 | Only HDMI 2.1 | Only HDMI 2.1 | Only HDMI 2.1 |
Full transceiver dynamic reconfiguration port (DRP) accesses and transceiver functions | Yes | Yes | Yes | Yes |
Independent TX and RX path line rates (device specific) | Yes | Yes | Yes | Yes |
Single quad support | Yes | Yes | Yes | Yes |
Phase-locked loop (PLL) switching support from software | Yes | Yes | Yes | Yes |
Transmit and Receiver user clocking | Yes | Yes | Yes | Yes |
Protocol specific functions for HDMI (For example, HDMI Clock Detector) | Yes | Yes | Yes | Yes |
Non-integer data recovery unit (NI-DRU) support for lower line rates. NI-DRU support is for the HDMI protocol only. | Yes | Yes | Yes | Yes |
Use of 4th GT channel as TX TMDS clock | Yes | Yes | Yes | Yes |
Advanced Clocking Support (Display Port protocol only) | Yes | Yes | Yes | Yes |
HW IP Configuration
Kernel Configuration Options for Driver
CONFIG_PHY_XILINX_HDMIPHY should be enable enabled in the kernel configuration.
Device Tree Binding
The dts node should be defined with correct hardware configuration. How to define the node is documented in
2025.2: Documentation/devicetree/bindings/phy/xlnx,v-hmdi-phy1.yaml
2025.1: Documentation/devicetree/bindings/phy/xlnx,v-hmdi-phy1.yaml
2024.2: Documentation/devicetree/bindings/phy/xlnx,v-hmdi-phy1.yaml
2021.2: Documentation/devicetree/bindings/phy/xlnx,v-hmdi-phy1.yaml
2022.1: Documentation/devicetree/bindings/phy/xlnx,v-hmdi-phy1.yaml
Below is the example device tree node generated by SDT for VCK190/VEK280/VEK385 platforms
hdmiphy_ss_0_hdmi_gt_controller: hdmi_gt_controller@a4060000 {
xlnx,tx-outclk-buffer = "none";
xlnx,check-valid-protocol = <0>;
xlnx,transceiver-width = <4>;
xlnx,tx-refclk-fabric-buffer = "none";
xlnx,txrefclk-rdy-invert = <1>;
xlnx,for-upgrade-speedgrade = "-2MP";
xlnx,silicon-revision = <0>;
xlnx,vid-phy-rx-axi4s-ch-tdata-width = <40>;
xlnx,tx-tmds-clk-buffer = "bufg";
xlnx,ip-name = "hdmi_gt_controller";
xlnx,rx-clk-primitive = <0>;
reg = <0x0 0xa4060000 0x0 0x10000>;
xlnx,drpclk-freq = <0x5f5dd19>;
xlnx,vid-phy-status-sb-rx-tdata-width = <8>;
xlnx,supportlevel = <1>;
xlnx,sub-core-name = "exdes_hdmi_gt_controller_0_gt_reset_cntlr";
xlnx,check-pll-selection = <0>;
xlnx,vid-phy-axi4lite-addr-width = <10>;
interrupt-names = "irq";
xlnx,rx-outclk-buffer = "none";
xlnx,gt-debug-port-en = <1>;
xlnx,new-wiz = <1>;
xlnx,vid-phy-control-sb-tx-tdata-width = <1>;
compatible = "xlnx,hdmi-gt-controller-2.0" , "xlnx,v-hdmi-gt-controller-1.0";
xlnx,if-ksb-es1 = <0>;
xlnx,rx-max-gt-line-rate = <0xc>;
xlnx,tx-sb-ports;
xlnx,for-upgrade-architecture = "versal";
xlnx,hdmi-fast-switch = <0>;
xlnx,rx-video-clk-buffer = "bufg";
interrupt-parent = <&imux>;
xlnx,transceiver = <0x8>;
xlnx,nidru-refclk-sel = <2>;
xlnx,rx-gt-line-rate = <12>;
xlnx,gt-settings-rx = "GT_TYPE , GTYP , GT_DIRECTION , SIMPLEX_RX , LR0_SETTINGS , PRESET None GT_DIRECTION SIMPLEX_RX RX_PLL_TYPE RPLL RX_DATA_DECODING RAW RX_BUFFER_MODE 1 RX_REFCLK_SOURCE R2 RX_USER_DATA_WIDTH 20 RX_INT_DATA_WIDTH 20 RX_LINE_RATE 2.5 RX_REFCLK_FREQUENCY 400.00 RX_EQ_MODE LPM , LR1_SETTINGS , PRESET None GT_DIRECTION SIMPLEX_RX RX_PLL_TYPE RPLL RX_DATA_DECODING RAW RX_BUFFER_MODE 1 RX_REFCLK_SOURCE R0 RX_USER_DATA_WIDTH 40 RX_INT_DATA_WIDTH 40 RX_LINE_RATE 1.625 RX_REFCLK_FREQUENCY 162.5 RX_EQ_MODE LPM , LR2_SETTINGS , PRESET None GT_DIRECTION SIMPLEX_RX RX_PLL_TYPE RPLL RX_DATA_DECODING RAW RX_BUFFER_MODE 1 RX_REFCLK_SOURCE R0 RX_USER_DATA_WIDTH 40 RX_INT_DATA_WIDTH 40 RX_LINE_RATE 2.485 RX_REFCLK_FREQUENCY 248.5 RX_EQ_MODE LPM , LR3_SETTINGS , PRESET None GT_DIRECTION SIMPLEX_RX RX_PLL_TYPE RPLL RX_DATA_DECODING RAW RX_BUFFER_MODE 1 RX_REFCLK_SOURCE R0 RX_USER_DATA_WIDTH 40 RX_INT_DATA_WIDTH 40 RX_LINE_RATE 3.700 RX_REFCLK_FREQUENCY 92.5 RX_EQ_MODE LPM , LR4_SETTINGS , PRESET None GT_DIRECTION SIMPLEX_RX RX_PLL_TYPE RPLL RX_DATA_DECODING RAW RX_BUFFER_MODE 1 RX_REFCLK_SOURCE R0 RX_USER_DATA_WIDTH 40 RX_INT_DATA_WIDTH 40 RX_LINE_RATE 5.94 RX_REFCLK_FREQUENCY 148.5 RX_EQ_MODE LPM , LR5_SETTINGS , PRESET None GT_DIRECTION SIMPLEX_RX RX_PLL_TYPE RPLL RX_DATA_DECODING RAW RX_BUFFER_MODE 1 RX_REFCLK_SOURCE R2 RX_USER_DATA_WIDTH 40 RX_INT_DATA_WIDTH 40 RX_LINE_RATE 3.0 RX_REFCLK_FREQUENCY 400.0 RX_EQ_MODE LPM , LR6_SETTINGS , PRESET None GT_DIRECTION SIMPLEX_RX RX_PLL_TYPE RPLL RX_DATA_DECODING RAW RX_BUFFER_MODE 1 RX_REFCLK_SOURCE R2 RX_USER_DATA_WIDTH 40 RX_INT_DATA_WIDTH 40 RX_LINE_RATE 6.0 RX_REFCLK_FREQUENCY 400.0 RX_EQ_MODE LPM , LR7_SETTINGS , PRESET None GT_DIRECTION SIMPLEX_RX RX_PLL_TYPE RPLL RX_DATA_DECODING RAW RX_BUFFER_MODE 1 RX_REFCLK_SOURCE R2 RX_USER_DATA_WIDTH 40 RX_INT_DATA_WIDTH 40 RX_LINE_RATE 8.0 RX_REFCLK_FREQUENCY 400.0 RX_EQ_MODE LPM , LR8_SETTINGS , PRESET None GT_DIRECTION SIMPLEX_RX RX_PLL_TYPE RPLL RX_DATA_DECODING RAW RX_BUFFER_MODE 1 RX_REFCLK_SOURCE R2 RX_USER_DATA_WIDTH 40 RX_INT_DATA_WIDTH 40 RX_LINE_RATE 10.0 RX_REFCLK_FREQUENCY 400.0 RX_EQ_MODE LPM , LR9_SETTINGS , PRESET None GT_DIRECTION SIMPLEX_RX RX_PLL_TYPE RPLL RX_DATA_DECODING RAW RX_BUFFER_MODE 1 RX_REFCLK_SOURCE R2 RX_USER_DATA_WIDTH 40 RX_INT_DATA_WIDTH 40 RX_LINE_RATE 12.0 RX_REFCLK_FREQUENCY 400.0 RX_EQ_MODE DFE";
xlnx,vid-phy-tx-axi4s-ch-int-tdata-width = <40>;
xlnx,dru-refclk-fabric-buffer = "none";
xlnx,err-irq-en = <0>;
xlnx,vid-phy-rx-axi4s-ch-tuser-width = <1>;
xlnx,versal-gen2-device = <0>;
xlnx,tx-protocol = <2>;
xlnx,vid-phy-status-sb-tx-tdata-width = <8>;
status = "okay";
xlnx,dru-refclk-freq-mhz = <400>;
xlnx,axi-lite-freq-hz = <0x5f5dd19>;
xlnx,input-pixels-per-clock = <4>;
xlnx,axi4lite-enable;
xlnx,name = "hdmiphy_ss_0_hdmi_gt_controller";
xlnx,dru-gain-g1-p = <16>;
interrupts = < 0 84 4 >;
xlnx,rx-tdata-width = <40>;
xlnx,tx-pll-selection = <7>;
xlnx,ksb-device = <0>;
xlnx,sim-level = <0>;
xlnx,vid-phy-tx-axi4s-ch-tdata-width = <40>;
xlnx,rx-frl-refclk-sel = <2>;
clocks = <&versal_clk 65>, <&versal_clk 65>, <&misc_clk_3>, <&misc_clk_3>, <&misc_clk_2>, <&misc_clk_0>, <&misc_clk_0>, <&misc_clk_0>, <&versal_clk 65>, <&misc_clk_0>;
xlnx,gt-settings-tx = "GT_TYPE , GTYP , GT_DIRECTION , SIMPLEX_TX , LR0_SETTINGS , PRESET None GT_DIRECTION SIMPLEX_TX TX_PLL_TYPE LCPLL TX_DATA_ENCODING RAW TX_BUFFER_MODE 1 TX_OUTCLK_SOURCE TXPROGDIVCLK TXPROGDIV_FREQ_ENABLE true TXPROGDIV_FREQ_SOURCE LCPLL TX_LANE_DESKEW_HDMI_ENABLE true TX_REFCLK_SOURCE R2 TX_USER_DATA_WIDTH 20 TX_INT_DATA_WIDTH 20 TX_LINE_RATE 2.5 TX_REFCLK_FREQUENCY 400.00 , LR1_SETTINGS , PRESET None GT_DIRECTION SIMPLEX_TX TX_PLL_TYPE LCPLL TX_DATA_ENCODING RAW TX_BUFFER_MODE 1 TX_OUTCLK_SOURCE TXPROGDIVCLK TXPROGDIV_FREQ_ENABLE true TXPROGDIV_FREQ_SOURCE LCPLL TX_LANE_DESKEW_HDMI_ENABLE true TX_REFCLK_SOURCE R1 TX_USER_DATA_WIDTH 40 TX_INT_DATA_WIDTH 40 TX_LINE_RATE 1.625 TX_REFCLK_FREQUENCY 162.5 , LR2_SETTINGS , PRESET None GT_DIRECTION SIMPLEX_TX TX_PLL_TYPE LCPLL TX_DATA_ENCODING RAW TX_BUFFER_MODE 1 TX_OUTCLK_SOURCE TXPROGDIVCLK TXPROGDIV_FREQ_ENABLE true TXPROGDIV_FREQ_SOURCE LCPLL TX_LANE_DESKEW_HDMI_ENABLE true TX_REFCLK_SOURCE R1 TX_USER_DATA_WIDTH 40 TX_INT_DATA_WIDTH 40 TX_LINE_RATE 2.485 TX_REFCLK_FREQUENCY 248.5 , LR3_SETTINGS , PRESET None GT_DIRECTION SIMPLEX_TX TX_PLL_TYPE LCPLL TX_DATA_ENCODING RAW TX_BUFFER_MODE 1 TX_OUTCLK_SOURCE TXPROGDIVCLK TXPROGDIV_FREQ_ENABLE true TXPROGDIV_FREQ_SOURCE LCPLL TX_LANE_DESKEW_HDMI_ENABLE true TX_REFCLK_SOURCE R1 TX_USER_DATA_WIDTH 40 TX_INT_DATA_WIDTH 40 TX_LINE_RATE 3.700 TX_REFCLK_FREQUENCY 92.5 , LR4_SETTINGS , PRESET None GT_DIRECTION SIMPLEX_TX TX_PLL_TYPE LCPLL TX_DATA_ENCODING RAW TX_BUFFER_MODE 1 TX_OUTCLK_SOURCE TXPROGDIVCLK TXPROGDIV_FREQ_ENABLE true TXPROGDIV_FREQ_SOURCE LCPLL TX_LANE_DESKEW_HDMI_ENABLE true TX_REFCLK_SOURCE R1 TX_USER_DATA_WIDTH 40 TX_INT_DATA_WIDTH 40 TX_LINE_RATE 5.94 TX_REFCLK_FREQUENCY 148.5 , LR5_SETTINGS , PRESET None GT_DIRECTION SIMPLEX_TX TX_PLL_TYPE LCPLL TX_DATA_ENCODING RAW TX_BUFFER_MODE 1 TX_OUTCLK_SOURCE TXPROGDIVCLK TXPROGDIV_FREQ_ENABLE true TXPROGDIV_FREQ_SOURCE LCPLL TX_LANE_DESKEW_HDMI_ENABLE true TX_REFCLK_SOURCE R2 TX_USER_DATA_WIDTH 40 TX_INT_DATA_WIDTH 40 TX_LINE_RATE 3.0 TX_REFCLK_FREQUENCY 400.0 , LR6_SETTINGS , PRESET None GT_DIRECTION SIMPLEX_TX TX_PLL_TYPE LCPLL TX_DATA_ENCODING RAW TX_BUFFER_MODE 1 TX_OUTCLK_SOURCE TXPROGDIVCLK TXPROGDIV_FREQ_ENABLE true TXPROGDIV_FREQ_SOURCE LCPLL TX_LANE_DESKEW_HDMI_ENABLE true TX_REFCLK_SOURCE R2 TX_USER_DATA_WIDTH 40 TX_INT_DATA_WIDTH 40 TX_LINE_RATE 6.0 TX_REFCLK_FREQUENCY 400.0 , LR7_SETTINGS , PRESET None GT_DIRECTION SIMPLEX_TX TX_PLL_TYPE LCPLL TX_DATA_ENCODING RAW TX_BUFFER_MODE 1 TX_OUTCLK_SOURCE TXPROGDIVCLK TXPROGDIV_FREQ_ENABLE true TXPROGDIV_FREQ_SOURCE LCPLL TX_LANE_DESKEW_HDMI_ENABLE true TX_REFCLK_SOURCE R2 TX_USER_DATA_WIDTH 40 TX_INT_DATA_WIDTH 40 TX_LINE_RATE 8.0 TX_REFCLK_FREQUENCY 400.0 , LR8_SETTINGS , PRESET None GT_DIRECTION SIMPLEX_TX TX_PLL_TYPE LCPLL TX_DATA_ENCODING RAW TX_BUFFER_MODE 1 TX_OUTCLK_SOURCE TXPROGDIVCLK TXPROGDIV_FREQ_ENABLE true TXPROGDIV_FREQ_SOURCE LCPLL TX_LANE_DESKEW_HDMI_ENABLE true TX_REFCLK_SOURCE R2 TX_USER_DATA_WIDTH 40 TX_INT_DATA_WIDTH 40 TX_LINE_RATE 10.0 TX_REFCLK_FREQUENCY 400.0 , LR9_SETTINGS , PRESET None GT_DIRECTION SIMPLEX_TX TX_PLL_TYPE LCPLL TX_DATA_ENCODING RAW TX_BUFFER_MODE 1 TX_OUTCLK_SOURCE TXPROGDIVCLK TXPROGDIV_FREQ_ENABLE true TXPROGDIV_FREQ_SOURCE LCPLL TX_LANE_DESKEW_HDMI_ENABLE true TX_REFCLK_SOURCE R2 TX_USER_DATA_WIDTH 40 TX_INT_DATA_WIDTH 40 TX_LINE_RATE 12.0 TX_REFCLK_FREQUENCY 400.0";
xlnx,tx-frl-refclk-sel = <2>;
xlnx,use-oddr-for-tmds-clkout;
xlnx,edk-iptype = "PERIPHERAL";
xlnx,speedgrade = "-2MP";
xlnx,for-upgrade-package = "vsvh1760";
clock-names = "apb_clk" , "axi4lite_aclk" , "gt_refclk0_odiv2" , "gt_refclk1_odiv2" , "gt_refclk2_odiv2" , "gt_rxusrclk" , "gt_txusrclk" , "rx_axi4s_aclk" , "sb_aclk" , "tx_axi4s_aclk";
xlnx,int-hdmi-ver-cmptble = <3>;
xlnx,int-width = <0>;
xlnx,rx-sb-ports;
xlnx,tx-gt-ref-clock-freq = <400>;
xlnx,tx-buffer-bypass = <1>;
xlnx,nidru = <1>;
xlnx,rx-pll-selection = <8>;
xlnx,tx-tdata-width = <40>;
xlnx,transceiver-type = <0x8>;
xlnx,tx-max-gt-line-rate = <0xc>;
xlnx,check-refclk-selection = <0>;
xlnx,rx-tmds-clk-buffer = "bufg";
xlnx,vid-phy-rx-axi4s-ch-int-tdata-width = <40>;
xlnx,vid-phy-axi4lite-data-width = <32>;
xlnx,tx-video-clk-buffer = "bufg";
xlnx,rx-refclk-sel = <0>;
xlnx,use-gt-ch4-hdmi = <1>;
xlnx,for-upgrade-part = "xcve2802-vsvh1760-2MP-e-S";
xlnx,tx-refclk-sel = <1>;
xlnx,tx-clk-primitive = <0>;
xlnx,for-upgrade-device = "xcve2802";
xlnx,gt-direction = <0x3>;
xlnx,rx-protocol = <2>;
xlnx,tx-gt-line-rate = <12>;
xlnx,dru-gain-g1 = <9>;
xlnx,vid-phy-tx-axi4s-ch-tuser-width = <1>;
xlnx,dru-gain-g2 = <4>;
xlnx,int-debug = <0>;
xlnx,rx-eq-mode = "LPM";
xlnx,rx-no-of-channels = <4>;
xlnx,rx-gt-ref-clock-freq = <400>;
xlnx,vid-phy-control-sb-rx-tdata-width = <1>;
xlnx,device = "xcve2802";
xlnx,tx-no-of-channels = <4>;
xlnx,component-name = "exdes_hdmi_gt_controller_0";
hdmiphy_ss_0_hdmi_gt_controllerrxphy_lane0: rx_axi4s_ch0v_hdmi_rxss1 {
#phy-cells = <4>;
};
hdmiphy_ss_0_hdmi_gt_controllerrxphy_lane1: rx_axi4s_ch1v_hdmi_rxss1 {
#phy-cells = <4>;
};
hdmiphy_ss_0_hdmi_gt_controllerrxphy_lane2: rx_axi4s_ch2v_hdmi_rxss1 {
#phy-cells = <4>;
};
hdmiphy_ss_0_hdmi_gt_controllerrxphy_lane3: rx_axi4s_ch3v_hdmi_rxss1 {
#phy-cells = <4>;
};
hdmiphy_ss_0_hdmi_gt_controllertxphy_lane0: tx_axi4s_ch0v_hdmi_txss1 {
#phy-cells = <4>;
};
hdmiphy_ss_0_hdmi_gt_controllertxphy_lane1: tx_axi4s_ch1v_hdmi_txss1 {
#phy-cells = <4>;
};
hdmiphy_ss_0_hdmi_gt_controllertxphy_lane2: tx_axi4s_ch2v_hdmi_txss1 {
#phy-cells = <4>;
};
hdmiphy_ss_0_hdmi_gt_controllertxphy_lane3: tx_axi4s_ch3v_hdmi_txss1 {
#phy-cells = <4>;
};
};
The following system-user.dtsi entries need to be appended for various platforms to support onboard redriver components, which cannot be generated by the SDT tool.
Below is the
system-user.dtsifile used for designs targeting the VCK190, VEK280, and VEK385 platforms. This reference assumes that both the Rx and Tx data paths are enabled in the design.
&amba_pl {
ref40: ref40m {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <40000000>;
};
xfmc: xv_fmc {
compatible = "vfmc";
/* xlnx,board-type = [00]; (This is for vek280/vek385 board)
xlnx,board-type = [01]; (This is for zcu102 board)
xlnx,board-type = [02]; (This is for zcu106 board)
xlnx,board-type = [03]; (This is for vck190 board) */
xlnx,board-type = [00];
};
};
&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>;
};
Below is the
system-user.dtsifile used for designs targeting the ZCU102, ZCU106 platforms. This reference assumes that both the Rx and Tx data paths are enabled in the design.
&amba_pl {
xfmc: xv_fmc {
compatible = "vfmc";
/* xlnx,board-type = [00]; (This is for vek280/vek385 board)
xlnx,board-type = [01]; (This is for zcu102 board)
xlnx,board-type = [02]; (This is for zcu106 board)
xlnx,board-type = [03]; (This is for vck190 board) */
xlnx,board-type = [00];
};
};
&amba {
ref40: ref40m {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <40000000>;
};
};
&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>;
};
};
DEBUG Capability
HDMI 2.1 PHY Linux driver implements the capability to tap IP status at pre-defined points in the control flow. User can enable the debug taps by uncommenting the pre-processor directive (#define DEBUG) to monitor the progress within the driver. All debug prints are sent to serial console and can be viewed in kernel dmesg buffer.
How to capture register dump
Create a script on target and name it as dumpmem.sh. Paste below content in that script.
#!/bin/sh
# Usage dumpmem.sh ADDR OFFSET
base=$1
counter=0
while [ $counter -lt $2 ];
do
offset=$(($counter*4))
reg_addr=$(($base + $offset))
reg_addr=`printf "0x%X\n" $reg_addr`
output=$(devmem $reg_addr)
delimiter=": "
echo $reg_addr$delimiter$output
counter=$(($counter+1))
done
echo All done |
Now run below command to dump the registers of Vphy
# In the below command, first parameter is the base address of the IP (vphy) in this case and second parameter is the number of registers to be read
./dumpmem.sh 0x80120000 206 |
Boards Supported
Driver has been tested on following boards
zcu102 Rev 1.0
VEK280 Rev B03
Change Log
2025.2
2025.1
2024.2
2024.1
Summary:
phy: xilinx-xhdmiphy: Fix GT pll-selection allowed range of values
phy: xilinx-xhdmiphy: Add pll-selection allowed range of values for GTYP/GTYE5
phy: xilinx-xhdmiphy: Configure retimer at FRL training linerate
phy: xilinx-xhdmiphy: Select FRL clock source after configuring in HDMI 2.1 mode
phy: xilinx-xhdmiphy: Clear all the config flags after being served
phy: xilinx-xhdmiphy: Fix configuring retimer chip in HDMI 2.1 mode
2023.2
2023.1
Summary:
phy: xilinx-xhdmiphy: Support duplex mode for GTYE5 and GTYP
phy: xilinx-xhdmiphy: Disable all the interrupts irrespective of direction
phy: xilinx-xhdmiphy: Get resolutions < 1920x1080@60 working
phy: xilinx-xhdmiphy: Make the rxch4-sel GPIO as an optional property
phy: xilinx-xhdmiphy: Add support for HDMI 2.1 pass-through mode
2022.2
2022.1
Related Links
© 2025 Advanced Micro Devices, Inc. Privacy Policy