]> bbs.cooldavid.org Git - jme.git/blobdiff - jme.c
jme: Fix PHY power-off error
[jme.git] / jme.c
diff --git a/jme.c b/jme.c
index c04c096bc6a90b4734237d5ada679db4c8af60d0..e04f180965aeebb548ee7d7ce38cc2d9655d1ca8 100644 (file)
--- a/jme.c
+++ b/jme.c
@@ -1574,6 +1574,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)
 {
@@ -1594,10 +1604,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);
 
@@ -3005,10 +3017,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);