Skip to content

Commit 94c89e7

Browse files
Edwin Peerdavem330
authored andcommitted
bnxt_en: refactor speed independent ethtool modes
A future patch in this series will change the algorithm used to determine ethtool speed and media modes. Extract the handling of the unrelated pause, autoneg modes into an independent function. Also separate FEC handling out of bnxt_fw_to_ethtool_*_spds(). No functional change. Signed-off-by: Edwin Peer <[email protected]> Signed-off-by: Michael Chan <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent d626367 commit 94c89e7

File tree

1 file changed

+40
-38
lines changed

1 file changed

+40
-38
lines changed

drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c

Lines changed: 40 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1730,7 +1730,7 @@ bnxt_get_link_mode(struct bnxt_link_info *link_info)
17301730
return link_mode;
17311731
}
17321732

1733-
#define BNXT_FW_TO_ETHTOOL_SPDS(fw_speeds, fw_pause, lk_ksettings, name)\
1733+
#define BNXT_FW_TO_ETHTOOL_SPDS(fw_speeds, lk_ksettings, name) \
17341734
{ \
17351735
if ((fw_speeds) & BNXT_LINK_SPEED_MSK_100MB) \
17361736
ethtool_link_ksettings_add_link_mode(lk_ksettings, name,\
@@ -1753,16 +1753,6 @@ bnxt_get_link_mode(struct bnxt_link_info *link_info)
17531753
if ((fw_speeds) & BNXT_LINK_SPEED_MSK_100GB) \
17541754
ethtool_link_ksettings_add_link_mode(lk_ksettings, name,\
17551755
100000baseCR4_Full);\
1756-
if ((fw_pause) & BNXT_LINK_PAUSE_RX) { \
1757-
ethtool_link_ksettings_add_link_mode(lk_ksettings, name,\
1758-
Pause); \
1759-
if (!((fw_pause) & BNXT_LINK_PAUSE_TX)) \
1760-
ethtool_link_ksettings_add_link_mode( \
1761-
lk_ksettings, name, Asym_Pause);\
1762-
} else if ((fw_pause) & BNXT_LINK_PAUSE_TX) { \
1763-
ethtool_link_ksettings_add_link_mode(lk_ksettings, name,\
1764-
Asym_Pause); \
1765-
} \
17661756
}
17671757

17681758
#define BNXT_ETHTOOL_TO_FW_SPDS(fw_speeds, lk_ksettings, name) \
@@ -1820,6 +1810,39 @@ bnxt_get_link_mode(struct bnxt_link_info *link_info)
18201810
(fw_speeds) |= BNXT_LINK_PAM4_SPEED_MSK_200GB; \
18211811
}
18221812

