aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/broadcom/genet
diff options
context:
space:
mode:
authorFlorian Fainelli <f.fainelli@gmail.com>2015-06-08 13:47:57 -0400
committerDavid S. Miller <davem@davemloft.net>2015-06-08 15:13:53 -0400
commitafe3f907d20f39c0eaf81f2baec247ba672f34a9 (patch)
tree46a6f492c5ed0b06e679bc44d21f3bfd8f9cf29d /drivers/net/ethernet/broadcom/genet
parent0243508edd317ff1fa63b495643a7c192fbfcd92 (diff)
net: bcmgenet: power on MII block for all MII modes
The RGMII block is currently only powered on when using RGMII or RGMII_NO_ID, which is not correct when using the GENET interface in MII or Reverse MII modes. We always need to power on the RGMII interface for this block to properly work, regardless of the MII mode in which we operate. Fixes: aa09677cba423 ("net: bcmgenet: add MDIO routines") Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/broadcom/genet')
-rw-r--r--drivers/net/ethernet/broadcom/genet/bcmmii.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/drivers/net/ethernet/broadcom/genet/bcmmii.c b/drivers/net/ethernet/broadcom/genet/bcmmii.c
index e7651b3c6c57..420949cc55aa 100644
--- a/drivers/net/ethernet/broadcom/genet/bcmmii.c
+++ b/drivers/net/ethernet/broadcom/genet/bcmmii.c
@@ -299,9 +299,6 @@ int bcmgenet_mii_config(struct net_device *dev, bool init)
299 phy_name = "external RGMII (no delay)"; 299 phy_name = "external RGMII (no delay)";
300 else 300 else
301 phy_name = "external RGMII (TX delay)"; 301 phy_name = "external RGMII (TX delay)";
302 reg = bcmgenet_ext_readl(priv, EXT_RGMII_OOB_CTRL);
303 reg |= RGMII_MODE_EN | id_mode_dis;
304 bcmgenet_ext_writel(priv, reg, EXT_RGMII_OOB_CTRL);
305 bcmgenet_sys_writel(priv, 302 bcmgenet_sys_writel(priv,
306 PORT_MODE_EXT_GPHY, SYS_PORT_CTRL); 303 PORT_MODE_EXT_GPHY, SYS_PORT_CTRL);
307 break; 304 break;
@@ -310,6 +307,15 @@ int bcmgenet_mii_config(struct net_device *dev, bool init)
310 return -EINVAL; 307 return -EINVAL;
311 } 308 }
312 309
310 /* This is an external PHY (xMII), so we need to enable the RGMII
311 * block for the interface to work
312 */
313 if (priv->ext_phy) {
314 reg = bcmgenet_ext_readl(priv, EXT_RGMII_OOB_CTRL);
315 reg |= RGMII_MODE_EN | id_mode_dis;
316 bcmgenet_ext_writel(priv, reg, EXT_RGMII_OOB_CTRL);
317 }
318
313 if (init) 319 if (init)
314 dev_info(kdev, "configuring instance for %s\n", phy_name); 320 dev_info(kdev, "configuring instance for %s\n", phy_name);
315 321