Skip to content

Commit 9136e1f

Browse files
pgreenwaanguy11
authored andcommitted
ice: refactor PHY type to ethtool link mode
Refactor ice_phy_type_to_ethtool to use phy_type_[low|high]_lkup table to map PHY type to AQ link speed and ethtool link mode. This removes complexity and simplifies future changes. Signed-off-by: Paul Greenwalt <paul.greenwalt@intel.com> Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com> (A Contingent worker at Intel) Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
1 parent 578fb09 commit 9136e1f

File tree

3 files changed

+141
-274
lines changed

3 files changed

+141
-274
lines changed

drivers/net/ethernet/intel/ice/ice.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
#include <linux/pkt_sched.h>
3333
#include <linux/if_bridge.h>
3434
#include <linux/ctype.h>
35+
#include <linux/linkmode.h>
3536
#include <linux/bpf.h>
3637
#include <linux/btf.h>
3738
#include <linux/auxiliary_bus.h>

drivers/net/ethernet/intel/ice/ice_ethtool.c

Lines changed: 35 additions & 274 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
/* ethtool support for ice */
55

66
#include "ice.h"
7+
#include "ice_ethtool.h"
78
#include "ice_flow.h"
89
#include "ice_fltr.h"
910
#include "ice_lib.h"
@@ -1658,15 +1659,26 @@ ice_mask_min_supported_speeds(struct ice_hw *hw,
16581659
*phy_types_low &= ~ICE_PHY_TYPE_LOW_MASK_MIN_1G;
16591660
}
16601661

1661-
#define ice_ethtool_advertise_link_mode(aq_link_speed, ethtool_link_mode) \
1662-
do { \
1663-
if (req_speeds & (aq_link_speed) || \
1664-
(!req_speeds && \
1665-
(advert_phy_type_lo & phy_type_mask_lo || \
1666-
advert_phy_type_hi & phy_type_mask_hi))) \
1667-
ethtool_link_ksettings_add_link_mode(ks, advertising,\
1668-
ethtool_link_mode); \
1669-
} while (0)
1662+
/**
1663+
* ice_linkmode_set_bit - set link mode bit
1664+
* @phy_to_ethtool: PHY type to ethtool link mode struct to set
1665+
* @ks: ethtool link ksettings struct to fill out
1666+
* @req_speeds: speed requested by user
1667+
* @advert_phy_type: advertised PHY type
1668+
* @phy_type: PHY type
1669+
*/
1670+
static void
1671+
ice_linkmode_set_bit(const struct ice_phy_type_to_ethtool *phy_to_ethtool,
1672+
struct ethtool_link_ksettings *ks, u32 req_speeds,
1673+
u64 advert_phy_type, u32 phy_type)
1674+
{
1675+
linkmode_set_bit(phy_to_ethtool->link_mode, ks->link_modes.supported);
1676+
1677+
if (req_speeds & phy_to_ethtool->aq_link_speed ||
1678+
(!req_speeds && advert_phy_type & BIT(phy_type)))
1679+
linkmode_set_bit(phy_to_ethtool->link_mode,
1680+
ks->link_modes.advertising);
1681+
}
16701682

