| From dc45d9e04572b5cd6d32f51cdf9f62b18022e6dd Mon Sep 17 00:00:00 2001 | 
 | From: Russell King <rmk+kernel@armlinux.org.uk> | 
 | Date: Thu, 21 Nov 2019 17:32:59 +0000 | 
 | Subject: [PATCH 644/660] net: sfp: derive interface mode from ethtool link | 
 |  modes | 
 |  | 
 | 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(). | 
 |  | 
 | Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> | 
 | --- | 
 |  drivers/net/phy/marvell10g.c |  2 +- | 
 |  drivers/net/phy/phylink.c    |  2 +- | 
 |  drivers/net/phy/sfp-bus.c    | 11 ++++------- | 
 |  include/linux/sfp.h          |  2 -- | 
 |  4 files changed, 6 insertions(+), 11 deletions(-) | 
 |  | 
 | --- a/drivers/net/phy/marvell10g.c | 
 | +++ b/drivers/net/phy/marvell10g.c | 
 | @@ -214,7 +214,7 @@ static int mv3310_sfp_insert(void *upstr | 
 |  	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"); | 
 | --- a/drivers/net/phy/phylink.c | 
 | +++ b/drivers/net/phy/phylink.c | 
 | @@ -1718,7 +1718,7 @@ static int phylink_sfp_module_insert(voi | 
 |   | 
 |  	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", | 
 | --- a/drivers/net/phy/sfp-bus.c | 
 | +++ b/drivers/net/phy/sfp-bus.c | 
 | @@ -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(str | 
 |  	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)) | 
 | --- a/include/linux/sfp.h | 
 | +++ b/include/linux/sfp.h | 
 | @@ -504,7 +504,6 @@ int sfp_parse_port(struct sfp_bus *bus, | 
 |  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(str | 
 |  } | 
 |   | 
 |  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; |