tlan: Isolate external PHY when using internal PHY
authorOndrej Zary <linux@rainbow-software.org>
Mon, 30 Jun 2014 16:38:37 +0000 (18:38 +0200)
committerDavid S. Miller <davem@davemloft.net>
Tue, 8 Jul 2014 00:06:52 +0000 (17:06 -0700)
When using internal 10 Mbps PHY, isolate the external PHY from MII bus.
External PHY must be kept powered up because it passes TX from tlan chip to
network.

This fixes weird link-loss problems under load with OC-2326 card at 10 Mbps.

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/ti/tlan.c

index 1f21764fea53f8c22ce98be3beed36854ef901a8..6078342fe3f24de7fe8df95ee806cf28a26f6a6b 100644 (file)
@@ -2528,9 +2528,10 @@ static void tlan_phy_power_down(struct net_device *dev)
        value = MII_GC_PDOWN | MII_GC_LOOPBK | MII_GC_ISOLATE;
        tlan_mii_sync(dev->base_addr);
        tlan_mii_write_reg(dev, priv->phy[priv->phy_num], MII_GEN_CTL, value);
-       if ((priv->phy_num == 0) &&
-           (priv->phy[1] != TLAN_PHY_NONE) &&
-           (!(priv->adapter->flags & TLAN_ADAPTER_USE_INTERN_10))) {
+       if ((priv->phy_num == 0) && (priv->phy[1] != TLAN_PHY_NONE)) {
+               /* if using internal PHY, the external PHY must be powered on */
+               if (priv->adapter->flags & TLAN_ADAPTER_USE_INTERN_10)
+                       value = MII_GC_ISOLATE; /* just isolate it from MII */
                tlan_mii_sync(dev->base_addr);
                tlan_mii_write_reg(dev, priv->phy[1], MII_GEN_CTL, value);
        }