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;
 |