net: sfp-bus: allow SFP quirks to override Autoneg and pause bits
authorRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Tue, 21 Mar 2023 16:58:46 +0000 (16:58 +0000)
committerJakub Kicinski <kuba@kernel.org>
Thu, 23 Mar 2023 05:43:36 +0000 (22:43 -0700)
Allow SFP quirks to override the Autoneg, Pause and Asym_Pause bits in
the support mask.

Some modules have an inaccessible PHY on which is only accessible via
2500base-X without Autonegotiation. We therefore want to be able to
clear the Autoneg bit. Rearrange sfp_parse_support() to allow a SFP
modes quirk to override this bit.

Tested-by: Frank Wunderlich <frank-w@public-files.de>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Reviewed-by: Simon Horman <simon.horman@corigine.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/phy/sfp-bus.c

index daac293e8edece7e594ca35582ff2483a817b6a3..1dd50f2ca05d3e63d55a89b89309930194404700 100644 (file)
@@ -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);