diff options
author | Max Krummenacher <max.krummenacher@toradex.com> | 2021-03-17 17:39:02 +0100 |
---|---|---|
committer | Max Krummenacher <max.krummenacher@toradex.com> | 2021-03-17 18:06:37 +0100 |
commit | 49374f838aeaf9a402cdaeac2c261d21bdca787a (patch) | |
tree | cf8eaf641132f36366516526d90d35048e8c3ade | |
parent | 3d37dbda319904972fecdec3c1c0d98ea0d08bbf (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.c | 8 |
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); |