Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1431845 > unrolled thread

[PATCH] net: marvell: Add separate config ANEG function for Marvell 88E1111

Started byHarini Katakam <harini.katakam@xilinx.com>
First post2016-06-27 11:20 +0200
Last post2016-06-29 10:10 +0200
Articles 2 — 2 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH] net: marvell: Add separate config ANEG function for Marvell 88E1111 Harini Katakam <harini.katakam@xilinx.com> - 2016-06-27 11:20 +0200
    Re: [PATCH] net: marvell: Add separate config ANEG function for  Marvell 88E1111 David Miller <davem@davemloft.net> - 2016-06-29 10:10 +0200

#1431845 — [PATCH] net: marvell: Add separate config ANEG function for Marvell 88E1111

FromHarini Katakam <harini.katakam@xilinx.com>
Date2016-06-27 11:20 +0200
Subject[PATCH] net: marvell: Add separate config ANEG function for Marvell 88E1111
Message-ID<rOARY-6GU-3@gated-at.bofh.it>
Marvell 88E1111 currently uses the generic marvell config ANEG function.
This function has a sequence accessing Page 5 and Register 31,
both of which are not defined or reserved for this PHY.
Hence this patch adds a new config ANEG function for Marvell 88E1111
without these erroneous accesses.

Signed-off-by: Harini Katakam <harinik@xilinx.com>
---
 drivers/net/phy/marvell.c |   44 +++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 43 insertions(+), 1 deletion(-)

diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c
index 280e879..783d0ca 100644
--- a/drivers/net/phy/marvell.c
+++ b/drivers/net/phy/marvell.c
@@ -285,6 +285,48 @@ static int marvell_config_aneg(struct phy_device *phydev)
 	return 0;
 }
 
+static int m88e1111_config_aneg(struct phy_device *phydev)
+{
+	int err;
+
+	/* The Marvell PHY has an errata which requires
+	 * that certain registers get written in order
+	 * to restart autonegotiation
+	 */
+	err = phy_write(phydev, MII_BMCR, BMCR_RESET);
+
+	err = marvell_set_polarity(phydev, phydev->mdix);
+	if (err < 0)
+		return err;
+
+	err = phy_write(phydev, MII_M1111_PHY_LED_CONTROL,
+			MII_M1111_PHY_LED_DIRECT);
+	if (err < 0)
+		return err;
+
+	err = genphy_config_aneg(phydev);
+	if (err < 0)
+		return err;
+
+	if (phydev->autoneg != AUTONEG_ENABLE) {
+		int bmcr;
+
+		/* A write to speed/duplex bits (that is performed by
+		 * genphy_config_aneg() call above) must be followed by
+		 * a software reset. Otherwise, the write has no effect.
+		 */
+		bmcr = phy_read(phydev, MII_BMCR);
+		if (bmcr < 0)
+			return bmcr;
+
+		err = phy_write(phydev, MII_BMCR, bmcr | BMCR_RESET);
+		if (err < 0)
+			return err;
+	}
+
+	return 0;
+}
+
 #ifdef CONFIG_OF_MDIO
 /*
  * Set and/or override some configuration registers based on the
@@ -1161,7 +1203,7 @@ static struct phy_driver marvell_drivers[] = {
 		.flags = PHY_HAS_INTERRUPT,
 		.probe = marvell_probe,
 		.config_init = &m88e1111_config_init,
-		.config_aneg = &marvell_config_aneg,
+		.config_aneg = &m88e1111_config_aneg,
 		.read_status = &marvell_read_status,
 		.ack_interrupt = &marvell_ack_interrupt,
 		.config_intr = &marvell_config_intr,
-- 
1.7.9.5

[toc] | [next] | [standalone]


#1433531 — Re: [PATCH] net: marvell: Add separate config ANEG function for Marvell 88E1111

FromDavid Miller <davem@davemloft.net>
Date2016-06-29 10:10 +0200
SubjectRe: [PATCH] net: marvell: Add separate config ANEG function for Marvell 88E1111
Message-ID<rPiJk-1HZ-31@gated-at.bofh.it>
In reply to#1431845
From: Harini Katakam <harini.katakam@xilinx.com>
Date: Mon, 27 Jun 2016 13:09:59 +0530

> Marvell 88E1111 currently uses the generic marvell config ANEG function.
> This function has a sequence accessing Page 5 and Register 31,
> both of which are not defined or reserved for this PHY.
> Hence this patch adds a new config ANEG function for Marvell 88E1111
> without these erroneous accesses.
> 
> Signed-off-by: Harini Katakam <harinik@xilinx.com>

Applied.

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web