Xilinx HDMI 2.1 PHY driver

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.

Figure 1: Video IP layer

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

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

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.dtsi file 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.dtsi file 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

Related Links

 

© 2025 Advanced Micro Devices, Inc. Privacy Policy