r8169: consider that PHY reset may still be in progress after applying firmware
[sfrench/cifs-2.6.git] / drivers / net / ethernet / realtek / r8169_main.c
index 256bc4878ef1d54150eec711b18b4cd2fb24c592..11e6962a18e4251ab07c44bdef8191c33a86bddf 100644 (file)
@@ -2058,11 +2058,18 @@ static void rtl_release_firmware(struct rtl8169_private *tp)
 
 void r8169_apply_firmware(struct rtl8169_private *tp)
 {
+       int val;
+
        /* TODO: release firmware if rtl_fw_write_firmware signals failure. */
        if (tp->rtl_fw) {
                rtl_fw_write_firmware(tp, tp->rtl_fw);
                /* At least one firmware doesn't reset tp->ocp_base. */
                tp->ocp_base = OCP_STD_PHY_BASE;
+
+               /* PHY soft reset may still be in progress */
+               phy_read_poll_timeout(tp->phydev, MII_BMCR, val,
+                                     !(val & BMCR_RESET),
+                                     50000, 600000, true);
        }
 }