mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-05 21:44:23 -04:00
Merge branch 'quirk-for-oem-sfp-2-5g-t-copper-module'
Russell King says: ==================== Quirk for OEM SFP-2.5G-T copper module Frank Wunderlich reports that this copper module requires a quirk in order to function - in that the module needs to use 2500base-X. Moreover, negotiation must be disabled. An example of this device would be: https://www.optcore.net/product/sfp-2g-t-gen ==================== Link: https://lore.kernel.org/r/ZBniMlTDZJQ242DP@shell.armlinux.org.uk Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
@@ -151,6 +151,10 @@ void sfp_parse_support(struct sfp_bus *bus, const struct sfp_eeprom_id *id,
|
||||
unsigned int br_min, br_nom, br_max;
|
||||
__ETHTOOL_DECLARE_LINK_MODE_MASK(modes) = { 0, };
|
||||
|
||||
phylink_set(modes, Autoneg);
|
||||
phylink_set(modes, Pause);
|
||||
phylink_set(modes, Asym_Pause);
|
||||
|
||||
/* Decode the bitrate information to MBd */
|
||||
br_min = br_nom = br_max = 0;
|
||||
if (id->base.br_nominal) {
|
||||
@@ -329,10 +333,6 @@ void sfp_parse_support(struct sfp_bus *bus, const struct sfp_eeprom_id *id,
|
||||
bus->sfp_quirk->modes(id, modes, interfaces);
|
||||
|
||||
linkmode_or(support, support, modes);
|
||||
|
||||
phylink_set(support, Autoneg);
|
||||
phylink_set(support, Pause);
|
||||
phylink_set(support, Asym_Pause);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(sfp_parse_support);
|
||||
|
||||
|
||||
@@ -360,6 +360,23 @@ static void sfp_quirk_2500basex(const struct sfp_eeprom_id *id,
|
||||
__set_bit(PHY_INTERFACE_MODE_2500BASEX, interfaces);
|
||||
}
|
||||
|
||||
static void sfp_quirk_disable_autoneg(const struct sfp_eeprom_id *id,
|
||||
unsigned long *modes,
|
||||
unsigned long *interfaces)
|
||||
{
|
||||
linkmode_clear_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, modes);
|
||||
}
|
||||
|
||||
static void sfp_quirk_oem_2_5g(const struct sfp_eeprom_id *id,
|
||||
unsigned long *modes,
|
||||
unsigned long *interfaces)
|
||||
{
|
||||
/* Copper 2.5G SFP */
|
||||
linkmode_set_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT, modes);
|
||||
__set_bit(PHY_INTERFACE_MODE_2500BASEX, interfaces);
|
||||
sfp_quirk_disable_autoneg(id, modes, interfaces);
|
||||
}
|
||||
|
||||
static void sfp_quirk_ubnt_uf_instant(const struct sfp_eeprom_id *id,
|
||||
unsigned long *modes,
|
||||
unsigned long *interfaces)
|
||||
@@ -401,6 +418,7 @@ static const struct sfp_quirk sfp_quirks[] = {
|
||||
SFP_QUIRK_M("UBNT", "UF-INSTANT", sfp_quirk_ubnt_uf_instant),
|
||||
|
||||
SFP_QUIRK_F("OEM", "SFP-10G-T", sfp_fixup_rollball_cc),
|
||||
SFP_QUIRK_M("OEM", "SFP-2.5G-T", sfp_quirk_oem_2_5g),
|
||||
SFP_QUIRK_F("OEM", "RTSFP-10", sfp_fixup_rollball_cc),
|
||||
SFP_QUIRK_F("OEM", "RTSFP-10G", sfp_fixup_rollball_cc),
|
||||
SFP_QUIRK_F("Turris", "RTSFP-10", sfp_fixup_rollball),
|
||||
|
||||
Reference in New Issue
Block a user