diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
index 093a223fe408..e160aaa43be1 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
@@ -365,6 +365,11 @@ int stmmac_mdio_register(struct net_device *ndev)
goto bus_register_fail;
}
+ stmmac_mdio_write(new_bus, 0, 31, 2627);
+ stmmac_mdio_write(new_bus, 0, 25, 0x1801);
+ stmmac_mdio_write(new_bus, 0, 31, 0);
+ stmmac_mdio_write(new_bus, 0, 0, 0x8000);
+
if (priv->plat->phy_node || mdio_node)
goto bus_register_done;
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac4_lib.c b/drivers/net/ethernet/stmicro/stmmac/dwmac4_lib.c
index e40e312c00a4..14c93d600cc6 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac4_lib.c
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac4_lib.c
@@ -22,7 +22,7 @@ int dwmac4_dma_reset(void __iomem *ioaddr)
return readl_poll_timeout(ioaddr + DMA_BUS_MODE, value,
!(value & DMA_BUS_MODE_SFT_RESET),
- 500, 1000000);
+ 500, 1500000);
}
void dwmac4_set_rx_tail_ptr(void __iomem *ioaddr, u32 tail_ptr, u32 chan)
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk-tool.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk-tool.c
index 541788f9e2c8..6a49ad76328a 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk-tool.c
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk-tool.c
@@ -1306,7 +1306,7 @@ static int dwmac_rk_get_max_delayline(struct stmmac_priv *priv)
static int dwmac_rk_phy_poll_reset(struct stmmac_priv *priv, int addr)
{
/* Poll until the reset bit clears (50ms per retry == 0.6 sec) */
- unsigned int val, retries = 12;
+ unsigned int val, retries = 12 * 3;
int ret;
val = mdiobus_read(priv->mii, addr, MII_BMCR);
@@ -1366,7 +1366,7 @@ static int dwmac_rk_loopback_run(struct stmmac_priv *priv,
reset_control_deassert(priv->plat->stmmac_rst);
}
/* wait for phy and controller ready */
- usleep_range(100000, 200000);
+ usleep_range(1500000, 2000000);
dwmac_rk_set_loopback(priv, lb_priv->type, lb_priv->speed,
true, phy_addr, true);