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