16711683
/**
16721684
* ice_phy_type_to_ethtool - convert the phy_types to ethtool link modes
@@ -1682,11 +1694,10 @@ ice_phy_type_to_ethtool(struct net_device *netdev,
16821694
struct ice_pf *pf = vsi->back;
16831695
u64 advert_phy_type_lo = 0;
16841696
u64 advert_phy_type_hi = 0;
1685-
u64 phy_type_mask_lo = 0;
1686-
u64 phy_type_mask_hi = 0;
16871697
u64 phy_types_high = 0;
16881698
u64 phy_types_low = 0;
1689-
u16 req_speeds;
1699+
u32 req_speeds;
1700+
u32 i;
16901701

16911702
req_speeds = vsi->port_info->phy.link_info.req_speeds;
16921703

@@ -1743,272 +1754,22 @@ ice_phy_type_to_ethtool(struct net_device *netdev,
17431754
advert_phy_type_hi = vsi->port_info->phy.phy_type_high;
17441755
}
17451756

1746-
ethtool_link_ksettings_zero_link_mode(ks, supported);
1747-
ethtool_link_ksettings_zero_link_mode(ks, advertising);
1748-
1749-
phy_type_mask_lo = ICE_PHY_TYPE_LOW_100BASE_TX |
1750-
ICE_PHY_TYPE_LOW_100M_SGMII;
1751-
if (phy_types_low & phy_type_mask_lo) {
1752-
ethtool_link_ksettings_add_link_mode(ks, supported,
1753-
100baseT_Full);
1754-
1755-
ice_ethtool_advertise_link_mode(ICE_AQ_LINK_SPEED_100MB,
1756-
100baseT_Full);
1757-
}
1758-
1759-
phy_type_mask_lo = ICE_PHY_TYPE_LOW_1000BASE_T |
1760-
ICE_PHY_TYPE_LOW_1G_SGMII;
1761-
if (phy_types_low & phy_type_mask_lo) {
1762-
ethtool_link_ksettings_add_link_mode(ks, supported,
1763-
1000baseT_Full);
1764-
ice_ethtool_advertise_link_mode(ICE_AQ_LINK_SPEED_1000MB,
1765-
1000baseT_Full);
1766-
}
1767-
1768-
phy_type_mask_lo = ICE_PHY_TYPE_LOW_1000BASE_KX;
1769-
if (phy_types_low & phy_type_mask_lo) {
1770-
ethtool_link_ksettings_add_link_mode(ks, supported,
1771-
1000baseKX_Full);
1772-
ice_ethtool_advertise_link_mode(ICE_AQ_LINK_SPEED_1000MB,
1773-
1000baseKX_Full);
1774-
}
1775-
1776-
phy_type_mask_lo = ICE_PHY_TYPE_LOW_1000BASE_SX |
1777-
ICE_PHY_TYPE_LOW_1000BASE_LX;
1778-
if (phy_types_low & phy_type_mask_lo) {
1779-
ethtool_link_ksettings_add_link_mode(ks, supported,
1780-
1000baseX_Full);
1781-
ice_ethtool_advertise_link_mode(ICE_AQ_LINK_SPEED_1000MB,
1782-
1000baseX_Full);
1783-
}
1784-
1785-
phy_type_mask_lo = ICE_PHY_TYPE_LOW_2500BASE_T;
1786-
if (phy_types_low & phy_type_mask_lo) {
1787-
ethtool_link_ksettings_add_link_mode(ks, supported,
1788-
2500baseT_Full);
1789-
ice_ethtool_advertise_link_mode(ICE_AQ_LINK_SPEED_2500MB,
1790-
2500baseT_Full);
1791-
}
1792-
1793-
phy_type_mask_lo = ICE_PHY_TYPE_LOW_2500BASE_X |
1794-
ICE_PHY_TYPE_LOW_2500BASE_KX;
1795-
if (phy_types_low & phy_type_mask_lo) {
1796-
ethtool_link_ksettings_add_link_mode(ks, supported,
1797-
2500baseX_Full);
1798-
ice_ethtool_advertise_link_mode(ICE_AQ_LINK_SPEED_2500MB,
1799-
2500baseX_Full);
1800-
}
1801-
1802-
phy_type_mask_lo = ICE_PHY_TYPE_LOW_5GBASE_T |
1803-
ICE_PHY_TYPE_LOW_5GBASE_KR;
1804-
if (phy_types_low & phy_type_mask_lo) {
1805-
ethtool_link_ksettings_add_link_mode(ks, supported,
1806-
5000baseT_Full);
1807-
ice_ethtool_advertise_link_mode(ICE_AQ_LINK_SPEED_5GB,
1808-
5000baseT_Full);
1809-
}
1810-
1811-
phy_type_mask_lo = ICE_PHY_TYPE_LOW_10GBASE_T |
1812-
ICE_PHY_TYPE_LOW_10G_SFI_DA |
1813-
ICE_PHY_TYPE_LOW_10G_SFI_AOC_ACC |
1814-
ICE_PHY_TYPE_LOW_10G_SFI_C2C;
1815-
if (phy_types_low & phy_type_mask_lo) {
1816-
ethtool_link_ksettings_add_link_mode(ks, supported,
1817-
10000baseT_Full);
1818-
ice_ethtool_advertise_link_mode(ICE_AQ_LINK_SPEED_10GB,
1819-
10000baseT_Full);
1820-
}
1821-
1822-
phy_type_mask_lo = ICE_PHY_TYPE_LOW_10GBASE_KR_CR1;
1823-
if (phy_types_low & phy_type_mask_lo) {
1824-
ethtool_link_ksettings_add_link_mode(ks, supported,
1825-
10000baseKR_Full);
1826-
ice_ethtool_advertise_link_mode(ICE_AQ_LINK_SPEED_10GB,
1827-
10000baseKR_Full);
1828-
}
1829-
1830-
phy_type_mask_lo = ICE_PHY_TYPE_LOW_10GBASE_SR;
1831-
if (phy_types_low & phy_type_mask_lo) {
1832-
ethtool_link_ksettings_add_link_mode(ks, supported,
1833-
10000baseSR_Full);
1834-
ice_ethtool_advertise_link_mode(ICE_AQ_LINK_SPEED_10GB,
1835-
10000baseSR_Full);
1836-
}
1837-
1838-
phy_type_mask_lo = ICE_PHY_TYPE_LOW_10GBASE_LR;
1839-
if (phy_types_low & phy_type_mask_lo) {
1840-
ethtool_link_ksettings_add_link_mode(ks, supported,
1841-
10000baseLR_Full);
1842-
ice_ethtool_advertise_link_mode(ICE_AQ_LINK_SPEED_10GB,
1843-
10000baseLR_Full);
1844-
}
1845-
1846-
phy_type_mask_lo = ICE_PHY_TYPE_LOW_25GBASE_T |
1847-
ICE_PHY_TYPE_LOW_25GBASE_CR |
1848-
ICE_PHY_TYPE_LOW_25GBASE_CR_S |
1849-
ICE_PHY_TYPE_LOW_25GBASE_CR1 |
1850-
ICE_PHY_TYPE_LOW_25G_AUI_AOC_ACC |
1851-
ICE_PHY_TYPE_LOW_25G_AUI_C2C;
1852-
if (phy_types_low & phy_type_mask_lo) {
1853-
ethtool_link_ksettings_add_link_mode(ks, supported,
1854-
25000baseCR_Full);
1855-
ice_ethtool_advertise_link_mode(ICE_AQ_LINK_SPEED_25GB,
1856-
25000baseCR_Full);
1857-
}
1858-
1859-
phy_type_mask_lo = ICE_PHY_TYPE_LOW_25GBASE_SR |
1860-
ICE_PHY_TYPE_LOW_25GBASE_LR;
1861-
if (phy_types_low & phy_type_mask_lo) {
1862-
ethtool_link_ksettings_add_link_mode(ks, supported,
1863-
25000baseSR_Full);
1864-
ice_ethtool_advertise_link_mode(ICE_AQ_LINK_SPEED_25GB,
1865-
25000baseSR_Full);
1866-
}
1867-
1868-
phy_type_mask_lo = ICE_PHY_TYPE_LOW_25GBASE_KR |
1869-
ICE_PHY_TYPE_LOW_25GBASE_KR_S |
1870-
ICE_PHY_TYPE_LOW_25GBASE_KR1;
1871-
if (phy_types_low & phy_type_mask_lo) {
1872-
ethtool_link_ksettings_add_link_mode(ks, supported,
1873-
25000baseKR_Full);
1874-
ice_ethtool_advertise_link_mode(ICE_AQ_LINK_SPEED_25GB,
1875-
25000baseKR_Full);
1876-
}
1877-
1878-
phy_type_mask_lo = ICE_PHY_TYPE_LOW_40GBASE_KR4;
1879-
if (phy_types_low & phy_type_mask_lo) {
1880-
ethtool_link_ksettings_add_link_mode(ks, supported,
1881-
40000baseKR4_Full);
1882-
ice_ethtool_advertise_link_mode(ICE_AQ_LINK_SPEED_40GB,
1883-
40000baseKR4_Full);
1884-
}
1885-
1886-
phy_type_mask_lo = ICE_PHY_TYPE_LOW_40GBASE_CR4 |
1887-
ICE_PHY_TYPE_LOW_40G_XLAUI_AOC_ACC |
1888-
ICE_PHY_TYPE_LOW_40G_XLAUI;
1889-
if (phy_types_low & phy_type_mask_lo) {
1890-
ethtool_link_ksettings_add_link_mode(ks, supported,
1891-
40000baseCR4_Full);
1892-
ice_ethtool_advertise_link_mode(ICE_AQ_LINK_SPEED_40GB,
1893-
40000baseCR4_Full);
1894-
}
1895-
1896-
phy_type_mask_lo = ICE_PHY_TYPE_LOW_40GBASE_SR4;
1897-
if (phy_types_low & phy_type_mask_lo) {
1898-
ethtool_link_ksettings_add_link_mode(ks, supported,
1899-
40000baseSR4_Full);
1900-
ice_ethtool_advertise_link_mode(ICE_AQ_LINK_SPEED_40GB,
1901-
40000baseSR4_Full);
1902-
}
1903-
1904-
phy_type_mask_lo = ICE_PHY_TYPE_LOW_40GBASE_LR4;
1905-
if (phy_types_low & phy_type_mask_lo) {
1906-
ethtool_link_ksettings_add_link_mode(ks, supported,
1907-
40000baseLR4_Full);
1908-
ice_ethtool_advertise_link_mode(ICE_AQ_LINK_SPEED_40GB,
1909-
40000baseLR4_Full);
1910-
}
1911-
1912-
phy_type_mask_lo = ICE_PHY_TYPE_LOW_50GBASE_CR2 |
1913-
ICE_PHY_TYPE_LOW_50G_LAUI2_AOC_ACC |
1914-
ICE_PHY_TYPE_LOW_50G_LAUI2 |
1915-
ICE_PHY_TYPE_LOW_50G_AUI2_AOC_ACC |
1916-
ICE_PHY_TYPE_LOW_50G_AUI2 |
1917-
ICE_PHY_TYPE_LOW_50GBASE_CP |
1918-
ICE_PHY_TYPE_LOW_50GBASE_SR |
1919-
ICE_PHY_TYPE_LOW_50G_AUI1_AOC_ACC |
1920-
ICE_PHY_TYPE_LOW_50G_AUI1;
1921-
if (phy_types_low & phy_type_mask_lo) {
1922-
ethtool_link_ksettings_add_link_mode(ks, supported,
1923-
50000baseCR2_Full);
1924-
ice_ethtool_advertise_link_mode(ICE_AQ_LINK_SPEED_50GB,
1925-
50000baseCR2_Full);
1926-
}
1927-
1928-
phy_type_mask_lo = ICE_PHY_TYPE_LOW_50GBASE_KR2 |
1929-
ICE_PHY_TYPE_LOW_50GBASE_KR_PAM4;
1930-
if (phy_types_low & phy_type_mask_lo) {
1931-
ethtool_link_ksettings_add_link_mode(ks, supported,
1932-
50000baseKR2_Full);
1933-
ice_ethtool_advertise_link_mode(ICE_AQ_LINK_SPEED_50GB,
1934-
50000baseKR2_Full);
1935-
}
1936-
1937-
phy_type_mask_lo = ICE_PHY_TYPE_LOW_50GBASE_SR2 |
1938-
ICE_PHY_TYPE_LOW_50GBASE_LR2 |
1939-
ICE_PHY_TYPE_LOW_50GBASE_FR |
1940-
ICE_PHY_TYPE_LOW_50GBASE_LR;
1941-
if (phy_types_low & phy_type_mask_lo) {
1942-
ethtool_link_ksettings_add_link_mode(ks, supported,
1943-
50000baseSR2_Full);
1944-
ice_ethtool_advertise_link_mode(ICE_AQ_LINK_SPEED_50GB,
1945-
50000baseSR2_Full);
1946-
}
1947-
1948-
phy_type_mask_lo = ICE_PHY_TYPE_LOW_100GBASE_CR4 |
1949-
ICE_PHY_TYPE_LOW_100G_CAUI4_AOC_ACC |
1950-
ICE_PHY_TYPE_LOW_100G_CAUI4 |
1951-
ICE_PHY_TYPE_LOW_100G_AUI4_AOC_ACC |
1952-
ICE_PHY_TYPE_LOW_100G_AUI4 |
1953-
ICE_PHY_TYPE_LOW_100GBASE_CR_PAM4;
1954-
phy_type_mask_hi = ICE_PHY_TYPE_HIGH_100G_CAUI2_AOC_ACC |
1955-
ICE_PHY_TYPE_HIGH_100G_CAUI2 |
1956-
ICE_PHY_TYPE_HIGH_100G_AUI2_AOC_ACC |
1957-
ICE_PHY_TYPE_HIGH_100G_AUI2;
1958-
if (phy_types_low & phy_type_mask_lo ||
1959-
phy_types_high & phy_type_mask_hi) {
1960-
ethtool_link_ksettings_add_link_mode(ks, supported,
1961-
100000baseCR4_Full);
1962-
ice_ethtool_advertise_link_mode(ICE_AQ_LINK_SPEED_100GB,
1963-
100000baseCR4_Full);
1964-
}
1965-
1966-
if (phy_types_low & ICE_PHY_TYPE_LOW_100GBASE_CP2) {
1967-
ethtool_link_ksettings_add_link_mode(ks, supported,
1968-
100000baseCR2_Full);
1969-
ice_ethtool_advertise_link_mode(ICE_AQ_LINK_SPEED_100GB,
1970-
100000baseCR2_Full);
1971-
}
1972-
1973-
if (phy_types_low & ICE_PHY_TYPE_LOW_100GBASE_SR4) {
1974-
ethtool_link_ksettings_add_link_mode(ks, supported,
1975-
100000baseSR4_Full);
1976-
ice_ethtool_advertise_link_mode(ICE_AQ_LINK_SPEED_100GB,
1977-
100000baseSR4_Full);
1978-
}
1979-
1980-
if (phy_types_low & ICE_PHY_TYPE_LOW_100GBASE_SR2) {
1981-
ethtool_link_ksettings_add_link_mode(ks, supported,
1982-
100000baseSR2_Full);
1983-
ice_ethtool_advertise_link_mode(ICE_AQ_LINK_SPEED_100GB,
1984-
100000baseSR2_Full);
1985-
}
1986-
1987-
phy_type_mask_lo = ICE_PHY_TYPE_LOW_100GBASE_LR4 |
1988-
ICE_PHY_TYPE_LOW_100GBASE_DR;
1989-
if (phy_types_low & phy_type_mask_lo) {
1990-
ethtool_link_ksettings_add_link_mode(ks, supported,
1991-
100000baseLR4_ER4_Full);
1992-
ice_ethtool_advertise_link_mode(ICE_AQ_LINK_SPEED_100GB,
1993-
100000baseLR4_ER4_Full);
1994-
}
1757+
linkmode_zero(ks->link_modes.supported);
1758+
linkmode_zero(ks->link_modes.advertising);
19951759

1996-
phy_type_mask_lo = ICE_PHY_TYPE_LOW_100GBASE_KR4 |
1997-
ICE_PHY_TYPE_LOW_100GBASE_KR_PAM4;
1998-
if (phy_types_low & phy_type_mask_lo) {
1999-
ethtool_link_ksettings_add_link_mode(ks, supported,
2000-
100000baseKR4_Full);
2001-
ice_ethtool_advertise_link_mode(ICE_AQ_LINK_SPEED_100GB,
2002-
100000baseKR4_Full);
1760+
for (i = 0; i < BITS_PER_TYPE(u64); i++) {
1761+
if (phy_types_low & BIT_ULL(i))
1762+
ice_linkmode_set_bit(&phy_type_low_lkup[i], ks,
1763+
req_speeds, advert_phy_type_lo,
1764+
i);
20031765
}
20041766

2005-
if (phy_types_high & ICE_PHY_TYPE_HIGH_100GBASE_KR2_PAM4) {
2006-
ethtool_link_ksettings_add_link_mode(ks, supported,
2007-
100000baseKR2_Full);
2008-
ice_ethtool_advertise_link_mode(ICE_AQ_LINK_SPEED_100GB,
2009-
100000baseKR2_Full);
1767+
for (i = 0; i < BITS_PER_TYPE(u64); i++) {
1768+
if (phy_types_high & BIT_ULL(i))
1769+
ice_linkmode_set_bit(&phy_type_high_lkup[i], ks,
1770+
req_speeds, advert_phy_type_hi,
1771+
i);
20101772
}
2011-
20121773
}
20131774

20141775
#define TEST_SET_BITS_TIMEOUT 50

0 commit comments

Comments
 (0)