Quantcast
Channel: Forums - Recent Threads
Viewing all articles
Browse latest Browse all 262198

RTOS/XEVMK2LX: PCIe link training failed with PHY loopback(Root Complex Mode)

$
0
0

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.


Viewing all articles
Browse latest Browse all 262198

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>