Message ID | 1348604262-21522-1-git-send-email-marex@denx.de |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
On Tue, Sep 25, 2012 at 5:17 PM, Marek Vasut <marex@denx.de> wrote: > The LAN8710/LAN8720 chips do have broken the "FlexPWR" smart power-saving > capability. Enabling it leads to the PHY not being able to detect Link when > cold-started without cable connected. Thus, make sure this is disabled. > > Signed-off-by: Marek Vasut <marex@denx.de> Acked-by: Otavio Salvador <otavio@ossystems.com.br>
From: Otavio Salvador <otavio@ossystems.com.br> Date: Thu, 27 Sep 2012 15:21:37 -0300 > On Tue, Sep 25, 2012 at 5:17 PM, Marek Vasut <marex@denx.de> wrote: >> The LAN8710/LAN8720 chips do have broken the "FlexPWR" smart power-saving >> capability. Enabling it leads to the PHY not being able to detect Link when >> cold-started without cable connected. Thus, make sure this is disabled. >> >> Signed-off-by: Marek Vasut <marex@denx.de> > > Acked-by: Otavio Salvador <otavio@ossystems.com.br> Applied, thanks. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/phy/smsc.c b/drivers/net/phy/smsc.c index 6d61923..88e3991 100644 --- a/drivers/net/phy/smsc.c +++ b/drivers/net/phy/smsc.c @@ -56,6 +56,32 @@ static int smsc_phy_config_init(struct phy_device *phydev) return smsc_phy_ack_interrupt (phydev); } +static int lan87xx_config_init(struct phy_device *phydev) +{ + /* + * Make sure the EDPWRDOWN bit is NOT set. Setting this bit on + * LAN8710/LAN8720 PHY causes the PHY to misbehave, likely due + * to a bug on the chip. + * + * When the system is powered on with the network cable being + * disconnected all the way until after ifconfig ethX up is + * issued for the LAN port with this PHY, connecting the cable + * afterwards does not cause LINK change detection, while the + * expected behavior is the Link UP being detected. + */ + int rc = phy_read(phydev, MII_LAN83C185_CTRL_STATUS); + if (rc < 0) + return rc; + + rc &= ~MII_LAN83C185_EDPWRDOWN; + + rc = phy_write(phydev, MII_LAN83C185_CTRL_STATUS, rc); + if (rc < 0) + return rc; + + return smsc_phy_ack_interrupt(phydev); +} + static int lan911x_config_init(struct phy_device *phydev) { return smsc_phy_ack_interrupt(phydev); @@ -162,7 +188,7 @@ static struct phy_driver smsc_phy_driver[] = { /* basic functions */ .config_aneg = genphy_config_aneg, .read_status = genphy_read_status, - .config_init = smsc_phy_config_init, + .config_init = lan87xx_config_init, /* IRQ related */ .ack_interrupt = smsc_phy_ack_interrupt,
The LAN8710/LAN8720 chips do have broken the "FlexPWR" smart power-saving capability. Enabling it leads to the PHY not being able to detect Link when cold-started without cable connected. Thus, make sure this is disabled. Signed-off-by: Marek Vasut <marex@denx.de> Cc: Christian Hohnstaedt <chohnstaedt@innominate.com> Cc: David S. Miller <davem@davemloft.net> Cc: Fabio Estevam <fabio.estevam@freescale.com> Cc: Giuseppe Cavallaro <peppe.cavallaro@st.com> Cc: Otavio Salvador <otavio@ossystems.com.br> --- drivers/net/phy/smsc.c | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-)