This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

SN65DP159: DP159 doesn't work with xilinx FPGA XC7Z015 GTP transciver

Part Number: SN65DP159

Hi,

  My project uses a DP159 as DisplayPort Retimer, the FPGA is xilinx XC7Z015.  I am using DisplayPort RX Subsystem v2.1 in the design ,the driver is provided by xilinx SDK, however the link training was always failed, no reference clock output from out_clkp/out_clkn.

The GPU is nVidia GTX1080, when the program runs, dp159 get hot.... The dp159 package marking is TI 77I AOGO G4.

(a)Does it  related to dp159 silicon revision?

(b) as slla358 says, there are two possible implementations for HPD: HPD routed around DP159 or HDP routed thru DP159, my board chooses route around HPD.

but software Initial  process first disabled HPD pass through and then enable HPD through DP159. Is it OK to commend  {0x0A, 0x3B} ?

(b)     /* DP159 Initialize */
       {0xFF, 0x00},
       {0x09, 0x36},
       {0x0A, 0x7B},
       {0x0D, 0x80},
       {0x0C, 0x6D},
       {0x10, 0x00},
       {0x16, 0xF1},
       {0xFF, 0x01},
       {0x00, 0x02},
       {0x04, 0x80},
       {0x05, 0x00},
       {0x08, 0x00},
       {0x0D, 0x02},
       {0x0E, 0x03},
       {0x01, 0x01},
       {0x02, 0x3F},
       {0x0B, 0x33},
       {0xA1, 0x02},
       {0xA4, 0x02},
       {0x10, 0xF0},
       {0x11, 0x30},
       {0x14, 0x00},
       {0x12, 0x03},
       {0x13, 0xFF},
       {0x13, 0x00},
       {0x30, 0xE0},
       {0x32, 0x00},
       {0x31, 0x00},
       {0x4D, 0x08},
       {0x4C, 0x01},
       {0x34, 0x01},
       {0x32, 0xF0},
       {0x32, 0x00},
       {0x33, 0xF0},
       {0xFF, 0x00},
       {0x0A, 0x3B},
       {0xFF, 0x01}

(c ) /* link training */

