diff options
author | Fugang Duan <b38611@freescale.com> | 2015-07-22 12:42:40 +0800 |
---|---|---|
committer | Fugang Duan <b38611@freescale.com> | 2015-07-22 13:42:18 +0800 |
commit | ec775a455f9e75850e075398f1d4d943acd3d9c7 (patch) | |
tree | 70cdbef3138dfba7de3207d465d87008d5e8316f | |
parent | 8f50b1ea88c2f691fab8067551852db5a69e5b7e (diff) |
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 <B38611@freescale.com>
Reported-and-tested-by: Zhang Sanshan <B51434@freescale.com>
(cherry picked from commit: ea348e597501d44841a28d8ee099361e89d63520)
-rw-r--r-- | drivers/net/ethernet/freescale/fec.h | 1 | ||||
-rw-r--r-- | drivers/net/ethernet/freescale/fec_main.c | 6 |
2 files changed, 6 insertions, 1 deletions
diff --git a/drivers/net/ethernet/freescale/fec.h b/drivers/net/ethernet/freescale/fec.h index 4ec1cd4eee48..36b6b19c05fc 100644 --- a/drivers/net/ethernet/freescale/fec.h +++ b/drivers/net/ethernet/freescale/fec.h @@ -516,6 +516,7 @@ struct fec_enet_private { struct phy_device *phy_dev; 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 8ac6275dc23e..8a10ea73db8b 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c @@ -2873,12 +2873,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) pinctrl_pm_select_sleep_state(&fep->pdev->dev); return ret; @@ -3585,7 +3587,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 && !fep->phy_dev) { + } else if (fep->mii_bus_share && fep->miibus_up_failed && !fep->phy_dev) { fec_enet_clk_enable(ndev, false); pinctrl_pm_select_sleep_state(&fep->pdev->dev); } @@ -3643,6 +3645,8 @@ static int __maybe_unused fec_resume(struct device *dev) phy_start(fep->phy_dev); } else if (fep->mii_bus_share && !fep->phy_dev) { 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(); |