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.

AIF2 SERDES Re FRAMESYCN Issue

Hi,

I have a problem with AIF2 Serdes resync when I unplug the fiber cable and plug it again. After I plug the cable, the link SD Rx  status does not come to FRAME SYNC state again. The only way to sync is to call Serdes Reset function. However, the thing is that serdes reset kill my other link status for a short time which I do not want to have. Is there any solution for serdes resync issue? Can we just reset individual link serdes settings? The driver resets whole macro b8/b4.

My setup: I am doing Loopback test. That is, I am supplying SFP Tx out directly to the its own Rx input.  

Thanks

  • Hi,
    Working with experts on this post. We will get back to you. Thank you for your patience.
  • Hi Raj,

    Any update about the SD sync issue? Please let me know if you get something asap.

    Thanks,
    Mustafa
  • Hello,

    Since this is in the RX, can you try forcing the Serdes RX to low and then enabling it again to see if it helps?

    Pseudo Code:

    1. If fsync error detected, Force serdes signal detect Low. 

    2. Force serdes signal detect high. 

    3. Check fsync again.

    Here are the APIs for the Serdes Signal Detect. 

    CSL_IDEF_INLINE void CSL_Serdes_Force_Signal_Detect_Low(uint32_t base_addr,
    uint32_t num_lanes,
    uint8_t lane_mask)
    {
    uint32_t lane_num;

    /* Force SERDES Signal Detect LO (Reset CDR, Att and Boost) */
    for(lane_num=0; lane_num<num_lanes; lane_num++)
    {
    if ((lane_mask & (1<<lane_num))!=0)
    {
    CSL_FINSR(*(volatile uint32_t *)(base_addr + 0x200*(lane_num+1) + 0x04),2,1, 0x2);
    }
    }
    }

    CSL_IDEF_INLINE void CSL_Serdes_Force_Signal_Detect_Enable(uint32_t base_addr,
    uint32_t lane_num)
    {
    CSL_FINSR(*(volatile uint32_t *)(base_addr + 0x200*(lane_num+1) + 0x04),2,1,0);
    }

  • Hi,

    Thanks for your help. But it did not work. I am still getting 0x00000308 value from SD Rx status register for the down link.
    When I follow below serdes reset functions. It comes back to sync state again:

    CSL_AIF2SerdesShutdown(CSL_AIF2_SERDES_B8_CFG_REGS);
    if (!CSL_AIF2SerdesIsReset(CSL_AIF2_SERDES_B8_CFG_REGS)) {
    AIF_serdesRestoreDefault(CSL_AIF2_SERDES_B8_CFG_REGS);
    }

    However, this turns down all links in B8 macro for a short time, is there any way to apply these functions to specific link only so that other links ll not be affected by the action?

    Note: Other functions in SerdesReset are already line-specific.

    Thanks,
    Mustafa

  • Hello,

    If serdes restore default is the only way that the recovery is happening, then all the lanes will be impacted. There is a common lane (comlane) which is tied to all the lanes in a macro and when it is restored, it will impact all lanes. So unfortunately restoring a single lane is not possible. 

    Regards,

    Arun

  • Hi,

    Thanks Arun,

    So, why don't we get sync again after re-plugging the fiber cable? What is the reason behind this issue? Btw when I unplug the Tx side of one link ONLY (Rx side is left plugged), and the link state go down to 0x00000308 and when I plug it again, it magically transits to ST3 sync state.

    Lastly, if we plug a link during run time, and it will not get sync, how can we use AIF2 dynamic Link add/remove property?

    Thanks,
    Mustafa