#define PL_OFFSET 0x700
 #define PCIE_PHY_DEBUG_R0 (PL_OFFSET + 0x28)
 #define PCIE_PHY_DEBUG_R1 (PL_OFFSET + 0x2c)
+#define PCIE_PHY_DEBUG_R1_XMLH_LINK_IN_TRAINING        (1 << 29)
+#define PCIE_PHY_DEBUG_R1_XMLH_LINK_UP         (1 << 4)
 
 #define PCIE_PHY_CTRL (PL_OFFSET + 0x114)
 #define PCIE_PHY_CTRL_DATA_LOC 0
 {
        u32 rc, ltssm, rx_valid, temp;
 
-       /* link is debug bit 36, debug register 1 starts at bit 32 */
-       rc = readl(pp->dbi_base + PCIE_PHY_DEBUG_R1) & (0x1 << (36 - 32));
-       if (rc)
-               return -EAGAIN;
+       /*
+        * Test if the PHY reports that the link is up and also that
+        * the link training finished.  It might happen that the PHY
+        * reports the link is already up, but the link training bit
+        * is still set, so make sure to check the training is done
+        * as well here.
+        */
+       rc = readl(pp->dbi_base + PCIE_PHY_DEBUG_R1);
+       if ((rc & PCIE_PHY_DEBUG_R1_XMLH_LINK_UP) &&
+           !(rc & PCIE_PHY_DEBUG_R1_XMLH_LINK_IN_TRAINING))
+               return 1;
 
        /*
         * From L0, initiate MAC entry to gen2 if EP/RC supports gen2.