FreeTel P.C30.2 and P.C30.3 may fail to report anything useful from their EEPROM. They report correct nominal bitrate of 10300 MBd, but do not report sfp_ct_passive nor sfp_ct_active in their ERPROM.
These modules can also operate at 1000baseX and 2500baseX. Signed-off-by: Marek Behún <marek.be...@nic.cz> Cc: Russell King <rmk+ker...@armlinux.org.uk> --- drivers/net/phy/sfp-bus.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/drivers/net/phy/sfp-bus.c b/drivers/net/phy/sfp-bus.c index 6900c68260e0..f021709bedcc 100644 --- a/drivers/net/phy/sfp-bus.c +++ b/drivers/net/phy/sfp-bus.c @@ -44,6 +44,14 @@ static void sfp_quirk_2500basex(const struct sfp_eeprom_id *id, phylink_set(modes, 2500baseX_Full); } +static void sfp_quirk_direct_attach_10g(const struct sfp_eeprom_id *id, + unsigned long *modes) +{ + phylink_set(modes, 10000baseCR_Full); + phylink_set(modes, 2500baseX_Full); + phylink_set(modes, 1000baseX_Full); +} + static const struct sfp_quirk sfp_quirks[] = { { // Alcatel Lucent G-010S-P can operate at 2500base-X, but @@ -63,6 +71,18 @@ static const struct sfp_quirk sfp_quirks[] = { .vendor = "HUAWEI", .part = "MA5671A", .modes = sfp_quirk_2500basex, + }, { + // FreeTel P.C30.2 is a SFP+ direct attach that can operate at + // at 1000baseX, 2500baseX and 10000baseCR, but may report none + // of these in their EEPROM + .vendor = "FreeTel", + .part = "P.C30.2", + .modes = sfp_quirk_direct_attach_10g, + }, { + // same as previous + .vendor = "FreeTel", + .part = "P.C30.3", + .modes = sfp_quirk_direct_attach_10g, }, }; -- 2.24.1