mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-31 14:04:26 -04:00 
			
		
		
		
	Add support for Methode DM7052 NBASE-T module to OpenWRT. These patches are taken from my "phy" branch, and will be sent for the next kernel merge window. Signed-off-by: Russell King <linux@armlinux.org.uk> [jonas.gorski: move patches to pending, refresh patches] Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
		
			
				
	
	
		
			90 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| 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
 | |
| @@ -227,7 +227,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
 | |
| @@ -1663,7 +1663,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) {
 | |
|  		netdev_err(pl->netdev,
 | |
|  			   "selection of interface failed, advertisement %*pb\n",
 | |
| --- a/drivers/net/phy/sfp-bus.c
 | |
| +++ b/drivers/net/phy/sfp-bus.c
 | |
| @@ -319,16 +319,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) ||
 | |
| @@ -341,7 +337,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;
 |