From mboxrd@z Thu Jan 1 00:00:00 1970 From: Doug Berger Subject: [PATCH net-next 2/2] net: bcmgenet: abort suspend on error Date: Fri, 16 Nov 2018 18:00:22 -0800 Message-ID: <1542420022-30251-3-git-send-email-opendmb@gmail.com> References: <1542420022-30251-1-git-send-email-opendmb@gmail.com> Cc: Florian Fainelli , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, YueHaibing , Doug Berger To: "David S. Miller" Return-path: In-Reply-To: <1542420022-30251-1-git-send-email-opendmb@gmail.com> Sender: linux-kernel-owner@vger.kernel.org List-Id: netdev.vger.kernel.org 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 --- 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 01c8499fd87f..983245c0867c 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c @@ -3717,6 +3717,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.7.4