From 8a8d624a5d030436dfc2904a5215645d044119c1 Mon Sep 17 00:00:00 2001 From: Fugang Duan Date: Wed, 22 Jul 2015 12:42:40 +0800 Subject: [PATCH] MLK-11274 net: fec: add mii bus up_failed flag to reflect the real status Add mii bus up_failed flag to reflect the real mii bus status. Signed-off-by: Fugang Duan Reported-and-tested-by: Zhang Sanshan (cherry picked from commit: ea348e597501d44841a28d8ee099361e89d63520) --- drivers/net/ethernet/freescale/fec.h | 1 + drivers/net/ethernet/freescale/fec_main.c | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/freescale/fec.h b/drivers/net/ethernet/freescale/fec.h index c9a16caf541b..2982850cfdc9 100644 --- a/drivers/net/ethernet/freescale/fec.h +++ b/drivers/net/ethernet/freescale/fec.h @@ -540,6 +540,7 @@ struct fec_enet_private { struct mii_bus *mii_bus; int mii_timeout; int mii_bus_share; + bool miibus_up_failed; uint phy_speed; phy_interface_t phy_interface; struct device_node *phy_node; diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c index 48fd750f5ac4..0f944941ed91 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c @@ -2933,12 +2933,14 @@ fec_enet_open(struct net_device *ndev) device_set_wakeup_enable(&ndev->dev, fep->wol_flag & FEC_WOL_FLAG_ENABLE); + fep->miibus_up_failed = false; return 0; err_enet_mii_probe: fec_enet_free_buffers(ndev); err_enet_alloc: + fep->miibus_up_failed = true; if (!fep->mii_bus_share) fec_enet_clk_enable(ndev, false); clk_enable: @@ -3696,7 +3698,7 @@ static int __maybe_unused fec_suspend(struct device *dev) enable_irq_wake(fep->wake_irq); } fec_enet_clk_enable(ndev, false); - } else if (fep->mii_bus_share && !ndev->phydev) { + } else if (fep->mii_bus_share && fep->miibus_up_failed && !ndev->phydev) { fec_enet_clk_enable(ndev, false); pinctrl_pm_select_sleep_state(&fep->pdev->dev); } @@ -3754,6 +3756,8 @@ static int __maybe_unused fec_resume(struct device *dev) phy_start(ndev->phydev); } else if (fep->mii_bus_share && !ndev->phydev) { pinctrl_pm_select_default_state(&fep->pdev->dev); + fep->miibus_up_failed = true; + /* And then recovery mii bus */ fec_restore_mii_bus(ndev); } rtnl_unlock(); -- 2.17.1