]> bbs.cooldavid.org Git - jme.git/blobdiff - jme.c
jme: Add comment in jme_set_settings
[jme.git] / jme.c
diff --git a/jme.c b/jme.c
index 3b84cb3a05a7fc50d7ff79dd6edef7181cd1ff84..e3db53f47c777ad8ccbd59fcee22e3eb694e489d 100644 (file)
--- a/jme.c
+++ b/jme.c
@@ -1600,6 +1600,16 @@ jme_free_irq(struct jme_adapter *jme)
        }
 }
 
+static inline void
+jme_phy_on(struct jme_adapter *jme)
+{
+       u32 bmcr;
+
+       bmcr = jme_mdio_read(jme->dev, jme->mii_if.phy_id, MII_BMCR);
+       bmcr &= ~BMCR_PDOWN;
+       jme_mdio_write(jme->dev, jme->mii_if.phy_id, MII_BMCR, bmcr);
+}
+
 static int
 jme_open(struct net_device *netdev)
 {
@@ -1620,10 +1630,12 @@ jme_open(struct net_device *netdev)
 
        jme_start_irq(jme);
 
-       if (test_bit(JME_FLAG_SSET, &jme->flags))
+       if (test_bit(JME_FLAG_SSET, &jme->flags)) {
+               jme_phy_on(jme);
                jme_set_settings(netdev, &jme->old_ecmd);
-       else
+       } else {
                jme_reset_phy_processor(jme);
+       }
 
        jme_reset_link(jme);
 
@@ -2481,6 +2493,10 @@ jme_set_settings(struct net_device *netdev,
        if (ecmd->speed == SPEED_1000 && ecmd->autoneg != AUTONEG_ENABLE)
                return -EINVAL;
 
+       /*
+        * Check If user changed duplex only while force_media.
+        * Hardware would not generate link change interrupt.
+        */
        if (jme->mii_if.force_media &&
        ecmd->autoneg != AUTONEG_ENABLE &&
        (jme->mii_if.full_duplex != ecmd->duplex))
@@ -2490,10 +2506,9 @@ jme_set_settings(struct net_device *netdev,
        rc = mii_ethtool_sset(&(jme->mii_if), ecmd);
        spin_unlock_bh(&jme->phy_lock);
 
-       if (!rc && fdc)
-               jme_reset_link(jme);
-
        if (!rc) {
+               if (fdc)
+                       jme_reset_link(jme);
                set_bit(JME_FLAG_SSET, &jme->flags);
                jme->old_ecmd = *ecmd;
        }
@@ -3165,10 +3180,12 @@ jme_resume(struct pci_dev *pdev)
        jme_clear_pm(jme);
        pci_restore_state(pdev);
 
-       if (test_bit(JME_FLAG_SSET, &jme->flags))
+       if (test_bit(JME_FLAG_SSET, &jme->flags)) {
+               jme_phy_on(jme);
                jme_set_settings(netdev, &jme->old_ecmd);
-       else
+       } else {
                jme_reset_phy_processor(jme);
+       }
 
        jme_start_irq(jme);
        netif_device_attach(netdev);