summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFugang Duan <b38611@freescale.com>2015-07-22 12:42:40 +0800
committerFugang Duan <b38611@freescale.com>2015-07-22 13:42:18 +0800
commitec775a455f9e75850e075398f1d4d943acd3d9c7 (patch)
tree70cdbef3138dfba7de3207d465d87008d5e8316f
parent8f50b1ea88c2f691fab8067551852db5a69e5b7e (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.h1
-rw-r--r--drivers/net/ethernet/freescale/fec_main.c6
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();