From: kernel test robot <lkp@intel.com>
To: Xander Wilmink <xwilmink@gmail.com>, netdev@vger.kernel.org
Cc: oe-kbuild-all@lists.linux.dev,
Xander Wilmink <xwilmink@gmail.com>,
Jonas Jelonek <jelonek.jonas@gmail.com>
Subject: Re: [PATCH net-next] net: sfp: Add quirk for Dell M14MK module
Date: Thu, 20 Aug 2026 12:34:30 +0800 [thread overview]
Message-ID: <202608201239.Hqp9r0YB-lkp@intel.com> (raw)
In-Reply-To: <20260807213025.1206-1-xwilmink@gmail.com>
Hi Xander,
kernel test robot noticed the following build errors:
[auto build test ERROR on net-next/main]
url: https://github.com/intel-lab-lkp/linux/commits/Xander-Wilmink/net-sfp-Add-quirk-for-Dell-M14MK-module/20260807-213025
base: net-next/main
patch link: https://lore.kernel.org/r/20260807213025.1206-1-xwilmink%40gmail.com
patch subject: [PATCH net-next] net: sfp: Add quirk for Dell M14MK module
config: alpha-allmodconfig (https://download.01.org/0day-ci/archive/20260820/202608201239.Hqp9r0YB-lkp@intel.com/config)
compiler: alpha-linux-gcc (GCC) 16.1.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260820/202608201239.Hqp9r0YB-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202608201239.Hqp9r0YB-lkp@intel.com/
All error/warnings (new ones prefixed by >>):
drivers/net/phy/sfp.c: In function 'sfp_quirk_25g_10g_dual':
>> drivers/net/phy/sfp.c:487:13: error: invalid storage class for function 'sfp_quirk_disable_autoneg'
487 | static void sfp_quirk_disable_autoneg(const struct sfp_eeprom_id *id,
| ^~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/phy/sfp.c:493:13: error: invalid storage class for function 'sfp_quirk_oem_2_5g'
493 | static void sfp_quirk_oem_2_5g(const struct sfp_eeprom_id *id,
| ^~~~~~~~~~~~~~~~~~
>> drivers/net/phy/sfp.c:503:13: error: invalid storage class for function 'sfp_quirk_ubnt_uf_instant'
503 | static void sfp_quirk_ubnt_uf_instant(const struct sfp_eeprom_id *id,
| ^~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/phy/sfp.c:615:43: error: initializer element is not constant
615 | SFP_QUIRK_S("UBNT", "UF-INSTANT", sfp_quirk_ubnt_uf_instant),
| ^~~~~~~~~~~~~~~~~~~~~~~~~
drivers/net/phy/sfp.c:523:48: note: in definition of macro 'SFP_QUIRK'
523 | { .vendor = _v, .part = _p, .support = _s, .fixup = _f, }
| ^~
drivers/net/phy/sfp.c:615:9: note: in expansion of macro 'SFP_QUIRK_S'
615 | SFP_QUIRK_S("UBNT", "UF-INSTANT", sfp_quirk_ubnt_uf_instant),
| ^~~~~~~~~~~
drivers/net/phy/sfp.c:615:43: note: (near initialization for 'sfp_quirks[19].support')
drivers/net/phy/sfp.c:523:48: note: in definition of macro 'SFP_QUIRK'
523 | { .vendor = _v, .part = _p, .support = _s, .fixup = _f, }
| ^~
drivers/net/phy/sfp.c:615:9: note: in expansion of macro 'SFP_QUIRK_S'
615 | SFP_QUIRK_S("UBNT", "UF-INSTANT", sfp_quirk_ubnt_uf_instant),
| ^~~~~~~~~~~
drivers/net/phy/sfp.c:631:42: error: initializer element is not constant
631 | SFP_QUIRK_S("OEM", "SFP-2.5G-T", sfp_quirk_oem_2_5g),
| ^~~~~~~~~~~~~~~~~~
drivers/net/phy/sfp.c:523:48: note: in definition of macro 'SFP_QUIRK'
523 | { .vendor = _v, .part = _p, .support = _s, .fixup = _f, }
| ^~
drivers/net/phy/sfp.c:631:9: note: in expansion of macro 'SFP_QUIRK_S'
631 | SFP_QUIRK_S("OEM", "SFP-2.5G-T", sfp_quirk_oem_2_5g),
| ^~~~~~~~~~~
drivers/net/phy/sfp.c:631:42: note: (near initialization for 'sfp_quirks[26].support')
drivers/net/phy/sfp.c:523:48: note: in definition of macro 'SFP_QUIRK'
523 | { .vendor = _v, .part = _p, .support = _s, .fixup = _f, }
| ^~
drivers/net/phy/sfp.c:631:9: note: in expansion of macro 'SFP_QUIRK_S'
631 | SFP_QUIRK_S("OEM", "SFP-2.5G-T", sfp_quirk_oem_2_5g),
| ^~~~~~~~~~~
drivers/net/phy/sfp.c:650:45: error: initializer element is not constant
650 | SFP_QUIRK_S("ZOERAX", "SFP-2.5G-T", sfp_quirk_oem_2_5g),
| ^~~~~~~~~~~~~~~~~~
drivers/net/phy/sfp.c:523:48: note: in definition of macro 'SFP_QUIRK'
523 | { .vendor = _v, .part = _p, .support = _s, .fixup = _f, }
| ^~
drivers/net/phy/sfp.c:650:9: note: in expansion of macro 'SFP_QUIRK_S'
650 | SFP_QUIRK_S("ZOERAX", "SFP-2.5G-T", sfp_quirk_oem_2_5g),
| ^~~~~~~~~~~
drivers/net/phy/sfp.c:650:45: note: (near initialization for 'sfp_quirks[37].support')
drivers/net/phy/sfp.c:523:48: note: in definition of macro 'SFP_QUIRK'
523 | { .vendor = _v, .part = _p, .support = _s, .fixup = _f, }
| ^~
drivers/net/phy/sfp.c:650:9: note: in expansion of macro 'SFP_QUIRK_S'
650 | SFP_QUIRK_S("ZOERAX", "SFP-2.5G-T", sfp_quirk_oem_2_5g),
| ^~~~~~~~~~~
>> drivers/net/phy/sfp.c:653:15: error: invalid storage class for function 'sfp_strlen'
653 | static size_t sfp_strlen(const char *str, size_t maxlen)
| ^~~~~~~~~~
>> drivers/net/phy/sfp.c:667:13: error: invalid storage class for function 'sfp_match'
667 | static bool sfp_match(const char *qs, const char *str, size_t len, bool prefix)
| ^~~~~~~~~
>> drivers/net/phy/sfp.c:679:32: error: invalid storage class for function 'sfp_lookup_quirk'
679 | static const struct sfp_quirk *sfp_lookup_quirk(const struct sfp_eeprom_id *id)
| ^~~~~~~~~~~~~~~~
>> drivers/net/phy/sfp.c:697:21: error: invalid storage class for function 'sfp_gpio_get_state'
697 | static unsigned int sfp_gpio_get_state(struct sfp *sfp)
| ^~~~~~~~~~~~~~~~~~
>> drivers/net/phy/sfp.c:713:21: error: invalid storage class for function 'sff_gpio_get_state'
713 | static unsigned int sff_gpio_get_state(struct sfp *sfp)
| ^~~~~~~~~~~~~~~~~~
>> drivers/net/phy/sfp.c:718:13: error: invalid storage class for function 'sfp_gpio_set_state'
718 | static void sfp_gpio_set_state(struct sfp *sfp, unsigned int state)
| ^~~~~~~~~~~~~~~~~~
>> drivers/net/phy/sfp.c:754:12: error: invalid storage class for function 'sfp_i2c_read'
754 | static int sfp_i2c_read(struct sfp *sfp, bool a2, u8 dev_addr, void *buf,
| ^~~~~~~~~~~~
>> drivers/net/phy/sfp.c:794:12: error: invalid storage class for function 'sfp_i2c_write'
794 | static int sfp_i2c_write(struct sfp *sfp, bool a2, u8 dev_addr, void *buf,
| ^~~~~~~~~~~~~
>> drivers/net/phy/sfp.c:821:12: error: invalid storage class for function 'sfp_smbus_read'
821 | static int sfp_smbus_read(struct sfp *sfp, bool a2, u8 dev_addr, void *buf,
| ^~~~~~~~~~~~~~
>> drivers/net/phy/sfp.c:878:12: error: invalid storage class for function 'sfp_smbus_write'
878 | static int sfp_smbus_write(struct sfp *sfp, bool a2, u8 dev_addr, void *buf,
| ^~~~~~~~~~~~~~~
>> drivers/net/phy/sfp.c:933:12: error: invalid storage class for function 'sfp_i2c_configure'
933 | static int sfp_i2c_configure(struct sfp *sfp, struct i2c_adapter *i2c)
| ^~~~~~~~~~~~~~~~~
>> drivers/net/phy/sfp.c:981:12: error: invalid storage class for function 'sfp_i2c_mdiobus_create'
981 | static int sfp_i2c_mdiobus_create(struct sfp *sfp)
| ^~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/phy/sfp.c:1004:13: error: invalid storage class for function 'sfp_i2c_mdiobus_destroy'
1004 | static void sfp_i2c_mdiobus_destroy(struct sfp *sfp)
| ^~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/phy/sfp.c:1012:12: error: invalid storage class for function 'sfp_read'
1012 | static int sfp_read(struct sfp *sfp, bool a2, u8 addr, void *buf, size_t len)
| ^~~~~~~~
>> drivers/net/phy/sfp.c:1021:13: error: invalid storage class for function 'sfp_module_present_i2c'
1021 | static bool sfp_module_present_i2c(struct sfp *sfp)
| ^~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/phy/sfp.c:1034:21: error: invalid storage class for function 'sfp_i2c_get_state'
1034 | static unsigned int sfp_i2c_get_state(struct sfp *sfp)
| ^~~~~~~~~~~~~~~~~
drivers/net/phy/sfp.c:1056:12: error: invalid storage class for function 'sfp_write'
1056 | static int sfp_write(struct sfp *sfp, bool a2, u8 addr, void *buf, size_t len)
| ^~~~~~~~~
drivers/net/phy/sfp.c:1061:12: error: invalid storage class for function 'sfp_modify_u8'
1061 | static int sfp_modify_u8(struct sfp *sfp, bool a2, u8 addr, u8 mask, u8 val)
| ^~~~~~~~~~~~~
drivers/net/phy/sfp.c:1077:21: error: invalid storage class for function 'sfp_soft_get_state'
1077 | static unsigned int sfp_soft_get_state(struct sfp *sfp)
| ^~~~~~~~~~~~~~~~~~
drivers/net/phy/sfp.c:1100:13: error: invalid storage class for function 'sfp_soft_set_state'
1100 | static void sfp_soft_set_state(struct sfp *sfp, unsigned int state,
| ^~~~~~~~~~~~~~~~~~
drivers/net/phy/sfp.c:1129:13: error: invalid storage class for function 'sfp_soft_start_poll'
1129 | static void sfp_soft_start_poll(struct sfp *sfp)
| ^~~~~~~~~~~~~~~~~~~
drivers/net/phy/sfp.c:1154:13: error: invalid storage class for function 'sfp_soft_stop_poll'
1154 | static void sfp_soft_stop_poll(struct sfp *sfp)
| ^~~~~~~~~~~~~~~~~~
drivers/net/phy/sfp.c:1164:21: error: invalid storage class for function 'sfp_get_state'
1164 | static unsigned int sfp_get_state(struct sfp *sfp)
| ^~~~~~~~~~~~~
drivers/net/phy/sfp.c:1179:13: error: invalid storage class for function 'sfp_set_state'
1179 | static void sfp_set_state(struct sfp *sfp, unsigned int state)
| ^~~~~~~~~~~~~
drivers/net/phy/sfp.c:1190:13: error: invalid storage class for function 'sfp_mod_state'
1190 | static void sfp_mod_state(struct sfp *sfp, unsigned int mask, unsigned int set)
| ^~~~~~~~~~~~~
drivers/net/phy/sfp.c:1198:21: error: invalid storage class for function 'sfp_check'
1198 | static unsigned int sfp_check(void *buf, size_t len)
| ^~~~~~~~~
drivers/net/phy/sfp.c:1210:16: error: invalid storage class for function 'sfp_hwmon_is_visible'
1210 | static umode_t sfp_hwmon_is_visible(const void *data,
| ^~~~~~~~~~~~~~~~~~~~
drivers/net/phy/sfp.c:1307:12: error: invalid storage class for function 'sfp_hwmon_read_sensor'
1307 | static int sfp_hwmon_read_sensor(struct sfp *sfp, int reg, long *value)
| ^~~~~~~~~~~~~~~~~~~~~
drivers/net/phy/sfp.c:1321:13: error: invalid storage class for function 'sfp_hwmon_to_rx_power'
1321 | static void sfp_hwmon_to_rx_power(long *value)
| ^~~~~~~~~~~~~~~~~~~~~
drivers/net/phy/sfp.c:1326:13: error: invalid storage class for function 'sfp_hwmon_calibrate'
1326 | static void sfp_hwmon_calibrate(struct sfp *sfp, unsigned int slope, int offset,
| ^~~~~~~~~~~~~~~~~~~
drivers/net/phy/sfp.c:1333:13: error: invalid storage class for function 'sfp_hwmon_calibrate_temp'
1333 | static void sfp_hwmon_calibrate_temp(struct sfp *sfp, long *value)
| ^~~~~~~~~~~~~~~~~~~~~~~~
drivers/net/phy/sfp.c:1344:13: error: invalid storage class for function 'sfp_hwmon_calibrate_vcc'
1344 | static void sfp_hwmon_calibrate_vcc(struct sfp *sfp, long *value)
| ^~~~~~~~~~~~~~~~~~~~~~~
drivers/net/phy/sfp.c:1352:13: error: invalid storage class for function 'sfp_hwmon_calibrate_bias'
1352 | static void sfp_hwmon_calibrate_bias(struct sfp *sfp, long *value)
| ^~~~~~~~~~~~~~~~~~~~~~~~
drivers/net/phy/sfp.c:1360:13: error: invalid storage class for function 'sfp_hwmon_calibrate_tx_power'
1360 | static void sfp_hwmon_calibrate_tx_power(struct sfp *sfp, long *value)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/net/phy/sfp.c:1368:12: error: invalid storage class for function 'sfp_hwmon_read_temp'
1368 | static int sfp_hwmon_read_temp(struct sfp *sfp, int reg, long *value)
| ^~~~~~~~~~~~~~~~~~~
drivers/net/phy/sfp.c:1381:12: error: invalid storage class for function 'sfp_hwmon_read_vcc'
1381 | static int sfp_hwmon_read_vcc(struct sfp *sfp, int reg, long *value)
| ^~~~~~~~~~~~~~~~~~
drivers/net/phy/sfp.c:1394:12: error: invalid storage class for function 'sfp_hwmon_read_bias'
1394 | static int sfp_hwmon_read_bias(struct sfp *sfp, int reg, long *value)
| ^~~~~~~~~~~~~~~~~~~
drivers/net/phy/sfp.c:1407:12: error: invalid storage class for function 'sfp_hwmon_read_tx_power'
1407 | static int sfp_hwmon_read_tx_power(struct sfp *sfp, int reg, long *value)
| ^~~~~~~~~~~~~~~~~~~~~~~
drivers/net/phy/sfp.c:1420:12: error: invalid storage class for function 'sfp_hwmon_read_rx_power'
1420 | static int sfp_hwmon_read_rx_power(struct sfp *sfp, int reg, long *value)
| ^~~~~~~~~~~~~~~~~~~~~~~
drivers/net/phy/sfp.c:1433:12: error: invalid storage class for function 'sfp_hwmon_temp'
1433 | static int sfp_hwmon_temp(struct sfp *sfp, u32 attr, long *value)
| ^~~~~~~~~~~~~~
drivers/net/phy/sfp.c:1499:12: error: invalid storage class for function 'sfp_hwmon_vcc'
1499 | static int sfp_hwmon_vcc(struct sfp *sfp, u32 attr, long *value)
| ^~~~~~~~~~~~~
drivers/net/phy/sfp.c:1566:12: error: invalid storage class for function 'sfp_hwmon_bias'
1566 | static int sfp_hwmon_bias(struct sfp *sfp, u32 attr, long *value)
| ^~~~~~~~~~~~~~
drivers/net/phy/sfp.c:1633:12: error: invalid storage class for function 'sfp_hwmon_tx_power'
1633 | static int sfp_hwmon_tx_power(struct sfp *sfp, u32 attr, long *value)
| ^~~~~~~~~~~~~~~~~~
drivers/net/phy/sfp.c:1700:12: error: invalid storage class for function 'sfp_hwmon_rx_power'
1700 | static int sfp_hwmon_rx_power(struct sfp *sfp, u32 attr, long *value)
| ^~~~~~~~~~~~~~~~~~
drivers/net/phy/sfp.c:1767:12: error: invalid storage class for function 'sfp_hwmon_read'
1767 | static int sfp_hwmon_read(struct device *dev, enum hwmon_sensor_types type,
| ^~~~~~~~~~~~~~
drivers/net/phy/sfp.c:1798:12: error: invalid storage class for function 'sfp_hwmon_read_string'
1798 | static int sfp_hwmon_read_string(struct device *dev,
| ^~~~~~~~~~~~~~~~~~~~~
drivers/net/phy/sfp.c:1847:23: error: initializer element is not constant
1847 | .is_visible = sfp_hwmon_is_visible,
| ^~~~~~~~~~~~~~~~~~~~
drivers/net/phy/sfp.c:1847:23: note: (near initialization for 'sfp_hwmon_ops.is_visible')
drivers/net/phy/sfp.c:1848:17: error: initializer element is not constant
1848 | .read = sfp_hwmon_read,
| ^~~~~~~~~~~~~~
drivers/net/phy/sfp.c:1848:17: note: (near initialization for 'sfp_hwmon_ops.read')
--
phy/sfp.c:1061:12: error: invalid storage class for function 'sfp_modify_u8'
1061 | static int sfp_modify_u8(struct sfp *sfp, bool a2, u8 addr, u8 mask, u8 val)
| ^~~~~~~~~~~~~
phy/sfp.c:1077:21: error: invalid storage class for function 'sfp_soft_get_state'
1077 | static unsigned int sfp_soft_get_state(struct sfp *sfp)
| ^~~~~~~~~~~~~~~~~~
phy/sfp.c:1100:13: error: invalid storage class for function 'sfp_soft_set_state'
1100 | static void sfp_soft_set_state(struct sfp *sfp, unsigned int state,
| ^~~~~~~~~~~~~~~~~~
phy/sfp.c:1129:13: error: invalid storage class for function 'sfp_soft_start_poll'
1129 | static void sfp_soft_start_poll(struct sfp *sfp)
| ^~~~~~~~~~~~~~~~~~~
phy/sfp.c:1154:13: error: invalid storage class for function 'sfp_soft_stop_poll'
1154 | static void sfp_soft_stop_poll(struct sfp *sfp)
| ^~~~~~~~~~~~~~~~~~
phy/sfp.c:1164:21: error: invalid storage class for function 'sfp_get_state'
1164 | static unsigned int sfp_get_state(struct sfp *sfp)
| ^~~~~~~~~~~~~
phy/sfp.c:1179:13: error: invalid storage class for function 'sfp_set_state'
1179 | static void sfp_set_state(struct sfp *sfp, unsigned int state)
| ^~~~~~~~~~~~~
phy/sfp.c:1190:13: error: invalid storage class for function 'sfp_mod_state'
1190 | static void sfp_mod_state(struct sfp *sfp, unsigned int mask, unsigned int set)
| ^~~~~~~~~~~~~
phy/sfp.c:1198:21: error: invalid storage class for function 'sfp_check'
1198 | static unsigned int sfp_check(void *buf, size_t len)
| ^~~~~~~~~
phy/sfp.c:1210:16: error: invalid storage class for function 'sfp_hwmon_is_visible'
1210 | static umode_t sfp_hwmon_is_visible(const void *data,
| ^~~~~~~~~~~~~~~~~~~~
phy/sfp.c:1307:12: error: invalid storage class for function 'sfp_hwmon_read_sensor'
1307 | static int sfp_hwmon_read_sensor(struct sfp *sfp, int reg, long *value)
| ^~~~~~~~~~~~~~~~~~~~~
phy/sfp.c:1321:13: error: invalid storage class for function 'sfp_hwmon_to_rx_power'
1321 | static void sfp_hwmon_to_rx_power(long *value)
| ^~~~~~~~~~~~~~~~~~~~~
phy/sfp.c:1326:13: error: invalid storage class for function 'sfp_hwmon_calibrate'
1326 | static void sfp_hwmon_calibrate(struct sfp *sfp, unsigned int slope, int offset,
| ^~~~~~~~~~~~~~~~~~~
phy/sfp.c:1333:13: error: invalid storage class for function 'sfp_hwmon_calibrate_temp'
1333 | static void sfp_hwmon_calibrate_temp(struct sfp *sfp, long *value)
| ^~~~~~~~~~~~~~~~~~~~~~~~
phy/sfp.c:1344:13: error: invalid storage class for function 'sfp_hwmon_calibrate_vcc'
1344 | static void sfp_hwmon_calibrate_vcc(struct sfp *sfp, long *value)
| ^~~~~~~~~~~~~~~~~~~~~~~
phy/sfp.c:1352:13: error: invalid storage class for function 'sfp_hwmon_calibrate_bias'
1352 | static void sfp_hwmon_calibrate_bias(struct sfp *sfp, long *value)
| ^~~~~~~~~~~~~~~~~~~~~~~~
phy/sfp.c:1360:13: error: invalid storage class for function 'sfp_hwmon_calibrate_tx_power'
1360 | static void sfp_hwmon_calibrate_tx_power(struct sfp *sfp, long *value)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
phy/sfp.c:1368:12: error: invalid storage class for function 'sfp_hwmon_read_temp'
1368 | static int sfp_hwmon_read_temp(struct sfp *sfp, int reg, long *value)
| ^~~~~~~~~~~~~~~~~~~
phy/sfp.c:1381:12: error: invalid storage class for function 'sfp_hwmon_read_vcc'
1381 | static int sfp_hwmon_read_vcc(struct sfp *sfp, int reg, long *value)
| ^~~~~~~~~~~~~~~~~~
phy/sfp.c:1394:12: error: invalid storage class for function 'sfp_hwmon_read_bias'
1394 | static int sfp_hwmon_read_bias(struct sfp *sfp, int reg, long *value)
| ^~~~~~~~~~~~~~~~~~~
phy/sfp.c:1407:12: error: invalid storage class for function 'sfp_hwmon_read_tx_power'
1407 | static int sfp_hwmon_read_tx_power(struct sfp *sfp, int reg, long *value)
| ^~~~~~~~~~~~~~~~~~~~~~~
phy/sfp.c:1420:12: error: invalid storage class for function 'sfp_hwmon_read_rx_power'
1420 | static int sfp_hwmon_read_rx_power(struct sfp *sfp, int reg, long *value)
| ^~~~~~~~~~~~~~~~~~~~~~~
phy/sfp.c:1433:12: error: invalid storage class for function 'sfp_hwmon_temp'
1433 | static int sfp_hwmon_temp(struct sfp *sfp, u32 attr, long *value)
| ^~~~~~~~~~~~~~
phy/sfp.c:1499:12: error: invalid storage class for function 'sfp_hwmon_vcc'
1499 | static int sfp_hwmon_vcc(struct sfp *sfp, u32 attr, long *value)
| ^~~~~~~~~~~~~
phy/sfp.c:1566:12: error: invalid storage class for function 'sfp_hwmon_bias'
1566 | static int sfp_hwmon_bias(struct sfp *sfp, u32 attr, long *value)
| ^~~~~~~~~~~~~~
phy/sfp.c:1633:12: error: invalid storage class for function 'sfp_hwmon_tx_power'
1633 | static int sfp_hwmon_tx_power(struct sfp *sfp, u32 attr, long *value)
| ^~~~~~~~~~~~~~~~~~
phy/sfp.c:1700:12: error: invalid storage class for function 'sfp_hwmon_rx_power'
1700 | static int sfp_hwmon_rx_power(struct sfp *sfp, u32 attr, long *value)
| ^~~~~~~~~~~~~~~~~~
phy/sfp.c:1767:12: error: invalid storage class for function 'sfp_hwmon_read'
1767 | static int sfp_hwmon_read(struct device *dev, enum hwmon_sensor_types type,
| ^~~~~~~~~~~~~~
phy/sfp.c:1798:12: error: invalid storage class for function 'sfp_hwmon_read_string'
1798 | static int sfp_hwmon_read_string(struct device *dev,
| ^~~~~~~~~~~~~~~~~~~~~
phy/sfp.c:1847:23: error: initializer element is not constant
1847 | .is_visible = sfp_hwmon_is_visible,
| ^~~~~~~~~~~~~~~~~~~~
phy/sfp.c:1847:23: note: (near initialization for 'sfp_hwmon_ops.is_visible')
phy/sfp.c:1848:17: error: initializer element is not constant
1848 | .read = sfp_hwmon_read,
| ^~~~~~~~~~~~~~
phy/sfp.c:1848:17: note: (near initialization for 'sfp_hwmon_ops.read')
phy/sfp.c:1849:24: error: initializer element is not constant
1849 | .read_string = sfp_hwmon_read_string,
| ^~~~~~~~~~~~~~~~~~~~~
phy/sfp.c:1849:24: note: (near initialization for 'sfp_hwmon_ops.read_string')
In file included from phy/sfp.c:5:
>> include/linux/hwmon.h:444:9: error: initializer element is not constant
444 | (&(const struct hwmon_channel_info) { \
| ^
phy/sfp.c:1853:9: note: in expansion of macro 'HWMON_CHANNEL_INFO'
1853 | HWMON_CHANNEL_INFO(chip,
| ^~~~~~~~~~~~~~~~~~
include/linux/hwmon.h:444:9: note: (near initialization for 'sfp_hwmon_info[0]')
phy/sfp.c:1853:9: note: in expansion of macro 'HWMON_CHANNEL_INFO'
1853 | HWMON_CHANNEL_INFO(chip,
| ^~~~~~~~~~~~~~~~~~
phy/sfp.c:1899:13: error: invalid storage class for function 'sfp_hwmon_probe'
1899 | static void sfp_hwmon_probe(struct work_struct *work)
| ^~~~~~~~~~~~~~~
phy/sfp.c:1945:12: error: invalid storage class for function 'sfp_hwmon_insert'
1945 | static int sfp_hwmon_insert(struct sfp *sfp)
| ^~~~~~~~~~~~~~~~
phy/sfp.c:1955:13: error: invalid storage class for function 'sfp_hwmon_remove'
1955 | static void sfp_hwmon_remove(struct sfp *sfp)
| ^~~~~~~~~~~~~~~~
phy/sfp.c:1969:12: error: invalid storage class for function 'sfp_hwmon_init'
1969 | static int sfp_hwmon_init(struct sfp *sfp)
| ^~~~~~~~~~~~~~
phy/sfp.c:1976:13: error: invalid storage class for function 'sfp_hwmon_exit'
1976 | static void sfp_hwmon_exit(struct sfp *sfp)
| ^~~~~~~~~~~~~~
phy/sfp.c:2001:13: error: invalid storage class for function 'sfp_module_tx_disable'
2001 | static void sfp_module_tx_disable(struct sfp *sfp)
| ^~~~~~~~~~~~~~~~~~~~~
phy/sfp.c:2008:13: error: invalid storage class for function 'sfp_module_tx_enable'
2008 | static void sfp_module_tx_enable(struct sfp *sfp)
| ^~~~~~~~~~~~~~~~~~~~
phy/sfp.c:2016:12: error: invalid storage class for function 'sfp_debug_state_show'
2016 | static int sfp_debug_state_show(struct seq_file *s, void *data)
| ^~~~~~~~~~~~~~~~~~~~
In file included from include/linux/debugfs.h:16,
from phy/sfp.c:2:
phy/sfp.c:2044:23: error: invalid storage class for function 'sfp_debug_state_open'
2044 | DEFINE_SHOW_ATTRIBUTE(sfp_debug_state);
| ^~~~~~~~~~~~~~~
include/linux/seq_file.h:207:12: note: in definition of macro 'DEFINE_SHOW_ATTRIBUTE'
207 | static int __name ## _open(struct inode *inode, struct file *file) \
| ^~~~~~
phy/sfp.c:2044:23: error: initializer element is not constant
2044 | DEFINE_SHOW_ATTRIBUTE(sfp_debug_state);
| ^~~~~~~~~~~~~~~
include/linux/seq_file.h:214:27: note: in definition of macro 'DEFINE_SHOW_ATTRIBUTE'
214 | .open = __name ## _open, \
| ^~~~~~
phy/sfp.c:2044:23: note: (near initialization for 'sfp_debug_state_fops.open')
include/linux/seq_file.h:214:27: note: in definition of macro 'DEFINE_SHOW_ATTRIBUTE'
214 | .open = __name ## _open, \
| ^~~~~~
phy/sfp.c:2046:13: error: invalid storage class for function 'sfp_debugfs_init'
2046 | static void sfp_debugfs_init(struct sfp *sfp)
| ^~~~~~~~~~~~~~~~
phy/sfp.c:2054:13: error: invalid storage class for function 'sfp_debugfs_exit'
2054 | static void sfp_debugfs_exit(struct sfp *sfp)
| ^~~~~~~~~~~~~~~~
phy/sfp.c:2068:13: error: invalid storage class for function 'sfp_module_tx_fault_reset'
2068 | static void sfp_module_tx_fault_reset(struct sfp *sfp)
| ^~~~~~~~~~~~~~~~~~~~~~~~~
phy/sfp.c:2085:13: error: invalid storage class for function 'sfp_sm_set_timer'
2085 | static void sfp_sm_set_timer(struct sfp *sfp, unsigned int timeout)
| ^~~~~~~~~~~~~~~~
phy/sfp.c:2094:13: error: invalid storage class for function 'sfp_sm_next'
2094 | static void sfp_sm_next(struct sfp *sfp, unsigned int state,
| ^~~~~~~~~~~
phy/sfp.c:2101:13: error: invalid storage class for function 'sfp_sm_mod_next'
2101 | static void sfp_sm_mod_next(struct sfp *sfp, unsigned int state,
| ^~~~~~~~~~~~~~~
phy/sfp.c:2108:13: error: invalid storage class for function 'sfp_sm_phy_detach'
2108 | static void sfp_sm_phy_detach(struct sfp *sfp)
| ^~~~~~~~~~~~~~~~~
phy/sfp.c:2116:12: error: invalid storage class for function 'sfp_sm_probe_phy'
2116 | static int sfp_sm_probe_phy(struct sfp *sfp, int addr, bool is_c45)
| ^~~~~~~~~~~~~~~~
phy/sfp.c:2153:13: error: invalid storage class for function 'sfp_sm_link_up'
2153 | static void sfp_sm_link_up(struct sfp *sfp)
| ^~~~~~~~~~~~~~
phy/sfp.c:2159:13: error: invalid storage class for function 'sfp_sm_link_down'
2159 | static void sfp_sm_link_down(struct sfp *sfp)
| ^~~~~~~~~~~~~~~~
phy/sfp.c:2164:13: error: invalid storage class for function 'sfp_sm_link_check_los'
2164 | static void sfp_sm_link_check_los(struct sfp *sfp)
| ^~~~~~~~~~~~~~~~~~~~~
phy/sfp.c:2186:13: error: invalid storage class for function 'sfp_los_event_active'
2186 | static bool sfp_los_event_active(struct sfp *sfp, unsigned int event)
| ^~~~~~~~~~~~~~~~~~~~
phy/sfp.c:2196:13: error: invalid storage class for function 'sfp_los_event_inactive'
2196 | static bool sfp_los_event_inactive(struct sfp *sfp, unsigned int event)
| ^~~~~~~~~~~~~~~~~~~~~~
phy/sfp.c:2206:13: error: invalid storage class for function 'sfp_sm_fault'
2206 | static void sfp_sm_fault(struct sfp *sfp, unsigned int next_state, bool warn)
| ^~~~~~~~~~~~
phy/sfp.c:2220:12: error: invalid storage class for function 'sfp_sm_add_mdio_bus'
2220 | static int sfp_sm_add_mdio_bus(struct sfp *sfp)
| ^~~~~~~~~~~~~~~~~~~
phy/sfp.c:2239:12: error: invalid storage class for function 'sfp_sm_probe_for_phy'
2239 | static int sfp_sm_probe_for_phy(struct sfp *sfp)
| ^~~~~~~~~~~~~~~~~~~~
phy/sfp.c:2263:12: error: invalid storage class for function 'sfp_module_parse_power'
..
vim +/sfp_quirk_disable_autoneg +487 drivers/net/phy/sfp.c
23571c7b964374 Russell King (Oracle 2022-09-13 479)
008809b6223aa2 Xander Wilmink 2026-08-07 @480 static void sfp_quirk_25g_10g_dual(const struct sfp_eeprom_id *id,
008809b6223aa2 Xander Wilmink 2026-08-07 481 struct sfp_module_caps *caps)
008809b6223aa2 Xander Wilmink 2026-08-07 482 {
008809b6223aa2 Xander Wilmink 2026-08-07 483 linkmode_set_bit(ETHTOOL_LINK_MODE_10000baseSR_Full_BIT,
008809b6223aa2 Xander Wilmink 2026-08-07 484 caps->link_modes);
008809b6223aa2 Xander Wilmink 2026-08-07 485 __set_bit(PHY_INTERFACE_MODE_10GBASER, caps->interfaces);
008809b6223aa2 Xander Wilmink 2026-08-07 486
50e96acbe11667 Russell King (Oracle 2023-03-21 @487) static void sfp_quirk_disable_autoneg(const struct sfp_eeprom_id *id,
a7dc35a9e49b10 Russell King (Oracle 2025-09-16 488) struct sfp_module_caps *caps)
50e96acbe11667 Russell King (Oracle 2023-03-21 489) {
a7dc35a9e49b10 Russell King (Oracle 2025-09-16 490) linkmode_clear_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, caps->link_modes);
50e96acbe11667 Russell King (Oracle 2023-03-21 491) }
50e96acbe11667 Russell King (Oracle 2023-03-21 492)
50e96acbe11667 Russell King (Oracle 2023-03-21 @493) static void sfp_quirk_oem_2_5g(const struct sfp_eeprom_id *id,
a7dc35a9e49b10 Russell King (Oracle 2025-09-16 494) struct sfp_module_caps *caps)
50e96acbe11667 Russell King (Oracle 2023-03-21 495) {
50e96acbe11667 Russell King (Oracle 2023-03-21 496) /* Copper 2.5G SFP */
a7dc35a9e49b10 Russell King (Oracle 2025-09-16 497) linkmode_set_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT,
a7dc35a9e49b10 Russell King (Oracle 2025-09-16 498) caps->link_modes);
a7dc35a9e49b10 Russell King (Oracle 2025-09-16 499) __set_bit(PHY_INTERFACE_MODE_2500BASEX, caps->interfaces);
a7dc35a9e49b10 Russell King (Oracle 2025-09-16 500) sfp_quirk_disable_autoneg(id, caps);
50e96acbe11667 Russell King (Oracle 2023-03-21 501) }
50e96acbe11667 Russell King (Oracle 2023-03-21 502)
23571c7b964374 Russell King (Oracle 2022-09-13 @503) static void sfp_quirk_ubnt_uf_instant(const struct sfp_eeprom_id *id,
a7dc35a9e49b10 Russell King (Oracle 2025-09-16 504) struct sfp_module_caps *caps)
23571c7b964374 Russell King (Oracle 2022-09-13 505) {
23571c7b964374 Russell King (Oracle 2022-09-13 506) /* Ubiquiti U-Fiber Instant module claims that support all transceiver
23571c7b964374 Russell King (Oracle 2022-09-13 507) * types including 10G Ethernet which is not truth. So clear all claimed
eeee5a710f26ce Marek Behún 2026-03-26 508 * modes and set only one mode which module supports: 1000baseX_Full,
eeee5a710f26ce Marek Behún 2026-03-26 509 * along with the Autoneg and pause bits.
23571c7b964374 Russell King (Oracle 2022-09-13 510) */
a7dc35a9e49b10 Russell King (Oracle 2025-09-16 511) linkmode_zero(caps->link_modes);
a7dc35a9e49b10 Russell King (Oracle 2025-09-16 512) linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseX_Full_BIT,
a7dc35a9e49b10 Russell King (Oracle 2025-09-16 513) caps->link_modes);
eeee5a710f26ce Marek Behún 2026-03-26 514 linkmode_set_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, caps->link_modes);
eeee5a710f26ce Marek Behún 2026-03-26 515 linkmode_set_bit(ETHTOOL_LINK_MODE_Pause_BIT, caps->link_modes);
eeee5a710f26ce Marek Behún 2026-03-26 516 linkmode_set_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT, caps->link_modes);
eeee5a710f26ce Marek Behún 2026-03-26 517
adcbadfd8e05d3 Marek Behún 2026-01-29 518 phy_interface_zero(caps->interfaces);
adcbadfd8e05d3 Marek Behún 2026-01-29 519 __set_bit(PHY_INTERFACE_MODE_1000BASEX, caps->interfaces);
23571c7b964374 Russell King (Oracle 2022-09-13 520) }
23571c7b964374 Russell King (Oracle 2022-09-13 521)
a7dc35a9e49b10 Russell King (Oracle 2025-09-16 522) #define SFP_QUIRK(_v, _p, _s, _f) \
a7dc35a9e49b10 Russell King (Oracle 2025-09-16 523) { .vendor = _v, .part = _p, .support = _s, .fixup = _f, }
a7dc35a9e49b10 Russell King (Oracle 2025-09-16 524) #define SFP_QUIRK_S(_v, _p, _s) SFP_QUIRK(_v, _p, _s, NULL)
13c8adcf221f1f Marek Behún 2022-09-30 525 #define SFP_QUIRK_F(_v, _p, _f) SFP_QUIRK(_v, _p, NULL, _f)
f53167e29b8e91 Martino Dell'Ambrogio 2026-08-12 526 /* Like SFP_QUIRK_F, but matches the part as a prefix; the vendor name
f53167e29b8e91 Martino Dell'Ambrogio 2026-08-12 527 * is still matched exactly. Use for modules whose EEPROM vendor PN
f53167e29b8e91 Martino Dell'Ambrogio 2026-08-12 528 * field reads back with garbage past the legitimate characters instead
f53167e29b8e91 Martino Dell'Ambrogio 2026-08-12 529 * of the SFF-8472-mandated space padding, so sfp_strlen can't trim the
f53167e29b8e91 Martino Dell'Ambrogio 2026-08-12 530 * field down to the legitimate length.
f53167e29b8e91 Martino Dell'Ambrogio 2026-08-12 531 */
f53167e29b8e91 Martino Dell'Ambrogio 2026-08-12 532 #define SFP_QUIRK_F_PREFIX(_v, _p, _f) \
f53167e29b8e91 Martino Dell'Ambrogio 2026-08-12 533 { .vendor = _v, .part = _p, .support = NULL, .fixup = _f, \
f53167e29b8e91 Martino Dell'Ambrogio 2026-08-12 534 .part_prefix_match = true }
13c8adcf221f1f Marek Behún 2022-09-30 535
23571c7b964374 Russell King (Oracle 2022-09-13 536) static const struct sfp_quirk sfp_quirks[] = {
13c8adcf221f1f Marek Behún 2022-09-30 537 // Alcatel Lucent G-010S-P can operate at 2500base-X, but incorrectly
13c8adcf221f1f Marek Behún 2022-09-30 538 // report 2500MBd NRZ in their EEPROM
90cb5f1776ba37 Shengyu Qu 2024-10-12 539 SFP_QUIRK("ALCATELLUCENT", "G010SP", sfp_quirk_2500basex,
90cb5f1776ba37 Shengyu Qu 2024-10-12 540 sfp_fixup_ignore_tx_fault),
13c8adcf221f1f Marek Behún 2022-09-30 541
008809b6223aa2 Xander Wilmink 2026-08-07 542 // Dell M14MK, 10/25 GBit SFP28 module. Labeled as Dell S28-10G-25G-SR-85C.
008809b6223aa2 Xander Wilmink 2026-08-07 543 // Runs at 10 Gbit/s in a SFP+ port, but does not advertise this properly.
008809b6223aa2 Xander Wilmink 2026-08-07 544 SFP_QUIRK_S("DELL", "M14MK", sfp_quirk_25g_10g_dual),
008809b6223aa2 Xander Wilmink 2026-08-07 545
13c8adcf221f1f Marek Behún 2022-09-30 546 // Alcatel Lucent G-010S-A can operate at 2500base-X, but report 3.2GBd
23571c7b964374 Russell King (Oracle 2022-09-13 547) // NRZ in their EEPROM
13c8adcf221f1f Marek Behún 2022-09-30 548 SFP_QUIRK("ALCATELLUCENT", "3FE46541AA", sfp_quirk_2500basex,
5ffe330e40bdfa Russell King (Oracle 2023-10-03 549) sfp_fixup_nokia),
13c8adcf221f1f Marek Behún 2022-09-30 550
71cfa7c893a05d Marcus Hughes 2025-12-07 551 SFP_QUIRK_F("BIDB", "X-ONU-SFPP", sfp_fixup_potron),
71cfa7c893a05d Marcus Hughes 2025-12-07 552
ddbf0e78a8b20e Aleksander Jan Bajkowski 2025-08-31 553 // FLYPRO SFP-10GT-CS-30M uses Rollball protocol to talk to the PHY.
ddbf0e78a8b20e Aleksander Jan Bajkowski 2025-08-31 554 SFP_QUIRK_F("FLYPRO", "SFP-10GT-CS-30M", sfp_fixup_rollball),
ddbf0e78a8b20e Aleksander Jan Bajkowski 2025-08-31 555
6999e0fc9a552c Marek Behún 2024-04-23 556 // Fiberstore SFP-10G-T doesn't identify as copper, uses the Rollball
6999e0fc9a552c Marek Behún 2024-04-23 557 // protocol to talk to the PHY and needs 4 sec wait before probing the
6999e0fc9a552c Marek Behún 2024-04-23 558 // PHY.
5859a99b52254b Russell King (Oracle 2023-05-20 559) SFP_QUIRK_F("FS", "SFP-10G-T", sfp_fixup_fs_10gt),
5859a99b52254b Russell King (Oracle 2023-05-20 560)
05ec5c085eb7ae Martin Schiller 2025-02-27 561 // Fiberstore SFP-2.5G-T and SFP-10GM-T uses Rollball protocol to talk
05ec5c085eb7ae Martin Schiller 2025-02-27 562 // to the PHY and needs 4 sec wait before probing the PHY.
05ec5c085eb7ae Martin Schiller 2025-02-27 563 SFP_QUIRK_F("FS", "SFP-2.5G-T", sfp_fixup_rollball_wait4s),
05ec5c085eb7ae Martin Schiller 2025-02-27 564 SFP_QUIRK_F("FS", "SFP-10GM-T", sfp_fixup_rollball_wait4s),
cd4a32e6006178 Marek Behún 2024-04-23 565
d387e34fec407f Christian Marangi 2023-09-19 566 // Fiberstore GPON-ONU-34-20BI can operate at 2500base-X, but report 1.2GBd
d387e34fec407f Christian Marangi 2023-09-19 567 // NRZ in their EEPROM
d387e34fec407f Christian Marangi 2023-09-19 568 SFP_QUIRK("FS", "GPON-ONU-34-20BI", sfp_quirk_2500basex,
d387e34fec407f Christian Marangi 2023-09-19 569 sfp_fixup_ignore_tx_fault),
d387e34fec407f Christian Marangi 2023-09-19 570
03fa69146f2fe1 Martino Dell'Ambrogio 2026-08-12 571 // Fiberstore XGS-SFP-ONT-MACI is a MAC-mode XGS-PON ONT stick with
03fa69146f2fe1 Martino Dell'Ambrogio 2026-08-12 572 // ONT-class serial-passthrough TX_FAULT/LOS wiring and slow startup;
03fa69146f2fe1 Martino Dell'Ambrogio 2026-08-12 573 // mask both signals and extend T_START_UP via the potron fixup. The
03fa69146f2fe1 Martino Dell'Ambrogio 2026-08-12 574 // PN is the product name (XGS-SFP-ONT-MAC-I) truncated at the 16-byte
03fa69146f2fe1 Martino Dell'Ambrogio 2026-08-12 575 // field width, so the field is fully occupied and matches exactly.
03fa69146f2fe1 Martino Dell'Ambrogio 2026-08-12 576 SFP_QUIRK_F("FS", "XGS-SFP-ONT-MACI", sfp_fixup_potron),
03fa69146f2fe1 Martino Dell'Ambrogio 2026-08-12 577
13c8adcf221f1f Marek Behún 2022-09-30 578 SFP_QUIRK_F("HALNy", "HL-GSFP", sfp_fixup_halny_gsfp),
13c8adcf221f1f Marek Behún 2022-09-30 579
a92a6c50e35b75 Hamza Mahfooz 2026-01-13 580 SFP_QUIRK_F("H-COM", "SPP425H-GAB4", sfp_fixup_potron),
a92a6c50e35b75 Hamza Mahfooz 2026-01-13 581
ad651d68cee75e Daniel Golle 2023-04-02 582 // HG MXPD-483II-F 2.5G supports 2500Base-X, but incorrectly reports
ad651d68cee75e Daniel Golle 2023-04-02 583 // 2600MBd in their EERPOM
a7dc35a9e49b10 Russell King (Oracle 2025-09-16 584) SFP_QUIRK_S("HG GENUINE", "MXPD-483II", sfp_quirk_2500basex),
ad651d68cee75e Daniel Golle 2023-04-02 585
13c8adcf221f1f Marek Behún 2022-09-30 586 // Huawei MA5671A can operate at 2500base-X, but report 1.2GBd NRZ in
13c8adcf221f1f Marek Behún 2022-09-30 587 // their EEPROM
13c8adcf221f1f Marek Behún 2022-09-30 588 SFP_QUIRK("HUAWEI", "MA5671A", sfp_quirk_2500basex,
87d12685215846 Álvaro Fernández Rojas 2026-03-06 589 sfp_fixup_ignore_tx_fault_and_los),
13c8adcf221f1f Marek Behún 2022-09-30 590
95aca8602ef70f John Pavlick 2026-04-06 591 // Hisense LXT-010S-H is a GPON ONT SFP (sold as LEOX LXT-010S-H) that
95aca8602ef70f John Pavlick 2026-04-06 592 // can operate at 2500base-X, but reports 1000BASE-LX / 1300MBd in its
95aca8602ef70f John Pavlick 2026-04-06 593 // EEPROM
95aca8602ef70f John Pavlick 2026-04-06 594 SFP_QUIRK("Hisense-Leox", "LXT-010S-H", sfp_quirk_2500basex,
95aca8602ef70f John Pavlick 2026-04-06 595 sfp_fixup_ignore_tx_fault),
95aca8602ef70f John Pavlick 2026-04-06 596
95aca8602ef70f John Pavlick 2026-04-06 597 // Hisense ZNID-GPON-2311NA can operate at 2500base-X, but reports
95aca8602ef70f John Pavlick 2026-04-06 598 // 1000BASE-LX / 1300MBd in its EEPROM
95aca8602ef70f John Pavlick 2026-04-06 599 SFP_QUIRK("Hisense", "ZNID-GPON-2311NA", sfp_quirk_2500basex,
95aca8602ef70f John Pavlick 2026-04-06 600 sfp_fixup_ignore_tx_fault),
95aca8602ef70f John Pavlick 2026-04-06 601
95aca8602ef70f John Pavlick 2026-04-06 602 // HSGQ HSGQ-XPON-Stick can operate at 2500base-X, but reports
95aca8602ef70f John Pavlick 2026-04-06 603 // 1000BASE-LX / 1300MBd in its EEPROM
95aca8602ef70f John Pavlick 2026-04-06 604 SFP_QUIRK("HSGQ", "HSGQ-XPON-Stick", sfp_quirk_2500basex,
95aca8602ef70f John Pavlick 2026-04-06 605 sfp_fixup_ignore_tx_fault),
95aca8602ef70f John Pavlick 2026-04-06 606
86a8e8e0ddbc3d Marek Behún 2026-01-28 607 // Lantech 8330-262D-E and 8330-265D can operate at 2500base-X, but
86a8e8e0ddbc3d Marek Behún 2026-01-28 608 // incorrectly report 2500MBd NRZ in their EEPROM.
86a8e8e0ddbc3d Marek Behún 2026-01-28 609 // Some 8330-265D modules have inverted LOS, while all of them report
86a8e8e0ddbc3d Marek Behún 2026-01-28 610 // normal LOS in EEPROM. Therefore we need to ignore LOS entirely.
a7dc35a9e49b10 Russell King (Oracle 2025-09-16 611) SFP_QUIRK_S("Lantech", "8330-262D-E", sfp_quirk_2500basex),
86a8e8e0ddbc3d Marek Behún 2026-01-28 612 SFP_QUIRK("Lantech", "8330-265D", sfp_quirk_2500basex,
86a8e8e0ddbc3d Marek Behún 2026-01-28 613 sfp_fixup_ignore_los),
13c8adcf221f1f Marek Behún 2022-09-30 614
a7dc35a9e49b10 Russell King (Oracle 2025-09-16 @615) SFP_QUIRK_S("UBNT", "UF-INSTANT", sfp_quirk_ubnt_uf_instant),
324e88cbe3b7be Marek Behún 2022-09-30 616
ac2e8e3cfe4843 Josua Mayer 2023-05-22 617 // Walsun HXSX-ATR[CI]-1 don't identify as copper, and use the
5859a99b52254b Russell King (Oracle 2023-05-20 618) // Rollball protocol to talk to the PHY.
5859a99b52254b Russell King (Oracle 2023-05-20 619) SFP_QUIRK_F("Walsun", "HXSX-ATRC-1", sfp_fixup_fs_10gt),
ac2e8e3cfe4843 Josua Mayer 2023-05-22 620 SFP_QUIRK_F("Walsun", "HXSX-ATRI-1", sfp_fixup_fs_10gt),
5859a99b52254b Russell King (Oracle 2023-05-20 621)
dfec1c14aecee6 Chris Morgan 2025-06-17 622 SFP_QUIRK_F("YV", "SFP+ONU-XGSPON", sfp_fixup_potron),
dfec1c14aecee6 Chris Morgan 2025-06-17 623
1bb028baab5419 Aleksander Jan Bajkowski 2026-07-19 624 // HORACO HC-10GE-113C uses Rollball protocol to talk to the PHY.
1bb028baab5419 Aleksander Jan Bajkowski 2026-07-19 625 SFP_QUIRK_F("OEM", "HC-10GE-113C", sfp_fixup_rollball),
1bb028baab5419 Aleksander Jan Bajkowski 2026-07-19 626
0805d67bc0ef95 Daniel Golle 2024-04-23 627 // OEM SFP-GE-T is a 1000Base-T module with broken TX_FAULT indicator
0805d67bc0ef95 Daniel Golle 2024-04-23 628 SFP_QUIRK_F("OEM", "SFP-GE-T", sfp_fixup_ignore_tx_fault),
0805d67bc0ef95 Daniel Golle 2024-04-23 629
324e88cbe3b7be Marek Behún 2022-09-30 630 SFP_QUIRK_F("OEM", "SFP-10G-T", sfp_fixup_rollball_cc),
a7dc35a9e49b10 Russell King (Oracle 2025-09-16 631) SFP_QUIRK_S("OEM", "SFP-2.5G-T", sfp_quirk_oem_2_5g),
a7dc35a9e49b10 Russell King (Oracle 2025-09-16 632) SFP_QUIRK_S("OEM", "SFP-2.5G-BX10-D", sfp_quirk_2500basex),
a7dc35a9e49b10 Russell King (Oracle 2025-09-16 633) SFP_QUIRK_S("OEM", "SFP-2.5G-BX10-U", sfp_quirk_2500basex),
5af067bf8a64da Wei Qisen 2026-05-26 634 SFP_QUIRK_S("OEM", "SFP-2.5G-LH03-B", sfp_quirk_2500basex),
5af067bf8a64da Wei Qisen 2026-05-26 635 SFP_QUIRK_S("OEM", "SFP-2.5G-LH20-A", sfp_quirk_2500basex),
324e88cbe3b7be Marek Behún 2022-09-30 636 SFP_QUIRK_F("OEM", "RTSFP-10", sfp_fixup_rollball_cc),
324e88cbe3b7be Marek Behún 2022-09-30 637 SFP_QUIRK_F("OEM", "RTSFP-10G", sfp_fixup_rollball_cc),
03fa69146f2fe1 Martino Dell'Ambrogio 2026-08-12 638
03fa69146f2fe1 Martino Dell'Ambrogio 2026-08-12 639 // OEM XGSPONST2001 is an XGS-PON ONT stick with broken TX_FAULT and
03fa69146f2fe1 Martino Dell'Ambrogio 2026-08-12 640 // LOS indicators and slow startup, just like potron. On cold
03fa69146f2fe1 Martino Dell'Ambrogio 2026-08-12 641 // power-up the EEPROM vendor PN field reads back with non-printable
03fa69146f2fe1 Martino Dell'Ambrogio 2026-08-12 642 // garbage past the legitimate string instead of space padding, so
03fa69146f2fe1 Martino Dell'Ambrogio 2026-08-12 643 // match the part as a prefix.
03fa69146f2fe1 Martino Dell'Ambrogio 2026-08-12 644 SFP_QUIRK_F_PREFIX("OEM", "XGSPONST2001", sfp_fixup_potron),
03fa69146f2fe1 Martino Dell'Ambrogio 2026-08-12 645
1c77c721916ae1 Marek Behún 2024-04-09 646 SFP_QUIRK_F("Turris", "RTSFP-2.5G", sfp_fixup_rollball),
324e88cbe3b7be Marek Behún 2022-09-30 647 SFP_QUIRK_F("Turris", "RTSFP-10", sfp_fixup_rollball),
324e88cbe3b7be Marek Behún 2022-09-30 648 SFP_QUIRK_F("Turris", "RTSFP-10G", sfp_fixup_rollball),
911e2c050963cc Jan Hoffmann 2026-03-29 649
911e2c050963cc Jan Hoffmann 2026-03-29 650 SFP_QUIRK_S("ZOERAX", "SFP-2.5G-T", sfp_quirk_oem_2_5g),
23571c7b964374 Russell King (Oracle 2022-09-13 651) };
23571c7b964374 Russell King (Oracle 2022-09-13 652)
23571c7b964374 Russell King (Oracle 2022-09-13 @653) static size_t sfp_strlen(const char *str, size_t maxlen)
23571c7b964374 Russell King (Oracle 2022-09-13 654) {
23571c7b964374 Russell King (Oracle 2022-09-13 655) size_t size, i;
23571c7b964374 Russell King (Oracle 2022-09-13 656)
73472c830eae5f Russell King (Oracle 2022-09-13 657) /* Trailing characters should be filled with space chars, but
73472c830eae5f Russell King (Oracle 2022-09-13 658) * some manufacturers can't read SFF-8472 and use NUL.
73472c830eae5f Russell King (Oracle 2022-09-13 659) */
23571c7b964374 Russell King (Oracle 2022-09-13 660) for (i = 0, size = 0; i < maxlen; i++)
73472c830eae5f Russell King (Oracle 2022-09-13 661) if (str[i] != ' ' && str[i] != '\0')
23571c7b964374 Russell King (Oracle 2022-09-13 662) size = i + 1;
23571c7b964374 Russell King (Oracle 2022-09-13 663)
23571c7b964374 Russell King (Oracle 2022-09-13 664) return size;
23571c7b964374 Russell King (Oracle 2022-09-13 665) }
23571c7b964374 Russell King (Oracle 2022-09-13 666)
f53167e29b8e91 Martino Dell'Ambrogio 2026-08-12 @667 static bool sfp_match(const char *qs, const char *str, size_t len, bool prefix)
23571c7b964374 Russell King (Oracle 2022-09-13 668) {
f53167e29b8e91 Martino Dell'Ambrogio 2026-08-12 669 size_t qs_len;
f53167e29b8e91 Martino Dell'Ambrogio 2026-08-12 670
23571c7b964374 Russell King (Oracle 2022-09-13 671) if (!qs)
23571c7b964374 Russell King (Oracle 2022-09-13 672) return true;
f53167e29b8e91 Martino Dell'Ambrogio 2026-08-12 673 qs_len = strlen(qs);
f53167e29b8e91 Martino Dell'Ambrogio 2026-08-12 674 if (prefix ? qs_len > len : qs_len != len)
23571c7b964374 Russell King (Oracle 2022-09-13 675) return false;
f53167e29b8e91 Martino Dell'Ambrogio 2026-08-12 676 return !strncmp(qs, str, qs_len);
23571c7b964374 Russell King (Oracle 2022-09-13 677) }
23571c7b964374 Russell King (Oracle 2022-09-13 678)
23571c7b964374 Russell King (Oracle 2022-09-13 @679) static const struct sfp_quirk *sfp_lookup_quirk(const struct sfp_eeprom_id *id)
23571c7b964374 Russell King (Oracle 2022-09-13 680) {
23571c7b964374 Russell King (Oracle 2022-09-13 681) const struct sfp_quirk *q;
23571c7b964374 Russell King (Oracle 2022-09-13 682) unsigned int i;
23571c7b964374 Russell King (Oracle 2022-09-13 683) size_t vs, ps;
23571c7b964374 Russell King (Oracle 2022-09-13 684)
23571c7b964374 Russell King (Oracle 2022-09-13 685) vs = sfp_strlen(id->base.vendor_name, ARRAY_SIZE(id->base.vendor_name));
23571c7b964374 Russell King (Oracle 2022-09-13 686) ps = sfp_strlen(id->base.vendor_pn, ARRAY_SIZE(id->base.vendor_pn));
23571c7b964374 Russell King (Oracle 2022-09-13 687)
23571c7b964374 Russell King (Oracle 2022-09-13 688) for (i = 0, q = sfp_quirks; i < ARRAY_SIZE(sfp_quirks); i++, q++)
f53167e29b8e91 Martino Dell'Ambrogio 2026-08-12 689 if (sfp_match(q->vendor, id->base.vendor_name, vs, false) &&
f53167e29b8e91 Martino Dell'Ambrogio 2026-08-12 690 sfp_match(q->part, id->base.vendor_pn, ps,
f53167e29b8e91 Martino Dell'Ambrogio 2026-08-12 691 q->part_prefix_match))
23571c7b964374 Russell King (Oracle 2022-09-13 692) return q;
23571c7b964374 Russell King (Oracle 2022-09-13 693)
23571c7b964374 Russell King (Oracle 2022-09-13 694) return NULL;
23571c7b964374 Russell King (Oracle 2022-09-13 695) }
23571c7b964374 Russell King (Oracle 2022-09-13 696)
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
prev parent reply other threads:[~2026-08-20 4:34 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-07 21:30 [PATCH net-next] net: sfp: Add quirk for Dell M14MK module Xander Wilmink
2026-08-07 21:43 ` Andrew Lunn
2026-08-20 4:34 ` kernel test robot [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202608201239.Hqp9r0YB-lkp@intel.com \
--to=lkp@intel.com \
--cc=jelonek.jonas@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=oe-kbuild-all@lists.linux.dev \
--cc=xwilmink@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).