1813+
static void bnxt_get_ethtool_modes(struct bnxt_link_info *link_info,
1814+
struct ethtool_link_ksettings *lk_ksettings)
1815+
{
1816+
struct bnxt *bp = container_of(link_info, struct bnxt, link_info);
1817+
1818+
if (!(bp->phy_flags & BNXT_PHY_FL_NO_PAUSE)) {
1819+
ethtool_link_ksettings_add_link_mode(lk_ksettings, supported,
1820+
Pause);
1821+
ethtool_link_ksettings_add_link_mode(lk_ksettings, supported,
1822+
Asym_Pause);
1823+
}
1824+
1825+
if (link_info->support_auto_speeds || link_info->support_pam4_auto_speeds)
1826+
ethtool_link_ksettings_add_link_mode(lk_ksettings, supported,
1827+
Autoneg);
1828+
1829+
if (~link_info->autoneg & BNXT_AUTONEG_FLOW_CTRL)
1830+
return;
1831+
1832+
if (link_info->auto_pause_setting & BNXT_LINK_PAUSE_RX)
1833+
ethtool_link_ksettings_add_link_mode(lk_ksettings, advertising,
1834+
Pause);
1835+
if (hweight8(link_info->auto_pause_setting & BNXT_LINK_PAUSE_BOTH) == 1)
1836+
ethtool_link_ksettings_add_link_mode(lk_ksettings, advertising,
1837+
Asym_Pause);
1838+
if (link_info->lp_pause & BNXT_LINK_PAUSE_RX)
1839+
ethtool_link_ksettings_add_link_mode(lk_ksettings,
1840+
lp_advertising, Pause);
1841+
if (hweight8(link_info->lp_pause & BNXT_LINK_PAUSE_BOTH) == 1)
1842+
ethtool_link_ksettings_add_link_mode(lk_ksettings,
1843+
lp_advertising, Asym_Pause);
1844+
}
1845+
18231846
static void bnxt_fw_to_ethtool_advertised_fec(struct bnxt_link_info *link_info,
18241847
struct ethtool_link_ksettings *lk_ksettings)
18251848
{
@@ -1845,28 +1868,18 @@ static void bnxt_fw_to_ethtool_advertised_spds(struct bnxt_link_info *link_info,
18451868
struct ethtool_link_ksettings *lk_ksettings)
18461869
{
18471870
u16 fw_speeds = link_info->advertising;
1848-
u8 fw_pause = 0;
18491871

1850-
if (link_info->autoneg & BNXT_AUTONEG_FLOW_CTRL)
1851-
fw_pause = link_info->auto_pause_setting;
1852-
1853-
BNXT_FW_TO_ETHTOOL_SPDS(fw_speeds, fw_pause, lk_ksettings, advertising);
1872+
BNXT_FW_TO_ETHTOOL_SPDS(fw_speeds, lk_ksettings, advertising);
18541873
fw_speeds = link_info->advertising_pam4;
18551874
BNXT_FW_TO_ETHTOOL_PAM4_SPDS(fw_speeds, lk_ksettings, advertising);
1856-
bnxt_fw_to_ethtool_advertised_fec(link_info, lk_ksettings);
18571875
}
18581876

18591877
static void bnxt_fw_to_ethtool_lp_adv(struct bnxt_link_info *link_info,
18601878
struct ethtool_link_ksettings *lk_ksettings)
18611879
{
18621880
u16 fw_speeds = link_info->lp_auto_link_speeds;
1863-
u8 fw_pause = 0;
1864-
1865-
if (link_info->autoneg & BNXT_AUTONEG_FLOW_CTRL)
1866-
fw_pause = link_info->lp_pause;
18671881

1868-
BNXT_FW_TO_ETHTOOL_SPDS(fw_speeds, fw_pause, lk_ksettings,
1869-
lp_advertising);
1882+
BNXT_FW_TO_ETHTOOL_SPDS(fw_speeds, lk_ksettings, lp_advertising);
18701883
fw_speeds = link_info->lp_auto_pam4_link_speeds;
18711884
BNXT_FW_TO_ETHTOOL_PAM4_SPDS(fw_speeds, lk_ksettings, lp_advertising);
18721885
}
@@ -1895,25 +1908,11 @@ static void bnxt_fw_to_ethtool_support_fec(struct bnxt_link_info *link_info,
18951908
static void bnxt_fw_to_ethtool_support_spds(struct bnxt_link_info *link_info,
18961909
struct ethtool_link_ksettings *lk_ksettings)
18971910
{
1898-
struct bnxt *bp = container_of(link_info, struct bnxt, link_info);
18991911
u16 fw_speeds = link_info->support_speeds;
19001912

1901-
BNXT_FW_TO_ETHTOOL_SPDS(fw_speeds, 0, lk_ksettings, supported);
1913+
BNXT_FW_TO_ETHTOOL_SPDS(fw_speeds, lk_ksettings, supported);
19021914
fw_speeds = link_info->support_pam4_speeds;
19031915
BNXT_FW_TO_ETHTOOL_PAM4_SPDS(fw_speeds, lk_ksettings, supported);
1904-
1905-
if (!(bp->phy_flags & BNXT_PHY_FL_NO_PAUSE)) {
1906-
ethtool_link_ksettings_add_link_mode(lk_ksettings, supported,
1907-
Pause);
1908-
ethtool_link_ksettings_add_link_mode(lk_ksettings, supported,
1909-
Asym_Pause);
1910-
}
1911-
1912-
if (link_info->support_auto_speeds ||
1913-
link_info->support_pam4_auto_speeds)
1914-
ethtool_link_ksettings_add_link_mode(lk_ksettings, supported,
1915-
Autoneg);
1916-
bnxt_fw_to_ethtool_support_fec(link_info, lk_ksettings);
19171916
}
19181917

19191918
u32 bnxt_fw_to_ethtool_speed(u16 fw_link_speed)
@@ -1977,7 +1976,9 @@ static int bnxt_get_link_ksettings(struct net_device *dev,
19771976
link_info = &bp->link_info;
19781977

19791978
mutex_lock(&bp->link_lock);
1979+
bnxt_get_ethtool_modes(link_info, lk_ksettings);
19801980
bnxt_fw_to_ethtool_support_spds(link_info, lk_ksettings);
1981+
bnxt_fw_to_ethtool_support_fec(link_info, lk_ksettings);
19811982
link_mode = bnxt_get_link_mode(link_info);
19821983
if (link_mode != BNXT_LINK_MODE_UNKNOWN)
19831984
ethtool_params_from_link_mode(lk_ksettings, link_mode);
@@ -1986,6 +1987,7 @@ static int bnxt_get_link_ksettings(struct net_device *dev,
19861987

19871988
if (link_info->autoneg) {
19881989
bnxt_fw_to_ethtool_advertised_spds(link_info, lk_ksettings);
1990+
bnxt_fw_to_ethtool_advertised_fec(link_info, lk_ksettings);
19891991
ethtool_link_ksettings_add_link_mode(lk_ksettings,
19901992
advertising, Autoneg);
19911993
base->autoneg = AUTONEG_ENABLE;

0 commit comments

Comments
 (0)