netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next v3 0/4] net: phy: add and use genphy_c45_an_config_an
@ 2019-02-17  9:27 Heiner Kallweit
  2019-02-17  9:28 ` [PATCH net-next v3 1/4] net: phy: add helper linkmode_adv_to_mii_10gbt_adv_t Heiner Kallweit
                   ` (4 more replies)
  0 siblings, 5 replies; 7+ messages in thread
From: Heiner Kallweit @ 2019-02-17  9:27 UTC (permalink / raw)
  To: Andrew Lunn, Florian Fainelli, David Miller, Russell King - ARM Linux
  Cc: netdev

This series adds genphy_c45_an_config_an() and uses it in the
marvell10g diver. In addition patch 4 aligns the aneg configuration
with what is done in genphy_config_aneg().

v2:
- in patch 2 changed function name to genphy_c45_an_config_aneg
- in patch 3 add a comment regarding 1000BaseT vendor registers

v3:
- rebase patch 3

Andrew Lunn (2):
  net: phy: add genphy_c45_an_config_an
  net: phy: marvell10g: use genphy_c45_an_config_aneg

Heiner Kallweit (2):
  net: phy: add helper linkmode_adv_to_mii_10gbt_adv_t
  net: phy: marvell10g: check for newly set aneg

 drivers/net/phy/marvell10g.c | 31 ++++++++++---------------
 drivers/net/phy/phy-c45.c    | 44 ++++++++++++++++++++++++++++++++++++
 include/linux/mdio.h         | 25 ++++++++++++++++++++
 include/linux/phy.h          |  1 +
 4 files changed, 82 insertions(+), 19 deletions(-)

-- 
2.20.1



^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH net-next v3 1/4] net: phy: add helper linkmode_adv_to_mii_10gbt_adv_t
  2019-02-17  9:27 [PATCH net-next v3 0/4] net: phy: add and use genphy_c45_an_config_an Heiner Kallweit
@ 2019-02-17  9:28 ` Heiner Kallweit
  2019-02-17  9:29 ` [PATCH net-next v3 2/4] net: phy: add genphy_c45_an_config_aneg Heiner Kallweit
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 7+ messages in thread
From: Heiner Kallweit @ 2019-02-17  9:28 UTC (permalink / raw)
  To: Andrew Lunn, Florian Fainelli, David Miller, Russell King - ARM Linux
  Cc: netdev

Add a helper linkmode_adv_to_mii_10gbt_adv_t(), similar to
linkmode_adv_to_mii_adv_t.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
---
 include/linux/mdio.h | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/include/linux/mdio.h b/include/linux/mdio.h
index 5b872c45f..5a65f32d8 100644
--- a/include/linux/mdio.h
+++ b/include/linux/mdio.h
@@ -280,6 +280,31 @@ static inline void mii_10gbt_stat_mod_linkmode_lpa_t(unsigned long *advertising,
 			 advertising, lpa & MDIO_AN_10GBT_STAT_LP10G);
 }
 
+/**
+ * linkmode_adv_to_mii_10gbt_adv_t
+ * @advertising: the linkmode advertisement settings
+ *
+ * A small helper function that translates linkmode advertisement
+ * settings to phy autonegotiation advertisements for the C45
+ * 10GBASE-T AN CONTROL (7.32) register.
+ */
+static inline u32 linkmode_adv_to_mii_10gbt_adv_t(unsigned long *advertising)
+{
+	u32 result = 0;
+
+	if (linkmode_test_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT,
+			      advertising))
+		result |= MDIO_AN_10GBT_CTRL_ADV2_5G;
+	if (linkmode_test_bit(ETHTOOL_LINK_MODE_5000baseT_Full_BIT,
+			      advertising))
+		result |= MDIO_AN_10GBT_CTRL_ADV5G;
+	if (linkmode_test_bit(ETHTOOL_LINK_MODE_10000baseT_Full_BIT,
+			      advertising))
+		result |= MDIO_AN_10GBT_CTRL_ADV10G;
+
+	return result;
+}
+
 int __mdiobus_read(struct mii_bus *bus, int addr, u32 regnum);
 int __mdiobus_write(struct mii_bus *bus, int addr, u32 regnum, u16 val);
 
-- 
2.20.1




