Xilinx DisplayPort 1.4 FMC Card Linux Driver

The purpose of this page is to describe the Xilinx DisplayPort 1.4 FMC Linux driver to be used with the Xilinx DisplayPort 1.4 Subsystem IPs. For more information on the IP see the product guides PG299 and PG300.

Table of Contents

Introduction

The DisplayPort 1.4 Video FMC Card has 2 daughter card slots for Source and Sink connection cards. It uses a MegaChip MCDP6000 retimer chip for the sink side and a TI SN65DP141 redriver chip for the source side, and supports 4 lanes of 1.62Gbps, 2. 7Gbps 5. 4Gbps, and 8. 1Gbps. More information on the FMC card can be found on the manufacture TED’s site.

 

This DisplayPort 1.4 FMC card contains several I2C programmable devices. These devices can be mastered by either dedicated I2C pins of the FMC or I/O pins of the FMC. Below is a table of I2C slave devices and their addresses. Programming these devices is required for the DP 1.4 video solution to operate properly.

 

Component

Part Number

Salve Address

 

Component

Part Number

Salve Address

 

Video FMC card

 

 

I/O expander

PCA9674BS

0x64

I/O expander

PCA9674BS

0x65

PLL

LMK03318RHST

0x51

PLL

IDT8T49N241-999NLGI

0x7C

DP Tx Dongle

 

redriver

SN65DP141RLJR

0x05

DP Rx Dongle

 

retimer

MCDP6000

0x14

                                           Table 1 - List of I2C client modules on FMC card

 

Block diagram for DisplayPort signal path on FMC

Figure 1 - Block diagram for DP signal path

External view of the FMC card

Figure 2 - FMC Card Top view

Xilinx Video FMC driver overview

Xilinx Video FMC driver is the first driver which needs to be probed among the other drivers (DP 1.4 Rx driver, DP1.4 Tx driver ,Video PHY Controller driver) in the DP 1.4 video solution. It is developed as a package of all the I2C client drivers, where each driver is corresponded to the component mentioned in the Table 1.

Note : Xilinx FMC driver repo is present at : https://github.com/Xilinx/dp-modules/tree/master/dp/xfmc

Below I2C client drivers files aae listed and their functionalities are explained:

Xilinx-vfmc.c is a wrapper driver file from which all of the i2c client drivers are invoked and initialized.

  • fmc64.c  - It is a client drive for IO expander PCA9674BS with a I2C client address as 0x64. This will configure the IO expander to perform below operations

    • Disable Si5344

    • Set primary clock source for LMK03318 to IOCLKp(0)

    • Set secondary clock source for LMK03318 to IOCLKp(1)

    • Disable LMK61E2

  • fmc64.c - It is a client drive for IO expander PCA9674BS with a I2C client address as 0x65. This will configure the IO expander to perform below operations. It is be a one timer programmable after POR.

    • Enable LMK03318 -> In a power-down state the I2C bus becomes unusable.

    • Select IDT8T49N241 clock as source for FMC_GT_CLKp(0)

    • Select IDT8T49N241 clock as source for FMC_GT_CLKp(1)

    • Enable IDT8T49N241

  • tipower.c – It is a client driver for LMK03318RHST clock generator with a I2C client address 0x51. This will initialize the it to generate a constant clock. It is be a one timer programmable after POR.

  • Idt.c  - It is a client driver for IDT8T49N241-999NLGI clock generator with a I2C client address 0x7C. This will initialize the it to generate a constant clock. It is be a one timer programmable after POR.

  • dp141.c - It is a client driver for SN65DP141RLJR Tx redriver with a I2C client address 0x05. This will initialize the it to generate a constant clock. It is be a one timer programmable after POR.

  • mcdp6000.c   - It is a client driver for MCDP6000 retimer with a I2C client address 0x14. This will initialize the it to generate a constant clock

 MCDP6000 driver callback implementation

Along with the initialization, the MCDP6000 driver implements four callback functions which needs to be called from the DP 1.4 Rx driver interrupt context. Below is implementation done in the driver to achieve the same.

  • Register the mcdp6000 retimer function pointer with the private data structure of FMC driver.

 

  • Add the FMC driver device-tree node as a property in the DP 1.4 Rx driver so that it can access the private data member of FMC driver to call the retimer functions.

  • Please refer the DP 1.4 Rx driver page for retimer function call implementation.

PetaLinux Configuration Options to enable

  • Enable FMC drivers in PetaLinux.

    • 2021.1 and onwards FMC driver is built as out-of-tree kernel module and therefore required no kernel configuration. However, to enable the drive user must include it in the rootfs. Following steps are required to enable the driver.

    • Make sure the meta-user layer has the recipe-dp included. 

    • Add the recipe to the PetaLinux image. Edit project-spec/meta-user/conf/user-rootfsconfig and add the new recipe at the end

      CONFIG_kernel-module-dp
    • Next include the driver in the rootfs

      $petalinux-config -c rootfs
    • Select "user-pakages->modules->kernel-module-dp", save and exit

 

Device Tree Binding

  •  Add a device tree node for the top lever FMC driver to probe.  This has only one property which is for probing the driver.

xfmc: xv_fmc { compatible = "xilinx-vfmc"; };
  • Add device tree child nodes for all I2C client devices under the I2C master device tree node. Below is the example I2C master node with child nodes.

Boards Supported

Driver has been tested on the following boards

  1. ZCU102 Rev 1.0

  2. VCK190

  

Change Log

  • 2022.1

    • Summary:

      • 20cd192 xfmc: Correct the mcdp6000_reset_cr_path function

      • 1963d05 xfmc: Fix mcdp6000_read_reg and mcdp6000_modify_reg functions

      • 1625998 xfmc: Add support for different MCDP6000 revisions

      • 9f01707 xfmc: Fix retimer function pointer sequence

      • f7efb7f xfmc: implement mcdp6000 functions

      • a259806 xfmc: Implement retimer configuration functions

      • 93cdc62 xfmc: remove fmc calls from video phy driver

 

Related Links

 

© Copyright 2019 - 2022 Xilinx Inc. Privacy Policy