net: sfp: derive interface mode from ethtool link modes
authorRussell King <rmk+kernel@armlinux.org.uk>
Wed, 11 Dec 2019 10:55:59 +0000 (10:55 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 11 Dec 2019 19:53:41 +0000 (11:53 -0800)
We don't need the EEPROM ID to derive the phy interface mode as we can
derive it merely from the ethtool link modes.  Remove the EEPROM ID
argument to sfp_select_interface().

Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/phy/marvell10g.c
drivers/net/phy/phylink.c
drivers/net/phy/sfp-bus.c
include/linux/sfp.h

index 1bf1301..512f27b 100644 (file)
@@ -214,7 +214,7 @@ static int mv3310_sfp_insert(void *upstream, const struct sfp_eeprom_id *id)
        phy_interface_t iface;
 
        sfp_parse_support(phydev->sfp_bus, id, support);
-       iface = sfp_select_interface(phydev->sfp_bus, id, support);
+       iface = sfp_select_interface(phydev->sfp_bus, support);
 
        if (iface != PHY_INTERFACE_MODE_10GKR) {
                dev_err(&phydev->mdio.dev, "incompatible SFP module inserted\n");
index 9a616d6..b3e4d9b 100644 (file)
@@ -1714,7 +1714,7 @@ static int phylink_sfp_module_insert(void *upstream,
 
        linkmode_copy(support1, support);
 
-       iface = sfp_select_interface(pl->sfp_bus, id, config.advertising);
+       iface = sfp_select_interface(pl->sfp_bus, config.advertising);
        if (iface == PHY_INTERFACE_MODE_NA) {
                phylink_err(pl,
                            "selection of interface failed, advertisement %*pb\n",
index 02ab076..1561962 100644 (file)
@@ -320,16 +320,12 @@ EXPORT_SYMBOL_GPL(sfp_parse_support);
 /**
  * sfp_select_interface() - Select appropriate phy_interface_t mode
  * @bus: a pointer to the &struct sfp_bus structure for the sfp module
- * @id: a pointer to the module's &struct sfp_eeprom_id
  * @link_modes: ethtool link modes mask
  *
- * Derive the phy_interface_t mode for the information found in the
- * module's identifying EEPROM and the link modes mask. There is no
- * standard or defined way to derive this information, so we decide
- * based upon the link mode mask.
+ * Derive the phy_interface_t mode for the SFP module from the link
+ * modes mask.
  */
 phy_interface_t sfp_select_interface(struct sfp_bus *bus,
-                                    const struct sfp_eeprom_id *id,
                                     unsigned long *link_modes)
 {
        if (phylink_test(link_modes, 10000baseCR_Full) ||
@@ -342,7 +338,8 @@ phy_interface_t sfp_select_interface(struct sfp_bus *bus,
        if (phylink_test(link_modes, 2500baseX_Full))
                return PHY_INTERFACE_MODE_2500BASEX;
 
-       if (id->base.e1000_base_t)
+       if (phylink_test(link_modes, 1000baseT_Half) ||
+           phylink_test(link_modes, 1000baseT_Full))
                return PHY_INTERFACE_MODE_SGMII;
 
        if (phylink_test(link_modes, 1000baseX_Full))
index 487fd94..8d7b98c 100644 (file)
@@ -504,7 +504,6 @@ int sfp_parse_port(struct sfp_bus *bus, const struct sfp_eeprom_id *id,
 void sfp_parse_support(struct sfp_bus *bus, const struct sfp_eeprom_id *id,
                       unsigned long *support);
 phy_interface_t sfp_select_interface(struct sfp_bus *bus,
-                                    const struct sfp_eeprom_id *id,
                                     unsigned long *link_modes);
 
 int sfp_get_module_info(struct sfp_bus *bus, struct ethtool_modinfo *modinfo);
@@ -532,7 +531,6 @@ static inline void sfp_parse_support(struct sfp_bus *bus,
 }
 
 static inline phy_interface_t sfp_select_interface(struct sfp_bus *bus,
-                                                  const struct sfp_eeprom_id *id,
                                                   unsigned long *link_modes)
 {
        return PHY_INTERFACE_MODE_NA;