net: phy: marvell: Call phy_reset() where possible
Subsystems (2)
PATCH 1/2 net: phy: marvell: Call phy_reset() where possible
Instead of coding the soft PHY reset function multiple times in marvell.c, lets call the common phy_reset() function from phy.c.
--- drivers/net/phy/marvell.c | 23 ++--------------------- 1 file changed, 2 insertions(+), 21 deletions(-)
drivers/net/phy/marvell.c +2 -21
@@ -172,7 +172,6 @@ static int m88e1011s_startup(struct phy_device *phydev)static int m88e1111s_config (struct phy_device *phydev) {int reg; -int timeout; if ((phydev->interface == PHY_INTERFACE_MODE_RGMII) || (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID) ||
@@ -236,16 +235,7 @@ static int m88e1111s_config(struct phy_device *phydev) MIIM_88E1111_PHY_EXT_SR, reg);/* soft reset */ - timeout =1000 ; -phy_write (phydev,MDIO_DEVAD_NONE ,MII_BMCR ,BMCR_RESET ); -udelay (1000 ); - reg =phy_read (phydev,MDIO_DEVAD_NONE ,MII_BMCR ); -while ((reg &BMCR_RESET ) && --timeout) { -udelay (1000 ); - reg =phy_read (phydev,MDIO_DEVAD_NONE ,MII_BMCR ); - } -if (!timeout) -printf ("%s: phy soft reset timeout\n" , __func__); +phy_reset (phydev); reg =phy_read (phydev,MDIO_DEVAD_NONE ,MIIM_88E1111_PHY_EXT_SR );
@@ -258,16 +248,7 @@ static int m88e1111s_config(struct phy_device *phydev) }/* soft reset */ - timeout =1000 ; -phy_write (phydev,MDIO_DEVAD_NONE ,MII_BMCR ,BMCR_RESET ); -udelay (1000 ); - reg =phy_read (phydev,MDIO_DEVAD_NONE ,MII_BMCR ); -while ((reg &BMCR_RESET ) && --timeout) { -udelay (1000 ); - reg =phy_read (phydev,MDIO_DEVAD_NONE ,MII_BMCR ); - } -if (!timeout) -printf ("%s: phy soft reset timeout\n" , __func__); +phy_reset (phydev);genphy_config_aneg (phydev);
Signature · 1 line
2.7.1
PATCH 2/2 net: phy: marvell: Fix problem with phy_reset() clearing BMCR
With commit a058052c [net: phy: do not read configuration register on reset], phy_reset() will clear the BMCR register. Resulting in bit 12 being cleared (A/N enable). This leads to autonegotiation link problems, at least on the Marvell Armada ClearFog board. I suspect that other boards using this driver will be affected as well.
At the of m88e1111s_config(), phy_reset() is called. This is not needed for the PHY to load the changed configuration, as phy_reset() is called a few lines before already. So lets call genphy_restart_aneg() here instead to start the AN correctly.
Tested on clearfog.
--- drivers/net/phy/marvell.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
drivers/net/phy/marvell.c +1 -2
@@ -251,8 +251,7 @@ static int m88e1111s_config(struct phy_device *phydev)phy_reset (phydev);genphy_config_aneg (phydev); - -phy_reset (phydev); +genphy_restart_aneg (phydev);return 0 ; }
Signature · 1 line
2.7.1
PATCH 2/2 net: phy: marvell: Fix problem with phy_reset() clearing BMCR
Quoted 11 lines · Stefan Roese
With commit
a058052c[net: phy: do not read configuration register on reset],phy_reset()will clear the BMCR register. Resulting in bit 12 being cleared (A/N enable). This leads to autonegotiation link problems, at least on the Marvell Armada ClearFog board. I suspect that other boards using this driver will be affected as well.At the of
m88e1111s_config(),phy_reset()is called. This is not needed for the PHY to load the changed configuration, asphy_reset()is called a few lines before already. So lets callgenphy_restart_aneg()here instead to start the AN correctly.
Quoted 8 lines
Tested on clearfog.
Signed-off-by Stefan Roese <[email protected]>Cc Stefan Agner <[email protected]>Cc Hao Zhang <[email protected]>Cc Michal Simek <[email protected]>Cc Andy Fleming <[email protected]>Cc Joe Hershberger <[email protected]>
PATCH 1/2 net: phy: marvell: Call phy_reset() where possible
In reply to Stefan RoeseQuoted 10 lines · Stefan Roese
Instead of coding the soft PHY reset function multiple times in
marvell.c, lets call the commonphy_reset()function fromphy.c.Signed-off-by Stefan Roese <[email protected]>Cc Stefan Agner <[email protected]>Cc Hao Zhang <[email protected]>Cc Michal Simek <[email protected]>Cc Andy Fleming <[email protected]>Cc Joe Hershberger <[email protected]>---
[U-Boot] net: phy: marvell: Fix problem with phy_reset() clearing BMCR
In reply to Stefan Roese