aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBruce Allan <bruce.w.allan@intel.com>2013-01-22 03:44:14 -0500
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2013-02-05 02:45:47 -0500
commit1b41db37f40dc682ee5d6fb47b3af545c3eabd1f (patch)
tree4fe5dd6daf50786ccad172f9c32b0366da511a87
parent21b5a6f8ff3cbcd7623187628320a4e7125120fb (diff)
e1000e: cosmetic move of #defines and prototypes to the new ich8lan.h
Move #defines and function prototypes specific to the ICH/PCH family of devices (ICH8/82562, ICH8/82566, ICH8/82567, ICH9/82562, ICH9/82566, ICH9/82567, ICH10/82567, 82577, 82578, 82579, I217, I218) to the new ich8lan.h header file (the convention for Intel wired ethernet drivers is to use the name of the first device in the family for related file and function names). These defines and function prototypes can be used by other files in the driver and moving them to the ICH/PCH-family-specific file makes it clearer to which devices they are applicable. Signed-off-by: Bruce Allan <bruce.w.allan@intel.com> Tested-by: Aaron Brown <aaron.f.brown@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
-rw-r--r--drivers/net/ethernet/intel/e1000e/defines.h36
-rw-r--r--drivers/net/ethernet/intel/e1000e/e1000.h53
-rw-r--r--drivers/net/ethernet/intel/e1000e/hw.h13
-rw-r--r--drivers/net/ethernet/intel/e1000e/ich8lan.c126
-rw-r--r--drivers/net/ethernet/intel/e1000e/ich8lan.h268
-rw-r--r--drivers/net/ethernet/intel/e1000e/phy.c4
6 files changed, 270 insertions, 230 deletions
diff --git a/drivers/net/ethernet/intel/e1000e/defines.h b/drivers/net/ethernet/intel/e1000e/defines.h
index b425544144ec..fc3a4fe1ac71 100644
--- a/drivers/net/ethernet/intel/e1000e/defines.h
+++ b/drivers/net/ethernet/intel/e1000e/defines.h
@@ -749,38 +749,6 @@
749/* BME1000 PHY Specific Control Register */ 749/* BME1000 PHY Specific Control Register */
750#define BME1000_PSCR_ENABLE_DOWNSHIFT 0x0800 /* 1 = enable downshift */ 750#define BME1000_PSCR_ENABLE_DOWNSHIFT 0x0800 /* 1 = enable downshift */
751 751
752/* PHY Low Power Idle Control */
753#define I82579_LPI_CTRL PHY_REG(772, 20)
754#define I82579_LPI_CTRL_100_ENABLE 0x2000
755#define I82579_LPI_CTRL_1000_ENABLE 0x4000
756#define I82579_LPI_CTRL_ENABLE_MASK 0x6000
757#define I82579_LPI_CTRL_FORCE_PLL_LOCK_COUNT 0x80
758
759/* Extended Management Interface (EMI) Registers */
760#define I82579_EMI_ADDR 0x10
761#define I82579_EMI_DATA 0x11
762#define I82579_LPI_UPDATE_TIMER 0x4805 /* in 40ns units + 40 ns base value */
763#define I82579_MSE_THRESHOLD 0x084F /* 82579 Mean Square Error Threshold */
764#define I82577_MSE_THRESHOLD 0x0887 /* 82577 Mean Square Error Threshold */
765#define I82579_MSE_LINK_DOWN 0x2411 /* MSE count before dropping link */
766#define I82579_EEE_PCS_STATUS 0x182D /* IEEE MMD Register 3.1 >> 8 */
767#define I82579_EEE_CAPABILITY 0x0410 /* IEEE MMD Register 3.20 */
768#define I82579_EEE_ADVERTISEMENT 0x040E /* IEEE MMD Register 7.60 */
769#define I82579_EEE_LP_ABILITY 0x040F /* IEEE MMD Register 7.61 */
770#define I82579_EEE_100_SUPPORTED (1 << 1) /* 100BaseTx EEE supported */
771#define I82579_EEE_1000_SUPPORTED (1 << 2) /* 1000BaseTx EEE supported */
772#define I217_EEE_PCS_STATUS 0x9401 /* IEEE MMD Register 3.1 */
773#define I217_EEE_CAPABILITY 0x8000 /* IEEE MMD Register 3.20 */
774#define I217_EEE_ADVERTISEMENT 0x8001 /* IEEE MMD Register 7.60 */
775#define I217_EEE_LP_ABILITY 0x8002 /* IEEE MMD Register 7.61 */
776
777#define E1000_EEE_RX_LPI_RCVD 0x0400 /* Tx LP idle received */
778#define E1000_EEE_TX_LPI_RCVD 0x0800 /* Rx LP idle received */
779
780#define PHY_PAGE_SHIFT 5
781#define PHY_REG(page, reg) (((page) << PHY_PAGE_SHIFT) | \
782 ((reg) & MAX_PHY_REG_ADDRESS))
783
784/* Bits... 752/* Bits...
785 * 15-5: page 753 * 15-5: page
786 * 4-0: register offset 754 * 4-0: register offset
@@ -827,8 +795,4 @@
827/* SerDes Control */ 795/* SerDes Control */
828#define E1000_GEN_POLL_TIMEOUT 640 796#define E1000_GEN_POLL_TIMEOUT 640
829 797
830/* FW Semaphore */
831#define E1000_FWSM_WLOCK_MAC_MASK 0x0380
832#define E1000_FWSM_WLOCK_MAC_SHIFT 7
833
834#endif /* _E1000_DEFINES_H_ */ 798#endif /* _E1000_DEFINES_H_ */
diff --git a/drivers/net/ethernet/intel/e1000e/e1000.h b/drivers/net/ethernet/intel/e1000e/e1000.h
index 12c5d4043505..7a383cd715d6 100644
--- a/drivers/net/ethernet/intel/e1000e/e1000.h
+++ b/drivers/net/ethernet/intel/e1000e/e1000.h
@@ -104,44 +104,6 @@ struct e1000_info;
104 (((page) & 0xFFFF) << PHY_PAGE_SHIFT) |\ 104 (((page) & 0xFFFF) << PHY_PAGE_SHIFT) |\
105 (((reg) & ~MAX_PHY_REG_ADDRESS) << (PHY_UPPER_SHIFT - PHY_PAGE_SHIFT))) 105 (((reg) & ~MAX_PHY_REG_ADDRESS) << (PHY_UPPER_SHIFT - PHY_PAGE_SHIFT)))
106 106
107/* PHY Wakeup Registers and defines */
108#define BM_PORT_GEN_CFG PHY_REG(BM_PORT_CTRL_PAGE, 17)
109#define BM_RCTL PHY_REG(BM_WUC_PAGE, 0)
110#define BM_WUC PHY_REG(BM_WUC_PAGE, 1)
111#define BM_WUFC PHY_REG(BM_WUC_PAGE, 2)
112#define BM_WUS PHY_REG(BM_WUC_PAGE, 3)
113#define BM_RAR_L(_i) (BM_PHY_REG(BM_WUC_PAGE, 16 + ((_i) << 2)))
114#define BM_RAR_M(_i) (BM_PHY_REG(BM_WUC_PAGE, 17 + ((_i) << 2)))
115#define BM_RAR_H(_i) (BM_PHY_REG(BM_WUC_PAGE, 18 + ((_i) << 2)))
116#define BM_RAR_CTRL(_i) (BM_PHY_REG(BM_WUC_PAGE, 19 + ((_i) << 2)))
117#define BM_MTA(_i) (BM_PHY_REG(BM_WUC_PAGE, 128 + ((_i) << 1)))
118
119#define BM_RCTL_UPE 0x0001 /* Unicast Promiscuous Mode */
120#define BM_RCTL_MPE 0x0002 /* Multicast Promiscuous Mode */
121#define BM_RCTL_MO_SHIFT 3 /* Multicast Offset Shift */
122#define BM_RCTL_MO_MASK (3 << 3) /* Multicast Offset Mask */
123#define BM_RCTL_BAM 0x0020 /* Broadcast Accept Mode */
124#define BM_RCTL_PMCF 0x0040 /* Pass MAC Control Frames */
125#define BM_RCTL_RFCE 0x0080 /* Rx Flow Control Enable */
126
127#define HV_STATS_PAGE 778
128#define HV_SCC_UPPER PHY_REG(HV_STATS_PAGE, 16) /* Single Collision Count */
129#define HV_SCC_LOWER PHY_REG(HV_STATS_PAGE, 17)
130#define HV_ECOL_UPPER PHY_REG(HV_STATS_PAGE, 18) /* Excessive Coll. Count */
131#define HV_ECOL_LOWER PHY_REG(HV_STATS_PAGE, 19)
132#define HV_MCC_UPPER PHY_REG(HV_STATS_PAGE, 20) /* Multiple Coll. Count */
133#define HV_MCC_LOWER PHY_REG(HV_STATS_PAGE, 21)
134#define HV_LATECOL_UPPER PHY_REG(HV_STATS_PAGE, 23) /* Late Collision Count */
135#define HV_LATECOL_LOWER PHY_REG(HV_STATS_PAGE, 24)
136#define HV_COLC_UPPER PHY_REG(HV_STATS_PAGE, 25) /* Collision Count */
137#define HV_COLC_LOWER PHY_REG(HV_STATS_PAGE, 26)
138#define HV_DC_UPPER PHY_REG(HV_STATS_PAGE, 27) /* Defer Count */
139#define HV_DC_LOWER PHY_REG(HV_STATS_PAGE, 28)
140#define HV_TNCRS_UPPER PHY_REG(HV_STATS_PAGE, 29) /* Transmit with no CRS */
141#define HV_TNCRS_LOWER PHY_REG(HV_STATS_PAGE, 30)
142
143#define E1000_FCRTV_PCH 0x05F40 /* PCH Flow Control Refresh Timer Value */
144
145/* BM PHY Copper Specific Status */ 107/* BM PHY Copper Specific Status */
146#define BM_CS_STATUS 17 108#define BM_CS_STATUS 17
147#define BM_CS_STATUS_LINK_UP 0x0400 109#define BM_CS_STATUS_LINK_UP 0x0400
@@ -156,9 +118,6 @@ struct e1000_info;
156#define HV_M_STATUS_SPEED_1000 0x0200 118#define HV_M_STATUS_SPEED_1000 0x0200
157#define HV_M_STATUS_LINK_UP 0x0040 119#define HV_M_STATUS_LINK_UP 0x0040
158 120
159#define E1000_ICH_FWSM_PCIM2PCI 0x01000000 /* ME PCIm-to-PCI active */
160#define E1000_ICH_FWSM_PCIM2PCI_COUNT 2000
161
162/* Time to wait before putting the device into D3 if there's no link (in ms). */ 121/* Time to wait before putting the device into D3 if there's no link (in ms). */
163#define LINK_TIMEOUT 100 122#define LINK_TIMEOUT 100
164 123
@@ -579,17 +538,6 @@ extern s32 e1000_read_pba_string_generic(struct e1000_hw *hw, u8 *pba_num,
579 538
580extern bool e1000e_enable_mng_pass_thru(struct e1000_hw *hw); 539extern bool e1000e_enable_mng_pass_thru(struct e1000_hw *hw);
581 540
582extern void e1000e_write_protect_nvm_ich8lan(struct e1000_hw *hw);
583extern void e1000e_set_kmrn_lock_loss_workaround_ich8lan(struct e1000_hw *hw,
584 bool state);
585extern void e1000e_igp3_phy_powerdown_workaround_ich8lan(struct e1000_hw *hw);
586extern void e1000e_gig_downshift_workaround_ich8lan(struct e1000_hw *hw);
587extern void e1000_suspend_workarounds_ich8lan(struct e1000_hw *hw);
588extern void e1000_resume_workarounds_pchlan(struct e1000_hw *hw);
589extern s32 e1000_configure_k1_ich8lan(struct e1000_hw *hw, bool k1_enable);
590extern s32 e1000_lv_jumbo_workaround_ich8lan(struct e1000_hw *hw, bool enable);
591extern void e1000_copy_rx_addrs_to_phy_ich8lan(struct e1000_hw *hw);
592
593extern s32 e1000e_check_for_copper_link(struct e1000_hw *hw); 541extern s32 e1000e_check_for_copper_link(struct e1000_hw *hw);
594extern s32 e1000e_check_for_fiber_link(struct e1000_hw *hw); 542extern s32 e1000e_check_for_fiber_link(struct e1000_hw *hw);
595extern s32 e1000e_check_for_serdes_link(struct e1000_hw *hw); 543extern s32 e1000e_check_for_serdes_link(struct e1000_hw *hw);
@@ -700,7 +648,6 @@ extern s32 e1000_get_phy_info_ife(struct e1000_hw *hw);
700extern s32 e1000_check_polarity_ife(struct e1000_hw *hw); 648extern s32 e1000_check_polarity_ife(struct e1000_hw *hw);
701extern s32 e1000_phy_force_speed_duplex_ife(struct e1000_hw *hw); 649extern s32 e1000_phy_force_speed_duplex_ife(struct e1000_hw *hw);
702extern s32 e1000_check_polarity_igp(struct e1000_hw *hw); 650extern s32 e1000_check_polarity_igp(struct e1000_hw *hw);
703extern s32 e1000_read_emi_reg_locked(struct e1000_hw *hw, u16 addr, u16 *data);
704extern void e1000e_ptp_init(struct e1000_adapter *adapter); 651extern void e1000e_ptp_init(struct e1000_adapter *adapter);
705extern void e1000e_ptp_remove(struct e1000_adapter *adapter); 652extern void e1000e_ptp_remove(struct e1000_adapter *adapter);
706 653
diff --git a/drivers/net/ethernet/intel/e1000e/hw.h b/drivers/net/ethernet/intel/e1000e/hw.h
index 8a145f468721..21a9cc36e467 100644
--- a/drivers/net/ethernet/intel/e1000e/hw.h
+++ b/drivers/net/ethernet/intel/e1000e/hw.h
@@ -200,10 +200,6 @@ enum e1e_registers {
200#define E1000_RA (E1000_RAL(0)) 200#define E1000_RA (E1000_RAL(0))
201 E1000_RAH_BASE = 0x05404, /* Receive Address High - RW */ 201 E1000_RAH_BASE = 0x05404, /* Receive Address High - RW */
202#define E1000_RAH(_n) (E1000_RAH_BASE + ((_n) * 8)) 202#define E1000_RAH(_n) (E1000_RAH_BASE + ((_n) * 8))
203 E1000_SHRAL_PCH_LPT_BASE = 0x05408,
204#define E1000_SHRAL_PCH_LPT(_n) (E1000_SHRAL_PCH_LPT_BASE + ((_n) * 8))
205 E1000_SHRAH_PCH_LTP_BASE = 0x0540C,
206#define E1000_SHRAH_PCH_LPT(_n) (E1000_SHRAH_PCH_LTP_BASE + ((_n) * 8))
207 E1000_SHRAL_BASE = 0x05438, /* Shared Receive Address Low - RW */ 203 E1000_SHRAL_BASE = 0x05438, /* Shared Receive Address Low - RW */
208#define E1000_SHRAL(_n) (E1000_SHRAL_BASE + ((_n) * 8)) 204#define E1000_SHRAL(_n) (E1000_SHRAL_BASE + ((_n) * 8))
209 E1000_SHRAH_BASE = 0x0543C, /* Shared Receive Address High - RW */ 205 E1000_SHRAH_BASE = 0x0543C, /* Shared Receive Address High - RW */
@@ -215,6 +211,7 @@ enum e1e_registers {
215 E1000_MRQC = 0x05818, /* Multiple Receive Control - RW */ 211 E1000_MRQC = 0x05818, /* Multiple Receive Control - RW */
216 E1000_MANC = 0x05820, /* Management Control - RW */ 212 E1000_MANC = 0x05820, /* Management Control - RW */
217 E1000_FFLT = 0x05F00, /* Flexible Filter Length Table - RW Array */ 213 E1000_FFLT = 0x05F00, /* Flexible Filter Length Table - RW Array */
214 E1000_CRC_OFFSET = 0x05F50, /* CRC Offset register */
218 E1000_HOST_IF = 0x08800, /* Host Interface */ 215 E1000_HOST_IF = 0x08800, /* Host Interface */
219 216
220 E1000_KMRNCTRLSTA = 0x00034, /* MAC-PHY interface - RW */ 217 E1000_KMRNCTRLSTA = 0x00034, /* MAC-PHY interface - RW */
@@ -233,9 +230,6 @@ enum e1e_registers {
233 E1000_RSSRK_BASE = 0x05C80, /* RSS Random Key - RW */ 230 E1000_RSSRK_BASE = 0x05C80, /* RSS Random Key - RW */
234#define E1000_RSSRK(_n) (E1000_RSSRK_BASE + ((_n) * 4)) 231#define E1000_RSSRK(_n) (E1000_RSSRK_BASE + ((_n) * 4))
235 E1000_FFLT_DBG = 0x05F04, /* Debug Register */ 232 E1000_FFLT_DBG = 0x05F04, /* Debug Register */
236 E1000_PCH_RAICC_BASE = 0x05F50, /* Receive Address Initial CRC */
237#define E1000_PCH_RAICC(_n) (E1000_PCH_RAICC_BASE + ((_n) * 4))
238#define E1000_CRC_OFFSET E1000_PCH_RAICC_BASE
239 E1000_HICR = 0x08F00, /* Host Interface Control */ 233 E1000_HICR = 0x08F00, /* Host Interface Control */
240 E1000_SYSTIML = 0x0B600, /* System time register Low - RO */ 234 E1000_SYSTIML = 0x0B600, /* System time register Low - RO */
241 E1000_SYSTIMH = 0x0B604, /* System time register High - RO */ 235 E1000_SYSTIMH = 0x0B604, /* System time register High - RO */
@@ -272,10 +266,6 @@ enum e1e_registers {
272#define BM_WUC_HOST_WU_BIT (1 << 4) 266#define BM_WUC_HOST_WU_BIT (1 << 4)
273#define BM_WUC_ME_WU_BIT (1 << 5) 267#define BM_WUC_ME_WU_BIT (1 << 5)
274 268
275#define BM_WUC PHY_REG(BM_WUC_PAGE, 1)
276#define BM_WUFC PHY_REG(BM_WUC_PAGE, 2)
277#define BM_WUS PHY_REG(BM_WUC_PAGE, 3)
278
279#define IGP01E1000_PHY_PCS_INIT_REG 0x00B4 269#define IGP01E1000_PHY_PCS_INIT_REG 0x00B4
280#define IGP01E1000_PHY_POLARITY_MASK 0x0078 270#define IGP01E1000_PHY_POLARITY_MASK 0x0078
281 271
@@ -1004,5 +994,6 @@ struct e1000_hw {
1004 994
1005#include "82571.h" 995#include "82571.h"
1006#include "80003es2lan.h" 996#include "80003es2lan.h"
997#include "ich8lan.h"
1007 998
1008#endif 999#endif
diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.c b/drivers/net/ethernet/intel/e1000e/ich8lan.c
index a019b46f30e2..1e838b235e8a 100644
--- a/drivers/net/ethernet/intel/e1000e/ich8lan.c
+++ b/drivers/net/ethernet/intel/e1000e/ich8lan.c
@@ -57,132 +57,6 @@
57 57
58#include "e1000.h" 58#include "e1000.h"
59 59
60#define ICH_FLASH_GFPREG 0x0000
61#define ICH_FLASH_HSFSTS 0x0004
62#define ICH_FLASH_HSFCTL 0x0006
63#define ICH_FLASH_FADDR 0x0008
64#define ICH_FLASH_FDATA0 0x0010
65#define ICH_FLASH_PR0 0x0074
66
67#define ICH_FLASH_READ_COMMAND_TIMEOUT 500
68#define ICH_FLASH_WRITE_COMMAND_TIMEOUT 500
69#define ICH_FLASH_ERASE_COMMAND_TIMEOUT 3000000
70#define ICH_FLASH_LINEAR_ADDR_MASK 0x00FFFFFF
71#define ICH_FLASH_CYCLE_REPEAT_COUNT 10
72
73#define ICH_CYCLE_READ 0
74#define ICH_CYCLE_WRITE 2
75#define ICH_CYCLE_ERASE 3
76
77#define FLASH_GFPREG_BASE_MASK 0x1FFF
78#define FLASH_SECTOR_ADDR_SHIFT 12
79
80#define ICH_FLASH_SEG_SIZE_256 256
81#define ICH_FLASH_SEG_SIZE_4K 4096
82#define ICH_FLASH_SEG_SIZE_8K 8192
83#define ICH_FLASH_SEG_SIZE_64K 65536
84
85
86#define E1000_ICH_FWSM_RSPCIPHY 0x00000040 /* Reset PHY on PCI Reset */
87/* FW established a valid mode */
88#define E1000_ICH_FWSM_FW_VALID 0x00008000
89
90#define E1000_ICH_MNG_IAMT_MODE 0x2
91
92#define ID_LED_DEFAULT_ICH8LAN ((ID_LED_DEF1_DEF2 << 12) | \
93 (ID_LED_DEF1_OFF2 << 8) | \
94 (ID_LED_DEF1_ON2 << 4) | \
95 (ID_LED_DEF1_DEF2))
96
97#define E1000_ICH_NVM_SIG_WORD 0x13
98#define E1000_ICH_NVM_SIG_MASK 0xC000
99#define E1000_ICH_NVM_VALID_SIG_MASK 0xC0
100#define E1000_ICH_NVM_SIG_VALUE 0x80
101
102#define E1000_ICH8_LAN_INIT_TIMEOUT 1500
103
104#define E1000_FEXTNVM_SW_CONFIG 1
105#define E1000_FEXTNVM_SW_CONFIG_ICH8M (1 << 27) /* Bit redefined for ICH8M :/ */
106
107#define E1000_FEXTNVM3_PHY_CFG_COUNTER_MASK 0x0C000000
108#define E1000_FEXTNVM3_PHY_CFG_COUNTER_50MSEC 0x08000000
109
110#define E1000_FEXTNVM4_BEACON_DURATION_MASK 0x7
111#define E1000_FEXTNVM4_BEACON_DURATION_8USEC 0x7
112#define E1000_FEXTNVM4_BEACON_DURATION_16USEC 0x3
113
114#define PCIE_ICH8_SNOOP_ALL PCIE_NO_SNOOP_ALL
115
116#define E1000_ICH_RAR_ENTRIES 7
117#define E1000_PCH2_RAR_ENTRIES 5 /* RAR[0], SHRA[0-3] */
118#define E1000_PCH_LPT_RAR_ENTRIES 12 /* RAR[0], SHRA[0-10] */
119
120#define PHY_PAGE_SHIFT 5
121#define PHY_REG(page, reg) (((page) << PHY_PAGE_SHIFT) | \
122 ((reg) & MAX_PHY_REG_ADDRESS))
123#define IGP3_KMRN_DIAG PHY_REG(770, 19) /* KMRN Diagnostic */
124#define IGP3_VR_CTRL PHY_REG(776, 18) /* Voltage Regulator Control */
125
126#define IGP3_KMRN_DIAG_PCS_LOCK_LOSS 0x0002
127#define IGP3_VR_CTRL_DEV_POWERDOWN_MODE_MASK 0x0300
128#define IGP3_VR_CTRL_MODE_SHUTDOWN 0x0200
129
130#define HV_LED_CONFIG PHY_REG(768, 30) /* LED Configuration */
131
132#define SW_FLAG_TIMEOUT 1000 /* SW Semaphore flag timeout in milliseconds */
133
134/* SMBus Control Phy Register */
135#define CV_SMB_CTRL PHY_REG(769, 23)
136#define CV_SMB_CTRL_FORCE_SMBUS 0x0001
137
138/* SMBus Address Phy Register */
139#define HV_SMB_ADDR PHY_REG(768, 26)
140#define HV_SMB_ADDR_MASK 0x007F
141#define HV_SMB_ADDR_PEC_EN 0x0200
142#define HV_SMB_ADDR_VALID 0x0080
143#define HV_SMB_ADDR_FREQ_MASK 0x1100
144#define HV_SMB_ADDR_FREQ_LOW_SHIFT 8
145#define HV_SMB_ADDR_FREQ_HIGH_SHIFT 12
146
147/* PHY Power Management Control */
148#define HV_PM_CTRL PHY_REG(770, 17)
149#define HV_PM_CTRL_PLL_STOP_IN_K1_GIGA 0x100
150
151/* Intel Rapid Start Technology Support */
152#define I217_PROXY_CTRL BM_PHY_REG(BM_WUC_PAGE, 70)
153#define I217_PROXY_CTRL_AUTO_DISABLE 0x0080
154#define I217_SxCTRL PHY_REG(BM_PORT_CTRL_PAGE, 28)
155#define I217_SxCTRL_ENABLE_LPI_RESET 0x1000
156#define I217_CGFREG PHY_REG(772, 29)
157#define I217_CGFREG_ENABLE_MTA_RESET 0x0002
158#define I217_MEMPWR PHY_REG(772, 26)
159#define I217_MEMPWR_DISABLE_SMB_RELEASE 0x0010
160
161/* Strapping Option Register - RO */
162#define E1000_STRAP 0x0000C
163#define E1000_STRAP_SMBUS_ADDRESS_MASK 0x00FE0000
164#define E1000_STRAP_SMBUS_ADDRESS_SHIFT 17
165#define E1000_STRAP_SMT_FREQ_MASK 0x00003000
166#define E1000_STRAP_SMT_FREQ_SHIFT 12
167
168/* OEM Bits Phy Register */
169#define HV_OEM_BITS PHY_REG(768, 25)
170#define HV_OEM_BITS_LPLU 0x0004 /* Low Power Link Up */
171#define HV_OEM_BITS_GBE_DIS 0x0040 /* Gigabit Disable */
172#define HV_OEM_BITS_RESTART_AN 0x0400 /* Restart Auto-negotiation */
173
174#define E1000_NVM_K1_CONFIG 0x1B /* NVM K1 Config Word */
175#define E1000_NVM_K1_ENABLE 0x1 /* NVM Enable K1 bit */
176
177/* KMRN Mode Control */
178#define HV_KMRN_MODE_CTRL PHY_REG(769, 16)
179#define HV_KMRN_MDIO_SLOW 0x0400
180
181/* KMRN FIFO Control and Status */
182#define HV_KMRN_FIFO_CTRLSTA PHY_REG(770, 16)
183#define HV_KMRN_FIFO_CTRLSTA_PREAMBLE_MASK 0x7000
184#define HV_KMRN_FIFO_CTRLSTA_PREAMBLE_SHIFT 12
185
186/* ICH GbE Flash Hardware Sequencing Flash Status Register bit breakdown */ 60/* ICH GbE Flash Hardware Sequencing Flash Status Register bit breakdown */
187/* Offset 04h HSFSTS */ 61/* Offset 04h HSFSTS */
188union ich8_hws_flash_status { 62union ich8_hws_flash_status {
diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.h b/drivers/net/ethernet/intel/e1000e/ich8lan.h
new file mode 100644
index 000000000000..b6d3174d7d2d
--- /dev/null
+++ b/drivers/net/ethernet/intel/e1000e/ich8lan.h
@@ -0,0 +1,268 @@
1/*******************************************************************************
2
3 Intel PRO/1000 Linux driver
4 Copyright(c) 1999 - 2013 Intel Corporation.
5
6 This program is free software; you can redistribute it and/or modify it
7 under the terms and conditions of the GNU General Public License,
8 version 2, as published by the Free Software Foundation.
9
10 This program is distributed in the hope it will be useful, but WITHOUT
11 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
13 more details.
14
15 You should have received a copy of the GNU General Public License along with
16 this program; if not, write to the Free Software Foundation, Inc.,
17 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
18
19 The full GNU General Public License is included in this distribution in
20 the file called "COPYING".
21
22 Contact Information:
23 Linux NICS <linux.nics@intel.com>
24 e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
25 Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
26
27*******************************************************************************/
28
29#ifndef _E1000E_ICH8LAN_H_
30#define _E1000E_ICH8LAN_H_
31
32#define ICH_FLASH_GFPREG 0x0000
33#define ICH_FLASH_HSFSTS 0x0004
34#define ICH_FLASH_HSFCTL 0x0006
35#define ICH_FLASH_FADDR 0x0008
36#define ICH_FLASH_FDATA0 0x0010
37#define ICH_FLASH_PR0 0x0074
38
39/* Requires up to 10 seconds when MNG might be accessing part. */
40#define ICH_FLASH_READ_COMMAND_TIMEOUT 10000000
41#define ICH_FLASH_WRITE_COMMAND_TIMEOUT 10000000
42#define ICH_FLASH_ERASE_COMMAND_TIMEOUT 10000000
43#define ICH_FLASH_LINEAR_ADDR_MASK 0x00FFFFFF
44#define ICH_FLASH_CYCLE_REPEAT_COUNT 10
45
46#define ICH_CYCLE_READ 0
47#define ICH_CYCLE_WRITE 2
48#define ICH_CYCLE_ERASE 3
49
50#define FLASH_GFPREG_BASE_MASK 0x1FFF
51#define FLASH_SECTOR_ADDR_SHIFT 12
52
53#define ICH_FLASH_SEG_SIZE_256 256
54#define ICH_FLASH_SEG_SIZE_4K 4096
55#define ICH_FLASH_SEG_SIZE_8K 8192
56#define ICH_FLASH_SEG_SIZE_64K 65536
57
58#define E1000_ICH_FWSM_RSPCIPHY 0x00000040 /* Reset PHY on PCI Reset */
59/* FW established a valid mode */
60#define E1000_ICH_FWSM_FW_VALID 0x00008000
61#define E1000_ICH_FWSM_PCIM2PCI 0x01000000 /* ME PCIm-to-PCI active */
62#define E1000_ICH_FWSM_PCIM2PCI_COUNT 2000
63
64#define E1000_ICH_MNG_IAMT_MODE 0x2
65
66#define E1000_FWSM_WLOCK_MAC_MASK 0x0380
67#define E1000_FWSM_WLOCK_MAC_SHIFT 7
68
69/* Shared Receive Address Registers */
70#define E1000_SHRAL_PCH_LPT(_i) (0x05408 + ((_i) * 8))
71#define E1000_SHRAH_PCH_LPT(_i) (0x0540C + ((_i) * 8))
72
73#define ID_LED_DEFAULT_ICH8LAN ((ID_LED_DEF1_DEF2 << 12) | \
74 (ID_LED_OFF1_OFF2 << 8) | \
75 (ID_LED_OFF1_ON2 << 4) | \
76 (ID_LED_DEF1_DEF2))
77
78#define E1000_ICH_NVM_SIG_WORD 0x13
79#define E1000_ICH_NVM_SIG_MASK 0xC000
80#define E1000_ICH_NVM_VALID_SIG_MASK 0xC0
81#define E1000_ICH_NVM_SIG_VALUE 0x80
82
83#define E1000_ICH8_LAN_INIT_TIMEOUT 1500
84
85#define E1000_FEXTNVM_SW_CONFIG 1
86#define E1000_FEXTNVM_SW_CONFIG_ICH8M (1 << 27) /* different on ICH8M */
87
88#define E1000_FEXTNVM3_PHY_CFG_COUNTER_MASK 0x0C000000
89#define E1000_FEXTNVM3_PHY_CFG_COUNTER_50MSEC 0x08000000
90
91#define E1000_FEXTNVM4_BEACON_DURATION_MASK 0x7
92#define E1000_FEXTNVM4_BEACON_DURATION_8USEC 0x7
93#define E1000_FEXTNVM4_BEACON_DURATION_16USEC 0x3
94
95#define PCIE_ICH8_SNOOP_ALL PCIE_NO_SNOOP_ALL
96
97#define E1000_ICH_RAR_ENTRIES 7
98#define E1000_PCH2_RAR_ENTRIES 5 /* RAR[0], SHRA[0-3] */
99#define E1000_PCH_LPT_RAR_ENTRIES 12 /* RAR[0], SHRA[0-10] */
100
101#define PHY_PAGE_SHIFT 5
102#define PHY_REG(page, reg) (((page) << PHY_PAGE_SHIFT) | \
103 ((reg) & MAX_PHY_REG_ADDRESS))
104#define IGP3_KMRN_DIAG PHY_REG(770, 19) /* KMRN Diagnostic */
105#define IGP3_VR_CTRL PHY_REG(776, 18) /* Voltage Regulator Control */
106
107#define IGP3_KMRN_DIAG_PCS_LOCK_LOSS 0x0002
108#define IGP3_VR_CTRL_DEV_POWERDOWN_MODE_MASK 0x0300
109#define IGP3_VR_CTRL_MODE_SHUTDOWN 0x0200
110
111/* PHY Wakeup Registers and defines */
112#define BM_PORT_GEN_CFG PHY_REG(BM_PORT_CTRL_PAGE, 17)
113#define BM_RCTL PHY_REG(BM_WUC_PAGE, 0)
114#define BM_WUC PHY_REG(BM_WUC_PAGE, 1)
115#define BM_WUFC PHY_REG(BM_WUC_PAGE, 2)
116#define BM_WUS PHY_REG(BM_WUC_PAGE, 3)
117#define BM_RAR_L(_i) (BM_PHY_REG(BM_WUC_PAGE, 16 + ((_i) << 2)))
118#define BM_RAR_M(_i) (BM_PHY_REG(BM_WUC_PAGE, 17 + ((_i) << 2)))
119#define BM_RAR_H(_i) (BM_PHY_REG(BM_WUC_PAGE, 18 + ((_i) << 2)))
120#define BM_RAR_CTRL(_i) (BM_PHY_REG(BM_WUC_PAGE, 19 + ((_i) << 2)))
121#define BM_MTA(_i) (BM_PHY_REG(BM_WUC_PAGE, 128 + ((_i) << 1)))
122
123#define BM_RCTL_UPE 0x0001 /* Unicast Promiscuous Mode */
124#define BM_RCTL_MPE 0x0002 /* Multicast Promiscuous Mode */
125#define BM_RCTL_MO_SHIFT 3 /* Multicast Offset Shift */
126#define BM_RCTL_MO_MASK (3 << 3) /* Multicast Offset Mask */
127#define BM_RCTL_BAM 0x0020 /* Broadcast Accept Mode */
128#define BM_RCTL_PMCF 0x0040 /* Pass MAC Control Frames */
129#define BM_RCTL_RFCE 0x0080 /* Rx Flow Control Enable */
130
131#define HV_LED_CONFIG PHY_REG(768, 30) /* LED Configuration */
132#define HV_MUX_DATA_CTRL PHY_REG(776, 16)
133#define HV_MUX_DATA_CTRL_GEN_TO_MAC 0x0400
134#define HV_MUX_DATA_CTRL_FORCE_SPEED 0x0004
135#define HV_STATS_PAGE 778
136/* Half-duplex collision counts */
137#define HV_SCC_UPPER PHY_REG(HV_STATS_PAGE, 16) /* Single Collision */
138#define HV_SCC_LOWER PHY_REG(HV_STATS_PAGE, 17)
139#define HV_ECOL_UPPER PHY_REG(HV_STATS_PAGE, 18) /* Excessive Coll. */
140#define HV_ECOL_LOWER PHY_REG(HV_STATS_PAGE, 19)
141#define HV_MCC_UPPER PHY_REG(HV_STATS_PAGE, 20) /* Multiple Collision */
142#define HV_MCC_LOWER PHY_REG(HV_STATS_PAGE, 21)
143#define HV_LATECOL_UPPER PHY_REG(HV_STATS_PAGE, 23) /* Late Collision */
144#define HV_LATECOL_LOWER PHY_REG(HV_STATS_PAGE, 24)
145#define HV_COLC_UPPER PHY_REG(HV_STATS_PAGE, 25) /* Collision */
146#define HV_COLC_LOWER PHY_REG(HV_STATS_PAGE, 26)
147#define HV_DC_UPPER PHY_REG(HV_STATS_PAGE, 27) /* Defer Count */
148#define HV_DC_LOWER PHY_REG(HV_STATS_PAGE, 28)
149#define HV_TNCRS_UPPER PHY_REG(HV_STATS_PAGE, 29) /* Tx with no CRS */
150#define HV_TNCRS_LOWER PHY_REG(HV_STATS_PAGE, 30)
151
152#define E1000_FCRTV_PCH 0x05F40 /* PCH Flow Control Refresh Timer Value */
153
154#define E1000_NVM_K1_CONFIG 0x1B /* NVM K1 Config Word */
155#define E1000_NVM_K1_ENABLE 0x1 /* NVM Enable K1 bit */
156
157/* SMBus Control Phy Register */
158#define CV_SMB_CTRL PHY_REG(769, 23)
159#define CV_SMB_CTRL_FORCE_SMBUS 0x0001
160
161/* SMBus Address Phy Register */
162#define HV_SMB_ADDR PHY_REG(768, 26)
163#define HV_SMB_ADDR_MASK 0x007F
164#define HV_SMB_ADDR_PEC_EN 0x0200
165#define HV_SMB_ADDR_VALID 0x0080
166#define HV_SMB_ADDR_FREQ_MASK 0x1100
167#define HV_SMB_ADDR_FREQ_LOW_SHIFT 8
168#define HV_SMB_ADDR_FREQ_HIGH_SHIFT 12
169
170/* Strapping Option Register - RO */
171#define E1000_STRAP 0x0000C
172#define E1000_STRAP_SMBUS_ADDRESS_MASK 0x00FE0000
173#define E1000_STRAP_SMBUS_ADDRESS_SHIFT 17
174#define E1000_STRAP_SMT_FREQ_MASK 0x00003000
175#define E1000_STRAP_SMT_FREQ_SHIFT 12
176
177/* OEM Bits Phy Register */
178#define HV_OEM_BITS PHY_REG(768, 25)
179#define HV_OEM_BITS_LPLU 0x0004 /* Low Power Link Up */
180#define HV_OEM_BITS_GBE_DIS 0x0040 /* Gigabit Disable */
181#define HV_OEM_BITS_RESTART_AN 0x0400 /* Restart Auto-negotiation */
182
183/* KMRN Mode Control */
184#define HV_KMRN_MODE_CTRL PHY_REG(769, 16)
185#define HV_KMRN_MDIO_SLOW 0x0400
186
187/* KMRN FIFO Control and Status */
188#define HV_KMRN_FIFO_CTRLSTA PHY_REG(770, 16)
189#define HV_KMRN_FIFO_CTRLSTA_PREAMBLE_MASK 0x7000
190#define HV_KMRN_FIFO_CTRLSTA_PREAMBLE_SHIFT 12
191
192/* PHY Power Management Control */
193#define HV_PM_CTRL PHY_REG(770, 17)
194#define HV_PM_CTRL_PLL_STOP_IN_K1_GIGA 0x100
195
196#define SW_FLAG_TIMEOUT 1000 /* SW Semaphore flag timeout in ms */
197
198/* PHY Low Power Idle Control */
199#define I82579_LPI_CTRL PHY_REG(772, 20)
200#define I82579_LPI_CTRL_100_ENABLE 0x2000
201#define I82579_LPI_CTRL_1000_ENABLE 0x4000
202#define I82579_LPI_CTRL_ENABLE_MASK 0x6000
203#define I82579_LPI_CTRL_FORCE_PLL_LOCK_COUNT 0x80
204
205/* Extended Management Interface (EMI) Registers */
206#define I82579_EMI_ADDR 0x10
207#define I82579_EMI_DATA 0x11
208#define I82579_LPI_UPDATE_TIMER 0x4805 /* in 40ns units + 40 ns base value */
209#define I82579_MSE_THRESHOLD 0x084F /* 82579 Mean Square Error Threshold */
210#define I82577_MSE_THRESHOLD 0x0887 /* 82577 Mean Square Error Threshold */
211#define I82579_MSE_LINK_DOWN 0x2411 /* MSE count before dropping link */
212#define I82579_EEE_PCS_STATUS 0x182D /* IEEE MMD Register 3.1 >> 8 */
213#define I82579_EEE_CAPABILITY 0x0410 /* IEEE MMD Register 3.20 */
214#define I82579_EEE_ADVERTISEMENT 0x040E /* IEEE MMD Register 7.60 */
215#define I82579_EEE_LP_ABILITY 0x040F /* IEEE MMD Register 7.61 */
216#define I82579_EEE_100_SUPPORTED (1 << 1) /* 100BaseTx EEE */
217#define I82579_EEE_1000_SUPPORTED (1 << 2) /* 1000BaseTx EEE */
218#define I217_EEE_PCS_STATUS 0x9401 /* IEEE MMD Register 3.1 */
219#define I217_EEE_CAPABILITY 0x8000 /* IEEE MMD Register 3.20 */
220#define I217_EEE_ADVERTISEMENT 0x8001 /* IEEE MMD Register 7.60 */
221#define I217_EEE_LP_ABILITY 0x8002 /* IEEE MMD Register 7.61 */
222
223#define E1000_EEE_RX_LPI_RCVD 0x0400 /* Tx LP idle received */
224#define E1000_EEE_TX_LPI_RCVD 0x0800 /* Rx LP idle received */
225
226/* Intel Rapid Start Technology Support */
227#define I217_PROXY_CTRL BM_PHY_REG(BM_WUC_PAGE, 70)
228#define I217_PROXY_CTRL_AUTO_DISABLE 0x0080
229#define I217_SxCTRL PHY_REG(BM_PORT_CTRL_PAGE, 28)
230#define I217_SxCTRL_ENABLE_LPI_RESET 0x1000
231#define I217_CGFREG PHY_REG(772, 29)
232#define I217_CGFREG_ENABLE_MTA_RESET 0x0002
233#define I217_MEMPWR PHY_REG(772, 26)
234#define I217_MEMPWR_DISABLE_SMB_RELEASE 0x0010
235
236/* Receive Address Initial CRC Calculation */
237#define E1000_PCH_RAICC(_n) (0x05F50 + ((_n) * 4))
238
239/* Latency Tolerance Reporting */
240#define E1000_LTRV 0x000F8
241#define E1000_LTRV_SCALE_MAX 5
242#define E1000_LTRV_SCALE_FACTOR 5
243#define E1000_LTRV_REQ_SHIFT 15
244#define E1000_LTRV_NOSNOOP_SHIFT 16
245#define E1000_LTRV_SEND (1 << 30)
246
247/* Proprietary Latency Tolerance Reporting PCI Capability */
248#define E1000_PCI_LTR_CAP_LPT 0xA8
249
250/* OBFF Control & Threshold Defines */
251#define E1000_SVCR_OFF_EN 0x00000001
252#define E1000_SVCR_OFF_MASKINT 0x00001000
253#define E1000_SVCR_OFF_TIMER_MASK 0xFFFF0000
254#define E1000_SVCR_OFF_TIMER_SHIFT 16
255#define E1000_SVT_OFF_HWM_MASK 0x0000001F
256
257void e1000e_write_protect_nvm_ich8lan(struct e1000_hw *hw);
258void e1000e_set_kmrn_lock_loss_workaround_ich8lan(struct e1000_hw *hw,
259 bool state);
260void e1000e_igp3_phy_powerdown_workaround_ich8lan(struct e1000_hw *hw);
261void e1000e_gig_downshift_workaround_ich8lan(struct e1000_hw *hw);
262void e1000_suspend_workarounds_ich8lan(struct e1000_hw *hw);
263void e1000_resume_workarounds_pchlan(struct e1000_hw *hw);
264s32 e1000_configure_k1_ich8lan(struct e1000_hw *hw, bool k1_enable);
265void e1000_copy_rx_addrs_to_phy_ich8lan(struct e1000_hw *hw);
266s32 e1000_lv_jumbo_workaround_ich8lan(struct e1000_hw *hw, bool enable);
267s32 e1000_read_emi_reg_locked(struct e1000_hw *hw, u16 addr, u16 *data);
268#endif /* _E1000E_ICH8LAN_H_ */
diff --git a/drivers/net/ethernet/intel/e1000e/phy.c b/drivers/net/ethernet/intel/e1000e/phy.c
index ae656f16c9fd..851685dd00d4 100644
--- a/drivers/net/ethernet/intel/e1000e/phy.c
+++ b/drivers/net/ethernet/intel/e1000e/phy.c
@@ -91,10 +91,6 @@ static const u16 e1000_igp_2_cable_length_table[] = {
91/* BM PHY Copper Specific Control 1 */ 91/* BM PHY Copper Specific Control 1 */
92#define BM_CS_CTRL1 16 92#define BM_CS_CTRL1 16
93 93
94#define HV_MUX_DATA_CTRL PHY_REG(776, 16)
95#define HV_MUX_DATA_CTRL_GEN_TO_MAC 0x0400
96#define HV_MUX_DATA_CTRL_FORCE_SPEED 0x0004
97
98/** 94/**
99 * e1000e_check_reset_block_generic - Check if PHY reset is blocked 95 * e1000e_check_reset_block_generic - Check if PHY reset is blocked
100 * @hw: pointer to the HW structure 96 * @hw: pointer to the HW structure