^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH net-next v3 2/4] net: phy: add genphy_c45_an_config_aneg
  2019-02-17  9:27 [PATCH net-next v3 0/4] net: phy: add and use genphy_c45_an_config_an Heiner Kallweit
  2019-02-17  9:28 ` [PATCH net-next v3 1/4] net: phy: add helper linkmode_adv_to_mii_10gbt_adv_t Heiner Kallweit
@ 2019-02-17  9:29 ` Heiner Kallweit
  2019-02-17  9:30 ` [PATCH net-next v3 3/4] net: phy: marvell10g: use genphy_c45_an_config_aneg Heiner Kallweit
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 7+ messages in thread
From: Heiner Kallweit @ 2019-02-17  9:29 UTC (permalink / raw)
  To: Andrew Lunn, Florian Fainelli, David Miller, Russell King - ARM Linux
  Cc: netdev

From: Andrew Lunn <andrew@lunn.ch>
C45 configuration of 10/100 and multi-giga bit auto negotiation
advertisement is standardized. Configuration of 1000Base-T however
appears to be vendor specific. Move the generic code out of the
Marvell driver into the common phy-c45.c file.

v2:
- change function name to genphy_c45_an_config_aneg

Signed-off-by: Andrew Lunn <andrew@lunn.ch>
[hkallweit1@gmail.com: use new helper linkmode_adv_to_mii_10gbt_adv_t and split patch]
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
---
 drivers/net/phy/phy-c45.c | 44 +++++++++++++++++++++++++++++++++++++++
 include/linux/phy.h       |  1 +
 2 files changed, 45 insertions(+)

diff --git a/drivers/net/phy/phy-c45.c b/drivers/net/phy/phy-c45.c
index 98a04d4cd..16636d49b 100644
--- a/drivers/net/phy/phy-c45.c
+++ b/drivers/net/phy/phy-c45.c
@@ -78,6 +78,50 @@ int genphy_c45_pma_setup_forced(struct phy_device *phydev)
 }
 EXPORT_SYMBOL_GPL(genphy_c45_pma_setup_forced);
 
+/**
+ * genphy_c45_an_config_aneg - configure advertisement registers
+ * @phydev: target phy_device struct
+ *
+ * Configure advertisement registers based on modes set in phydev->advertising
+ *
+ * Returns negative errno code on failure, 0 if advertisement didn't change,
+ * or 1 if advertised modes changed.
+ */
+int genphy_c45_an_config_aneg(struct phy_device *phydev)
+{
+	int changed = 0, ret;
+	u32 adv;
+
+	linkmode_and(phydev->advertising, phydev->advertising,
+		     phydev->supported);
+
+	adv = linkmode_adv_to_mii_adv_t(phydev->advertising);
+
+	ret = phy_modify_mmd(phydev, MDIO_MMD_AN, MDIO_AN_ADVERTISE,
+			     ADVERTISE_ALL | ADVERTISE_100BASE4 |
+			     ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM,
+			     adv);
+	if (ret < 0)
+		return ret;
+	if (ret > 0)
+		changed = 1;
+
+	adv = linkmode_adv_to_mii_10gbt_adv_t(phydev->advertising);
+
+	ret = phy_modify_mmd(phydev, MDIO_MMD_AN, MDIO_AN_10GBT_CTRL,
+			     MDIO_AN_10GBT_CTRL_ADV10G |
+			     MDIO_AN_10GBT_CTRL_ADV5G |
+			     MDIO_AN_10GBT_CTRL_ADV2_5G,
+			     adv);
+	if (ret < 0)
+		return ret;
+	if (ret > 0)
+		changed = 1;
+
+	return changed;
+}
+EXPORT_SYMBOL_GPL(genphy_c45_an_config_aneg);
+
 /**
  * genphy_c45_an_disable_aneg - disable auto-negotiation
  * @phydev: target phy_device struct
diff --git a/include/linux/phy.h b/include/linux/phy.h
index bf1070c2a..3db507e68 100644
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
@@ -1101,6 +1101,7 @@ int genphy_c45_read_link(struct phy_device *phydev);
 int genphy_c45_read_lpa(struct phy_device *phydev);
 int genphy_c45_read_pma(struct phy_device *phydev);
 int genphy_c45_pma_setup_forced(struct phy_device *phydev);
+int genphy_c45_an_config_aneg(struct phy_device *phydev);
 int genphy_c45_an_disable_aneg(struct phy_device *phydev);
 int genphy_c45_read_mdix(struct phy_device *phydev);
 int genphy_c45_pma_read_abilities(struct phy_device *phydev);
-- 
2.20.1




^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH net-next v3 3/4] net: phy: marvell10g: use genphy_c45_an_config_aneg
  2019-02-17  9:27 [PATCH net-next v3 0/4] net: phy: add and use genphy_c45_an_config_an Heiner Kallweit
  2019-02-17  9:28 ` [PATCH net-next v3 1/4] net: phy: add helper linkmode_adv_to_mii_10gbt_adv_t Heiner Kallweit
  2019-02-17  9:29 ` [PATCH net-next v3 2/4] net: phy: add genphy_c45_an_config_aneg Heiner Kallweit
@ 2019-02-17  9:30 ` Heiner Kallweit
  2019-02-17  9:32 ` [PATCH net-next v3 4/4] net: phy: marvell10g: check for newly set aneg Heiner Kallweit
  2019-02-17 18:28 ` [PATCH net-next v3 0/4] net: phy: add and use genphy_c45_an_config_an David Miller
  4 siblings, 0 replies; 7+ messages in thread