switch (ConfigType) {

case XDPRXSS_DP159_CT_TP1:
                       /* Enable bandgap, DISABLE PLL, clear A_LOCK_OVR */
                       XDpRxSs_Dp159Write(InstancePtr, XDPRXSS_DP159_IIC_SLAVE,
                               0x00, 0x02);

                       /* CP_EN = PLL (reference) mode */
                       XDpRxSs_Dp159Write(InstancePtr, XDPRXSS_DP159_IIC_SLAVE,
                               0x01, 0x01);

                       /* Set PLL control */
                       XDpRxSs_Dp159Write(InstancePtr, XDPRXSS_DP159_IIC_SLAVE,
                               0x0B, 0x33);

                       /* Set CP_CURRENT */
                       XDpRxSs_Dp159Write(InstancePtr, XDPRXSS_DP159_IIC_SLAVE,
                               0x02, 0x3F);


                       LCount = (LaneCount == XDPRXSS_DP159_LANE_COUNT_1) ?
                               0xE1 : (LaneCount == XDPRXSS_DP159_LANE_COUNT_2) ?
                                       0xC3:0x0F;
                       LRate = (LinkRate == XDPRXSS_DP159_HBR2)? 0x0:
                               (LinkRate == XDPRXSS_DP159_HBR) ? 0x1 : 0x2;

                       /* Enable RX lanes */
                       XDpRxSs_Dp159Write(InstancePtr, XDPRXSS_DP159_IIC_SLAVE,
                               0x30, LCount);

                       /* Enable Bandgap, Enable PLL, clear A_LOCK_OVR */
                       XDpRxSs_Dp159Write(InstancePtr, XDPRXSS_DP159_IIC_SLAVE,
                               0x00, 0x03);

                       /* Enable fixed EQ (to reset adaptive EQ logic) */
                       XDpRxSs_Dp159Write(InstancePtr, XDPRXSS_DP159_IIC_SLAVE,
                               0x4C, 0x01);

                       /* Set EQFTC and EQLEV (fixed EQ) */
                       XDpRxSs_Dp159Write(InstancePtr, XDPRXSS_DP159_IIC_SLAVE,
                               0x4D, (LRate << 4) |
                                       (XDPRXSS_DP159_EQ_LEV & 0x0F));

                       if (LinkRate == XDPRXSS_DP159_HBR2) {
                               Cpi = XDPRXSS_DP159_CPI_PD_HBR2;
                               PllCtrl = XDPRXSS_DP159_PLL_CTRL_PD_HBR2;
                       }
                       else if (LinkRate == XDPRXSS_DP159_HBR) {
                               Cpi = XDPRXSS_DP159_CPI_PD_HBR;
                               PllCtrl = XDPRXSS_DP159_PLL_CTRL_PD_HBR;
                       }
                       else {
                               Cpi = XDPRXSS_DP159_CPI_PD_RBR;
                               PllCtrl = XDPRXSS_DP159_PLL_CTRL_PD_RBR;
                       }

                       /* Enable TX lanes */
                       XDpRxSs_Dp159Write(InstancePtr, XDPRXSS_DP159_IIC_SLAVE,
                               0x10, LCount);

                       /* Enable PLL and Bandgap, set A_LOCK_OVR, and set
                        * expand LPRES
                        */
                       XDpRxSs_Dp159Write(InstancePtr, XDPRXSS_DP159_IIC_SLAVE,
                               0x00, 0x23);

                       /* Wait for PLL lock */
                       while ((ReadBuf == 0) && (Counter <
                                               XDPRXSS_DP159_LOCK_WAIT)) {
                               XDpRxSs_Dp159Read(InstancePtr,
                    XDPRXSS_DP159_IIC_SLAVE, 0x00, &ReadBuf);
                               ReadBuf &= 0x40; /* Lock status. */
                               Counter++;
                       }

                       /* CP_CURRENT */
                       XDpRxSs_Dp159Write(InstancePtr, XDPRXSS_DP159_IIC_SLAVE,
                               0x02, Cpi);

                       /* Set PLL Control */
                       XDpRxSs_Dp159Write(InstancePtr, XDPRXSS_DP159_IIC_SLAVE,
                               0x0B, PllCtrl);

                       /* CP_EN is PD mode */
                       XDpRxSs_Dp159Write(InstancePtr, XDPRXSS_DP159_IIC_SLAVE,
                               0x01, 0x02);

                       /* Select page 0*/
                       XDpRxSs_Dp159Write(InstancePtr, XDPRXSS_DP159_IIC_SLAVE,
                               0xFF, 0x00);

                       /* Set DP_TST_EN per #lanes, latch FIFO errors */
                       LCount = (LaneCount == XDPRXSS_DP159_LANE_COUNT_1) ?
                                       0x11 : (LaneCount ==
                                               XDPRXSS_DP159_LANE_COUNT_2) ?
                                                       0x31 : 0xF1;
                       XDpRxSs_Dp159Write(InstancePtr, XDPRXSS_DP159_IIC_SLAVE,
                               0x16, LCount);

                       /* Disable PV, allows char-align and 8b10 decode to
                        * operate
                        */
                       XDpRxSs_Dp159Write(InstancePtr, XDPRXSS_DP159_IIC_SLAVE,
                               0x10, 0x00);

                       /* Select page 1 */
                       XDpRxSs_Dp159Write(InstancePtr, XDPRXSS_DP159_IIC_SLAVE,
                               0xFF, 0x01);
                       break;

               case XDPRXSS_DP159_CT_TP2:
               case XDPRXSS_DP159_CT_TP3:
                       /* Enable adaptive EQ */
                       XDpRxSs_Dp159Write(InstancePtr, XDPRXSS_DP159_IIC_SLAVE,
                               0x4C, 0x03);

                       /* Select page 0 */
                       XDpRxSs_Dp159Write(InstancePtr, XDPRXSS_DP159_IIC_SLAVE,
                               0xFF, 0x00);

                       /* Clear BERT counters and TST_INTQ latches --
                        * Self-clearing in DP159
                        */
                       XDpRxSs_Dp159Write(InstancePtr, XDPRXSS_DP159_IIC_SLAVE,
                               0x15, 0x18);

                       /* Select page 1 */
                       XDpRxSs_Dp159Write(InstancePtr, XDPRXSS_DP159_IIC_SLAVE,
                               0xFF, 0x01);
                       break;

}