Part Number:XEVMK2LX
Tool/software:TI-RTOS
Support Path: /Product/Help with Device Selection/
I am checking the PHY loopback using the PCIe sample source.
(Reference document sprugs6d.pdf - 2.12.2 PHY Loopback)
– Set 0x2 (POLL_ACTIVE state) in LNK_STATE field of Port Force Link Register (PL_FORCE_LINK[LINK_STATE]=0x2).
– Set 0x1 in FORCE_LINK field of PL_FORCE_LINK To the state specified by LINK_STATE field (PL_FORCE_LINK [FORCE_LINK] = 0x1).
There is a problem with the setting of the above register. Attach code and log.
---------------------------------------------------------------------------------------------------------------
pcieRet_e skipDetectStateInLtssm(Pcie_Handle handle)
{
pcieRet_e retVal;
pcieRegisters_t setRegs;
pcieRegisters_t getRegs;
pciePlForceLinkReg_t plForceLink;
memset (&setRegs, 0, sizeof(setRegs));
memset (&getRegs, 0, sizeof(getRegs));
memset (&plForceLink, 0, sizeof(plForceLink));
getRegs.plForceLink = &plForceLink;
if ((retVal = Pcie_readRegs (handle, pcie_LOCATION_LOCAL, &getRegs)) != pcie_RET_OK)
{
System_printf ("Read plForceLink register failed!\n");
return retVal;
}
plForceLink.lnkState = 0x2;
plForceLink.forceLink = 0x1;
PCIE_logPrintf ("getRegs Force Link lnkState : %x\n",getRegs.plForceLink->lnkState);
PCIE_logPrintf ("getRegs Force Link forceLink: %x\n",getRegs.plForceLink->forceLink);
setRegs.plForceLink = &plForceLink;
if ((retVal = Pcie_writeRegs (handle, pcie_LOCATION_LOCAL, &setRegs)) != pcie_RET_OK)
{
System_printf ("SET plForceLink failed!\n");
return retVal;
}
cycleDelay(100);
memset (&getRegs, 0, sizeof(getRegs));
memset (&plForceLink, 0, sizeof(plForceLink));
getRegs.plForceLink = &plForceLink;
if (Pcie_readRegs (handle, pcie_LOCATION_LOCAL, &getRegs) != pcie_RET_OK)
{
PCIE_logPrintf ("Port Force Link Register failed!\n");
}
else
{
//PCIE_logPrintf ("getRegs Port Force Link lpeCnt: %x\n",plForceLink.lpeCnt);
PCIE_logPrintf ("getRegs Port Force Link lnkState : %x\n",plForceLink.lnkState);
PCIE_logPrintf ("getRegs Port Force Link forceLink: %x\n",plForceLink.forceLink);
//PCIE_logPrintf ("getRegs Port Force Link linkNum : %x\n",plForceLink.linkNum);
}
return pcie_RET_OK;
} /* skipDetectStateInLtssm */
--------------------------------------------------------------------------------------------------------------------------------
Console output contents
getRegs Force Link lnkState : 0x02
getRegs Force Link forceLink: 0x01
getRegs Port Force Link lnkState : 0x02
getRegs Port Force Link forceLink: 0x00
--------------------------------------------------------------------------------------------------------------------------------
I can not set the FORCE_LINK value in the PL_FORCE_LINK register.
I do not know why. Thank you for your help.