From: Heiner Kallweit @ 2019-02-17  9:30 UTC (permalink / raw)
  To: Andrew Lunn, Florian Fainelli, David Miller, Russell King - ARM Linux
  Cc: netdev

From: Andrew Lunn <andrew@lunn.ch>
Use new function genphy_c45_config_aneg() in mv3310_config_aneg().

v2:
- add a comment regarding 1000BaseT vendor registers
v3:
- rebased

Signed-off-by: Andrew Lunn <andrew@lunn.ch>
[hkallweit1@gmail.com: patch splitted]
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
---
 drivers/net/phy/marvell10g.c | 25 ++++---------------------
 1 file changed, 4 insertions(+), 21 deletions(-)

diff --git a/drivers/net/phy/marvell10g.c b/drivers/net/phy/marvell10g.c
index 4a6ae63ab..b7742799c 100644
--- a/drivers/net/phy/marvell10g.c
+++ b/drivers/net/phy/marvell10g.c
@@ -274,18 +274,15 @@ static int mv3310_config_aneg(struct phy_device *phydev)
 	if (phydev->autoneg == AUTONEG_DISABLE)
 		return genphy_c45_pma_setup_forced(phydev);
 
-	linkmode_and(phydev->advertising, phydev->advertising,
-		     phydev->supported);
-
-	ret = phy_modify_mmd_changed(phydev, MDIO_MMD_AN, MDIO_AN_ADVERTISE,
-			     ADVERTISE_ALL | ADVERTISE_100BASE4 |
-			     ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM,
-			     linkmode_adv_to_mii_adv_t(phydev->advertising));
+	ret = genphy_c45_an_config_aneg(phydev);
 	if (ret < 0)
 		return ret;
 	if (ret > 0)
 		changed = true;
 
+	/* Clause 45 has no standardized support for 1000BaseT, therefore
+	 * use vendor registers for this mode.
+	 */
 	reg = linkmode_adv_to_mii_ctrl1000_t(phydev->advertising);
 	ret = phy_modify_mmd_changed(phydev, MDIO_MMD_AN, MV_AN_CTRL1000,
 			     ADVERTISE_1000FULL | ADVERTISE_1000HALF, reg);
@@ -294,20 +291,6 @@ static int mv3310_config_aneg(struct phy_device *phydev)
 	if (ret > 0)
 		changed = true;
 
-	/* 10G control register */
-	if (linkmode_test_bit(ETHTOOL_LINK_MODE_10000baseT_Full_BIT,
-			      phydev->advertising))
-		reg = MDIO_AN_10GBT_CTRL_ADV10G;
-	else
-		reg = 0;
-
-	ret = phy_modify_mmd_changed(phydev, MDIO_MMD_AN, MDIO_AN_10GBT_CTRL,
-				     MDIO_AN_10GBT_CTRL_ADV10G, reg);
-	if (ret < 0)
-		return ret;
-	if (ret > 0)
-		changed = true;
-
 	if (changed)
 		ret = genphy_c45_restart_aneg(phydev);
 
-- 
2.20.1



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH net-next v3 4/4] net: phy: marvell10g: check for newly set aneg
  2019-02-17  9:27 [PATCH net-next v3 0/4] net: phy: add and use genphy_c45_an_config_an Heiner Kallweit
                   ` (2 preceding siblings ...)
  2019-02-17  9:30 ` [PATCH net-next v3 3/4] net: phy: marvell10g: use genphy_c45_an_config_aneg Heiner Kallweit
@ 2019-02-17  9:32 ` Heiner Kallweit
  2019-02-17 18:28 ` [PATCH net-next v3 0/4] net: phy: add and use genphy_c45_an_config_an David Miller
  4 siblings, 0 replies; 7+ messages in thread
From: Heiner Kallweit @ 2019-02-17  9:32 UTC (permalink / raw)
  To: Andrew Lunn, Florian Fainelli, David Miller, Russell King - ARM Linux
  Cc: netdev

