diff options
| -rw-r--r-- | drivers/net/ethernet/intel/igb/e1000_82575.c | 17 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/igb/e1000_defines.h | 3 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/igb/e1000_regs.h | 1 |
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: | |||
| 2223 | s32 igb_set_eee_i350(struct e1000_hw *hw) | 2223 | s32 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); | ||
| 2252 | out: | 2261 | out: |
| 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 */ |
