#define LAN867X_REG_IRQ_1_CTL 0x001C
 #define LAN867X_REG_IRQ_2_CTL 0x001D
+#define LAN867X_REG_STS2 0x0019
+
+#define LAN867x_RESET_COMPLETE_STS BIT(11)
 
 /* The arrays below are pulled from the following table from AN1699
  * Access MMD Address Value Mask
 {
        int err;
 
+       /* The chip completes a reset in 3us, we might get here earlier than
+        * that, as an added margin we'll conditionally sleep 5us.
+        */
+       err = phy_read_mmd(phydev, MDIO_MMD_VEND2, LAN867X_REG_STS2);
+       if (err < 0)
+               return err;
+
+       if (!(err & LAN867x_RESET_COMPLETE_STS)) {
+               udelay(5);
+               err = phy_read_mmd(phydev, MDIO_MMD_VEND2, LAN867X_REG_STS2);
+               if (err < 0)
+                       return err;
+               if (!(err & LAN867x_RESET_COMPLETE_STS)) {
+                       phydev_err(phydev, "PHY reset failed\n");
+                       return -ENODEV;
+               }
+       }
+
        /* Reference to AN1699
         * https://ww1.microchip.com/downloads/aemDocuments/documents/AIS/ProductDocuments/SupportingCollateral/AN-LAN8670-1-2-config-60001699.pdf
         * AN1699 says Read, Modify, Write, but the Write is not required if the