Even if the advertisement registers content didn't change, we may have
just switched to aneg, and therefore have to trigger an aneg restart.
This matches the behavior of genphy_config_aneg().

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
---
 drivers/net/phy/marvell10g.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/drivers/net/phy/marvell10g.c b/drivers/net/phy/marvell10g.c
index 895574083..b83eb19cf 100644
--- a/drivers/net/phy/marvell10g.c
+++ b/drivers/net/phy/marvell10g.c
@@ -296,6 +296,16 @@ static int mv3310_config_aneg(struct phy_device *phydev)
 	if (ret > 0)
 		changed = true;
 
+	if (!changed) {
+		/* Configure and restart aneg if it wasn't set before */
+		ret = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_CTRL1);
+		if (ret < 0)
+			return ret;
+
+		if (!(ret & MDIO_AN_CTRL1_ENABLE))
+			changed = 1;
+	}
+
 	if (changed)
 		ret = genphy_c45_restart_aneg(phydev);
 
-- 
2.20.1




^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH net-next v3 0/4] net: phy: add and use genphy_c45_an_config_an
  2019-02-17  9:27 [PATCH net-next v3 0/4] net: phy: add and use genphy_c45_an_config_an Heiner Kallweit
                   ` (3 preceding siblings ...)
  2019-02-17  9:32 ` [PATCH net-next v3 4/4] net: phy: marvell10g: check for newly set aneg Heiner Kallweit
@ 2019-02-17 18:28 ` David Miller
  2019-02-17 18:45   ` Heiner Kallweit
  4 siblings, 1 reply; 7+ messages in thread
From: David Miller @ 2019-02-17 18:28 UTC (permalink / raw)
  To: hkallweit1; +Cc: andrew, f.fainelli, linux, netdev

From: Heiner Kallweit <hkallweit1@gmail.com>
Date: Sun, 17 Feb 2019 10:27:43 +0100

> This series adds genphy_c45_an_config_an() and uses it in the
> marvell10g diver. In addition patch 4 aligns the aneg configuration
> with what is done in genphy_config_aneg().
> 
> v2:
> - in patch 2 changed function name to genphy_c45_an_config_aneg
> - in patch 3 add a comment regarding 1000BaseT vendor registers
> 
> v3:
> - rebase patch 3

Series applied.

For patches #1 and #4 there was some fuzz which I resolved.

Did you really rebase this series? :-)

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH net-next v3 0/4] net: phy: add and use genphy_c45_an_config_an
  2019-02-17 18:28 ` [PATCH net-next v3 0/4] net: phy: add and use genphy_c45_an_config_an David Miller
@ 2019-02-17 18:45   ` Heiner Kallweit
  0 siblings, 0 replies; 7+ messages in thread
From: Heiner Kallweit @ 2019-02-17 18:45 UTC (permalink / raw)
  To: David Miller; +Cc: andrew, f.fainelli, linux, netdev

On 17.02.2019 19:28, David Miller wrote:
> From: Heiner Kallweit <hkallweit1@gmail.com>
> Date: Sun, 17 Feb 2019 10:27:43 +0100
> 
>> This series adds genphy_c45_an_config_an() and uses it in the
>> marvell10g diver. In addition patch 4 aligns the aneg configuration
>> with what is done in genphy_config_aneg().
>>
>> v2:
>> - in patch 2 changed function name to genphy_c45_an_config_aneg
>> - in patch 3 add a comment regarding 1000BaseT vendor registers
>>
>> v3:
>> - rebase patch 3
> 
> Series applied.
> 
> For patches #1 and #4 there was some fuzz which I resolved.
> 
> Did you really rebase this series? :-)
> 
I swear .. I think reason is that there are further patches under review
dealing with the same file(s).

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2019-02-17 18:45 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-02-17  9:27 [PATCH net-next v3 0/4] net: phy: add and use genphy_c45_an_config_an Heiner Kallweit
2019-02-17  9:28 ` [PATCH net-next v3 1/4] net: phy: add helper linkmode_adv_to_mii_10gbt_adv_t Heiner Kallweit
2019-02-17  9:29 ` [PATCH net-next v3 2/4] net: phy: add genphy_c45_an_config_aneg Heiner Kallweit
2019-02-17  9:30 ` [PATCH net-next v3 3/4] net: phy: marvell10g: use genphy_c45_an_config_aneg Heiner Kallweit
2019-02-17  9:32 ` [PATCH net-next v3 4/4] net: phy: marvell10g: check for newly set aneg Heiner Kallweit
2019-02-17 18:28 ` [PATCH net-next v3 0/4] net: phy: add and use genphy_c45_an_config_an David Miller
2019-02-17 18:45   ` Heiner Kallweit

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).