PS GTR 1000BaseX ZCU102

In this demo we shall show how to demo the PS GTR using 1000BaseX on the zcu102, and how to debug.


Since the ZCU102 cannot fully support the 1000Base X, we will place the GT into loopback mode so we can create a test environment that is as close as possible to 1000BaseX

Create the HW:

Here, I used Vivado 2018.1. The PCW can be seen below:


Generate Output Products, Create Wrapper, Generate Bitstream, and Export to SDK (to create the HDF)

Create Linux Image:

  • petalinux-create –t project –template zynqMP –n gt_loopback
  • cd gt loopback
  • petalinux-config –get-hw-description=<path to HDF>
  • Update GEM nodes for Fixed link (see appendix A)
  • Update Linux Kernel recipe to add patch to disable AN (See appendix B)
  • petalinux-build
  • cd images/linux
  • petalinux-package --boot --fpga system.bit --u-boot

Or, use the BSP I created here

  • petalinux-create -t project -s <path to bsp>.bsp

Testing on HW:

Place the Boot.bin, and image.ub onto an SD card and boot to u-boot:

Place the PS-GTR into loopback, and boot:

Bring the eth1 up (I didn’t add this to the alias in the DT. So, I needed to add this manually):

As you can see I need to read the pcs_status twice to see the link_status go high.

pcs_select (bit 11 in the network_config) is set too.

Resetting the GTR:

In the UG1085 V 1.8 page 800 there is a *note* about GTR reset is performed by a controller reset

The GEM reset can be seen here:

Register 0xFF5E0230 (CRL_APB)

Note: These registers are seen here 

So this should be a good reference for debugging:

/include/ "system-conf.dtsi"
/ {
   chosen {
      bootargs = "earlycon clk_ignore_unused";
      stdout-path = "serial0:115200n8";
&gem2 {
    phy-mode = "moca";
    fixed-link {
        speed = <1000>;
&gem3 {
    phy-mode = "moca";
    fixed-link {
        speed = <1000>;

Appendix A: Patching Linux Kernel:

Create the folder structure as shown below:

Copy the linux kernel patch to linux-xlnx

Update the linux-xlnx_%.bbappend as shown below:

SRC_URI_append = " file://0001_disable_an_linux.patch"

The patch can be seen here 0001_disable_an_linux.patch


This patch has only been tested on the xilinx-v2018.1 branch of the linux-xlnx, and is not supported by Xilinx WTS