aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/ethernet/intel/igb/e1000_82575.c17
-rw-r--r--drivers/net/ethernet/intel/igb/e1000_defines.h3
-rw-r--r--drivers/net/ethernet/intel/igb/e1000_regs.h1
3 files changed, 16 insertions, 5 deletions
diff --git a/drivers/net/ethernet/intel/igb/e1000_82575.c b/drivers/net/ethernet/intel/igb/e1000_82575.c
index ba994fb4cec6..ca4641e2f748 100644
--- a/drivers/net/ethernet/intel/igb/e1000_82575.c
+++ b/drivers/net/ethernet/intel/igb/e1000_82575.c
@@ -2223,11 +2223,10 @@ out:
2223s32 igb_set_eee_i350(struct e1000_hw *hw) 2223s32 igb_set_eee_i350(struct e1000_hw *hw)
2224{ 2224{
2225 s32 ret_val = 0; 2225 s32 ret_val = 0;
2226 u32 ipcnfg, eeer, ctrl_ext; 2226 u32 ipcnfg, eeer;
2227 2227
2228 ctrl_ext = rd32(E1000_CTRL_EXT); 2228 if ((hw->mac.type < e1000_i350) ||
2229 if ((hw->mac.type != e1000_i350) || 2229 (hw->phy.media_type != e1000_media_type_copper))
2230 (ctrl_ext & E1000_CTRL_EXT_LINK_MODE_MASK))
2231 goto out; 2230 goto out;
2232 ipcnfg = rd32(E1000_IPCNFG); 2231 ipcnfg = rd32(E1000_IPCNFG);
2233 eeer = rd32(E1000_EEER); 2232 eeer = rd32(E1000_EEER);
@@ -2240,6 +2239,14 @@ s32 igb_set_eee_i350(struct e1000_hw *hw)
2240 E1000_EEER_RX_LPI_EN | 2239 E1000_EEER_RX_LPI_EN |
2241 E1000_EEER_LPI_FC); 2240 E1000_EEER_LPI_FC);
2242 2241
2242 /* keep the LPI clock running before EEE is enabled */
2243 if (hw->mac.type == e1000_i210 || hw->mac.type == e1000_i211) {
2244 u32 eee_su;
2245 eee_su = rd32(E1000_EEE_SU);
2246 eee_su &= ~E1000_EEE_SU_LPI_CLK_STP;
2247 wr32(E1000_EEE_SU, eee_su);
2248 }
2249
2243 } else { 2250 } else {
2244 ipcnfg &= ~(E1000_IPCNFG_EEE_1G_AN | 2251 ipcnfg &= ~(E1000_IPCNFG_EEE_1G_AN |
2245 E1000_IPCNFG_EEE_100M_AN); 2252 E1000_IPCNFG_EEE_100M_AN);
@@ -2249,6 +2256,8 @@ s32 igb_set_eee_i350(struct e1000_hw *hw)
2249 } 2256 }
2250 wr32(E1000_IPCNFG, ipcnfg); 2257 wr32(E1000_IPCNFG, ipcnfg);
2251 wr32(E1000_EEER, eeer); 2258 wr32(E1000_EEER, eeer);
2259 rd32(E1000_IPCNFG);
2260 rd32(E1000_EEER);
2252out: 2261out:
2253 2262
2254 return ret_val; 2263 return ret_val;
diff --git a/drivers/net/ethernet/intel/igb/e1000_defines.h b/drivers/net/ethernet/intel/igb/e1000_defines.h
index cae3070da922..de4b41ec3c40 100644
--- a/drivers/net/ethernet/intel/igb/e1000_defines.h
+++ b/drivers/net/ethernet/intel/igb/e1000_defines.h
@@ -857,8 +857,9 @@
857#define E1000_IPCNFG_EEE_100M_AN 0x00000004 /* EEE Enable 100M AN */ 857#define E1000_IPCNFG_EEE_100M_AN 0x00000004 /* EEE Enable 100M AN */
858#define E1000_EEER_TX_LPI_EN 0x00010000 /* EEE Tx LPI Enable */ 858#define E1000_EEER_TX_LPI_EN 0x00010000 /* EEE Tx LPI Enable */
859#define E1000_EEER_RX_LPI_EN 0x00020000 /* EEE Rx LPI Enable */ 859#define E1000_EEER_RX_LPI_EN 0x00020000 /* EEE Rx LPI Enable */
860#define E1000_EEER_FRC_AN 0x10000000 /* Enable EEE in loopback */ 860#define E1000_EEER_FRC_AN 0x10000000 /* Enable EEE in loopback */
861#define E1000_EEER_LPI_FC 0x00040000 /* EEE Enable on FC */ 861#define E1000_EEER_LPI_FC 0x00040000 /* EEE Enable on FC */
862#define E1000_EEE_SU_LPI_CLK_STP 0X00800000 /* EEE LPI Clock Stop */
862 863
863/* SerDes Control */ 864/* SerDes Control */
864#define E1000_GEN_CTL_READY 0x80000000 865#define E1000_GEN_CTL_READY 0x80000000
diff --git a/drivers/net/ethernet/intel/igb/e1000_regs.h b/drivers/net/ethernet/intel/igb/e1000_regs.h
index faec840a5a8a..e5db48594e8a 100644
--- a/drivers/net/ethernet/intel/igb/e1000_regs.h
+++ b/drivers/net/ethernet/intel/igb/e1000_regs.h
@@ -349,6 +349,7 @@
349/* Energy Efficient Ethernet "EEE" register */ 349/* Energy Efficient Ethernet "EEE" register */
350#define E1000_IPCNFG 0x0E38 /* Internal PHY Configuration */ 350#define E1000_IPCNFG 0x0E38 /* Internal PHY Configuration */
351#define E1000_EEER 0x0E30 /* Energy Efficient Ethernet */ 351#define E1000_EEER 0x0E30 /* Energy Efficient Ethernet */
352#define E1000_EEE_SU 0X0E34 /* EEE Setup */
352 353
353/* Thermal Sensor Register */ 354/* Thermal Sensor Register */
354#define E1000_THSTAT 0x08110 /* Thermal Sensor Status */ 355#define E1000_THSTAT 0x08110 /* Thermal Sensor Status */