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.

XGE: timeout waiting for serdes link up

I changed defconfig and dtsi to enable XGE, but it does not work.

It shows the error message when booting.

XGE: timeout waiting for serdes link up

I checked the PCSR_RX_STAT, and it is always zero.

Thanks.

  • Welcome to the TI E2E forum. I hope you will find many good answers here and in the TI.com documents and in the TI Wiki Pages (for processor issues). Be sure to search those for helpful information and to browse for the questions others may have asked on similar topics (e2e.ti.com).

    Welcome to the Keystone Forum!

    This forum is for issues with keystone devices its peripherals as well as any SDK used on keystone platforms, including:

    1. MCSDK (Multicore Software Development Kit) 2. Desktop Linux SDK 3. MCSDK Video

    When asking a question, please include:

    Which version of MCSDK you are using Which processor and board platform (EVM & its revision) you are using If relevant, the version of your components If relevant, which version of the compiler and Code Composer Studio you are using If the issue happens with a specific API, please provide the source code used If the issue happens at run-time, please provide a detailed description of the problem and the expected behavior. Provide attach relevant Message Log or Kernel/Object View debug info or screen captures of the real time analysis tools.

    Thank you.

  • I use A66K2H14.

    rootfs is from mcsdk_3_00_04_18.

    error msg is from keystone_xgepcsr.c  k2serdes_check_lane()

    Oct  1 06:42:00 keystone-evm kernel: [   31.324488] XGE serdes config:
    Oct  1 06:42:00 keystone-evm kernel: [   31.327524]   ref_clk=156.25MHz, link_rate=10.3125G, lanes=2
    Oct  1 06:42:00 keystone-evm kernel: [   31.333163]   c1=2, c2=0, cm=2, tx_att=12, tx_vreg=4
    Oct  1 06:42:00 keystone-evm kernel: [   31.338100]   eq flags: vreg=1, cdfe=1, offset=1
    Oct  1 06:42:00 keystone-evm kernel: [   31.342699] XGE: serdes reset
    Oct  1 06:42:00 keystone-evm kernel: [   32.577034] XGE: timeout waiting for serdes link up
    Oct  1 06:42:00 keystone-evm kernel: [   32.582295] keystone-netcp 2f00000.netcp: Created interface "eth0"
    Oct  1 06:42:00 keystone-evm kernel: [   32.588450] keystone-netcp 2f00000.netcp: dma_chan_name xgetx0
    Oct  1 06:42:00 keystone-evm kernel: [   32.594271] XGE: serdes reset
    Oct  1 06:42:00 keystone-evm kernel: [   33.828624] XGE: timeout waiting for serdes link up
    Oct  1 06:42:00 keystone-evm kernel: [   33.833842] keystone-netcp 2f00000.netcp: Created interface "eth1"
    Oct  1 06:42:00 keystone-evm kernel: [   33.840007] keystone-netcp 2f00000.netcp: dma_chan_name xgetx1
    Oct  1 06:42:00 keystone-evm kernel: [   33.845815] XGE: serdes reset
    Oct  1 06:42:00 keystone-evm kernel: [   35.080155] XGE: timeout waiting for serdes link up


    In k2serdes_check_lane(), k2serdes_check_link_status() checked PCSR_RX_STATUS many times.

    I added one pr_info() in this function to check these variables.

    1165 int k2serdes_check_link_status(void __iomem *serdes,
    1166                   void __iomem *sw_regs,
    1167                   u32 lanes,
    1168                   u32 *current_state,
    1169                   u32 *lane_down)
    1170 {
    1171     u32 pcsr_rx_stat, blk_lock, blk_errs;
    1172     int loss, i, status = 1;
    1173
    1174     for (i = 0; i < lanes; i++) {
    1175         /* Rx Signal Loss bit in serdes lane control and status reg*/
    1176         loss = (k2serdes_readl(serdes, LANE_CTRL_STS_REG(i))) & 0x01;
    1177
    1178         /* Block Errors and Block Lock bits in PCSR rx status reg */
    1179         pcsr_rx_stat = k2serdes_readl(sw_regs, PCSR_RX_STATUS(i));
    1180         blk_lock = (pcsr_rx_stat >> 30) & 0x1;
    1181         blk_errs = (pcsr_rx_stat >> 16) & 0x0ff;
    1182 pr_info("++++++ lane %d loss=%d pcsr_rx_stat=0x%08x lock=0x%08x errs=0x%08x state=%d\n", i, loss, pcsr_rx_stat, blk_lock, blk_errs, current_state[i]);

    This line I added print this message many times, and value did not changed.

    [   31.413619] ++++++ lane 0 loss=0 pcsr_rx_stat=0x00000000 lock=0x00000000 errs=0x00000000 state=0
    [   31.423369] ++++++ lane 1 loss=0 pcsr_rx_stat=0x00000000 lock=0x00000000 errs=0x00000000 state=0

    I also tried to check PCSR_CTL in the same way, but it keeps zero when waiting for serdes link up.

    Thanks.