summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Krummenacher <max.krummenacher@toradex.com>2021-03-17 17:39:02 +0100
committerMax Krummenacher <max.krummenacher@toradex.com>2021-03-17 18:06:37 +0100
commit49374f838aeaf9a402cdaeac2c261d21bdca787a (patch)
treecf8eaf641132f36366516526d90d35048e8c3ade
parent3d37dbda319904972fecdec3c1c0d98ea0d08bbf (diff)
net: fec: make sure the phy hw gets re-initalised on resume
The PHY provides configurable skew/delay for RGMII. Make sure that on resume if the PHY's power supply was cut the PHY's registers are initialized again. While at it move the related phy irq disable right before setting the pins to sleep state symmetrical to how the phy irq enable is placed in resume. Related-to: ELB-3340 Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com>
-rw-r--r--drivers/net/ethernet/freescale/fec_main.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
index c0c677c3501a..7d34e70482e1 100644
--- a/drivers/net/ethernet/freescale/fec_main.c
+++ b/drivers/net/ethernet/freescale/fec_main.c
@@ -4058,8 +4058,6 @@ static int __maybe_unused fec_suspend(struct device *dev)
if (fep->wol_flag & FEC_WOL_FLAG_ENABLE)
fep->wol_flag |= FEC_WOL_FLAG_SLEEP_ON;
phy_stop(ndev->phydev);
- if (fep->reg_phy)
- disable_irq(ndev->phydev->irq);
napi_disable(&fep->napi);
netif_tx_lock_bh(ndev);
netif_device_detach(ndev);
@@ -4067,6 +4065,8 @@ static int __maybe_unused fec_suspend(struct device *dev)
fec_stop(ndev);
if (!(fep->wol_flag & FEC_WOL_FLAG_ENABLE)) {
fec_irqs_disable(ndev);
+ if (fep->reg_phy)
+ disable_irq(ndev->phydev->irq);
pinctrl_pm_select_sleep_state(&fep->pdev->dev);
} else {
fec_enet_enter_stop_mode(fep);
@@ -4135,8 +4135,10 @@ static int __maybe_unused fec_resume(struct device *dev)
fep->wol_flag &= ~FEC_WOL_FLAG_SLEEP_ON;
} else {
pinctrl_pm_select_default_state(&fep->pdev->dev);
- if (fep->reg_phy)
+ if (fep->reg_phy) {
+ phy_init_hw(ndev->phydev);
enable_irq(ndev->phydev->irq);
+ }
}
fec_restart(ndev);
netif_tx_lock_bh(ndev);