e1000e: 82577/8 must acquire h/w semaphore before workaround
authorBruce Allan <bruce.w.allan@intel.com>
Wed, 24 Nov 2010 06:01:30 +0000 (06:01 +0000)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Sat, 11 Dec 2010 06:13:11 +0000 (22:13 -0800)
The workaround function e1000_configure_k1_pchlan() assumes the h/w
semaphore is already acquired.  This was originally missed when setting up
the part for the ethtool loopback test.

Signed-off-by: Bruce Allan <bruce.w.allan@intel.com>
Tested-by: Jeff Pieper <jeffrey.e.pieper@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/e1000e/ethtool.c

index 5c6bc6ac069c503c60ade13181097dc7bfc7de42..c10dc694d7330bdffe6dc27b944bd2355fa609d7 100644 (file)
@@ -1249,6 +1249,7 @@ static int e1000_integrated_phy_loopback(struct e1000_adapter *adapter)
        u32 ctrl_reg = 0;
        u32 stat_reg = 0;
        u16 phy_reg = 0;
+       s32 ret_val = 0;
 
        hw->mac.autoneg = 0;
 
@@ -1308,7 +1309,13 @@ static int e1000_integrated_phy_loopback(struct e1000_adapter *adapter)
        case e1000_phy_82577:
        case e1000_phy_82578:
                /* Workaround: K1 must be disabled for stable 1Gbps operation */
+               ret_val = hw->phy.ops.acquire(hw);
+               if (ret_val) {
+                       e_err("Cannot setup 1Gbps loopback.\n");
+                       return ret_val;
+               }
                e1000_configure_k1_ich8lan(hw, false);
+               hw->phy.ops.release(hw);
                break;
        case e1000_phy_82579:
                /* Disable PHY energy detect power down */