net: bcmgenet: move bcmgenet_power_up into resume_noirq
The bcmgenet_power_up() function is moved from the resume method to the resume_noirq method for symmetry with the suspend_noirq method. This allows the wol_active flag to be removed. The UMAC_IRQ_WAKE_EVENT interrupts that can be unmasked by the bcmgenet_wol_power_down_cfg() function are now re-masked by the bcmgenet_wol_power_up_cfg() function at the resume_noirq level as well. Signed-off-by: Doug Berger <opendmb@gmail.com> Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com> Link: https://patch.msgid.link/20250306192643.2383632-13-opendmb@gmail.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
f1bacae8b6
commit
ffce2bedd3
@@ -4038,8 +4038,20 @@ static int bcmgenet_resume_noirq(struct device *d)
|
||||
reg = bcmgenet_intrl2_0_readl(priv, INTRL2_CPU_STAT);
|
||||
if (reg & UMAC_IRQ_WAKE_EVENT)
|
||||
pm_wakeup_event(&priv->pdev->dev, 0);
|
||||
|
||||
/* From WOL-enabled suspend, switch to regular clock */
|
||||
bcmgenet_power_up(priv, GENET_POWER_WOL_MAGIC);
|
||||
}
|
||||
|
||||
/* If this is an internal GPHY, power it back on now, before UniMAC is
|
||||
* brought out of reset as absolutely no UniMAC activity is allowed
|
||||
*/
|
||||
if (priv->internal_phy)
|
||||
bcmgenet_power_up(priv, GENET_POWER_PASSIVE);
|
||||
|
||||
/* take MAC out of reset */
|
||||
bcmgenet_umac_reset(priv);
|
||||
|
||||
bcmgenet_intrl2_0_writel(priv, UMAC_IRQ_WAKE_EVENT, INTRL2_CPU_CLEAR);
|
||||
|
||||
return 0;
|
||||
@@ -4055,18 +4067,6 @@ static int bcmgenet_resume(struct device *d)
|
||||
if (!netif_running(dev))
|
||||
return 0;
|
||||
|
||||
/* From WOL-enabled suspend, switch to regular clock */
|
||||
if (device_may_wakeup(d) && priv->wolopts)
|
||||
bcmgenet_power_up(priv, GENET_POWER_WOL_MAGIC);
|
||||
|
||||
/* If this is an internal GPHY, power it back on now, before UniMAC is
|
||||
* brought out of reset as absolutely no UniMAC activity is allowed
|
||||
*/
|
||||
if (priv->internal_phy)
|
||||
bcmgenet_power_up(priv, GENET_POWER_PASSIVE);
|
||||
|
||||
bcmgenet_umac_reset(priv);
|
||||
|
||||
init_umac(priv);
|
||||
|
||||
phy_init_hw(dev->phydev);
|
||||
|
||||
@@ -641,7 +641,6 @@ struct bcmgenet_priv {
|
||||
struct clk *clk_wol;
|
||||
u32 wolopts;
|
||||
u8 sopass[SOPASS_MAX];
|
||||
bool wol_active;
|
||||
|
||||
struct bcmgenet_mib_counters mib;
|
||||
|
||||
|
||||
@@ -199,7 +199,6 @@ int bcmgenet_wol_power_down_cfg(struct bcmgenet_priv *priv,
|
||||
retries);
|
||||
|
||||
clk_prepare_enable(priv->clk_wol);
|
||||
priv->wol_active = 1;
|
||||
|
||||
if (hfb_enable) {
|
||||
bcmgenet_hfb_reg_writel(priv, hfb_enable,
|
||||
@@ -238,13 +237,12 @@ void bcmgenet_wol_power_up_cfg(struct bcmgenet_priv *priv,
|
||||
return;
|
||||
}
|
||||
|
||||
if (!priv->wol_active)
|
||||
return; /* failed to suspend so skip the rest */
|
||||
|
||||
priv->wol_active = 0;
|
||||
clk_disable_unprepare(priv->clk_wol);
|
||||
priv->crc_fwd_en = 0;
|
||||
|
||||
bcmgenet_intrl2_0_writel(priv, UMAC_IRQ_WAKE_EVENT,
|
||||
INTRL2_CPU_MASK_SET);
|
||||
|
||||
/* Disable Magic Packet Detection */
|
||||
if (priv->wolopts & (WAKE_MAGIC | WAKE_MAGICSECURE)) {
|
||||
reg = bcmgenet_umac_readl(priv, UMAC_MPD_CTRL);
|
||||
|
||||
Reference in New Issue
Block a user