mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-06 07:34:03 -04:00
Merge branch 'net-bcm-asp2-fix-fallout-from-phylib-eee-changes'
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>
This commit is contained in:
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
@@ -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);
|
||||
@@ -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);
|
||||
@@ -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");
|
||||
@@ -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);
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user