Message ID | 20240218-keee-u32-cleanup-v4-4-71f13b7c3e60@lunn.ch (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | drivers: net: Convert EEE handling to use linkmode bitmaps | expand |
On Sun, Feb 18, 2024 at 11:07:01AM -0600, Andrew Lunn wrote: > Convert the tables to make use of ETHTOOL link mode bits, rather than > the old u32 SUPPORTED speeds. Make use of the linkmode helps to set > bits and compare linkmodes. As a result, the _u32 members of keee are > no longer used, a step towards removing them. > > Signed-off-by: Andrew Lunn <andrew@lunn.ch> > --- > drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c | 48 ++++++++++++------------ > 1 file changed, 25 insertions(+), 23 deletions(-) > > diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c ... > @@ -3436,28 +3437,29 @@ ixgbe_get_eee_fw(struct ixgbe_adapter *adapter, struct ethtool_keee *edata) > if (rc) > return rc; > > - edata->lp_advertised_u32 = 0; > for (i = 0; i < ARRAY_SIZE(ixgbe_lp_map); ++i) { > if (info[0] & ixgbe_lp_map[i].lp_advertised) > - edata->lp_advertised_u32 |= ixgbe_lp_map[i].mac_speed; > + linkmode_set_bit(ixgbe_lp_map[i].link_mode, > + edata->lp_advertised); > } > > - edata->supported_u32 = 0; > for (i = 0; i < ARRAY_SIZE(ixgbe_ls_map); ++i) { > if (hw->phy.eee_speeds_supported & ixgbe_ls_map[i].mac_speed) > - edata->supported_u32 |= ixgbe_ls_map[i].supported; > + linkmode_set_bit(ixgbe_lp_map[i].link_mode, > + edata->lp_advertised); Hi Andrew, should this be edata->supported rather than edata->lp_advertised? > } > > - edata->advertised_u32 = 0; > for (i = 0; i < ARRAY_SIZE(ixgbe_ls_map); ++i) { > if (hw->phy.eee_speeds_advertised & ixgbe_ls_map[i].mac_speed) > - edata->advertised_u32 |= ixgbe_ls_map[i].supported; > + linkmode_set_bit(ixgbe_lp_map[i].link_mode, > + edata->advertised); > } > > - edata->eee_enabled = !!edata->advertised_u32; > + edata->eee_enabled = !linkmode_empty(edata->advertised); > edata->tx_lpi_enabled = edata->eee_enabled; > - if (edata->advertised_u32 & edata->lp_advertised_u32) > - edata->eee_active = true; > + > + linkmode_and(common, edata->advertised, edata->lp_advertised); > + edata->eee_active = !linkmode_empty(common); > > return 0; > } ...
On Tue, Feb 20, 2024 at 12:06:43PM +0000, Simon Horman wrote: > On Sun, Feb 18, 2024 at 11:07:01AM -0600, Andrew Lunn wrote: > > Convert the tables to make use of ETHTOOL link mode bits, rather than > > the old u32 SUPPORTED speeds. Make use of the linkmode helps to set > > bits and compare linkmodes. As a result, the _u32 members of keee are > > no longer used, a step towards removing them. > > > > Signed-off-by: Andrew Lunn <andrew@lunn.ch> > > --- > > drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c | 48 ++++++++++++------------ > > 1 file changed, 25 insertions(+), 23 deletions(-) > > > > diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c > > ... > > > @@ -3436,28 +3437,29 @@ ixgbe_get_eee_fw(struct ixgbe_adapter *adapter, struct ethtool_keee *edata) > > if (rc) > > return rc; > > > > - edata->lp_advertised_u32 = 0; > > for (i = 0; i < ARRAY_SIZE(ixgbe_lp_map); ++i) { > > if (info[0] & ixgbe_lp_map[i].lp_advertised) > > - edata->lp_advertised_u32 |= ixgbe_lp_map[i].mac_speed; > > + linkmode_set_bit(ixgbe_lp_map[i].link_mode, > > + edata->lp_advertised); > > } > > > > - edata->supported_u32 = 0; > > for (i = 0; i < ARRAY_SIZE(ixgbe_ls_map); ++i) { > > if (hw->phy.eee_speeds_supported & ixgbe_ls_map[i].mac_speed) > > - edata->supported_u32 |= ixgbe_ls_map[i].supported; > > + linkmode_set_bit(ixgbe_lp_map[i].link_mode, > > + edata->lp_advertised); > > Hi Andrew, > > should this be edata->supported rather than edata->lp_advertised? Correct :-( Andrew
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c index b1e7338a4ed1..a0879f125146 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c @@ -3403,30 +3403,31 @@ static int ixgbe_get_module_eeprom(struct net_device *dev, static const struct { ixgbe_link_speed mac_speed; - u32 supported; + u32 link_mode; } ixgbe_ls_map[] = { - { IXGBE_LINK_SPEED_10_FULL, SUPPORTED_10baseT_Full }, - { IXGBE_LINK_SPEED_100_FULL, SUPPORTED_100baseT_Full }, - { IXGBE_LINK_SPEED_1GB_FULL, SUPPORTED_1000baseT_Full }, - { IXGBE_LINK_SPEED_2_5GB_FULL, SUPPORTED_2500baseX_Full }, - { IXGBE_LINK_SPEED_10GB_FULL, SUPPORTED_10000baseT_Full }, + { IXGBE_LINK_SPEED_10_FULL, ETHTOOL_LINK_MODE_10baseT_Full_BIT }, + { IXGBE_LINK_SPEED_100_FULL, ETHTOOL_LINK_MODE_100baseT_Full_BIT }, + { IXGBE_LINK_SPEED_1GB_FULL, ETHTOOL_LINK_MODE_1000baseT_Full_BIT }, + { IXGBE_LINK_SPEED_2_5GB_FULL, ETHTOOL_LINK_MODE_2500baseX_Full_BIT }, + { IXGBE_LINK_SPEED_10GB_FULL, ETHTOOL_LINK_MODE_10000baseT_Full_BIT }, }; static const struct { u32 lp_advertised; - u32 mac_speed; + u32 link_mode; } ixgbe_lp_map[] = { - { FW_PHY_ACT_UD_2_100M_TX_EEE, SUPPORTED_100baseT_Full }, - { FW_PHY_ACT_UD_2_1G_T_EEE, SUPPORTED_1000baseT_Full }, - { FW_PHY_ACT_UD_2_10G_T_EEE, SUPPORTED_10000baseT_Full }, - { FW_PHY_ACT_UD_2_1G_KX_EEE, SUPPORTED_1000baseKX_Full }, - { FW_PHY_ACT_UD_2_10G_KX4_EEE, SUPPORTED_10000baseKX4_Full }, - { FW_PHY_ACT_UD_2_10G_KR_EEE, SUPPORTED_10000baseKR_Full}, + { FW_PHY_ACT_UD_2_100M_TX_EEE, ETHTOOL_LINK_MODE_100baseT_Full_BIT }, + { FW_PHY_ACT_UD_2_1G_T_EEE, ETHTOOL_LINK_MODE_1000baseT_Full_BIT }, + { FW_PHY_ACT_UD_2_10G_T_EEE, ETHTOOL_LINK_MODE_10000baseT_Full_BIT }, + { FW_PHY_ACT_UD_2_1G_KX_EEE, ETHTOOL_LINK_MODE_1000baseKX_Full_BIT }, + { FW_PHY_ACT_UD_2_10G_KX4_EEE, ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT }, + { FW_PHY_ACT_UD_2_10G_KR_EEE, ETHTOOL_LINK_MODE_10000baseKR_Full_BIT}, }; static int ixgbe_get_eee_fw(struct ixgbe_adapter *adapter, struct ethtool_keee *edata) { + __ETHTOOL_DECLARE_LINK_MODE_MASK(common); u32 info[FW_PHY_ACT_DATA_COUNT] = { 0 }; struct ixgbe_hw *hw = &adapter->hw; int rc; @@ -3436,28 +3437,29 @@ ixgbe_get_eee_fw(struct ixgbe_adapter *adapter, struct ethtool_keee *edata) if (rc) return rc; - edata->lp_advertised_u32 = 0; for (i = 0; i < ARRAY_SIZE(ixgbe_lp_map); ++i) { if (info[0] & ixgbe_lp_map[i].lp_advertised) - edata->lp_advertised_u32 |= ixgbe_lp_map[i].mac_speed; + linkmode_set_bit(ixgbe_lp_map[i].link_mode, + edata->lp_advertised); } - edata->supported_u32 = 0; for (i = 0; i < ARRAY_SIZE(ixgbe_ls_map); ++i) { if (hw->phy.eee_speeds_supported & ixgbe_ls_map[i].mac_speed) - edata->supported_u32 |= ixgbe_ls_map[i].supported; + linkmode_set_bit(ixgbe_lp_map[i].link_mode, + edata->lp_advertised); } - edata->advertised_u32 = 0; for (i = 0; i < ARRAY_SIZE(ixgbe_ls_map); ++i) { if (hw->phy.eee_speeds_advertised & ixgbe_ls_map[i].mac_speed) - edata->advertised_u32 |= ixgbe_ls_map[i].supported; + linkmode_set_bit(ixgbe_lp_map[i].link_mode, + edata->advertised); } - edata->eee_enabled = !!edata->advertised_u32; + edata->eee_enabled = !linkmode_empty(edata->advertised); edata->tx_lpi_enabled = edata->eee_enabled; - if (edata->advertised_u32 & edata->lp_advertised_u32) - edata->eee_active = true; + + linkmode_and(common, edata->advertised, edata->lp_advertised); + edata->eee_active = !linkmode_empty(common); return 0; } @@ -3504,7 +3506,7 @@ static int ixgbe_set_eee(struct net_device *netdev, struct ethtool_keee *edata) return -EINVAL; } - if (eee_data.advertised_u32 != edata->advertised_u32) { + if (!linkmode_equal(eee_data.advertised, edata->advertised)) { e_err(drv, "Setting EEE advertised speeds is not supported\n"); return -EINVAL;
Convert the tables to make use of ETHTOOL link mode bits, rather than the old u32 SUPPORTED speeds. Make use of the linkmode helps to set bits and compare linkmodes. As a result, the _u32 members of keee are no longer used, a step towards removing them. Signed-off-by: Andrew Lunn <andrew@lunn.ch> --- drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c | 48 ++++++++++++------------ 1 file changed, 25 insertions(+), 23 deletions(-)