Commit dbd479db authored by Florian Fainelli's avatar Florian Fainelli Committed by David S. Miller

net: bcmgenet: apply MII configuration in bcmgenet_open()

In case an interface has been brought down before entering S3, and then
brought up out of S3, all the initialization done during
bcmgenet_probe() by bcmgenet_mii_init() calling bcmgenet_mii_config() is
just lost since register contents are restored to their reset values.

Re-apply this configuration anytime we call bcmgenet_open() to make sure
our port multiplexer is properly configured to match the PHY interface.

Since we are now calling bcmgenet_mii_config() everytime bcmgenet_open()
is called, make sure we only print the message during initialization
time not to pollute the console.

Fixes: b6e978e5 ("net: bcmgenet: add suspend/resume callbacks")
Fixes: 1c1008c7 ("net: bcmgenet: add main driver file")
Signed-off-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent c96e731c
...@@ -2140,6 +2140,9 @@ static int bcmgenet_open(struct net_device *dev) ...@@ -2140,6 +2140,9 @@ static int bcmgenet_open(struct net_device *dev)
goto err_irq0; goto err_irq0;
} }
/* Re-configure the port multiplexer towards the PHY device */
bcmgenet_mii_config(priv->dev, false);
phy_connect_direct(dev, priv->phydev, bcmgenet_mii_setup, phy_connect_direct(dev, priv->phydev, bcmgenet_mii_setup,
priv->phy_interface); priv->phy_interface);
...@@ -2691,7 +2694,7 @@ static int bcmgenet_resume(struct device *d) ...@@ -2691,7 +2694,7 @@ static int bcmgenet_resume(struct device *d)
phy_init_hw(priv->phydev); phy_init_hw(priv->phydev);
/* Speed settings must be restored */ /* Speed settings must be restored */
bcmgenet_mii_config(priv->dev); bcmgenet_mii_config(priv->dev, false);
/* disable ethernet MAC while updating its registers */ /* disable ethernet MAC while updating its registers */
umac_enable_set(priv, CMD_TX_EN | CMD_RX_EN, false); umac_enable_set(priv, CMD_TX_EN | CMD_RX_EN, false);
......
...@@ -617,7 +617,7 @@ GENET_IO_MACRO(rbuf, GENET_RBUF_OFF); ...@@ -617,7 +617,7 @@ GENET_IO_MACRO(rbuf, GENET_RBUF_OFF);
/* MDIO routines */ /* MDIO routines */
int bcmgenet_mii_init(struct net_device *dev); int bcmgenet_mii_init(struct net_device *dev);
int bcmgenet_mii_config(struct net_device *dev); int bcmgenet_mii_config(struct net_device *dev, bool init);
void bcmgenet_mii_exit(struct net_device *dev); void bcmgenet_mii_exit(struct net_device *dev);
void bcmgenet_mii_reset(struct net_device *dev); void bcmgenet_mii_reset(struct net_device *dev);
void bcmgenet_mii_setup(struct net_device *dev); void bcmgenet_mii_setup(struct net_device *dev);
......
...@@ -211,7 +211,7 @@ static void bcmgenet_moca_phy_setup(struct bcmgenet_priv *priv) ...@@ -211,7 +211,7 @@ static void bcmgenet_moca_phy_setup(struct bcmgenet_priv *priv)
bcmgenet_sys_writel(priv, reg, SYS_PORT_CTRL); bcmgenet_sys_writel(priv, reg, SYS_PORT_CTRL);
} }
int bcmgenet_mii_config(struct net_device *dev) int bcmgenet_mii_config(struct net_device *dev, bool init)
{ {
struct bcmgenet_priv *priv = netdev_priv(dev); struct bcmgenet_priv *priv = netdev_priv(dev);
struct phy_device *phydev = priv->phydev; struct phy_device *phydev = priv->phydev;
...@@ -298,7 +298,8 @@ int bcmgenet_mii_config(struct net_device *dev) ...@@ -298,7 +298,8 @@ int bcmgenet_mii_config(struct net_device *dev)
return -EINVAL; return -EINVAL;
} }
dev_info(kdev, "configuring instance for %s\n", phy_name); if (init)
dev_info(kdev, "configuring instance for %s\n", phy_name);
return 0; return 0;
} }
...@@ -350,7 +351,7 @@ static int bcmgenet_mii_probe(struct net_device *dev) ...@@ -350,7 +351,7 @@ static int bcmgenet_mii_probe(struct net_device *dev)
* PHY speed which is needed for bcmgenet_mii_config() to configure * PHY speed which is needed for bcmgenet_mii_config() to configure
* things appropriately. * things appropriately.
*/ */
ret = bcmgenet_mii_config(dev); ret = bcmgenet_mii_config(dev, true);
if (ret) { if (ret) {
phy_disconnect(priv->phydev); phy_disconnect(priv->phydev);
return ret; return ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment