In the i.MX6sx Saber demo board, using the Freescale kernel: linux-rel_imx_4.1.15_2.0.0_ga, from the git.freescale.com the imx6_pcie_link_up the LINK_UP is never detected. Here is the code, I've added the printk that shows the register value.
while (1) {
rc = readl(pp->dbi_base + PCIE_PHY_DEBUG_R1);
if (printk_ratelimit())
printk(KERN_INFO "%s: Debug_R1: %#x; UP: %#x, Training: %#x\n",
__FUNCTION__, rc, PCIE_PHY_DEBUG_R1_XMLH_LINK_UP,
PCIE_PHY_DEBUG_R1_XMLH_LINK_IN_TRAINING);
if (!(rc & PCIE_PHY_DEBUG_R1_XMLH_LINK_UP))
break;
if (!(rc & PCIE_PHY_DEBUG_R1_XMLH_LINK_IN_TRAINING))
return 1;
imx6_pcie_link_up: Debug_R1: 0x8200000; UP: 0x10, Training: 0x20000000
Where can I look to determine why the link is never UP? What can I do to get the Link up? The imx6_pcie_link_up is called from imx6_pcie_wait_for_link(). The "link_up" is polled every 100 us, 20000 times.
Thanks for your help
Randy S.