Skip to content

Commit

Permalink
Merge branch 'net-bcm-asp2-fix-fallout-from-phylib-eee-changes'
Browse files Browse the repository at this point in the history
Russell King says:

====================
net: bcm: asp2: fix fallout from phylib EEE changes

This series addresses the fallout from the phylib changes in the
Broadcom ASP2 driver.

The first patch uses phylib's copy of the LPI timer setting, which
means the driver no longer has to track this. It will be set in
hardware each time the adjust_link function is called when the link
is up, and will be read at initialisation time to set the current
value.

The second patch removes the driver's storage of tx_lpi_enabled,
which has become redundant since phylib managed EEE was merged. The
driver does nothing with this flag other than storing it.

The last patch converts the driver to use phylib's enable_tx_lpi
flag rather than trying to maintain its own copy.
====================

Link: https://patch.msgid.link/Z4aV3RmSZJ1WS3oR@shell.armlinux.org.uk
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
  • Loading branch information
Jakub Kicinski committed Jan 15, 2025
2 parents 7a1723d + 21f56ad commit c80bed9
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 50 deletions.
3 changes: 0 additions & 3 deletions drivers/net/ethernet/broadcom/asp2/bcmasp.h
Original file line number Diff line number Diff line change
Expand Up @@ -348,8 +348,6 @@ struct bcmasp_intf {
/* Used if per intf wol irq */
int wol_irq;
unsigned int wol_irq_enabled:1;

struct ethtool_keee eee;
};

#define NUM_NET_FILTERS 32
Expand Down Expand Up @@ -601,5 +599,4 @@ int bcmasp_netfilt_get_all_active(struct bcmasp_intf *intf, u32 *rule_locs,

void bcmasp_netfilt_suspend(struct bcmasp_intf *intf);

void bcmasp_eee_enable_set(struct bcmasp_intf *intf, bool enable);
#endif
39 changes: 0 additions & 39 deletions drivers/net/ethernet/broadcom/asp2/bcmasp_ethtool.c
Original file line number Diff line number Diff line change
Expand Up @@ -348,58 +348,19 @@ static int bcmasp_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd,
return err;
}

void bcmasp_eee_enable_set(struct bcmasp_intf *intf, bool enable)
{
u32 reg;

reg = umac_rl(intf, UMC_EEE_CTRL);
if (enable)
reg |= EEE_EN;
else
reg &= ~EEE_EN;
umac_wl(intf, reg, UMC_EEE_CTRL);

intf->eee.eee_enabled = enable;
}

static int bcmasp_get_eee(struct net_device *dev, struct ethtool_keee *e)
{
struct bcmasp_intf *intf = netdev_priv(dev);
struct ethtool_keee *p = &intf->eee;

if (!dev->phydev)
return -ENODEV;

e->tx_lpi_enabled = p->tx_lpi_enabled;
e->tx_lpi_timer = umac_rl(intf, UMC_EEE_LPI_TIMER);

return phy_ethtool_get_eee(dev->phydev, e);
}

static int bcmasp_set_eee(struct net_device *dev, struct ethtool_keee *e)
{
struct bcmasp_intf *intf = netdev_priv(dev);
struct ethtool_keee *p = &intf->eee;
int ret;

if (!dev->phydev)
return -ENODEV;

if (!p->eee_enabled) {
bcmasp_eee_enable_set(intf, false);
} else {
ret = phy_init_eee(dev->phydev, 0);
if (ret) {
netif_err(intf, hw, dev,
"EEE initialization failed: %d\n", ret);
return ret;
}

umac_wl(intf, e->tx_lpi_timer, UMC_EEE_LPI_TIMER);
intf->eee.tx_lpi_enabled = e->tx_lpi_enabled;
bcmasp_eee_enable_set(intf, true);
}

return phy_ethtool_set_eee(dev->phydev, e);
}

Expand Down
22 changes: 14 additions & 8 deletions drivers/net/ethernet/broadcom/asp2/bcmasp_intf.c
Original file line number Diff line number Diff line change
Expand Up @@ -619,7 +619,6 @@ static void bcmasp_adj_link(struct net_device *dev)
struct phy_device *phydev = dev->phydev;
u32 cmd_bits = 0, reg;
int changed = 0;
bool active;

if (intf->old_link != phydev->link) {
changed = 1;
Expand Down Expand Up @@ -677,8 +676,13 @@ static void bcmasp_adj_link(struct net_device *dev)
}
umac_wl(intf, reg, UMC_CMD);

active = phy_init_eee(phydev, 0) >= 0;
bcmasp_eee_enable_set(intf, active);
umac_wl(intf, phydev->eee_cfg.tx_lpi_timer, UMC_EEE_LPI_TIMER);
reg = umac_rl(intf, UMC_EEE_CTRL);
if (phydev->enable_tx_lpi)
reg |= EEE_EN;
else
reg &= ~EEE_EN;
umac_wl(intf, reg, UMC_EEE_CTRL);
}

reg = rgmii_rl(intf, RGMII_OOB_CNTRL);
Expand Down Expand Up @@ -1055,6 +1059,9 @@ static int bcmasp_netif_init(struct net_device *dev, bool phy_connect)

/* Indicate that the MAC is responsible for PHY PM */
phydev->mac_managed_pm = true;

/* Set phylib's copy of the LPI timer */
phydev->eee_cfg.tx_lpi_timer = umac_rl(intf, UMC_EEE_LPI_TIMER);
}

umac_reset(intf);
Expand Down Expand Up @@ -1331,7 +1338,8 @@ static void bcmasp_suspend_to_wol(struct bcmasp_intf *intf)
ASP_WAKEUP_INTR2_MASK_CLEAR);
}

if (intf->eee.eee_enabled && intf->parent->eee_fixup)
if (ndev->phydev && ndev->phydev->eee_cfg.eee_enabled &&
intf->parent->eee_fixup)
intf->parent->eee_fixup(intf, true);

netif_dbg(intf, wol, ndev, "entered WOL mode\n");
Expand Down Expand Up @@ -1373,7 +1381,8 @@ static void bcmasp_resume_from_wol(struct bcmasp_intf *intf)
{
u32 reg;

if (intf->eee.eee_enabled && intf->parent->eee_fixup)
if (intf->ndev->phydev && intf->ndev->phydev->eee_cfg.eee_enabled &&
intf->parent->eee_fixup)
intf->parent->eee_fixup(intf, false);

reg = umac_rl(intf, UMC_MPD_CTRL);
Expand Down Expand Up @@ -1404,9 +1413,6 @@ int bcmasp_interface_resume(struct bcmasp_intf *intf)

bcmasp_resume_from_wol(intf);

if (intf->eee.eee_enabled)
bcmasp_eee_enable_set(intf, true);

netif_device_attach(dev);

return 0;
Expand Down

0 comments on commit c80bed9

Please sign in to comment.