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.

66AK2H14: CSL_10GeSerdesFirmwareInit in 1000Base-KX

Part Number: 66AK2H14

Hi,

We are interfacing 2 66AK2H14 SOC in 1G through their XFI interface, configured as follow by the software :

______________________________________________________________________________________

memset(&pFWCfg, 0, sizeof(pFWCfg));

    pFWCfg.enable_autoneg[0]    = TRUE;
    pFWCfg.advertise_rate[0]    = CSL_SERDES_FORCE_1G;
    pFWCfg.enable_txpause[0]    = FALSE;
    pFWCfg.enable_rxpause[0]    = FALSE;
    pFWCfg.enable_10Gtrain[0]   = FALSE;
    pFWCfg.enable_fec[0]        = FALSE;

    pFWCfg.enable_autoneg[1]    = TRUE;
    pFWCfg.advertise_rate[1]    = CSL_SERDES_FORCE_1G;
    pFWCfg.enable_txpause[1]    = FALSE;
    pFWCfg.enable_rxpause[1]    = FALSE;
    pFWCfg.enable_10Gtrain[1]   = FALSE;
    pFWCfg.enable_fec[1]        = FALSE;

    memset(&serdesParams, 0, sizeof(serdesParams));


    serdesParams.base_addr = CSL_XGE_SERDES_CFG_REGS;
    serdesParams.peripheral_base_addr = (CSL_XGE_CFG_REGS + 0x600);
    serdesParams.num_lanes = 0x02; //NIMU_XGE_PORT_NUMBER;
    serdesParams.lane_mask = (1<<serdesParams.num_lanes) -1;


    CSL_10GeSerdesFirmwareInit
    (
        CSL_XGE_SERDES_CFG_REGS, //base_addr
        &pFWCfg,                 // *pFWCfg
        (uint64_t)0xFFFFF,// 4e20 = Extract from he MCSDK //0xfff, //0x7fffffffffffffff,      // uint64_t link_loss_timeout
        (uint32_t)0x01,   //0x01 historiquement                    // uint32_t txbclk_enable
        (uint32_t)0x02                    //NIMU_XGE_PORT_NUMBER    uint32_t num_lanes
    );

______________________________________________________________________________________

We've verified with a scope that both SOC enter in autonegotiation, and indicate that they are in 1000Base-KX

this picture show the 2 links (RX-TX) connected to each other :

link_autoneg

and so, the autoneg end, and the link pass in IDLE mode.

Autonegotiation END

then, when we check the status registers, located at 0x02F0 0114 for link 0 and 0x02F0 0214 for link 1 we can see the following result :

We can read 0x0000 0039 :

indicating that :

- LOCK is OK

- Autoneg is NOT complete

- No error during autoNeg

- Link is UP.

If we check also the registers located @ 0x0231 FFE0 & 0x0231 FFE4 we can read the following values : 

- LOSS = 0

- RX_OK = 1

-1G Link = 1

My qurestion is the following:

- While everything seems to be OK, why the autonegotiation_Complete bit does not set to 1 indicating that the link is operationnal?

Regards,

Yohann.