From: Doug Berger <[email protected]>

[ Upstream commit c5a54bbcececa36852807c36157a86d808b62310 ]

If an error occurs during suspension of the driver the driver should
restore the hardware configuration and return an error to force the
system to resume.

Fixes: 0db55093b566 ("net: bcmgenet: return correct value 'ret' from 
bcmgenet_power_down")
Signed-off-by: Doug Berger <[email protected]>
Reviewed-by: Florian Fainelli <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
---
 drivers/net/ethernet/broadcom/genet/bcmgenet.c     | 3 +++
 drivers/net/ethernet/broadcom/genet/bcmgenet_wol.c | 6 ++++++
 2 files changed, 9 insertions(+)

diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c 
b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
index 60abf9fab810..047fc0cf0263 100644
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
@@ -3722,6 +3722,9 @@ static int bcmgenet_suspend(struct device *d)
        /* Turn off the clocks */
        clk_disable_unprepare(priv->clk);
 
+       if (ret)
+               bcmgenet_resume(d);
+
        return ret;
 }
 #endif /* CONFIG_PM_SLEEP */
diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet_wol.c 
b/drivers/net/ethernet/broadcom/genet/bcmgenet_wol.c
index 2fbd027f0148..b3596e0ee47b 100644
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet_wol.c
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet_wol.c
@@ -186,9 +186,15 @@ void bcmgenet_wol_power_up_cfg(struct bcmgenet_priv *priv,
        }
 
        reg = bcmgenet_umac_readl(priv, UMAC_MPD_CTRL);
+       if (!(reg & MPD_EN))
+               return; /* already powered up so skip the rest */
        reg &= ~MPD_EN;
        bcmgenet_umac_writel(priv, reg, UMAC_MPD_CTRL);
 
+       reg = bcmgenet_hfb_reg_readl(priv, HFB_CTRL);
+       reg &= ~(RBUF_HFB_EN | RBUF_ACPI_EN);
+       bcmgenet_hfb_reg_writel(priv, reg, HFB_CTRL);
+
        /* Disable CRC Forward */
        reg = bcmgenet_umac_readl(priv, UMAC_CMD);
        reg &= ~CMD_CRC_FWD;
-- 
2.25.1



Reply via email to