1 /*******************************************************************************
3 Intel PRO/1000 Linux driver
4 Copyright(c) 1999 - 2006 Intel Corporation.
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.
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
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.
19 The full GNU General Public License is included in this distribution in
20 the file called "COPYING".
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
27 *******************************************************************************/
30 * Shared functions for accessing and configuring the MAC
36 static s32 e1000_swfw_sync_acquire(struct e1000_hw *hw, u16 mask);
37 static void e1000_swfw_sync_release(struct e1000_hw *hw, u16 mask);
38 static s32 e1000_read_kmrn_reg(struct e1000_hw *hw, u32 reg_addr, u16 *data);
39 static s32 e1000_write_kmrn_reg(struct e1000_hw *hw, u32 reg_addr, u16 data);
40 static s32 e1000_get_software_semaphore(struct e1000_hw *hw);
41 static void e1000_release_software_semaphore(struct e1000_hw *hw);
43 static u8 e1000_arc_subsystem_valid(struct e1000_hw *hw);
44 static s32 e1000_check_downshift(struct e1000_hw *hw);
45 static s32 e1000_check_polarity(struct e1000_hw *hw,
46 e1000_rev_polarity *polarity);
47 static void e1000_clear_hw_cntrs(struct e1000_hw *hw);
48 static void e1000_clear_vfta(struct e1000_hw *hw);
49 static s32 e1000_commit_shadow_ram(struct e1000_hw *hw);
50 static s32 e1000_config_dsp_after_link_change(struct e1000_hw *hw,
52 static s32 e1000_config_fc_after_link_up(struct e1000_hw *hw);
53 static s32 e1000_detect_gig_phy(struct e1000_hw *hw);
54 static s32 e1000_erase_ich8_4k_segment(struct e1000_hw *hw, u32 bank);
55 static s32 e1000_get_auto_rd_done(struct e1000_hw *hw);
56 static s32 e1000_get_cable_length(struct e1000_hw *hw, u16 *min_length,
58 static s32 e1000_get_hw_eeprom_semaphore(struct e1000_hw *hw);
59 static s32 e1000_get_phy_cfg_done(struct e1000_hw *hw);
60 static s32 e1000_get_software_flag(struct e1000_hw *hw);
61 static s32 e1000_ich8_cycle_init(struct e1000_hw *hw);
62 static s32 e1000_ich8_flash_cycle(struct e1000_hw *hw, u32 timeout);
63 static s32 e1000_id_led_init(struct e1000_hw *hw);
64 static s32 e1000_init_lcd_from_nvm_config_region(struct e1000_hw *hw,
67 static s32 e1000_init_lcd_from_nvm(struct e1000_hw *hw);
68 static void e1000_init_rx_addrs(struct e1000_hw *hw);
69 static void e1000_initialize_hardware_bits(struct e1000_hw *hw);
70 static bool e1000_is_onboard_nvm_eeprom(struct e1000_hw *hw);
71 static s32 e1000_kumeran_lock_loss_workaround(struct e1000_hw *hw);
72 static s32 e1000_mng_enable_host_if(struct e1000_hw *hw);
73 static s32 e1000_mng_host_if_write(struct e1000_hw *hw, u8 *buffer, u16 length,
75 static s32 e1000_mng_write_cmd_header(struct e1000_hw* hw,
76 struct e1000_host_mng_command_header
78 static s32 e1000_mng_write_commit(struct e1000_hw *hw);
79 static s32 e1000_phy_ife_get_info(struct e1000_hw *hw,
80 struct e1000_phy_info *phy_info);
81 static s32 e1000_phy_igp_get_info(struct e1000_hw *hw,
82 struct e1000_phy_info *phy_info);
83 static s32 e1000_read_eeprom_eerd(struct e1000_hw *hw, u16 offset, u16 words,
85 static s32 e1000_write_eeprom_eewr(struct e1000_hw *hw, u16 offset, u16 words,
87 static s32 e1000_poll_eerd_eewr_done(struct e1000_hw *hw, int eerd);
88 static s32 e1000_phy_m88_get_info(struct e1000_hw *hw,
89 struct e1000_phy_info *phy_info);
90 static void e1000_put_hw_eeprom_semaphore(struct e1000_hw *hw);
91 static s32 e1000_read_ich8_byte(struct e1000_hw *hw, u32 index, u8 *data);
92 static s32 e1000_verify_write_ich8_byte(struct e1000_hw *hw, u32 index,
94 static s32 e1000_write_ich8_byte(struct e1000_hw *hw, u32 index, u8 byte);
95 static s32 e1000_read_ich8_word(struct e1000_hw *hw, u32 index, u16 *data);
96 static s32 e1000_read_ich8_data(struct e1000_hw *hw, u32 index, u32 size,
98 static s32 e1000_write_ich8_data(struct e1000_hw *hw, u32 index, u32 size,
100 static s32 e1000_read_eeprom_ich8(struct e1000_hw *hw, u16 offset, u16 words,
102 static s32 e1000_write_eeprom_ich8(struct e1000_hw *hw, u16 offset, u16 words,
104 static void e1000_release_software_flag(struct e1000_hw *hw);
105 static s32 e1000_set_d3_lplu_state(struct e1000_hw *hw, bool active);
106 static s32 e1000_set_d0_lplu_state(struct e1000_hw *hw, bool active);
107 static s32 e1000_set_pci_ex_no_snoop(struct e1000_hw *hw, u32 no_snoop);
108 static void e1000_set_pci_express_master_disable(struct e1000_hw *hw);
109 static s32 e1000_wait_autoneg(struct e1000_hw *hw);
110 static void e1000_write_reg_io(struct e1000_hw *hw, u32 offset, u32 value);
111 static s32 e1000_set_phy_type(struct e1000_hw *hw);
112 static void e1000_phy_init_script(struct e1000_hw *hw);
113 static s32 e1000_setup_copper_link(struct e1000_hw *hw);
114 static s32 e1000_setup_fiber_serdes_link(struct e1000_hw *hw);
115 static s32 e1000_adjust_serdes_amplitude(struct e1000_hw *hw);
116 static s32 e1000_phy_force_speed_duplex(struct e1000_hw *hw);
117 static s32 e1000_config_mac_to_phy(struct e1000_hw *hw);
118 static void e1000_raise_mdi_clk(struct e1000_hw *hw, u32 *ctrl);
119 static void e1000_lower_mdi_clk(struct e1000_hw *hw, u32 *ctrl);
120 static void e1000_shift_out_mdi_bits(struct e1000_hw *hw, u32 data,
122 static u16 e1000_shift_in_mdi_bits(struct e1000_hw *hw);
123 static s32 e1000_phy_reset_dsp(struct e1000_hw *hw);
124 static s32 e1000_write_eeprom_spi(struct e1000_hw *hw, u16 offset,
125 u16 words, u16 *data);
126 static s32 e1000_write_eeprom_microwire(struct e1000_hw *hw, u16 offset,
127 u16 words, u16 *data);
128 static s32 e1000_spi_eeprom_ready(struct e1000_hw *hw);
129 static void e1000_raise_ee_clk(struct e1000_hw *hw, u32 *eecd);
130 static void e1000_lower_ee_clk(struct e1000_hw *hw, u32 *eecd);
131 static void e1000_shift_out_ee_bits(struct e1000_hw *hw, u16 data, u16 count);
132 static s32 e1000_write_phy_reg_ex(struct e1000_hw *hw, u32 reg_addr,
134 static s32 e1000_read_phy_reg_ex(struct e1000_hw *hw,u32 reg_addr,
136 static u16 e1000_shift_in_ee_bits(struct e1000_hw *hw, u16 count);
137 static s32 e1000_acquire_eeprom(struct e1000_hw *hw);
138 static void e1000_release_eeprom(struct e1000_hw *hw);
139 static void e1000_standby_eeprom(struct e1000_hw *hw);
140 static s32 e1000_set_vco_speed(struct e1000_hw *hw);
141 static s32 e1000_polarity_reversal_workaround(struct e1000_hw *hw);
142 static s32 e1000_set_phy_mode(struct e1000_hw *hw);
143 static s32 e1000_host_if_read_cookie(struct e1000_hw *hw, u8 *buffer);
144 static u8 e1000_calculate_mng_checksum(char *buffer, u32 length);
145 static s32 e1000_configure_kmrn_for_10_100(struct e1000_hw *hw, u16 duplex);
146 static s32 e1000_configure_kmrn_for_1000(struct e1000_hw *hw);
148 /* IGP cable length table */
150 u16 e1000_igp_cable_length_table[IGP01E1000_AGC_LENGTH_TABLE_SIZE] =
151 { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
152 5, 10, 10, 10, 10, 10, 10, 10, 20, 20, 20, 20, 20, 25, 25, 25,
153 25, 25, 25, 25, 30, 30, 30, 30, 40, 40, 40, 40, 40, 40, 40, 40,
154 40, 50, 50, 50, 50, 50, 50, 50, 60, 60, 60, 60, 60, 60, 60, 60,
155 60, 70, 70, 70, 70, 70, 70, 80, 80, 80, 80, 80, 80, 90, 90, 90,
156 90, 90, 90, 90, 90, 90, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
157 100, 100, 100, 100, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
158 110, 110, 110, 110, 110, 110, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120};
161 u16 e1000_igp_2_cable_length_table[IGP02E1000_AGC_LENGTH_TABLE_SIZE] =
162 { 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 8, 11, 13, 16, 18, 21,
163 0, 0, 0, 3, 6, 10, 13, 16, 19, 23, 26, 29, 32, 35, 38, 41,
164 6, 10, 14, 18, 22, 26, 30, 33, 37, 41, 44, 48, 51, 54, 58, 61,
165 21, 26, 31, 35, 40, 44, 49, 53, 57, 61, 65, 68, 72, 75, 79, 82,
166 40, 45, 51, 56, 61, 66, 70, 75, 79, 83, 87, 91, 94, 98, 101, 104,
167 60, 66, 72, 77, 82, 87, 92, 96, 100, 104, 108, 111, 114, 117, 119, 121,
168 83, 89, 95, 100, 105, 109, 113, 116, 119, 122, 124,
169 104, 109, 114, 118, 121, 124};
171 /******************************************************************************
172 * Set the phy type member in the hw struct.
174 * hw - Struct containing variables accessed by shared code
175 *****************************************************************************/
176 static s32 e1000_set_phy_type(struct e1000_hw *hw)
178 DEBUGFUNC("e1000_set_phy_type");
180 if (hw->mac_type == e1000_undefined)
181 return -E1000_ERR_PHY_TYPE;
183 switch (hw->phy_id) {
184 case M88E1000_E_PHY_ID:
185 case M88E1000_I_PHY_ID:
186 case M88E1011_I_PHY_ID:
187 case M88E1111_I_PHY_ID:
188 hw->phy_type = e1000_phy_m88;
190 case IGP01E1000_I_PHY_ID:
191 if (hw->mac_type == e1000_82541 ||
192 hw->mac_type == e1000_82541_rev_2 ||
193 hw->mac_type == e1000_82547 ||
194 hw->mac_type == e1000_82547_rev_2) {
195 hw->phy_type = e1000_phy_igp;
198 case IGP03E1000_E_PHY_ID:
199 hw->phy_type = e1000_phy_igp_3;
202 case IFE_PLUS_E_PHY_ID:
204 hw->phy_type = e1000_phy_ife;
206 case GG82563_E_PHY_ID:
207 if (hw->mac_type == e1000_80003es2lan) {
208 hw->phy_type = e1000_phy_gg82563;
213 /* Should never have loaded on this device */
214 hw->phy_type = e1000_phy_undefined;
215 return -E1000_ERR_PHY_TYPE;
218 return E1000_SUCCESS;
221 /******************************************************************************
222 * IGP phy init script - initializes the GbE PHY
224 * hw - Struct containing variables accessed by shared code
225 *****************************************************************************/
226 static void e1000_phy_init_script(struct e1000_hw *hw)
231 DEBUGFUNC("e1000_phy_init_script");
233 if (hw->phy_init_script) {
236 /* Save off the current value of register 0x2F5B to be restored at
237 * the end of this routine. */
238 ret_val = e1000_read_phy_reg(hw, 0x2F5B, &phy_saved_data);
240 /* Disabled the PHY transmitter */
241 e1000_write_phy_reg(hw, 0x2F5B, 0x0003);
245 e1000_write_phy_reg(hw,0x0000,0x0140);
249 switch (hw->mac_type) {
252 e1000_write_phy_reg(hw, 0x1F95, 0x0001);
254 e1000_write_phy_reg(hw, 0x1F71, 0xBD21);
256 e1000_write_phy_reg(hw, 0x1F79, 0x0018);
258 e1000_write_phy_reg(hw, 0x1F30, 0x1600);
260 e1000_write_phy_reg(hw, 0x1F31, 0x0014);
262 e1000_write_phy_reg(hw, 0x1F32, 0x161C);
264 e1000_write_phy_reg(hw, 0x1F94, 0x0003);
266 e1000_write_phy_reg(hw, 0x1F96, 0x003F);
268 e1000_write_phy_reg(hw, 0x2010, 0x0008);
271 case e1000_82541_rev_2:
272 case e1000_82547_rev_2:
273 e1000_write_phy_reg(hw, 0x1F73, 0x0099);
279 e1000_write_phy_reg(hw, 0x0000, 0x3300);
283 /* Now enable the transmitter */
284 e1000_write_phy_reg(hw, 0x2F5B, phy_saved_data);
286 if (hw->mac_type == e1000_82547) {
287 u16 fused, fine, coarse;
289 /* Move to analog registers page */
290 e1000_read_phy_reg(hw, IGP01E1000_ANALOG_SPARE_FUSE_STATUS, &fused);
292 if (!(fused & IGP01E1000_ANALOG_SPARE_FUSE_ENABLED)) {
293 e1000_read_phy_reg(hw, IGP01E1000_ANALOG_FUSE_STATUS, &fused);
295 fine = fused & IGP01E1000_ANALOG_FUSE_FINE_MASK;
296 coarse = fused & IGP01E1000_ANALOG_FUSE_COARSE_MASK;
298 if (coarse > IGP01E1000_ANALOG_FUSE_COARSE_THRESH) {
299 coarse -= IGP01E1000_ANALOG_FUSE_COARSE_10;
300 fine -= IGP01E1000_ANALOG_FUSE_FINE_1;
301 } else if (coarse == IGP01E1000_ANALOG_FUSE_COARSE_THRESH)
302 fine -= IGP01E1000_ANALOG_FUSE_FINE_10;
304 fused = (fused & IGP01E1000_ANALOG_FUSE_POLY_MASK) |
305 (fine & IGP01E1000_ANALOG_FUSE_FINE_MASK) |
306 (coarse & IGP01E1000_ANALOG_FUSE_COARSE_MASK);
308 e1000_write_phy_reg(hw, IGP01E1000_ANALOG_FUSE_CONTROL, fused);
309 e1000_write_phy_reg(hw, IGP01E1000_ANALOG_FUSE_BYPASS,
310 IGP01E1000_ANALOG_FUSE_ENABLE_SW_CONTROL);
316 /******************************************************************************
317 * Set the mac type member in the hw struct.
319 * hw - Struct containing variables accessed by shared code
320 *****************************************************************************/
321 s32 e1000_set_mac_type(struct e1000_hw *hw)
323 DEBUGFUNC("e1000_set_mac_type");
325 switch (hw->device_id) {
326 case E1000_DEV_ID_82542:
327 switch (hw->revision_id) {
328 case E1000_82542_2_0_REV_ID:
329 hw->mac_type = e1000_82542_rev2_0;
331 case E1000_82542_2_1_REV_ID:
332 hw->mac_type = e1000_82542_rev2_1;
335 /* Invalid 82542 revision ID */
336 return -E1000_ERR_MAC_TYPE;
339 case E1000_DEV_ID_82543GC_FIBER:
340 case E1000_DEV_ID_82543GC_COPPER:
341 hw->mac_type = e1000_82543;
343 case E1000_DEV_ID_82544EI_COPPER:
344 case E1000_DEV_ID_82544EI_FIBER:
345 case E1000_DEV_ID_82544GC_COPPER:
346 case E1000_DEV_ID_82544GC_LOM:
347 hw->mac_type = e1000_82544;
349 case E1000_DEV_ID_82540EM:
350 case E1000_DEV_ID_82540EM_LOM:
351 case E1000_DEV_ID_82540EP:
352 case E1000_DEV_ID_82540EP_LOM:
353 case E1000_DEV_ID_82540EP_LP:
354 hw->mac_type = e1000_82540;
356 case E1000_DEV_ID_82545EM_COPPER:
357 case E1000_DEV_ID_82545EM_FIBER:
358 hw->mac_type = e1000_82545;
360 case E1000_DEV_ID_82545GM_COPPER:
361 case E1000_DEV_ID_82545GM_FIBER:
362 case E1000_DEV_ID_82545GM_SERDES:
363 hw->mac_type = e1000_82545_rev_3;
365 case E1000_DEV_ID_82546EB_COPPER:
366 case E1000_DEV_ID_82546EB_FIBER:
367 case E1000_DEV_ID_82546EB_QUAD_COPPER:
368 hw->mac_type = e1000_82546;
370 case E1000_DEV_ID_82546GB_COPPER:
371 case E1000_DEV_ID_82546GB_FIBER:
372 case E1000_DEV_ID_82546GB_SERDES:
373 case E1000_DEV_ID_82546GB_PCIE:
374 case E1000_DEV_ID_82546GB_QUAD_COPPER:
375 case E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3:
376 hw->mac_type = e1000_82546_rev_3;
378 case E1000_DEV_ID_82541EI:
379 case E1000_DEV_ID_82541EI_MOBILE:
380 case E1000_DEV_ID_82541ER_LOM:
381 hw->mac_type = e1000_82541;
383 case E1000_DEV_ID_82541ER:
384 case E1000_DEV_ID_82541GI:
385 case E1000_DEV_ID_82541GI_LF:
386 case E1000_DEV_ID_82541GI_MOBILE:
387 hw->mac_type = e1000_82541_rev_2;
389 case E1000_DEV_ID_82547EI:
390 case E1000_DEV_ID_82547EI_MOBILE:
391 hw->mac_type = e1000_82547;
393 case E1000_DEV_ID_82547GI:
394 hw->mac_type = e1000_82547_rev_2;
396 case E1000_DEV_ID_82571EB_COPPER:
397 case E1000_DEV_ID_82571EB_FIBER:
398 case E1000_DEV_ID_82571EB_SERDES:
399 case E1000_DEV_ID_82571EB_SERDES_DUAL:
400 case E1000_DEV_ID_82571EB_SERDES_QUAD:
401 case E1000_DEV_ID_82571EB_QUAD_COPPER:
402 case E1000_DEV_ID_82571PT_QUAD_COPPER:
403 case E1000_DEV_ID_82571EB_QUAD_FIBER:
404 case E1000_DEV_ID_82571EB_QUAD_COPPER_LOWPROFILE:
405 hw->mac_type = e1000_82571;
407 case E1000_DEV_ID_82572EI_COPPER:
408 case E1000_DEV_ID_82572EI_FIBER:
409 case E1000_DEV_ID_82572EI_SERDES:
410 case E1000_DEV_ID_82572EI:
411 hw->mac_type = e1000_82572;
413 case E1000_DEV_ID_82573E:
414 case E1000_DEV_ID_82573E_IAMT:
415 case E1000_DEV_ID_82573L:
416 hw->mac_type = e1000_82573;
418 case E1000_DEV_ID_80003ES2LAN_COPPER_SPT:
419 case E1000_DEV_ID_80003ES2LAN_SERDES_SPT:
420 case E1000_DEV_ID_80003ES2LAN_COPPER_DPT:
421 case E1000_DEV_ID_80003ES2LAN_SERDES_DPT:
422 hw->mac_type = e1000_80003es2lan;
424 case E1000_DEV_ID_ICH8_IGP_M_AMT:
425 case E1000_DEV_ID_ICH8_IGP_AMT:
426 case E1000_DEV_ID_ICH8_IGP_C:
427 case E1000_DEV_ID_ICH8_IFE:
428 case E1000_DEV_ID_ICH8_IFE_GT:
429 case E1000_DEV_ID_ICH8_IFE_G:
430 case E1000_DEV_ID_ICH8_IGP_M:
431 hw->mac_type = e1000_ich8lan;
434 /* Should never have loaded on this device */
435 return -E1000_ERR_MAC_TYPE;
438 switch (hw->mac_type) {
440 hw->swfwhw_semaphore_present = true;
441 hw->asf_firmware_present = true;
443 case e1000_80003es2lan:
444 hw->swfw_sync_present = true;
449 hw->eeprom_semaphore_present = true;
453 case e1000_82541_rev_2:
454 case e1000_82547_rev_2:
455 hw->asf_firmware_present = true;
461 /* The 82543 chip does not count tx_carrier_errors properly in
464 if (hw->mac_type == e1000_82543)
465 hw->bad_tx_carr_stats_fd = true;
467 /* capable of receiving management packets to the host */
468 if (hw->mac_type >= e1000_82571)
469 hw->has_manc2h = true;
471 /* In rare occasions, ESB2 systems would end up started without
472 * the RX unit being turned on.
474 if (hw->mac_type == e1000_80003es2lan)
475 hw->rx_needs_kicking = true;
477 if (hw->mac_type > e1000_82544)
478 hw->has_smbus = true;
480 return E1000_SUCCESS;
483 /*****************************************************************************
484 * Set media type and TBI compatibility.
486 * hw - Struct containing variables accessed by shared code
487 * **************************************************************************/
488 void e1000_set_media_type(struct e1000_hw *hw)
492 DEBUGFUNC("e1000_set_media_type");
494 if (hw->mac_type != e1000_82543) {
495 /* tbi_compatibility is only valid on 82543 */
496 hw->tbi_compatibility_en = false;
499 switch (hw->device_id) {
500 case E1000_DEV_ID_82545GM_SERDES:
501 case E1000_DEV_ID_82546GB_SERDES:
502 case E1000_DEV_ID_82571EB_SERDES:
503 case E1000_DEV_ID_82571EB_SERDES_DUAL:
504 case E1000_DEV_ID_82571EB_SERDES_QUAD:
505 case E1000_DEV_ID_82572EI_SERDES:
506 case E1000_DEV_ID_80003ES2LAN_SERDES_DPT:
507 hw->media_type = e1000_media_type_internal_serdes;
510 switch (hw->mac_type) {
511 case e1000_82542_rev2_0:
512 case e1000_82542_rev2_1:
513 hw->media_type = e1000_media_type_fiber;
517 /* The STATUS_TBIMODE bit is reserved or reused for the this
520 hw->media_type = e1000_media_type_copper;
523 status = er32(STATUS);
524 if (status & E1000_STATUS_TBIMODE) {
525 hw->media_type = e1000_media_type_fiber;
526 /* tbi_compatibility not valid on fiber */
527 hw->tbi_compatibility_en = false;
529 hw->media_type = e1000_media_type_copper;
536 /******************************************************************************
537 * Reset the transmit and receive units; mask and clear all interrupts.
539 * hw - Struct containing variables accessed by shared code
540 *****************************************************************************/
541 s32 e1000_reset_hw(struct e1000_hw *hw)
552 DEBUGFUNC("e1000_reset_hw");
554 /* For 82542 (rev 2.0), disable MWI before issuing a device reset */
555 if (hw->mac_type == e1000_82542_rev2_0) {
556 DEBUGOUT("Disabling MWI on 82542 rev 2.0\n");
557 e1000_pci_clear_mwi(hw);
560 if (hw->bus_type == e1000_bus_type_pci_express) {
561 /* Prevent the PCI-E bus from sticking if there is no TLP connection
562 * on the last TLP read/write transaction when MAC is reset.
564 if (e1000_disable_pciex_master(hw) != E1000_SUCCESS) {
565 DEBUGOUT("PCI-E Master disable polling has failed.\n");
569 /* Clear interrupt mask to stop board from generating interrupts */
570 DEBUGOUT("Masking off all interrupts\n");
571 ew32(IMC, 0xffffffff);
573 /* Disable the Transmit and Receive units. Then delay to allow
574 * any pending transactions to complete before we hit the MAC with
578 ew32(TCTL, E1000_TCTL_PSP);
581 /* The tbi_compatibility_on Flag must be cleared when Rctl is cleared. */
582 hw->tbi_compatibility_on = false;
584 /* Delay to allow any outstanding PCI transactions to complete before
585 * resetting the device
591 /* Must reset the PHY before resetting the MAC */
592 if ((hw->mac_type == e1000_82541) || (hw->mac_type == e1000_82547)) {
593 ew32(CTRL, (ctrl | E1000_CTRL_PHY_RST));
597 /* Must acquire the MDIO ownership before MAC reset.
598 * Ownership defaults to firmware after a reset. */
599 if (hw->mac_type == e1000_82573) {
602 extcnf_ctrl = er32(EXTCNF_CTRL);
603 extcnf_ctrl |= E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP;
606 ew32(EXTCNF_CTRL, extcnf_ctrl);
607 extcnf_ctrl = er32(EXTCNF_CTRL);
609 if (extcnf_ctrl & E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP)
612 extcnf_ctrl |= E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP;
619 /* Workaround for ICH8 bit corruption issue in FIFO memory */
620 if (hw->mac_type == e1000_ich8lan) {
621 /* Set Tx and Rx buffer allocation to 8k apiece. */
622 ew32(PBA, E1000_PBA_8K);
623 /* Set Packet Buffer Size to 16k. */
624 ew32(PBS, E1000_PBS_16K);
627 /* Issue a global reset to the MAC. This will reset the chip's
628 * transmit, receive, DMA, and link units. It will not effect
629 * the current PCI configuration. The global reset bit is self-
630 * clearing, and should clear within a microsecond.
632 DEBUGOUT("Issuing a global reset to MAC\n");
634 switch (hw->mac_type) {
640 case e1000_82541_rev_2:
641 /* These controllers can't ack the 64-bit write when issuing the
642 * reset, so use IO-mapping as a workaround to issue the reset */
643 E1000_WRITE_REG_IO(hw, CTRL, (ctrl | E1000_CTRL_RST));
645 case e1000_82545_rev_3:
646 case e1000_82546_rev_3:
647 /* Reset is performed on a shadow of the control register */
648 ew32(CTRL_DUP, (ctrl | E1000_CTRL_RST));
651 if (!hw->phy_reset_disable &&
652 e1000_check_phy_reset_block(hw) == E1000_SUCCESS) {
653 /* e1000_ich8lan PHY HW reset requires MAC CORE reset
654 * at the same time to make sure the interface between
655 * MAC and the external PHY is reset.
657 ctrl |= E1000_CTRL_PHY_RST;
660 e1000_get_software_flag(hw);
661 ew32(CTRL, (ctrl | E1000_CTRL_RST));
665 ew32(CTRL, (ctrl | E1000_CTRL_RST));
669 /* After MAC reset, force reload of EEPROM to restore power-on settings to
670 * device. Later controllers reload the EEPROM automatically, so just wait
671 * for reload to complete.
673 switch (hw->mac_type) {
674 case e1000_82542_rev2_0:
675 case e1000_82542_rev2_1:
678 /* Wait for reset to complete */
680 ctrl_ext = er32(CTRL_EXT);
681 ctrl_ext |= E1000_CTRL_EXT_EE_RST;
682 ew32(CTRL_EXT, ctrl_ext);
684 /* Wait for EEPROM reload */
688 case e1000_82541_rev_2:
690 case e1000_82547_rev_2:
691 /* Wait for EEPROM reload */
695 if (!e1000_is_onboard_nvm_eeprom(hw)) {
697 ctrl_ext = er32(CTRL_EXT);
698 ctrl_ext |= E1000_CTRL_EXT_EE_RST;
699 ew32(CTRL_EXT, ctrl_ext);
704 /* Auto read done will delay 5ms or poll based on mac type */
705 ret_val = e1000_get_auto_rd_done(hw);
711 /* Disable HW ARPs on ASF enabled adapters */
712 if (hw->mac_type >= e1000_82540 && hw->mac_type <= e1000_82547_rev_2) {
714 manc &= ~(E1000_MANC_ARP_EN);
718 if ((hw->mac_type == e1000_82541) || (hw->mac_type == e1000_82547)) {
719 e1000_phy_init_script(hw);
721 /* Configure activity LED after PHY reset */
722 led_ctrl = er32(LEDCTL);
723 led_ctrl &= IGP_ACTIVITY_LED_MASK;
724 led_ctrl |= (IGP_ACTIVITY_LED_ENABLE | IGP_LED3_MODE);
725 ew32(LEDCTL, led_ctrl);
728 /* Clear interrupt mask to stop board from generating interrupts */
729 DEBUGOUT("Masking off all interrupts\n");
730 ew32(IMC, 0xffffffff);
732 /* Clear any pending interrupt events. */
735 /* If MWI was previously enabled, reenable it. */
736 if (hw->mac_type == e1000_82542_rev2_0) {
737 if (hw->pci_cmd_word & PCI_COMMAND_INVALIDATE)
738 e1000_pci_set_mwi(hw);
741 if (hw->mac_type == e1000_ich8lan) {
742 u32 kab = er32(KABGTXD);
743 kab |= E1000_KABGTXD_BGSQLBIAS;
747 return E1000_SUCCESS;
750 /******************************************************************************
752 * Initialize a number of hardware-dependent bits
754 * hw: Struct containing variables accessed by shared code
756 * This function contains hardware limitation workarounds for PCI-E adapters
758 *****************************************************************************/
759 static void e1000_initialize_hardware_bits(struct e1000_hw *hw)
761 if ((hw->mac_type >= e1000_82571) && (!hw->initialize_hw_bits_disable)) {
762 /* Settings common to all PCI-express silicon */
763 u32 reg_ctrl, reg_ctrl_ext;
764 u32 reg_tarc0, reg_tarc1;
766 u32 reg_txdctl, reg_txdctl1;
768 /* link autonegotiation/sync workarounds */
769 reg_tarc0 = er32(TARC0);
770 reg_tarc0 &= ~((1 << 30)|(1 << 29)|(1 << 28)|(1 << 27));
772 /* Enable not-done TX descriptor counting */
773 reg_txdctl = er32(TXDCTL);
774 reg_txdctl |= E1000_TXDCTL_COUNT_DESC;
775 ew32(TXDCTL, reg_txdctl);
776 reg_txdctl1 = er32(TXDCTL1);
777 reg_txdctl1 |= E1000_TXDCTL_COUNT_DESC;
778 ew32(TXDCTL1, reg_txdctl1);
780 switch (hw->mac_type) {
783 /* Clear PHY TX compatible mode bits */
784 reg_tarc1 = er32(TARC1);
785 reg_tarc1 &= ~((1 << 30)|(1 << 29));
787 /* link autonegotiation/sync workarounds */
788 reg_tarc0 |= ((1 << 26)|(1 << 25)|(1 << 24)|(1 << 23));
790 /* TX ring control fixes */
791 reg_tarc1 |= ((1 << 26)|(1 << 25)|(1 << 24));
793 /* Multiple read bit is reversed polarity */
794 reg_tctl = er32(TCTL);
795 if (reg_tctl & E1000_TCTL_MULR)
796 reg_tarc1 &= ~(1 << 28);
798 reg_tarc1 |= (1 << 28);
800 ew32(TARC1, reg_tarc1);
803 reg_ctrl_ext = er32(CTRL_EXT);
804 reg_ctrl_ext &= ~(1 << 23);
805 reg_ctrl_ext |= (1 << 22);
807 /* TX byte count fix */
808 reg_ctrl = er32(CTRL);
809 reg_ctrl &= ~(1 << 29);
811 ew32(CTRL_EXT, reg_ctrl_ext);
812 ew32(CTRL, reg_ctrl);
814 case e1000_80003es2lan:
815 /* improve small packet performace for fiber/serdes */
816 if ((hw->media_type == e1000_media_type_fiber) ||
817 (hw->media_type == e1000_media_type_internal_serdes)) {
818 reg_tarc0 &= ~(1 << 20);
821 /* Multiple read bit is reversed polarity */
822 reg_tctl = er32(TCTL);
823 reg_tarc1 = er32(TARC1);
824 if (reg_tctl & E1000_TCTL_MULR)
825 reg_tarc1 &= ~(1 << 28);
827 reg_tarc1 |= (1 << 28);
829 ew32(TARC1, reg_tarc1);
832 /* Reduce concurrent DMA requests to 3 from 4 */
833 if ((hw->revision_id < 3) ||
834 ((hw->device_id != E1000_DEV_ID_ICH8_IGP_M_AMT) &&
835 (hw->device_id != E1000_DEV_ID_ICH8_IGP_M)))
836 reg_tarc0 |= ((1 << 29)|(1 << 28));
838 reg_ctrl_ext = er32(CTRL_EXT);
839 reg_ctrl_ext |= (1 << 22);
840 ew32(CTRL_EXT, reg_ctrl_ext);
842 /* workaround TX hang with TSO=on */
843 reg_tarc0 |= ((1 << 27)|(1 << 26)|(1 << 24)|(1 << 23));
845 /* Multiple read bit is reversed polarity */
846 reg_tctl = er32(TCTL);
847 reg_tarc1 = er32(TARC1);
848 if (reg_tctl & E1000_TCTL_MULR)
849 reg_tarc1 &= ~(1 << 28);
851 reg_tarc1 |= (1 << 28);
853 /* workaround TX hang with TSO=on */
854 reg_tarc1 |= ((1 << 30)|(1 << 26)|(1 << 24));
856 ew32(TARC1, reg_tarc1);
862 ew32(TARC0, reg_tarc0);
866 /******************************************************************************
867 * Performs basic configuration of the adapter.
869 * hw - Struct containing variables accessed by shared code
871 * Assumes that the controller has previously been reset and is in a
872 * post-reset uninitialized state. Initializes the receive address registers,
873 * multicast table, and VLAN filter table. Calls routines to setup link
874 * configuration and flow control settings. Clears all on-chip counters. Leaves
875 * the transmit and receive units disabled and uninitialized.
876 *****************************************************************************/
877 s32 e1000_init_hw(struct e1000_hw *hw)
886 DEBUGFUNC("e1000_init_hw");
888 /* force full DMA clock frequency for 10/100 on ICH8 A0-B0 */
889 if ((hw->mac_type == e1000_ich8lan) &&
890 ((hw->revision_id < 3) ||
891 ((hw->device_id != E1000_DEV_ID_ICH8_IGP_M_AMT) &&
892 (hw->device_id != E1000_DEV_ID_ICH8_IGP_M)))) {
893 reg_data = er32(STATUS);
894 reg_data &= ~0x80000000;
895 ew32(STATUS, reg_data);
898 /* Initialize Identification LED */
899 ret_val = e1000_id_led_init(hw);
901 DEBUGOUT("Error Initializing Identification LED\n");
905 /* Set the media type and TBI compatibility */
906 e1000_set_media_type(hw);
908 /* Must be called after e1000_set_media_type because media_type is used */
909 e1000_initialize_hardware_bits(hw);
911 /* Disabling VLAN filtering. */
912 DEBUGOUT("Initializing the IEEE VLAN\n");
913 /* VET hardcoded to standard value and VFTA removed in ICH8 LAN */
914 if (hw->mac_type != e1000_ich8lan) {
915 if (hw->mac_type < e1000_82545_rev_3)
917 e1000_clear_vfta(hw);
920 /* For 82542 (rev 2.0), disable MWI and put the receiver into reset */
921 if (hw->mac_type == e1000_82542_rev2_0) {
922 DEBUGOUT("Disabling MWI on 82542 rev 2.0\n");
923 e1000_pci_clear_mwi(hw);
924 ew32(RCTL, E1000_RCTL_RST);
929 /* Setup the receive address. This involves initializing all of the Receive
930 * Address Registers (RARs 0 - 15).
932 e1000_init_rx_addrs(hw);
934 /* For 82542 (rev 2.0), take the receiver out of reset and enable MWI */
935 if (hw->mac_type == e1000_82542_rev2_0) {
939 if (hw->pci_cmd_word & PCI_COMMAND_INVALIDATE)
940 e1000_pci_set_mwi(hw);
943 /* Zero out the Multicast HASH table */
944 DEBUGOUT("Zeroing the MTA\n");
945 mta_size = E1000_MC_TBL_SIZE;
946 if (hw->mac_type == e1000_ich8lan)
947 mta_size = E1000_MC_TBL_SIZE_ICH8LAN;
948 for (i = 0; i < mta_size; i++) {
949 E1000_WRITE_REG_ARRAY(hw, MTA, i, 0);
950 /* use write flush to prevent Memory Write Block (MWB) from
951 * occuring when accessing our register space */
955 /* Set the PCI priority bit correctly in the CTRL register. This
956 * determines if the adapter gives priority to receives, or if it
957 * gives equal priority to transmits and receives. Valid only on
958 * 82542 and 82543 silicon.
960 if (hw->dma_fairness && hw->mac_type <= e1000_82543) {
962 ew32(CTRL, ctrl | E1000_CTRL_PRIOR);
965 switch (hw->mac_type) {
966 case e1000_82545_rev_3:
967 case e1000_82546_rev_3:
970 /* Workaround for PCI-X problem when BIOS sets MMRBC incorrectly. */
971 if (hw->bus_type == e1000_bus_type_pcix && e1000_pcix_get_mmrbc(hw) > 2048)
972 e1000_pcix_set_mmrbc(hw, 2048);
976 /* More time needed for PHY to initialize */
977 if (hw->mac_type == e1000_ich8lan)
980 /* Call a subroutine to configure the link and setup flow control. */
981 ret_val = e1000_setup_link(hw);
983 /* Set the transmit descriptor write-back policy */
984 if (hw->mac_type > e1000_82544) {
986 ctrl = (ctrl & ~E1000_TXDCTL_WTHRESH) | E1000_TXDCTL_FULL_TX_DESC_WB;
990 if (hw->mac_type == e1000_82573) {
991 e1000_enable_tx_pkt_filtering(hw);
994 switch (hw->mac_type) {
997 case e1000_80003es2lan:
998 /* Enable retransmit on late collisions */
999 reg_data = er32(TCTL);
1000 reg_data |= E1000_TCTL_RTLC;
1001 ew32(TCTL, reg_data);
1003 /* Configure Gigabit Carry Extend Padding */
1004 reg_data = er32(TCTL_EXT);
1005 reg_data &= ~E1000_TCTL_EXT_GCEX_MASK;
1006 reg_data |= DEFAULT_80003ES2LAN_TCTL_EXT_GCEX;
1007 ew32(TCTL_EXT, reg_data);
1009 /* Configure Transmit Inter-Packet Gap */
1010 reg_data = er32(TIPG);
1011 reg_data &= ~E1000_TIPG_IPGT_MASK;
1012 reg_data |= DEFAULT_80003ES2LAN_TIPG_IPGT_1000;
1013 ew32(TIPG, reg_data);
1015 reg_data = E1000_READ_REG_ARRAY(hw, FFLT, 0x0001);
1016 reg_data &= ~0x00100000;
1017 E1000_WRITE_REG_ARRAY(hw, FFLT, 0x0001, reg_data);
1022 ctrl = er32(TXDCTL1);
1023 ctrl = (ctrl & ~E1000_TXDCTL_WTHRESH) | E1000_TXDCTL_FULL_TX_DESC_WB;
1024 ew32(TXDCTL1, ctrl);
1029 if (hw->mac_type == e1000_82573) {
1030 u32 gcr = er32(GCR);
1031 gcr |= E1000_GCR_L1_ACT_WITHOUT_L0S_RX;
1035 /* Clear all of the statistics registers (clear on read). It is
1036 * important that we do this after we have tried to establish link
1037 * because the symbol error count will increment wildly if there
1040 e1000_clear_hw_cntrs(hw);
1042 /* ICH8 No-snoop bits are opposite polarity.
1043 * Set to snoop by default after reset. */
1044 if (hw->mac_type == e1000_ich8lan)
1045 e1000_set_pci_ex_no_snoop(hw, PCI_EX_82566_SNOOP_ALL);
1047 if (hw->device_id == E1000_DEV_ID_82546GB_QUAD_COPPER ||
1048 hw->device_id == E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3) {
1049 ctrl_ext = er32(CTRL_EXT);
1050 /* Relaxed ordering must be disabled to avoid a parity
1051 * error crash in a PCI slot. */
1052 ctrl_ext |= E1000_CTRL_EXT_RO_DIS;
1053 ew32(CTRL_EXT, ctrl_ext);
1059 /******************************************************************************
1060 * Adjust SERDES output amplitude based on EEPROM setting.
1062 * hw - Struct containing variables accessed by shared code.
1063 *****************************************************************************/
1064 static s32 e1000_adjust_serdes_amplitude(struct e1000_hw *hw)
1069 DEBUGFUNC("e1000_adjust_serdes_amplitude");
1071 if (hw->media_type != e1000_media_type_internal_serdes)
1072 return E1000_SUCCESS;
1074 switch (hw->mac_type) {
1075 case e1000_82545_rev_3:
1076 case e1000_82546_rev_3:
1079 return E1000_SUCCESS;
1082 ret_val = e1000_read_eeprom(hw, EEPROM_SERDES_AMPLITUDE, 1, &eeprom_data);
1087 if (eeprom_data != EEPROM_RESERVED_WORD) {
1088 /* Adjust SERDES output amplitude only. */
1089 eeprom_data &= EEPROM_SERDES_AMPLITUDE_MASK;
1090 ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_EXT_CTRL, eeprom_data);
1095 return E1000_SUCCESS;
1098 /******************************************************************************
1099 * Configures flow control and link settings.
1101 * hw - Struct containing variables accessed by shared code
1103 * Determines which flow control settings to use. Calls the apropriate media-
1104 * specific link configuration function. Configures the flow control settings.
1105 * Assuming the adapter has a valid link partner, a valid link should be
1106 * established. Assumes the hardware has previously been reset and the
1107 * transmitter and receiver are not enabled.
1108 *****************************************************************************/
1109 s32 e1000_setup_link(struct e1000_hw *hw)
1115 DEBUGFUNC("e1000_setup_link");
1117 /* In the case of the phy reset being blocked, we already have a link.
1118 * We do not have to set it up again. */
1119 if (e1000_check_phy_reset_block(hw))
1120 return E1000_SUCCESS;
1122 /* Read and store word 0x0F of the EEPROM. This word contains bits
1123 * that determine the hardware's default PAUSE (flow control) mode,
1124 * a bit that determines whether the HW defaults to enabling or
1125 * disabling auto-negotiation, and the direction of the
1126 * SW defined pins. If there is no SW over-ride of the flow
1127 * control setting, then the variable hw->fc will
1128 * be initialized based on a value in the EEPROM.
1130 if (hw->fc == E1000_FC_DEFAULT) {
1131 switch (hw->mac_type) {
1134 hw->fc = E1000_FC_FULL;
1137 ret_val = e1000_read_eeprom(hw, EEPROM_INIT_CONTROL2_REG,
1140 DEBUGOUT("EEPROM Read Error\n");
1141 return -E1000_ERR_EEPROM;
1143 if ((eeprom_data & EEPROM_WORD0F_PAUSE_MASK) == 0)
1144 hw->fc = E1000_FC_NONE;
1145 else if ((eeprom_data & EEPROM_WORD0F_PAUSE_MASK) ==
1146 EEPROM_WORD0F_ASM_DIR)
1147 hw->fc = E1000_FC_TX_PAUSE;
1149 hw->fc = E1000_FC_FULL;
1154 /* We want to save off the original Flow Control configuration just
1155 * in case we get disconnected and then reconnected into a different
1156 * hub or switch with different Flow Control capabilities.
1158 if (hw->mac_type == e1000_82542_rev2_0)
1159 hw->fc &= (~E1000_FC_TX_PAUSE);
1161 if ((hw->mac_type < e1000_82543) && (hw->report_tx_early == 1))
1162 hw->fc &= (~E1000_FC_RX_PAUSE);
1164 hw->original_fc = hw->fc;
1166 DEBUGOUT1("After fix-ups FlowControl is now = %x\n", hw->fc);
1168 /* Take the 4 bits from EEPROM word 0x0F that determine the initial
1169 * polarity value for the SW controlled pins, and setup the
1170 * Extended Device Control reg with that info.
1171 * This is needed because one of the SW controlled pins is used for
1172 * signal detection. So this should be done before e1000_setup_pcs_link()
1173 * or e1000_phy_setup() is called.
1175 if (hw->mac_type == e1000_82543) {
1176 ret_val = e1000_read_eeprom(hw, EEPROM_INIT_CONTROL2_REG,
1179 DEBUGOUT("EEPROM Read Error\n");
1180 return -E1000_ERR_EEPROM;
1182 ctrl_ext = ((eeprom_data & EEPROM_WORD0F_SWPDIO_EXT) <<
1184 ew32(CTRL_EXT, ctrl_ext);
1187 /* Call the necessary subroutine to configure the link. */
1188 ret_val = (hw->media_type == e1000_media_type_copper) ?
1189 e1000_setup_copper_link(hw) :
1190 e1000_setup_fiber_serdes_link(hw);
1192 /* Initialize the flow control address, type, and PAUSE timer
1193 * registers to their default values. This is done even if flow
1194 * control is disabled, because it does not hurt anything to
1195 * initialize these registers.
1197 DEBUGOUT("Initializing the Flow Control address, type and timer regs\n");
1199 /* FCAL/H and FCT are hardcoded to standard values in e1000_ich8lan. */
1200 if (hw->mac_type != e1000_ich8lan) {
1201 ew32(FCT, FLOW_CONTROL_TYPE);
1202 ew32(FCAH, FLOW_CONTROL_ADDRESS_HIGH);
1203 ew32(FCAL, FLOW_CONTROL_ADDRESS_LOW);
1206 ew32(FCTTV, hw->fc_pause_time);
1208 /* Set the flow control receive threshold registers. Normally,
1209 * these registers will be set to a default threshold that may be
1210 * adjusted later by the driver's runtime code. However, if the
1211 * ability to transmit pause frames in not enabled, then these
1212 * registers will be set to 0.
1214 if (!(hw->fc & E1000_FC_TX_PAUSE)) {
1218 /* We need to set up the Receive Threshold high and low water marks
1219 * as well as (optionally) enabling the transmission of XON frames.
1221 if (hw->fc_send_xon) {
1222 ew32(FCRTL, (hw->fc_low_water | E1000_FCRTL_XONE));
1223 ew32(FCRTH, hw->fc_high_water);
1225 ew32(FCRTL, hw->fc_low_water);
1226 ew32(FCRTH, hw->fc_high_water);
1232 /******************************************************************************
1233 * Sets up link for a fiber based or serdes based adapter
1235 * hw - Struct containing variables accessed by shared code
1237 * Manipulates Physical Coding Sublayer functions in order to configure
1238 * link. Assumes the hardware has been previously reset and the transmitter
1239 * and receiver are not enabled.
1240 *****************************************************************************/
1241 static s32 e1000_setup_fiber_serdes_link(struct e1000_hw *hw)
1250 DEBUGFUNC("e1000_setup_fiber_serdes_link");
1252 /* On 82571 and 82572 Fiber connections, SerDes loopback mode persists
1253 * until explicitly turned off or a power cycle is performed. A read to
1254 * the register does not indicate its status. Therefore, we ensure
1255 * loopback mode is disabled during initialization.
1257 if (hw->mac_type == e1000_82571 || hw->mac_type == e1000_82572)
1258 ew32(SCTL, E1000_DISABLE_SERDES_LOOPBACK);
1260 /* On adapters with a MAC newer than 82544, SWDP 1 will be
1261 * set when the optics detect a signal. On older adapters, it will be
1262 * cleared when there is a signal. This applies to fiber media only.
1263 * If we're on serdes media, adjust the output amplitude to value
1264 * set in the EEPROM.
1267 if (hw->media_type == e1000_media_type_fiber)
1268 signal = (hw->mac_type > e1000_82544) ? E1000_CTRL_SWDPIN1 : 0;
1270 ret_val = e1000_adjust_serdes_amplitude(hw);
1274 /* Take the link out of reset */
1275 ctrl &= ~(E1000_CTRL_LRST);
1277 /* Adjust VCO speed to improve BER performance */
1278 ret_val = e1000_set_vco_speed(hw);
1282 e1000_config_collision_dist(hw);
1284 /* Check for a software override of the flow control settings, and setup
1285 * the device accordingly. If auto-negotiation is enabled, then software
1286 * will have to set the "PAUSE" bits to the correct value in the Tranmsit
1287 * Config Word Register (TXCW) and re-start auto-negotiation. However, if
1288 * auto-negotiation is disabled, then software will have to manually
1289 * configure the two flow control enable bits in the CTRL register.
1291 * The possible values of the "fc" parameter are:
1292 * 0: Flow control is completely disabled
1293 * 1: Rx flow control is enabled (we can receive pause frames, but
1294 * not send pause frames).
1295 * 2: Tx flow control is enabled (we can send pause frames but we do
1296 * not support receiving pause frames).
1297 * 3: Both Rx and TX flow control (symmetric) are enabled.
1301 /* Flow control is completely disabled by a software over-ride. */
1302 txcw = (E1000_TXCW_ANE | E1000_TXCW_FD);
1304 case E1000_FC_RX_PAUSE:
1305 /* RX Flow control is enabled and TX Flow control is disabled by a
1306 * software over-ride. Since there really isn't a way to advertise
1307 * that we are capable of RX Pause ONLY, we will advertise that we
1308 * support both symmetric and asymmetric RX PAUSE. Later, we will
1309 * disable the adapter's ability to send PAUSE frames.
1311 txcw = (E1000_TXCW_ANE | E1000_TXCW_FD | E1000_TXCW_PAUSE_MASK);
1313 case E1000_FC_TX_PAUSE:
1314 /* TX Flow control is enabled, and RX Flow control is disabled, by a
1315 * software over-ride.
1317 txcw = (E1000_TXCW_ANE | E1000_TXCW_FD | E1000_TXCW_ASM_DIR);
1320 /* Flow control (both RX and TX) is enabled by a software over-ride. */
1321 txcw = (E1000_TXCW_ANE | E1000_TXCW_FD | E1000_TXCW_PAUSE_MASK);
1324 DEBUGOUT("Flow control param set incorrectly\n");
1325 return -E1000_ERR_CONFIG;
1329 /* Since auto-negotiation is enabled, take the link out of reset (the link
1330 * will be in reset, because we previously reset the chip). This will
1331 * restart auto-negotiation. If auto-neogtiation is successful then the
1332 * link-up status bit will be set and the flow control enable bits (RFCE
1333 * and TFCE) will be set according to their negotiated value.
1335 DEBUGOUT("Auto-negotiation enabled\n");
1339 E1000_WRITE_FLUSH();
1344 /* If we have a signal (the cable is plugged in) then poll for a "Link-Up"
1345 * indication in the Device Status Register. Time-out if a link isn't
1346 * seen in 500 milliseconds seconds (Auto-negotiation should complete in
1347 * less than 500 milliseconds even if the other end is doing it in SW).
1348 * For internal serdes, we just assume a signal is present, then poll.
1350 if (hw->media_type == e1000_media_type_internal_serdes ||
1351 (er32(CTRL) & E1000_CTRL_SWDPIN1) == signal) {
1352 DEBUGOUT("Looking for Link\n");
1353 for (i = 0; i < (LINK_UP_TIMEOUT / 10); i++) {
1355 status = er32(STATUS);
1356 if (status & E1000_STATUS_LU) break;
1358 if (i == (LINK_UP_TIMEOUT / 10)) {
1359 DEBUGOUT("Never got a valid link from auto-neg!!!\n");
1360 hw->autoneg_failed = 1;
1361 /* AutoNeg failed to achieve a link, so we'll call
1362 * e1000_check_for_link. This routine will force the link up if
1363 * we detect a signal. This will allow us to communicate with
1364 * non-autonegotiating link partners.
1366 ret_val = e1000_check_for_link(hw);
1368 DEBUGOUT("Error while checking for link\n");
1371 hw->autoneg_failed = 0;
1373 hw->autoneg_failed = 0;
1374 DEBUGOUT("Valid Link Found\n");
1377 DEBUGOUT("No Signal Detected\n");
1379 return E1000_SUCCESS;
1382 /******************************************************************************
1383 * Make sure we have a valid PHY and change PHY mode before link setup.
1385 * hw - Struct containing variables accessed by shared code
1386 ******************************************************************************/
1387 static s32 e1000_copper_link_preconfig(struct e1000_hw *hw)
1393 DEBUGFUNC("e1000_copper_link_preconfig");
1396 /* With 82543, we need to force speed and duplex on the MAC equal to what
1397 * the PHY speed and duplex configuration is. In addition, we need to
1398 * perform a hardware reset on the PHY to take it out of reset.
1400 if (hw->mac_type > e1000_82543) {
1401 ctrl |= E1000_CTRL_SLU;
1402 ctrl &= ~(E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
1405 ctrl |= (E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX | E1000_CTRL_SLU);
1407 ret_val = e1000_phy_hw_reset(hw);
1412 /* Make sure we have a valid PHY */
1413 ret_val = e1000_detect_gig_phy(hw);
1415 DEBUGOUT("Error, did not detect valid phy.\n");
1418 DEBUGOUT1("Phy ID = %x \n", hw->phy_id);
1420 /* Set PHY to class A mode (if necessary) */
1421 ret_val = e1000_set_phy_mode(hw);
1425 if ((hw->mac_type == e1000_82545_rev_3) ||
1426 (hw->mac_type == e1000_82546_rev_3)) {
1427 ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
1428 phy_data |= 0x00000008;
1429 ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
1432 if (hw->mac_type <= e1000_82543 ||
1433 hw->mac_type == e1000_82541 || hw->mac_type == e1000_82547 ||
1434 hw->mac_type == e1000_82541_rev_2 || hw->mac_type == e1000_82547_rev_2)
1435 hw->phy_reset_disable = false;
1437 return E1000_SUCCESS;
1441 /********************************************************************
1442 * Copper link setup for e1000_phy_igp series.
1444 * hw - Struct containing variables accessed by shared code
1445 *********************************************************************/
1446 static s32 e1000_copper_link_igp_setup(struct e1000_hw *hw)
1452 DEBUGFUNC("e1000_copper_link_igp_setup");
1454 if (hw->phy_reset_disable)
1455 return E1000_SUCCESS;
1457 ret_val = e1000_phy_reset(hw);
1459 DEBUGOUT("Error Resetting the PHY\n");
1463 /* Wait 15ms for MAC to configure PHY from eeprom settings */
1465 if (hw->mac_type != e1000_ich8lan) {
1466 /* Configure activity LED after PHY reset */
1467 led_ctrl = er32(LEDCTL);
1468 led_ctrl &= IGP_ACTIVITY_LED_MASK;
1469 led_ctrl |= (IGP_ACTIVITY_LED_ENABLE | IGP_LED3_MODE);
1470 ew32(LEDCTL, led_ctrl);
1473 /* The NVM settings will configure LPLU in D3 for IGP2 and IGP3 PHYs */
1474 if (hw->phy_type == e1000_phy_igp) {
1475 /* disable lplu d3 during driver init */
1476 ret_val = e1000_set_d3_lplu_state(hw, false);
1478 DEBUGOUT("Error Disabling LPLU D3\n");
1483 /* disable lplu d0 during driver init */
1484 ret_val = e1000_set_d0_lplu_state(hw, false);
1486 DEBUGOUT("Error Disabling LPLU D0\n");
1489 /* Configure mdi-mdix settings */
1490 ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CTRL, &phy_data);
1494 if ((hw->mac_type == e1000_82541) || (hw->mac_type == e1000_82547)) {
1495 hw->dsp_config_state = e1000_dsp_config_disabled;
1496 /* Force MDI for earlier revs of the IGP PHY */
1497 phy_data &= ~(IGP01E1000_PSCR_AUTO_MDIX | IGP01E1000_PSCR_FORCE_MDI_MDIX);
1501 hw->dsp_config_state = e1000_dsp_config_enabled;
1502 phy_data &= ~IGP01E1000_PSCR_AUTO_MDIX;
1506 phy_data &= ~IGP01E1000_PSCR_FORCE_MDI_MDIX;
1509 phy_data |= IGP01E1000_PSCR_FORCE_MDI_MDIX;
1513 phy_data |= IGP01E1000_PSCR_AUTO_MDIX;
1517 ret_val = e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CTRL, phy_data);
1521 /* set auto-master slave resolution settings */
1523 e1000_ms_type phy_ms_setting = hw->master_slave;
1525 if (hw->ffe_config_state == e1000_ffe_config_active)
1526 hw->ffe_config_state = e1000_ffe_config_enabled;
1528 if (hw->dsp_config_state == e1000_dsp_config_activated)
1529 hw->dsp_config_state = e1000_dsp_config_enabled;
1531 /* when autonegotiation advertisment is only 1000Mbps then we
1532 * should disable SmartSpeed and enable Auto MasterSlave
1533 * resolution as hardware default. */
1534 if (hw->autoneg_advertised == ADVERTISE_1000_FULL) {
1535 /* Disable SmartSpeed */
1536 ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
1540 phy_data &= ~IGP01E1000_PSCFR_SMART_SPEED;
1541 ret_val = e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
1545 /* Set auto Master/Slave resolution process */
1546 ret_val = e1000_read_phy_reg(hw, PHY_1000T_CTRL, &phy_data);
1549 phy_data &= ~CR_1000T_MS_ENABLE;
1550 ret_val = e1000_write_phy_reg(hw, PHY_1000T_CTRL, phy_data);
1555 ret_val = e1000_read_phy_reg(hw, PHY_1000T_CTRL, &phy_data);
1559 /* load defaults for future use */
1560 hw->original_master_slave = (phy_data & CR_1000T_MS_ENABLE) ?
1561 ((phy_data & CR_1000T_MS_VALUE) ?
1562 e1000_ms_force_master :
1563 e1000_ms_force_slave) :
1566 switch (phy_ms_setting) {
1567 case e1000_ms_force_master:
1568 phy_data |= (CR_1000T_MS_ENABLE | CR_1000T_MS_VALUE);
1570 case e1000_ms_force_slave:
1571 phy_data |= CR_1000T_MS_ENABLE;
1572 phy_data &= ~(CR_1000T_MS_VALUE);
1575 phy_data &= ~CR_1000T_MS_ENABLE;
1579 ret_val = e1000_write_phy_reg(hw, PHY_1000T_CTRL, phy_data);
1584 return E1000_SUCCESS;
1587 /********************************************************************
1588 * Copper link setup for e1000_phy_gg82563 series.
1590 * hw - Struct containing variables accessed by shared code
1591 *********************************************************************/
1592 static s32 e1000_copper_link_ggp_setup(struct e1000_hw *hw)
1598 DEBUGFUNC("e1000_copper_link_ggp_setup");
1600 if (!hw->phy_reset_disable) {
1602 /* Enable CRS on TX for half-duplex operation. */
1603 ret_val = e1000_read_phy_reg(hw, GG82563_PHY_MAC_SPEC_CTRL,
1608 phy_data |= GG82563_MSCR_ASSERT_CRS_ON_TX;
1609 /* Use 25MHz for both link down and 1000BASE-T for Tx clock */
1610 phy_data |= GG82563_MSCR_TX_CLK_1000MBPS_25MHZ;
1612 ret_val = e1000_write_phy_reg(hw, GG82563_PHY_MAC_SPEC_CTRL,
1618 * MDI/MDI-X = 0 (default)
1619 * 0 - Auto for all speeds
1622 * 3 - Auto for 1000Base-T only (MDI-X for 10/100Base-T modes)
1624 ret_val = e1000_read_phy_reg(hw, GG82563_PHY_SPEC_CTRL, &phy_data);
1628 phy_data &= ~GG82563_PSCR_CROSSOVER_MODE_MASK;
1632 phy_data |= GG82563_PSCR_CROSSOVER_MODE_MDI;
1635 phy_data |= GG82563_PSCR_CROSSOVER_MODE_MDIX;
1639 phy_data |= GG82563_PSCR_CROSSOVER_MODE_AUTO;
1644 * disable_polarity_correction = 0 (default)
1645 * Automatic Correction for Reversed Cable Polarity
1649 phy_data &= ~GG82563_PSCR_POLARITY_REVERSAL_DISABLE;
1650 if (hw->disable_polarity_correction == 1)
1651 phy_data |= GG82563_PSCR_POLARITY_REVERSAL_DISABLE;
1652 ret_val = e1000_write_phy_reg(hw, GG82563_PHY_SPEC_CTRL, phy_data);
1657 /* SW Reset the PHY so all changes take effect */
1658 ret_val = e1000_phy_reset(hw);
1660 DEBUGOUT("Error Resetting the PHY\n");
1663 } /* phy_reset_disable */
1665 if (hw->mac_type == e1000_80003es2lan) {
1666 /* Bypass RX and TX FIFO's */
1667 ret_val = e1000_write_kmrn_reg(hw, E1000_KUMCTRLSTA_OFFSET_FIFO_CTRL,
1668 E1000_KUMCTRLSTA_FIFO_CTRL_RX_BYPASS |
1669 E1000_KUMCTRLSTA_FIFO_CTRL_TX_BYPASS);
1673 ret_val = e1000_read_phy_reg(hw, GG82563_PHY_SPEC_CTRL_2, &phy_data);
1677 phy_data &= ~GG82563_PSCR2_REVERSE_AUTO_NEG;
1678 ret_val = e1000_write_phy_reg(hw, GG82563_PHY_SPEC_CTRL_2, phy_data);
1683 reg_data = er32(CTRL_EXT);
1684 reg_data &= ~(E1000_CTRL_EXT_LINK_MODE_MASK);
1685 ew32(CTRL_EXT, reg_data);
1687 ret_val = e1000_read_phy_reg(hw, GG82563_PHY_PWR_MGMT_CTRL,
1692 /* Do not init these registers when the HW is in IAMT mode, since the
1693 * firmware will have already initialized them. We only initialize
1694 * them if the HW is not in IAMT mode.
1696 if (!e1000_check_mng_mode(hw)) {
1697 /* Enable Electrical Idle on the PHY */
1698 phy_data |= GG82563_PMCR_ENABLE_ELECTRICAL_IDLE;
1699 ret_val = e1000_write_phy_reg(hw, GG82563_PHY_PWR_MGMT_CTRL,
1704 ret_val = e1000_read_phy_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
1709 phy_data &= ~GG82563_KMCR_PASS_FALSE_CARRIER;
1710 ret_val = e1000_write_phy_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
1717 /* Workaround: Disable padding in Kumeran interface in the MAC
1718 * and in the PHY to avoid CRC errors.
1720 ret_val = e1000_read_phy_reg(hw, GG82563_PHY_INBAND_CTRL,
1724 phy_data |= GG82563_ICR_DIS_PADDING;
1725 ret_val = e1000_write_phy_reg(hw, GG82563_PHY_INBAND_CTRL,
1731 return E1000_SUCCESS;
1734 /********************************************************************
1735 * Copper link setup for e1000_phy_m88 series.
1737 * hw - Struct containing variables accessed by shared code
1738 *********************************************************************/
1739 static s32 e1000_copper_link_mgp_setup(struct e1000_hw *hw)
1744 DEBUGFUNC("e1000_copper_link_mgp_setup");
1746 if (hw->phy_reset_disable)
1747 return E1000_SUCCESS;
1749 /* Enable CRS on TX. This must be set for half-duplex operation. */
1750 ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
1754 phy_data |= M88E1000_PSCR_ASSERT_CRS_ON_TX;
1757 * MDI/MDI-X = 0 (default)
1758 * 0 - Auto for all speeds
1761 * 3 - Auto for 1000Base-T only (MDI-X for 10/100Base-T modes)
1763 phy_data &= ~M88E1000_PSCR_AUTO_X_MODE;
1767 phy_data |= M88E1000_PSCR_MDI_MANUAL_MODE;
1770 phy_data |= M88E1000_PSCR_MDIX_MANUAL_MODE;
1773 phy_data |= M88E1000_PSCR_AUTO_X_1000T;
1777 phy_data |= M88E1000_PSCR_AUTO_X_MODE;
1782 * disable_polarity_correction = 0 (default)
1783 * Automatic Correction for Reversed Cable Polarity
1787 phy_data &= ~M88E1000_PSCR_POLARITY_REVERSAL;
1788 if (hw->disable_polarity_correction == 1)
1789 phy_data |= M88E1000_PSCR_POLARITY_REVERSAL;
1790 ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
1794 if (hw->phy_revision < M88E1011_I_REV_4) {
1795 /* Force TX_CLK in the Extended PHY Specific Control Register
1798 ret_val = e1000_read_phy_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, &phy_data);
1802 phy_data |= M88E1000_EPSCR_TX_CLK_25;
1804 if ((hw->phy_revision == E1000_REVISION_2) &&
1805 (hw->phy_id == M88E1111_I_PHY_ID)) {
1806 /* Vidalia Phy, set the downshift counter to 5x */
1807 phy_data &= ~(M88EC018_EPSCR_DOWNSHIFT_COUNTER_MASK);
1808 phy_data |= M88EC018_EPSCR_DOWNSHIFT_COUNTER_5X;
1809 ret_val = e1000_write_phy_reg(hw,
1810 M88E1000_EXT_PHY_SPEC_CTRL, phy_data);
1814 /* Configure Master and Slave downshift values */
1815 phy_data &= ~(M88E1000_EPSCR_MASTER_DOWNSHIFT_MASK |
1816 M88E1000_EPSCR_SLAVE_DOWNSHIFT_MASK);
1817 phy_data |= (M88E1000_EPSCR_MASTER_DOWNSHIFT_1X |
1818 M88E1000_EPSCR_SLAVE_DOWNSHIFT_1X);
1819 ret_val = e1000_write_phy_reg(hw,
1820 M88E1000_EXT_PHY_SPEC_CTRL, phy_data);
1826 /* SW Reset the PHY so all changes take effect */
1827 ret_val = e1000_phy_reset(hw);
1829 DEBUGOUT("Error Resetting the PHY\n");
1833 return E1000_SUCCESS;
1836 /********************************************************************
1837 * Setup auto-negotiation and flow control advertisements,
1838 * and then perform auto-negotiation.
1840 * hw - Struct containing variables accessed by shared code
1841 *********************************************************************/
1842 static s32 e1000_copper_link_autoneg(struct e1000_hw *hw)
1847 DEBUGFUNC("e1000_copper_link_autoneg");
1849 /* Perform some bounds checking on the hw->autoneg_advertised
1850 * parameter. If this variable is zero, then set it to the default.
1852 hw->autoneg_advertised &= AUTONEG_ADVERTISE_SPEED_DEFAULT;
1854 /* If autoneg_advertised is zero, we assume it was not defaulted
1855 * by the calling code so we set to advertise full capability.
1857 if (hw->autoneg_advertised == 0)
1858 hw->autoneg_advertised = AUTONEG_ADVERTISE_SPEED_DEFAULT;
1860 /* IFE phy only supports 10/100 */
1861 if (hw->phy_type == e1000_phy_ife)
1862 hw->autoneg_advertised &= AUTONEG_ADVERTISE_10_100_ALL;
1864 DEBUGOUT("Reconfiguring auto-neg advertisement params\n");
1865 ret_val = e1000_phy_setup_autoneg(hw);
1867 DEBUGOUT("Error Setting up Auto-Negotiation\n");
1870 DEBUGOUT("Restarting Auto-Neg\n");
1872 /* Restart auto-negotiation by setting the Auto Neg Enable bit and
1873 * the Auto Neg Restart bit in the PHY control register.
1875 ret_val = e1000_read_phy_reg(hw, PHY_CTRL, &phy_data);
1879 phy_data |= (MII_CR_AUTO_NEG_EN | MII_CR_RESTART_AUTO_NEG);
1880 ret_val = e1000_write_phy_reg(hw, PHY_CTRL, phy_data);
1884 /* Does the user want to wait for Auto-Neg to complete here, or
1885 * check at a later time (for example, callback routine).
1887 if (hw->wait_autoneg_complete) {
1888 ret_val = e1000_wait_autoneg(hw);
1890 DEBUGOUT("Error while waiting for autoneg to complete\n");
1895 hw->get_link_status = true;
1897 return E1000_SUCCESS;
1900 /******************************************************************************
1901 * Config the MAC and the PHY after link is up.
1902 * 1) Set up the MAC to the current PHY speed/duplex
1903 * if we are on 82543. If we
1904 * are on newer silicon, we only need to configure
1905 * collision distance in the Transmit Control Register.
1906 * 2) Set up flow control on the MAC to that established with
1908 * 3) Config DSP to improve Gigabit link quality for some PHY revisions.
1910 * hw - Struct containing variables accessed by shared code
1911 ******************************************************************************/
1912 static s32 e1000_copper_link_postconfig(struct e1000_hw *hw)
1915 DEBUGFUNC("e1000_copper_link_postconfig");
1917 if (hw->mac_type >= e1000_82544) {
1918 e1000_config_collision_dist(hw);
1920 ret_val = e1000_config_mac_to_phy(hw);
1922 DEBUGOUT("Error configuring MAC to PHY settings\n");
1926 ret_val = e1000_config_fc_after_link_up(hw);
1928 DEBUGOUT("Error Configuring Flow Control\n");
1932 /* Config DSP to improve Giga link quality */
1933 if (hw->phy_type == e1000_phy_igp) {
1934 ret_val = e1000_config_dsp_after_link_change(hw, true);
1936 DEBUGOUT("Error Configuring DSP after link up\n");
1941 return E1000_SUCCESS;
1944 /******************************************************************************
1945 * Detects which PHY is present and setup the speed and duplex
1947 * hw - Struct containing variables accessed by shared code
1948 ******************************************************************************/
1949 static s32 e1000_setup_copper_link(struct e1000_hw *hw)
1956 DEBUGFUNC("e1000_setup_copper_link");
1958 switch (hw->mac_type) {
1959 case e1000_80003es2lan:
1961 /* Set the mac to wait the maximum time between each
1962 * iteration and increase the max iterations when
1963 * polling the phy; this fixes erroneous timeouts at 10Mbps. */
1964 ret_val = e1000_write_kmrn_reg(hw, GG82563_REG(0x34, 4), 0xFFFF);
1967 ret_val = e1000_read_kmrn_reg(hw, GG82563_REG(0x34, 9), ®_data);
1971 ret_val = e1000_write_kmrn_reg(hw, GG82563_REG(0x34, 9), reg_data);
1978 /* Check if it is a valid PHY and set PHY mode if necessary. */
1979 ret_val = e1000_copper_link_preconfig(hw);
1983 switch (hw->mac_type) {
1984 case e1000_80003es2lan:
1985 /* Kumeran registers are written-only */
1986 reg_data = E1000_KUMCTRLSTA_INB_CTRL_LINK_STATUS_TX_TIMEOUT_DEFAULT;
1987 reg_data |= E1000_KUMCTRLSTA_INB_CTRL_DIS_PADDING;
1988 ret_val = e1000_write_kmrn_reg(hw, E1000_KUMCTRLSTA_OFFSET_INB_CTRL,
1997 if (hw->phy_type == e1000_phy_igp ||
1998 hw->phy_type == e1000_phy_igp_3 ||
1999 hw->phy_type == e1000_phy_igp_2) {
2000 ret_val = e1000_copper_link_igp_setup(hw);
2003 } else if (hw->phy_type == e1000_phy_m88) {
2004 ret_val = e1000_copper_link_mgp_setup(hw);
2007 } else if (hw->phy_type == e1000_phy_gg82563) {
2008 ret_val = e1000_copper_link_ggp_setup(hw);
2014 /* Setup autoneg and flow control advertisement
2015 * and perform autonegotiation */
2016 ret_val = e1000_copper_link_autoneg(hw);
2020 /* PHY will be set to 10H, 10F, 100H,or 100F
2021 * depending on value from forced_speed_duplex. */
2022 DEBUGOUT("Forcing speed and duplex\n");
2023 ret_val = e1000_phy_force_speed_duplex(hw);
2025 DEBUGOUT("Error Forcing Speed and Duplex\n");
2030 /* Check link status. Wait up to 100 microseconds for link to become
2033 for (i = 0; i < 10; i++) {
2034 ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
2037 ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
2041 if (phy_data & MII_SR_LINK_STATUS) {
2042 /* Config the MAC and PHY after link is up */
2043 ret_val = e1000_copper_link_postconfig(hw);
2047 DEBUGOUT("Valid link established!!!\n");
2048 return E1000_SUCCESS;
2053 DEBUGOUT("Unable to establish link!!!\n");
2054 return E1000_SUCCESS;
2057 /******************************************************************************
2058 * Configure the MAC-to-PHY interface for 10/100Mbps
2060 * hw - Struct containing variables accessed by shared code
2061 ******************************************************************************/
2062 static s32 e1000_configure_kmrn_for_10_100(struct e1000_hw *hw, u16 duplex)
2064 s32 ret_val = E1000_SUCCESS;
2068 DEBUGFUNC("e1000_configure_kmrn_for_10_100");
2070 reg_data = E1000_KUMCTRLSTA_HD_CTRL_10_100_DEFAULT;
2071 ret_val = e1000_write_kmrn_reg(hw, E1000_KUMCTRLSTA_OFFSET_HD_CTRL,
2076 /* Configure Transmit Inter-Packet Gap */
2078 tipg &= ~E1000_TIPG_IPGT_MASK;
2079 tipg |= DEFAULT_80003ES2LAN_TIPG_IPGT_10_100;
2082 ret_val = e1000_read_phy_reg(hw, GG82563_PHY_KMRN_MODE_CTRL, ®_data);
2087 if (duplex == HALF_DUPLEX)
2088 reg_data |= GG82563_KMCR_PASS_FALSE_CARRIER;
2090 reg_data &= ~GG82563_KMCR_PASS_FALSE_CARRIER;
2092 ret_val = e1000_write_phy_reg(hw, GG82563_PHY_KMRN_MODE_CTRL, reg_data);
2097 static s32 e1000_configure_kmrn_for_1000(struct e1000_hw *hw)
2099 s32 ret_val = E1000_SUCCESS;
2103 DEBUGFUNC("e1000_configure_kmrn_for_1000");
2105 reg_data = E1000_KUMCTRLSTA_HD_CTRL_1000_DEFAULT;
2106 ret_val = e1000_write_kmrn_reg(hw, E1000_KUMCTRLSTA_OFFSET_HD_CTRL,
2111 /* Configure Transmit Inter-Packet Gap */
2113 tipg &= ~E1000_TIPG_IPGT_MASK;
2114 tipg |= DEFAULT_80003ES2LAN_TIPG_IPGT_1000;
2117 ret_val = e1000_read_phy_reg(hw, GG82563_PHY_KMRN_MODE_CTRL, ®_data);
2122 reg_data &= ~GG82563_KMCR_PASS_FALSE_CARRIER;
2123 ret_val = e1000_write_phy_reg(hw, GG82563_PHY_KMRN_MODE_CTRL, reg_data);
2128 /******************************************************************************
2129 * Configures PHY autoneg and flow control advertisement settings
2131 * hw - Struct containing variables accessed by shared code
2132 ******************************************************************************/
2133 s32 e1000_phy_setup_autoneg(struct e1000_hw *hw)
2136 u16 mii_autoneg_adv_reg;
2137 u16 mii_1000t_ctrl_reg;
2139 DEBUGFUNC("e1000_phy_setup_autoneg");
2141 /* Read the MII Auto-Neg Advertisement Register (Address 4). */
2142 ret_val = e1000_read_phy_reg(hw, PHY_AUTONEG_ADV, &mii_autoneg_adv_reg);
2146 if (hw->phy_type != e1000_phy_ife) {
2147 /* Read the MII 1000Base-T Control Register (Address 9). */
2148 ret_val = e1000_read_phy_reg(hw, PHY_1000T_CTRL, &mii_1000t_ctrl_reg);
2152 mii_1000t_ctrl_reg=0;
2154 /* Need to parse both autoneg_advertised and fc and set up
2155 * the appropriate PHY registers. First we will parse for
2156 * autoneg_advertised software override. Since we can advertise
2157 * a plethora of combinations, we need to check each bit
2161 /* First we clear all the 10/100 mb speed bits in the Auto-Neg
2162 * Advertisement Register (Address 4) and the 1000 mb speed bits in
2163 * the 1000Base-T Control Register (Address 9).
2165 mii_autoneg_adv_reg &= ~REG4_SPEED_MASK;
2166 mii_1000t_ctrl_reg &= ~REG9_SPEED_MASK;
2168 DEBUGOUT1("autoneg_advertised %x\n", hw->autoneg_advertised);
2170 /* Do we want to advertise 10 Mb Half Duplex? */
2171 if (hw->autoneg_advertised & ADVERTISE_10_HALF) {
2172 DEBUGOUT("Advertise 10mb Half duplex\n");
2173 mii_autoneg_adv_reg |= NWAY_AR_10T_HD_CAPS;
2176 /* Do we want to advertise 10 Mb Full Duplex? */
2177 if (hw->autoneg_advertised & ADVERTISE_10_FULL) {
2178 DEBUGOUT("Advertise 10mb Full duplex\n");
2179 mii_autoneg_adv_reg |= NWAY_AR_10T_FD_CAPS;
2182 /* Do we want to advertise 100 Mb Half Duplex? */
2183 if (hw->autoneg_advertised & ADVERTISE_100_HALF) {
2184 DEBUGOUT("Advertise 100mb Half duplex\n");
2185 mii_autoneg_adv_reg |= NWAY_AR_100TX_HD_CAPS;
2188 /* Do we want to advertise 100 Mb Full Duplex? */
2189 if (hw->autoneg_advertised & ADVERTISE_100_FULL) {
2190 DEBUGOUT("Advertise 100mb Full duplex\n");
2191 mii_autoneg_adv_reg |= NWAY_AR_100TX_FD_CAPS;
2194 /* We do not allow the Phy to advertise 1000 Mb Half Duplex */
2195 if (hw->autoneg_advertised & ADVERTISE_1000_HALF) {
2196 DEBUGOUT("Advertise 1000mb Half duplex requested, request denied!\n");
2199 /* Do we want to advertise 1000 Mb Full Duplex? */
2200 if (hw->autoneg_advertised & ADVERTISE_1000_FULL) {
2201 DEBUGOUT("Advertise 1000mb Full duplex\n");
2202 mii_1000t_ctrl_reg |= CR_1000T_FD_CAPS;
2203 if (hw->phy_type == e1000_phy_ife) {
2204 DEBUGOUT("e1000_phy_ife is a 10/100 PHY. Gigabit speed is not supported.\n");
2208 /* Check for a software override of the flow control settings, and
2209 * setup the PHY advertisement registers accordingly. If
2210 * auto-negotiation is enabled, then software will have to set the
2211 * "PAUSE" bits to the correct value in the Auto-Negotiation
2212 * Advertisement Register (PHY_AUTONEG_ADV) and re-start auto-negotiation.
2214 * The possible values of the "fc" parameter are:
2215 * 0: Flow control is completely disabled
2216 * 1: Rx flow control is enabled (we can receive pause frames
2217 * but not send pause frames).
2218 * 2: Tx flow control is enabled (we can send pause frames
2219 * but we do not support receiving pause frames).
2220 * 3: Both Rx and TX flow control (symmetric) are enabled.
2221 * other: No software override. The flow control configuration
2222 * in the EEPROM is used.
2225 case E1000_FC_NONE: /* 0 */
2226 /* Flow control (RX & TX) is completely disabled by a
2227 * software over-ride.
2229 mii_autoneg_adv_reg &= ~(NWAY_AR_ASM_DIR | NWAY_AR_PAUSE);
2231 case E1000_FC_RX_PAUSE: /* 1 */
2232 /* RX Flow control is enabled, and TX Flow control is
2233 * disabled, by a software over-ride.
2235 /* Since there really isn't a way to advertise that we are
2236 * capable of RX Pause ONLY, we will advertise that we
2237 * support both symmetric and asymmetric RX PAUSE. Later
2238 * (in e1000_config_fc_after_link_up) we will disable the
2239 *hw's ability to send PAUSE frames.
2241 mii_autoneg_adv_reg |= (NWAY_AR_ASM_DIR | NWAY_AR_PAUSE);
2243 case E1000_FC_TX_PAUSE: /* 2 */
2244 /* TX Flow control is enabled, and RX Flow control is
2245 * disabled, by a software over-ride.
2247 mii_autoneg_adv_reg |= NWAY_AR_ASM_DIR;
2248 mii_autoneg_adv_reg &= ~NWAY_AR_PAUSE;
2250 case E1000_FC_FULL: /* 3 */
2251 /* Flow control (both RX and TX) is enabled by a software
2254 mii_autoneg_adv_reg |= (NWAY_AR_ASM_DIR | NWAY_AR_PAUSE);
2257 DEBUGOUT("Flow control param set incorrectly\n");
2258 return -E1000_ERR_CONFIG;
2261 ret_val = e1000_write_phy_reg(hw, PHY_AUTONEG_ADV, mii_autoneg_adv_reg);
2265 DEBUGOUT1("Auto-Neg Advertising %x\n", mii_autoneg_adv_reg);
2267 if (hw->phy_type != e1000_phy_ife) {
2268 ret_val = e1000_write_phy_reg(hw, PHY_1000T_CTRL, mii_1000t_ctrl_reg);
2273 return E1000_SUCCESS;
2276 /******************************************************************************
2277 * Force PHY speed and duplex settings to hw->forced_speed_duplex
2279 * hw - Struct containing variables accessed by shared code
2280 ******************************************************************************/
2281 static s32 e1000_phy_force_speed_duplex(struct e1000_hw *hw)
2290 DEBUGFUNC("e1000_phy_force_speed_duplex");
2292 /* Turn off Flow control if we are forcing speed and duplex. */
2293 hw->fc = E1000_FC_NONE;
2295 DEBUGOUT1("hw->fc = %d\n", hw->fc);
2297 /* Read the Device Control Register. */
2300 /* Set the bits to Force Speed and Duplex in the Device Ctrl Reg. */
2301 ctrl |= (E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
2302 ctrl &= ~(DEVICE_SPEED_MASK);
2304 /* Clear the Auto Speed Detect Enable bit. */
2305 ctrl &= ~E1000_CTRL_ASDE;
2307 /* Read the MII Control Register. */
2308 ret_val = e1000_read_phy_reg(hw, PHY_CTRL, &mii_ctrl_reg);
2312 /* We need to disable autoneg in order to force link and duplex. */
2314 mii_ctrl_reg &= ~MII_CR_AUTO_NEG_EN;
2316 /* Are we forcing Full or Half Duplex? */
2317 if (hw->forced_speed_duplex == e1000_100_full ||
2318 hw->forced_speed_duplex == e1000_10_full) {
2319 /* We want to force full duplex so we SET the full duplex bits in the
2320 * Device and MII Control Registers.
2322 ctrl |= E1000_CTRL_FD;
2323 mii_ctrl_reg |= MII_CR_FULL_DUPLEX;
2324 DEBUGOUT("Full Duplex\n");
2326 /* We want to force half duplex so we CLEAR the full duplex bits in
2327 * the Device and MII Control Registers.
2329 ctrl &= ~E1000_CTRL_FD;
2330 mii_ctrl_reg &= ~MII_CR_FULL_DUPLEX;
2331 DEBUGOUT("Half Duplex\n");
2334 /* Are we forcing 100Mbps??? */
2335 if (hw->forced_speed_duplex == e1000_100_full ||
2336 hw->forced_speed_duplex == e1000_100_half) {
2337 /* Set the 100Mb bit and turn off the 1000Mb and 10Mb bits. */
2338 ctrl |= E1000_CTRL_SPD_100;
2339 mii_ctrl_reg |= MII_CR_SPEED_100;
2340 mii_ctrl_reg &= ~(MII_CR_SPEED_1000 | MII_CR_SPEED_10);
2341 DEBUGOUT("Forcing 100mb ");
2343 /* Set the 10Mb bit and turn off the 1000Mb and 100Mb bits. */
2344 ctrl &= ~(E1000_CTRL_SPD_1000 | E1000_CTRL_SPD_100);
2345 mii_ctrl_reg |= MII_CR_SPEED_10;
2346 mii_ctrl_reg &= ~(MII_CR_SPEED_1000 | MII_CR_SPEED_100);
2347 DEBUGOUT("Forcing 10mb ");
2350 e1000_config_collision_dist(hw);
2352 /* Write the configured values back to the Device Control Reg. */
2355 if ((hw->phy_type == e1000_phy_m88) ||
2356 (hw->phy_type == e1000_phy_gg82563)) {
2357 ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
2361 /* Clear Auto-Crossover to force MDI manually. M88E1000 requires MDI
2362 * forced whenever speed are duplex are forced.
2364 phy_data &= ~M88E1000_PSCR_AUTO_X_MODE;
2365 ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
2369 DEBUGOUT1("M88E1000 PSCR: %x \n", phy_data);
2371 /* Need to reset the PHY or these changes will be ignored */
2372 mii_ctrl_reg |= MII_CR_RESET;
2374 /* Disable MDI-X support for 10/100 */
2375 } else if (hw->phy_type == e1000_phy_ife) {
2376 ret_val = e1000_read_phy_reg(hw, IFE_PHY_MDIX_CONTROL, &phy_data);
2380 phy_data &= ~IFE_PMC_AUTO_MDIX;
2381 phy_data &= ~IFE_PMC_FORCE_MDIX;
2383 ret_val = e1000_write_phy_reg(hw, IFE_PHY_MDIX_CONTROL, phy_data);
2388 /* Clear Auto-Crossover to force MDI manually. IGP requires MDI
2389 * forced whenever speed or duplex are forced.
2391 ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CTRL, &phy_data);
2395 phy_data &= ~IGP01E1000_PSCR_AUTO_MDIX;
2396 phy_data &= ~IGP01E1000_PSCR_FORCE_MDI_MDIX;
2398 ret_val = e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CTRL, phy_data);
2403 /* Write back the modified PHY MII control register. */
2404 ret_val = e1000_write_phy_reg(hw, PHY_CTRL, mii_ctrl_reg);
2410 /* The wait_autoneg_complete flag may be a little misleading here.
2411 * Since we are forcing speed and duplex, Auto-Neg is not enabled.
2412 * But we do want to delay for a period while forcing only so we
2413 * don't generate false No Link messages. So we will wait here
2414 * only if the user has set wait_autoneg_complete to 1, which is
2417 if (hw->wait_autoneg_complete) {
2418 /* We will wait for autoneg to complete. */
2419 DEBUGOUT("Waiting for forced speed/duplex link.\n");
2422 /* We will wait for autoneg to complete or 4.5 seconds to expire. */
2423 for (i = PHY_FORCE_TIME; i > 0; i--) {
2424 /* Read the MII Status Register and wait for Auto-Neg Complete bit
2427 ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
2431 ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
2435 if (mii_status_reg & MII_SR_LINK_STATUS) break;
2439 ((hw->phy_type == e1000_phy_m88) ||
2440 (hw->phy_type == e1000_phy_gg82563))) {
2441 /* We didn't get link. Reset the DSP and wait again for link. */
2442 ret_val = e1000_phy_reset_dsp(hw);
2444 DEBUGOUT("Error Resetting PHY DSP\n");
2448 /* This loop will early-out if the link condition has been met. */
2449 for (i = PHY_FORCE_TIME; i > 0; i--) {
2450 if (mii_status_reg & MII_SR_LINK_STATUS) break;
2452 /* Read the MII Status Register and wait for Auto-Neg Complete bit
2455 ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
2459 ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
2465 if (hw->phy_type == e1000_phy_m88) {
2466 /* Because we reset the PHY above, we need to re-force TX_CLK in the
2467 * Extended PHY Specific Control Register to 25MHz clock. This value
2468 * defaults back to a 2.5MHz clock when the PHY is reset.
2470 ret_val = e1000_read_phy_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, &phy_data);
2474 phy_data |= M88E1000_EPSCR_TX_CLK_25;
2475 ret_val = e1000_write_phy_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, phy_data);
2479 /* In addition, because of the s/w reset above, we need to enable CRS on
2480 * TX. This must be set for both full and half duplex operation.
2482 ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
2486 phy_data |= M88E1000_PSCR_ASSERT_CRS_ON_TX;
2487 ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
2491 if ((hw->mac_type == e1000_82544 || hw->mac_type == e1000_82543) &&
2492 (!hw->autoneg) && (hw->forced_speed_duplex == e1000_10_full ||
2493 hw->forced_speed_duplex == e1000_10_half)) {
2494 ret_val = e1000_polarity_reversal_workaround(hw);
2498 } else if (hw->phy_type == e1000_phy_gg82563) {
2499 /* The TX_CLK of the Extended PHY Specific Control Register defaults
2500 * to 2.5MHz on a reset. We need to re-force it back to 25MHz, if
2501 * we're not in a forced 10/duplex configuration. */
2502 ret_val = e1000_read_phy_reg(hw, GG82563_PHY_MAC_SPEC_CTRL, &phy_data);
2506 phy_data &= ~GG82563_MSCR_TX_CLK_MASK;
2507 if ((hw->forced_speed_duplex == e1000_10_full) ||
2508 (hw->forced_speed_duplex == e1000_10_half))
2509 phy_data |= GG82563_MSCR_TX_CLK_10MBPS_2_5MHZ;
2511 phy_data |= GG82563_MSCR_TX_CLK_100MBPS_25MHZ;
2513 /* Also due to the reset, we need to enable CRS on Tx. */
2514 phy_data |= GG82563_MSCR_ASSERT_CRS_ON_TX;
2516 ret_val = e1000_write_phy_reg(hw, GG82563_PHY_MAC_SPEC_CTRL, phy_data);
2520 return E1000_SUCCESS;
2523 /******************************************************************************
2524 * Sets the collision distance in the Transmit Control register
2526 * hw - Struct containing variables accessed by shared code
2528 * Link should have been established previously. Reads the speed and duplex
2529 * information from the Device Status register.
2530 ******************************************************************************/
2531 void e1000_config_collision_dist(struct e1000_hw *hw)
2533 u32 tctl, coll_dist;
2535 DEBUGFUNC("e1000_config_collision_dist");
2537 if (hw->mac_type < e1000_82543)
2538 coll_dist = E1000_COLLISION_DISTANCE_82542;
2540 coll_dist = E1000_COLLISION_DISTANCE;
2544 tctl &= ~E1000_TCTL_COLD;
2545 tctl |= coll_dist << E1000_COLD_SHIFT;
2548 E1000_WRITE_FLUSH();
2551 /******************************************************************************
2552 * Sets MAC speed and duplex settings to reflect the those in the PHY
2554 * hw - Struct containing variables accessed by shared code
2555 * mii_reg - data to write to the MII control register
2557 * The contents of the PHY register containing the needed information need to
2559 ******************************************************************************/
2560 static s32 e1000_config_mac_to_phy(struct e1000_hw *hw)
2566 DEBUGFUNC("e1000_config_mac_to_phy");
2568 /* 82544 or newer MAC, Auto Speed Detection takes care of
2569 * MAC speed/duplex configuration.*/
2570 if (hw->mac_type >= e1000_82544)
2571 return E1000_SUCCESS;
2573 /* Read the Device Control Register and set the bits to Force Speed
2577 ctrl |= (E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
2578 ctrl &= ~(E1000_CTRL_SPD_SEL | E1000_CTRL_ILOS);
2580 /* Set up duplex in the Device Control and Transmit Control
2581 * registers depending on negotiated values.
2583 ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS, &phy_data);
2587 if (phy_data & M88E1000_PSSR_DPLX)
2588 ctrl |= E1000_CTRL_FD;
2590 ctrl &= ~E1000_CTRL_FD;
2592 e1000_config_collision_dist(hw);
2594 /* Set up speed in the Device Control register depending on
2595 * negotiated values.
2597 if ((phy_data & M88E1000_PSSR_SPEED) == M88E1000_PSSR_1000MBS)
2598 ctrl |= E1000_CTRL_SPD_1000;
2599 else if ((phy_data & M88E1000_PSSR_SPEED) == M88E1000_PSSR_100MBS)
2600 ctrl |= E1000_CTRL_SPD_100;
2602 /* Write the configured values back to the Device Control Reg. */
2604 return E1000_SUCCESS;
2607 /******************************************************************************
2608 * Forces the MAC's flow control settings.
2610 * hw - Struct containing variables accessed by shared code
2612 * Sets the TFCE and RFCE bits in the device control register to reflect
2613 * the adapter settings. TFCE and RFCE need to be explicitly set by
2614 * software when a Copper PHY is used because autonegotiation is managed
2615 * by the PHY rather than the MAC. Software must also configure these
2616 * bits when link is forced on a fiber connection.
2617 *****************************************************************************/
2618 s32 e1000_force_mac_fc(struct e1000_hw *hw)
2622 DEBUGFUNC("e1000_force_mac_fc");
2624 /* Get the current configuration of the Device Control Register */
2627 /* Because we didn't get link via the internal auto-negotiation
2628 * mechanism (we either forced link or we got link via PHY
2629 * auto-neg), we have to manually enable/disable transmit an
2630 * receive flow control.
2632 * The "Case" statement below enables/disable flow control
2633 * according to the "hw->fc" parameter.
2635 * The possible values of the "fc" parameter are:
2636 * 0: Flow control is completely disabled
2637 * 1: Rx flow control is enabled (we can receive pause
2638 * frames but not send pause frames).
2639 * 2: Tx flow control is enabled (we can send pause frames
2640 * frames but we do not receive pause frames).
2641 * 3: Both Rx and TX flow control (symmetric) is enabled.
2642 * other: No other values should be possible at this point.
2647 ctrl &= (~(E1000_CTRL_TFCE | E1000_CTRL_RFCE));
2649 case E1000_FC_RX_PAUSE:
2650 ctrl &= (~E1000_CTRL_TFCE);
2651 ctrl |= E1000_CTRL_RFCE;
2653 case E1000_FC_TX_PAUSE:
2654 ctrl &= (~E1000_CTRL_RFCE);
2655 ctrl |= E1000_CTRL_TFCE;
2658 ctrl |= (E1000_CTRL_TFCE | E1000_CTRL_RFCE);
2661 DEBUGOUT("Flow control param set incorrectly\n");
2662 return -E1000_ERR_CONFIG;
2665 /* Disable TX Flow Control for 82542 (rev 2.0) */
2666 if (hw->mac_type == e1000_82542_rev2_0)
2667 ctrl &= (~E1000_CTRL_TFCE);
2670 return E1000_SUCCESS;
2673 /******************************************************************************
2674 * Configures flow control settings after link is established
2676 * hw - Struct containing variables accessed by shared code
2678 * Should be called immediately after a valid link has been established.
2679 * Forces MAC flow control settings if link was forced. When in MII/GMII mode
2680 * and autonegotiation is enabled, the MAC flow control settings will be set
2681 * based on the flow control negotiated by the PHY. In TBI mode, the TFCE
2682 * and RFCE bits will be automaticaly set to the negotiated flow control mode.
2683 *****************************************************************************/
2684 static s32 e1000_config_fc_after_link_up(struct e1000_hw *hw)
2688 u16 mii_nway_adv_reg;
2689 u16 mii_nway_lp_ability_reg;
2693 DEBUGFUNC("e1000_config_fc_after_link_up");
2695 /* Check for the case where we have fiber media and auto-neg failed
2696 * so we had to force link. In this case, we need to force the
2697 * configuration of the MAC to match the "fc" parameter.
2699 if (((hw->media_type == e1000_media_type_fiber) && (hw->autoneg_failed)) ||
2700 ((hw->media_type == e1000_media_type_internal_serdes) &&
2701 (hw->autoneg_failed)) ||
2702 ((hw->media_type == e1000_media_type_copper) && (!hw->autoneg))) {
2703 ret_val = e1000_force_mac_fc(hw);
2705 DEBUGOUT("Error forcing flow control settings\n");
2710 /* Check for the case where we have copper media and auto-neg is
2711 * enabled. In this case, we need to check and see if Auto-Neg
2712 * has completed, and if so, how the PHY and link partner has
2713 * flow control configured.
2715 if ((hw->media_type == e1000_media_type_copper) && hw->autoneg) {
2716 /* Read the MII Status Register and check to see if AutoNeg
2717 * has completed. We read this twice because this reg has
2718 * some "sticky" (latched) bits.
2720 ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
2723 ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
2727 if (mii_status_reg & MII_SR_AUTONEG_COMPLETE) {
2728 /* The AutoNeg process has completed, so we now need to
2729 * read both the Auto Negotiation Advertisement Register
2730 * (Address 4) and the Auto_Negotiation Base Page Ability
2731 * Register (Address 5) to determine how flow control was
2734 ret_val = e1000_read_phy_reg(hw, PHY_AUTONEG_ADV,
2738 ret_val = e1000_read_phy_reg(hw, PHY_LP_ABILITY,
2739 &mii_nway_lp_ability_reg);
2743 /* Two bits in the Auto Negotiation Advertisement Register
2744 * (Address 4) and two bits in the Auto Negotiation Base
2745 * Page Ability Register (Address 5) determine flow control
2746 * for both the PHY and the link partner. The following
2747 * table, taken out of the IEEE 802.3ab/D6.0 dated March 25,
2748 * 1999, describes these PAUSE resolution bits and how flow
2749 * control is determined based upon these settings.
2750 * NOTE: DC = Don't Care
2752 * LOCAL DEVICE | LINK PARTNER
2753 * PAUSE | ASM_DIR | PAUSE | ASM_DIR | NIC Resolution
2754 *-------|---------|-------|---------|--------------------
2755 * 0 | 0 | DC | DC | E1000_FC_NONE
2756 * 0 | 1 | 0 | DC | E1000_FC_NONE
2757 * 0 | 1 | 1 | 0 | E1000_FC_NONE
2758 * 0 | 1 | 1 | 1 | E1000_FC_TX_PAUSE
2759 * 1 | 0 | 0 | DC | E1000_FC_NONE
2760 * 1 | DC | 1 | DC | E1000_FC_FULL
2761 * 1 | 1 | 0 | 0 | E1000_FC_NONE
2762 * 1 | 1 | 0 | 1 | E1000_FC_RX_PAUSE
2765 /* Are both PAUSE bits set to 1? If so, this implies
2766 * Symmetric Flow Control is enabled at both ends. The
2767 * ASM_DIR bits are irrelevant per the spec.
2769 * For Symmetric Flow Control:
2771 * LOCAL DEVICE | LINK PARTNER
2772 * PAUSE | ASM_DIR | PAUSE | ASM_DIR | Result
2773 *-------|---------|-------|---------|--------------------
2774 * 1 | DC | 1 | DC | E1000_FC_FULL
2777 if ((mii_nway_adv_reg & NWAY_AR_PAUSE) &&
2778 (mii_nway_lp_ability_reg & NWAY_LPAR_PAUSE)) {
2779 /* Now we need to check if the user selected RX ONLY
2780 * of pause frames. In this case, we had to advertise
2781 * FULL flow control because we could not advertise RX
2782 * ONLY. Hence, we must now check to see if we need to
2783 * turn OFF the TRANSMISSION of PAUSE frames.
2785 if (hw->original_fc == E1000_FC_FULL) {
2786 hw->fc = E1000_FC_FULL;
2787 DEBUGOUT("Flow Control = FULL.\n");
2789 hw->fc = E1000_FC_RX_PAUSE;
2790 DEBUGOUT("Flow Control = RX PAUSE frames only.\n");
2793 /* For receiving PAUSE frames ONLY.
2795 * LOCAL DEVICE | LINK PARTNER
2796 * PAUSE | ASM_DIR | PAUSE | ASM_DIR | Result
2797 *-------|---------|-------|---------|--------------------
2798 * 0 | 1 | 1 | 1 | E1000_FC_TX_PAUSE
2801 else if (!(mii_nway_adv_reg & NWAY_AR_PAUSE) &&
2802 (mii_nway_adv_reg & NWAY_AR_ASM_DIR) &&
2803 (mii_nway_lp_ability_reg & NWAY_LPAR_PAUSE) &&
2804 (mii_nway_lp_ability_reg & NWAY_LPAR_ASM_DIR)) {
2805 hw->fc = E1000_FC_TX_PAUSE;
2806 DEBUGOUT("Flow Control = TX PAUSE frames only.\n");
2808 /* For transmitting PAUSE frames ONLY.
2810 * LOCAL DEVICE | LINK PARTNER
2811 * PAUSE | ASM_DIR | PAUSE | ASM_DIR | Result
2812 *-------|---------|-------|---------|--------------------
2813 * 1 | 1 | 0 | 1 | E1000_FC_RX_PAUSE
2816 else if ((mii_nway_adv_reg & NWAY_AR_PAUSE) &&
2817 (mii_nway_adv_reg & NWAY_AR_ASM_DIR) &&
2818 !(mii_nway_lp_ability_reg & NWAY_LPAR_PAUSE) &&
2819 (mii_nway_lp_ability_reg & NWAY_LPAR_ASM_DIR)) {
2820 hw->fc = E1000_FC_RX_PAUSE;
2821 DEBUGOUT("Flow Control = RX PAUSE frames only.\n");
2823 /* Per the IEEE spec, at this point flow control should be
2824 * disabled. However, we want to consider that we could
2825 * be connected to a legacy switch that doesn't advertise
2826 * desired flow control, but can be forced on the link
2827 * partner. So if we advertised no flow control, that is
2828 * what we will resolve to. If we advertised some kind of
2829 * receive capability (Rx Pause Only or Full Flow Control)
2830 * and the link partner advertised none, we will configure
2831 * ourselves to enable Rx Flow Control only. We can do
2832 * this safely for two reasons: If the link partner really
2833 * didn't want flow control enabled, and we enable Rx, no
2834 * harm done since we won't be receiving any PAUSE frames
2835 * anyway. If the intent on the link partner was to have
2836 * flow control enabled, then by us enabling RX only, we
2837 * can at least receive pause frames and process them.
2838 * This is a good idea because in most cases, since we are
2839 * predominantly a server NIC, more times than not we will
2840 * be asked to delay transmission of packets than asking
2841 * our link partner to pause transmission of frames.
2843 else if ((hw->original_fc == E1000_FC_NONE ||
2844 hw->original_fc == E1000_FC_TX_PAUSE) ||
2845 hw->fc_strict_ieee) {
2846 hw->fc = E1000_FC_NONE;
2847 DEBUGOUT("Flow Control = NONE.\n");
2849 hw->fc = E1000_FC_RX_PAUSE;
2850 DEBUGOUT("Flow Control = RX PAUSE frames only.\n");
2853 /* Now we need to do one last check... If we auto-
2854 * negotiated to HALF DUPLEX, flow control should not be
2855 * enabled per IEEE 802.3 spec.
2857 ret_val = e1000_get_speed_and_duplex(hw, &speed, &duplex);
2859 DEBUGOUT("Error getting link speed and duplex\n");
2863 if (duplex == HALF_DUPLEX)
2864 hw->fc = E1000_FC_NONE;
2866 /* Now we call a subroutine to actually force the MAC
2867 * controller to use the correct flow control settings.
2869 ret_val = e1000_force_mac_fc(hw);
2871 DEBUGOUT("Error forcing flow control settings\n");
2875 DEBUGOUT("Copper PHY and Auto Neg has not completed.\n");
2878 return E1000_SUCCESS;
2881 /******************************************************************************
2882 * Checks to see if the link status of the hardware has changed.
2884 * hw - Struct containing variables accessed by shared code
2886 * Called by any function that needs to check the link status of the adapter.
2887 *****************************************************************************/
2888 s32 e1000_check_for_link(struct e1000_hw *hw)
2899 DEBUGFUNC("e1000_check_for_link");
2902 status = er32(STATUS);
2904 /* On adapters with a MAC newer than 82544, SW Defineable pin 1 will be
2905 * set when the optics detect a signal. On older adapters, it will be
2906 * cleared when there is a signal. This applies to fiber media only.
2908 if ((hw->media_type == e1000_media_type_fiber) ||
2909 (hw->media_type == e1000_media_type_internal_serdes)) {
2912 if (hw->media_type == e1000_media_type_fiber) {
2913 signal = (hw->mac_type > e1000_82544) ? E1000_CTRL_SWDPIN1 : 0;
2914 if (status & E1000_STATUS_LU)
2915 hw->get_link_status = false;
2919 /* If we have a copper PHY then we only want to go out to the PHY
2920 * registers to see if Auto-Neg has completed and/or if our link
2921 * status has changed. The get_link_status flag will be set if we
2922 * receive a Link Status Change interrupt or we have Rx Sequence
2925 if ((hw->media_type == e1000_media_type_copper) && hw->get_link_status) {
2926 /* First we want to see if the MII Status Register reports
2927 * link. If so, then we want to get the current speed/duplex
2929 * Read the register twice since the link bit is sticky.
2931 ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
2934 ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
2938 if (phy_data & MII_SR_LINK_STATUS) {
2939 hw->get_link_status = false;
2940 /* Check if there was DownShift, must be checked immediately after
2942 e1000_check_downshift(hw);
2944 /* If we are on 82544 or 82543 silicon and speed/duplex
2945 * are forced to 10H or 10F, then we will implement the polarity
2946 * reversal workaround. We disable interrupts first, and upon
2947 * returning, place the devices interrupt state to its previous
2948 * value except for the link status change interrupt which will
2949 * happen due to the execution of this workaround.
2952 if ((hw->mac_type == e1000_82544 || hw->mac_type == e1000_82543) &&
2954 (hw->forced_speed_duplex == e1000_10_full ||
2955 hw->forced_speed_duplex == e1000_10_half)) {
2956 ew32(IMC, 0xffffffff);
2957 ret_val = e1000_polarity_reversal_workaround(hw);
2959 ew32(ICS, (icr & ~E1000_ICS_LSC));
2960 ew32(IMS, IMS_ENABLE_MASK);
2964 /* No link detected */
2965 e1000_config_dsp_after_link_change(hw, false);
2969 /* If we are forcing speed/duplex, then we simply return since
2970 * we have already determined whether we have link or not.
2972 if (!hw->autoneg) return -E1000_ERR_CONFIG;
2974 /* optimize the dsp settings for the igp phy */
2975 e1000_config_dsp_after_link_change(hw, true);
2977 /* We have a M88E1000 PHY and Auto-Neg is enabled. If we
2978 * have Si on board that is 82544 or newer, Auto
2979 * Speed Detection takes care of MAC speed/duplex
2980 * configuration. So we only need to configure Collision
2981 * Distance in the MAC. Otherwise, we need to force
2982 * speed/duplex on the MAC to the current PHY speed/duplex
2985 if (hw->mac_type >= e1000_82544)
2986 e1000_config_collision_dist(hw);
2988 ret_val = e1000_config_mac_to_phy(hw);
2990 DEBUGOUT("Error configuring MAC to PHY settings\n");
2995 /* Configure Flow Control now that Auto-Neg has completed. First, we
2996 * need to restore the desired flow control settings because we may
2997 * have had to re-autoneg with a different link partner.
2999 ret_val = e1000_config_fc_after_link_up(hw);
3001 DEBUGOUT("Error configuring flow control\n");
3005 /* At this point we know that we are on copper and we have
3006 * auto-negotiated link. These are conditions for checking the link
3007 * partner capability register. We use the link speed to determine if
3008 * TBI compatibility needs to be turned on or off. If the link is not
3009 * at gigabit speed, then TBI compatibility is not needed. If we are
3010 * at gigabit speed, we turn on TBI compatibility.
3012 if (hw->tbi_compatibility_en) {
3014 ret_val = e1000_get_speed_and_duplex(hw, &speed, &duplex);
3016 DEBUGOUT("Error getting link speed and duplex\n");
3019 if (speed != SPEED_1000) {
3020 /* If link speed is not set to gigabit speed, we do not need
3021 * to enable TBI compatibility.
3023 if (hw->tbi_compatibility_on) {
3024 /* If we previously were in the mode, turn it off. */
3026 rctl &= ~E1000_RCTL_SBP;
3028 hw->tbi_compatibility_on = false;
3031 /* If TBI compatibility is was previously off, turn it on. For
3032 * compatibility with a TBI link partner, we will store bad
3033 * packets. Some frames have an additional byte on the end and
3034 * will look like CRC errors to to the hardware.
3036 if (!hw->tbi_compatibility_on) {
3037 hw->tbi_compatibility_on = true;
3039 rctl |= E1000_RCTL_SBP;
3045 /* If we don't have link (auto-negotiation failed or link partner cannot
3046 * auto-negotiate), the cable is plugged in (we have signal), and our
3047 * link partner is not trying to auto-negotiate with us (we are receiving
3048 * idles or data), we need to force link up. We also need to give
3049 * auto-negotiation time to complete, in case the cable was just plugged
3050 * in. The autoneg_failed flag does this.
3052 else if ((((hw->media_type == e1000_media_type_fiber) &&
3053 ((ctrl & E1000_CTRL_SWDPIN1) == signal)) ||
3054 (hw->media_type == e1000_media_type_internal_serdes)) &&
3055 (!(status & E1000_STATUS_LU)) &&
3056 (!(rxcw & E1000_RXCW_C))) {
3057 if (hw->autoneg_failed == 0) {
3058 hw->autoneg_failed = 1;
3061 DEBUGOUT("NOT RXing /C/, disable AutoNeg and force link.\n");
3063 /* Disable auto-negotiation in the TXCW register */
3064 ew32(TXCW, (hw->txcw & ~E1000_TXCW_ANE));
3066 /* Force link-up and also force full-duplex. */
3068 ctrl |= (E1000_CTRL_SLU | E1000_CTRL_FD);
3071 /* Configure Flow Control after forcing link up. */
3072 ret_val = e1000_config_fc_after_link_up(hw);
3074 DEBUGOUT("Error configuring flow control\n");
3078 /* If we are forcing link and we are receiving /C/ ordered sets, re-enable
3079 * auto-negotiation in the TXCW register and disable forced link in the
3080 * Device Control register in an attempt to auto-negotiate with our link
3083 else if (((hw->media_type == e1000_media_type_fiber) ||
3084 (hw->media_type == e1000_media_type_internal_serdes)) &&
3085 (ctrl & E1000_CTRL_SLU) && (rxcw & E1000_RXCW_C)) {
3086 DEBUGOUT("RXing /C/, enable AutoNeg and stop forcing link.\n");
3087 ew32(TXCW, hw->txcw);
3088 ew32(CTRL, (ctrl & ~E1000_CTRL_SLU));
3090 hw->serdes_link_down = false;
3092 /* If we force link for non-auto-negotiation switch, check link status
3093 * based on MAC synchronization for internal serdes media type.
3095 else if ((hw->media_type == e1000_media_type_internal_serdes) &&
3096 !(E1000_TXCW_ANE & er32(TXCW))) {
3097 /* SYNCH bit and IV bit are sticky. */
3099 if (E1000_RXCW_SYNCH & er32(RXCW)) {
3100 if (!(rxcw & E1000_RXCW_IV)) {
3101 hw->serdes_link_down = false;
3102 DEBUGOUT("SERDES: Link is up.\n");
3105 hw->serdes_link_down = true;
3106 DEBUGOUT("SERDES: Link is down.\n");
3109 if ((hw->media_type == e1000_media_type_internal_serdes) &&
3110 (E1000_TXCW_ANE & er32(TXCW))) {
3111 hw->serdes_link_down = !(E1000_STATUS_LU & er32(STATUS));
3113 return E1000_SUCCESS;
3116 /******************************************************************************
3117 * Detects the current speed and duplex settings of the hardware.
3119 * hw - Struct containing variables accessed by shared code
3120 * speed - Speed of the connection
3121 * duplex - Duplex setting of the connection
3122 *****************************************************************************/
3123 s32 e1000_get_speed_and_duplex(struct e1000_hw *hw, u16 *speed, u16 *duplex)
3129 DEBUGFUNC("e1000_get_speed_and_duplex");
3131 if (hw->mac_type >= e1000_82543) {
3132 status = er32(STATUS);
3133 if (status & E1000_STATUS_SPEED_1000) {
3134 *speed = SPEED_1000;
3135 DEBUGOUT("1000 Mbs, ");
3136 } else if (status & E1000_STATUS_SPEED_100) {
3138 DEBUGOUT("100 Mbs, ");
3141 DEBUGOUT("10 Mbs, ");
3144 if (status & E1000_STATUS_FD) {
3145 *duplex = FULL_DUPLEX;
3146 DEBUGOUT("Full Duplex\n");
3148 *duplex = HALF_DUPLEX;
3149 DEBUGOUT(" Half Duplex\n");
3152 DEBUGOUT("1000 Mbs, Full Duplex\n");
3153 *speed = SPEED_1000;
3154 *duplex = FULL_DUPLEX;
3157 /* IGP01 PHY may advertise full duplex operation after speed downgrade even
3158 * if it is operating at half duplex. Here we set the duplex settings to
3159 * match the duplex in the link partner's capabilities.
3161 if (hw->phy_type == e1000_phy_igp && hw->speed_downgraded) {
3162 ret_val = e1000_read_phy_reg(hw, PHY_AUTONEG_EXP, &phy_data);
3166 if (!(phy_data & NWAY_ER_LP_NWAY_CAPS))
3167 *duplex = HALF_DUPLEX;
3169 ret_val = e1000_read_phy_reg(hw, PHY_LP_ABILITY, &phy_data);
3172 if ((*speed == SPEED_100 && !(phy_data & NWAY_LPAR_100TX_FD_CAPS)) ||
3173 (*speed == SPEED_10 && !(phy_data & NWAY_LPAR_10T_FD_CAPS)))
3174 *duplex = HALF_DUPLEX;
3178 if ((hw->mac_type == e1000_80003es2lan) &&
3179 (hw->media_type == e1000_media_type_copper)) {
3180 if (*speed == SPEED_1000)
3181 ret_val = e1000_configure_kmrn_for_1000(hw);
3183 ret_val = e1000_configure_kmrn_for_10_100(hw, *duplex);
3188 if ((hw->phy_type == e1000_phy_igp_3) && (*speed == SPEED_1000)) {
3189 ret_val = e1000_kumeran_lock_loss_workaround(hw);
3194 return E1000_SUCCESS;
3197 /******************************************************************************
3198 * Blocks until autoneg completes or times out (~4.5 seconds)
3200 * hw - Struct containing variables accessed by shared code
3201 ******************************************************************************/
3202 static s32 e1000_wait_autoneg(struct e1000_hw *hw)
3208 DEBUGFUNC("e1000_wait_autoneg");
3209 DEBUGOUT("Waiting for Auto-Neg to complete.\n");
3211 /* We will wait for autoneg to complete or 4.5 seconds to expire. */
3212 for (i = PHY_AUTO_NEG_TIME; i > 0; i--) {
3213 /* Read the MII Status Register and wait for Auto-Neg
3214 * Complete bit to be set.
3216 ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
3219 ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
3222 if (phy_data & MII_SR_AUTONEG_COMPLETE) {
3223 return E1000_SUCCESS;
3227 return E1000_SUCCESS;
3230 /******************************************************************************
3231 * Raises the Management Data Clock
3233 * hw - Struct containing variables accessed by shared code
3234 * ctrl - Device control register's current value
3235 ******************************************************************************/
3236 static void e1000_raise_mdi_clk(struct e1000_hw *hw, u32 *ctrl)
3238 /* Raise the clock input to the Management Data Clock (by setting the MDC
3239 * bit), and then delay 10 microseconds.
3241 ew32(CTRL, (*ctrl | E1000_CTRL_MDC));
3242 E1000_WRITE_FLUSH();
3246 /******************************************************************************
3247 * Lowers the Management Data Clock
3249 * hw - Struct containing variables accessed by shared code
3250 * ctrl - Device control register's current value
3251 ******************************************************************************/
3252 static void e1000_lower_mdi_clk(struct e1000_hw *hw, u32 *ctrl)
3254 /* Lower the clock input to the Management Data Clock (by clearing the MDC
3255 * bit), and then delay 10 microseconds.
3257 ew32(CTRL, (*ctrl & ~E1000_CTRL_MDC));
3258 E1000_WRITE_FLUSH();
3262 /******************************************************************************
3263 * Shifts data bits out to the PHY
3265 * hw - Struct containing variables accessed by shared code
3266 * data - Data to send out to the PHY
3267 * count - Number of bits to shift out
3269 * Bits are shifted out in MSB to LSB order.
3270 ******************************************************************************/
3271 static void e1000_shift_out_mdi_bits(struct e1000_hw *hw, u32 data, u16 count)
3276 /* We need to shift "count" number of bits out to the PHY. So, the value
3277 * in the "data" parameter will be shifted out to the PHY one bit at a
3278 * time. In order to do this, "data" must be broken down into bits.
3281 mask <<= (count - 1);
3285 /* Set MDIO_DIR and MDC_DIR direction bits to be used as output pins. */
3286 ctrl |= (E1000_CTRL_MDIO_DIR | E1000_CTRL_MDC_DIR);
3289 /* A "1" is shifted out to the PHY by setting the MDIO bit to "1" and
3290 * then raising and lowering the Management Data Clock. A "0" is
3291 * shifted out to the PHY by setting the MDIO bit to "0" and then
3292 * raising and lowering the clock.
3295 ctrl |= E1000_CTRL_MDIO;
3297 ctrl &= ~E1000_CTRL_MDIO;
3300 E1000_WRITE_FLUSH();
3304 e1000_raise_mdi_clk(hw, &ctrl);
3305 e1000_lower_mdi_clk(hw, &ctrl);
3311 /******************************************************************************
3312 * Shifts data bits in from the PHY
3314 * hw - Struct containing variables accessed by shared code
3316 * Bits are shifted in in MSB to LSB order.
3317 ******************************************************************************/
3318 static u16 e1000_shift_in_mdi_bits(struct e1000_hw *hw)
3324 /* In order to read a register from the PHY, we need to shift in a total
3325 * of 18 bits from the PHY. The first two bit (turnaround) times are used
3326 * to avoid contention on the MDIO pin when a read operation is performed.
3327 * These two bits are ignored by us and thrown away. Bits are "shifted in"
3328 * by raising the input to the Management Data Clock (setting the MDC bit),
3329 * and then reading the value of the MDIO bit.
3333 /* Clear MDIO_DIR (SWDPIO1) to indicate this bit is to be used as input. */
3334 ctrl &= ~E1000_CTRL_MDIO_DIR;
3335 ctrl &= ~E1000_CTRL_MDIO;
3338 E1000_WRITE_FLUSH();
3340 /* Raise and Lower the clock before reading in the data. This accounts for
3341 * the turnaround bits. The first clock occurred when we clocked out the
3342 * last bit of the Register Address.
3344 e1000_raise_mdi_clk(hw, &ctrl);
3345 e1000_lower_mdi_clk(hw, &ctrl);
3347 for (data = 0, i = 0; i < 16; i++) {
3349 e1000_raise_mdi_clk(hw, &ctrl);
3351 /* Check to see if we shifted in a "1". */
3352 if (ctrl & E1000_CTRL_MDIO)
3354 e1000_lower_mdi_clk(hw, &ctrl);
3357 e1000_raise_mdi_clk(hw, &ctrl);
3358 e1000_lower_mdi_clk(hw, &ctrl);
3363 static s32 e1000_swfw_sync_acquire(struct e1000_hw *hw, u16 mask)
3367 u32 fwmask = mask << 16;
3370 DEBUGFUNC("e1000_swfw_sync_acquire");
3372 if (hw->swfwhw_semaphore_present)
3373 return e1000_get_software_flag(hw);
3375 if (!hw->swfw_sync_present)
3376 return e1000_get_hw_eeprom_semaphore(hw);
3379 if (e1000_get_hw_eeprom_semaphore(hw))
3380 return -E1000_ERR_SWFW_SYNC;
3382 swfw_sync = er32(SW_FW_SYNC);
3383 if (!(swfw_sync & (fwmask | swmask))) {
3387 /* firmware currently using resource (fwmask) */
3388 /* or other software thread currently using resource (swmask) */
3389 e1000_put_hw_eeprom_semaphore(hw);
3395 DEBUGOUT("Driver can't access resource, SW_FW_SYNC timeout.\n");
3396 return -E1000_ERR_SWFW_SYNC;
3399 swfw_sync |= swmask;
3400 ew32(SW_FW_SYNC, swfw_sync);
3402 e1000_put_hw_eeprom_semaphore(hw);
3403 return E1000_SUCCESS;
3406 static void e1000_swfw_sync_release(struct e1000_hw *hw, u16 mask)
3411 DEBUGFUNC("e1000_swfw_sync_release");
3413 if (hw->swfwhw_semaphore_present) {
3414 e1000_release_software_flag(hw);
3418 if (!hw->swfw_sync_present) {
3419 e1000_put_hw_eeprom_semaphore(hw);
3423 /* if (e1000_get_hw_eeprom_semaphore(hw))
3424 * return -E1000_ERR_SWFW_SYNC; */
3425 while (e1000_get_hw_eeprom_semaphore(hw) != E1000_SUCCESS);
3428 swfw_sync = er32(SW_FW_SYNC);
3429 swfw_sync &= ~swmask;
3430 ew32(SW_FW_SYNC, swfw_sync);
3432 e1000_put_hw_eeprom_semaphore(hw);
3435 /*****************************************************************************
3436 * Reads the value from a PHY register, if the value is on a specific non zero
3437 * page, sets the page first.
3438 * hw - Struct containing variables accessed by shared code
3439 * reg_addr - address of the PHY register to read
3440 ******************************************************************************/
3441 s32 e1000_read_phy_reg(struct e1000_hw *hw, u32 reg_addr, u16 *phy_data)
3446 DEBUGFUNC("e1000_read_phy_reg");
3448 if ((hw->mac_type == e1000_80003es2lan) &&
3449 (er32(STATUS) & E1000_STATUS_FUNC_1)) {
3450 swfw = E1000_SWFW_PHY1_SM;
3452 swfw = E1000_SWFW_PHY0_SM;
3454 if (e1000_swfw_sync_acquire(hw, swfw))
3455 return -E1000_ERR_SWFW_SYNC;
3457 if ((hw->phy_type == e1000_phy_igp ||
3458 hw->phy_type == e1000_phy_igp_3 ||
3459 hw->phy_type == e1000_phy_igp_2) &&
3460 (reg_addr > MAX_PHY_MULTI_PAGE_REG)) {
3461 ret_val = e1000_write_phy_reg_ex(hw, IGP01E1000_PHY_PAGE_SELECT,
3464 e1000_swfw_sync_release(hw, swfw);
3467 } else if (hw->phy_type == e1000_phy_gg82563) {
3468 if (((reg_addr & MAX_PHY_REG_ADDRESS) > MAX_PHY_MULTI_PAGE_REG) ||
3469 (hw->mac_type == e1000_80003es2lan)) {
3470 /* Select Configuration Page */
3471 if ((reg_addr & MAX_PHY_REG_ADDRESS) < GG82563_MIN_ALT_REG) {
3472 ret_val = e1000_write_phy_reg_ex(hw, GG82563_PHY_PAGE_SELECT,
3473 (u16)((u16)reg_addr >> GG82563_PAGE_SHIFT));
3475 /* Use Alternative Page Select register to access
3476 * registers 30 and 31
3478 ret_val = e1000_write_phy_reg_ex(hw,
3479 GG82563_PHY_PAGE_SELECT_ALT,
3480 (u16)((u16)reg_addr >> GG82563_PAGE_SHIFT));
3484 e1000_swfw_sync_release(hw, swfw);
3490 ret_val = e1000_read_phy_reg_ex(hw, MAX_PHY_REG_ADDRESS & reg_addr,
3493 e1000_swfw_sync_release(hw, swfw);
3497 static s32 e1000_read_phy_reg_ex(struct e1000_hw *hw, u32 reg_addr,
3502 const u32 phy_addr = 1;
3504 DEBUGFUNC("e1000_read_phy_reg_ex");
3506 if (reg_addr > MAX_PHY_REG_ADDRESS) {
3507 DEBUGOUT1("PHY Address %d is out of range\n", reg_addr);
3508 return -E1000_ERR_PARAM;
3511 if (hw->mac_type > e1000_82543) {
3512 /* Set up Op-code, Phy Address, and register address in the MDI
3513 * Control register. The MAC will take care of interfacing with the
3514 * PHY to retrieve the desired data.
3516 mdic = ((reg_addr << E1000_MDIC_REG_SHIFT) |
3517 (phy_addr << E1000_MDIC_PHY_SHIFT) |
3518 (E1000_MDIC_OP_READ));
3522 /* Poll the ready bit to see if the MDI read completed */
3523 for (i = 0; i < 64; i++) {
3526 if (mdic & E1000_MDIC_READY) break;
3528 if (!(mdic & E1000_MDIC_READY)) {
3529 DEBUGOUT("MDI Read did not complete\n");
3530 return -E1000_ERR_PHY;
3532 if (mdic & E1000_MDIC_ERROR) {
3533 DEBUGOUT("MDI Error\n");
3534 return -E1000_ERR_PHY;
3536 *phy_data = (u16)mdic;
3538 /* We must first send a preamble through the MDIO pin to signal the
3539 * beginning of an MII instruction. This is done by sending 32
3540 * consecutive "1" bits.
3542 e1000_shift_out_mdi_bits(hw, PHY_PREAMBLE, PHY_PREAMBLE_SIZE);
3544 /* Now combine the next few fields that are required for a read
3545 * operation. We use this method instead of calling the
3546 * e1000_shift_out_mdi_bits routine five different times. The format of
3547 * a MII read instruction consists of a shift out of 14 bits and is
3548 * defined as follows:
3549 * <Preamble><SOF><Op Code><Phy Addr><Reg Addr>
3550 * followed by a shift in of 18 bits. This first two bits shifted in
3551 * are TurnAround bits used to avoid contention on the MDIO pin when a
3552 * READ operation is performed. These two bits are thrown away
3553 * followed by a shift in of 16 bits which contains the desired data.
3555 mdic = ((reg_addr) | (phy_addr << 5) |
3556 (PHY_OP_READ << 10) | (PHY_SOF << 12));
3558 e1000_shift_out_mdi_bits(hw, mdic, 14);
3560 /* Now that we've shifted out the read command to the MII, we need to
3561 * "shift in" the 16-bit value (18 total bits) of the requested PHY
3564 *phy_data = e1000_shift_in_mdi_bits(hw);
3566 return E1000_SUCCESS;
3569 /******************************************************************************
3570 * Writes a value to a PHY register
3572 * hw - Struct containing variables accessed by shared code
3573 * reg_addr - address of the PHY register to write
3574 * data - data to write to the PHY
3575 ******************************************************************************/
3576 s32 e1000_write_phy_reg(struct e1000_hw *hw, u32 reg_addr, u16 phy_data)
3581 DEBUGFUNC("e1000_write_phy_reg");
3583 if ((hw->mac_type == e1000_80003es2lan) &&
3584 (er32(STATUS) & E1000_STATUS_FUNC_1)) {
3585 swfw = E1000_SWFW_PHY1_SM;
3587 swfw = E1000_SWFW_PHY0_SM;
3589 if (e1000_swfw_sync_acquire(hw, swfw))
3590 return -E1000_ERR_SWFW_SYNC;
3592 if ((hw->phy_type == e1000_phy_igp ||
3593 hw->phy_type == e1000_phy_igp_3 ||
3594 hw->phy_type == e1000_phy_igp_2) &&
3595 (reg_addr > MAX_PHY_MULTI_PAGE_REG)) {
3596 ret_val = e1000_write_phy_reg_ex(hw, IGP01E1000_PHY_PAGE_SELECT,
3599 e1000_swfw_sync_release(hw, swfw);
3602 } else if (hw->phy_type == e1000_phy_gg82563) {
3603 if (((reg_addr & MAX_PHY_REG_ADDRESS) > MAX_PHY_MULTI_PAGE_REG) ||
3604 (hw->mac_type == e1000_80003es2lan)) {
3605 /* Select Configuration Page */
3606 if ((reg_addr & MAX_PHY_REG_ADDRESS) < GG82563_MIN_ALT_REG) {
3607 ret_val = e1000_write_phy_reg_ex(hw, GG82563_PHY_PAGE_SELECT,
3608 (u16)((u16)reg_addr >> GG82563_PAGE_SHIFT));
3610 /* Use Alternative Page Select register to access
3611 * registers 30 and 31
3613 ret_val = e1000_write_phy_reg_ex(hw,
3614 GG82563_PHY_PAGE_SELECT_ALT,
3615 (u16)((u16)reg_addr >> GG82563_PAGE_SHIFT));
3619 e1000_swfw_sync_release(hw, swfw);
3625 ret_val = e1000_write_phy_reg_ex(hw, MAX_PHY_REG_ADDRESS & reg_addr,
3628 e1000_swfw_sync_release(hw, swfw);
3632 static s32 e1000_write_phy_reg_ex(struct e1000_hw *hw, u32 reg_addr,
3637 const u32 phy_addr = 1;
3639 DEBUGFUNC("e1000_write_phy_reg_ex");
3641 if (reg_addr > MAX_PHY_REG_ADDRESS) {
3642 DEBUGOUT1("PHY Address %d is out of range\n", reg_addr);
3643 return -E1000_ERR_PARAM;
3646 if (hw->mac_type > e1000_82543) {
3647 /* Set up Op-code, Phy Address, register address, and data intended
3648 * for the PHY register in the MDI Control register. The MAC will take
3649 * care of interfacing with the PHY to send the desired data.
3651 mdic = (((u32)phy_data) |
3652 (reg_addr << E1000_MDIC_REG_SHIFT) |
3653 (phy_addr << E1000_MDIC_PHY_SHIFT) |
3654 (E1000_MDIC_OP_WRITE));
3658 /* Poll the ready bit to see if the MDI read completed */
3659 for (i = 0; i < 641; i++) {
3662 if (mdic & E1000_MDIC_READY) break;
3664 if (!(mdic & E1000_MDIC_READY)) {
3665 DEBUGOUT("MDI Write did not complete\n");
3666 return -E1000_ERR_PHY;
3669 /* We'll need to use the SW defined pins to shift the write command
3670 * out to the PHY. We first send a preamble to the PHY to signal the
3671 * beginning of the MII instruction. This is done by sending 32
3672 * consecutive "1" bits.
3674 e1000_shift_out_mdi_bits(hw, PHY_PREAMBLE, PHY_PREAMBLE_SIZE);
3676 /* Now combine the remaining required fields that will indicate a
3677 * write operation. We use this method instead of calling the
3678 * e1000_shift_out_mdi_bits routine for each field in the command. The
3679 * format of a MII write instruction is as follows:
3680 * <Preamble><SOF><Op Code><Phy Addr><Reg Addr><Turnaround><Data>.
3682 mdic = ((PHY_TURNAROUND) | (reg_addr << 2) | (phy_addr << 7) |
3683 (PHY_OP_WRITE << 12) | (PHY_SOF << 14));
3685 mdic |= (u32)phy_data;
3687 e1000_shift_out_mdi_bits(hw, mdic, 32);
3690 return E1000_SUCCESS;
3693 static s32 e1000_read_kmrn_reg(struct e1000_hw *hw, u32 reg_addr, u16 *data)
3697 DEBUGFUNC("e1000_read_kmrn_reg");
3699 if ((hw->mac_type == e1000_80003es2lan) &&
3700 (er32(STATUS) & E1000_STATUS_FUNC_1)) {
3701 swfw = E1000_SWFW_PHY1_SM;
3703 swfw = E1000_SWFW_PHY0_SM;
3705 if (e1000_swfw_sync_acquire(hw, swfw))
3706 return -E1000_ERR_SWFW_SYNC;
3708 /* Write register address */
3709 reg_val = ((reg_addr << E1000_KUMCTRLSTA_OFFSET_SHIFT) &
3710 E1000_KUMCTRLSTA_OFFSET) |
3711 E1000_KUMCTRLSTA_REN;
3712 ew32(KUMCTRLSTA, reg_val);
3715 /* Read the data returned */
3716 reg_val = er32(KUMCTRLSTA);
3717 *data = (u16)reg_val;
3719 e1000_swfw_sync_release(hw, swfw);
3720 return E1000_SUCCESS;
3723 static s32 e1000_write_kmrn_reg(struct e1000_hw *hw, u32 reg_addr, u16 data)
3727 DEBUGFUNC("e1000_write_kmrn_reg");
3729 if ((hw->mac_type == e1000_80003es2lan) &&
3730 (er32(STATUS) & E1000_STATUS_FUNC_1)) {
3731 swfw = E1000_SWFW_PHY1_SM;
3733 swfw = E1000_SWFW_PHY0_SM;
3735 if (e1000_swfw_sync_acquire(hw, swfw))
3736 return -E1000_ERR_SWFW_SYNC;
3738 reg_val = ((reg_addr << E1000_KUMCTRLSTA_OFFSET_SHIFT) &
3739 E1000_KUMCTRLSTA_OFFSET) | data;
3740 ew32(KUMCTRLSTA, reg_val);
3743 e1000_swfw_sync_release(hw, swfw);
3744 return E1000_SUCCESS;
3747 /******************************************************************************
3748 * Returns the PHY to the power-on reset state
3750 * hw - Struct containing variables accessed by shared code
3751 ******************************************************************************/
3752 s32 e1000_phy_hw_reset(struct e1000_hw *hw)
3759 DEBUGFUNC("e1000_phy_hw_reset");
3761 /* In the case of the phy reset being blocked, it's not an error, we
3762 * simply return success without performing the reset. */
3763 ret_val = e1000_check_phy_reset_block(hw);
3765 return E1000_SUCCESS;
3767 DEBUGOUT("Resetting Phy...\n");
3769 if (hw->mac_type > e1000_82543) {
3770 if ((hw->mac_type == e1000_80003es2lan) &&
3771 (er32(STATUS) & E1000_STATUS_FUNC_1)) {
3772 swfw = E1000_SWFW_PHY1_SM;
3774 swfw = E1000_SWFW_PHY0_SM;
3776 if (e1000_swfw_sync_acquire(hw, swfw)) {
3777 DEBUGOUT("Unable to acquire swfw sync\n");
3778 return -E1000_ERR_SWFW_SYNC;
3780 /* Read the device control register and assert the E1000_CTRL_PHY_RST
3781 * bit. Then, take it out of reset.
3782 * For pre-e1000_82571 hardware, we delay for 10ms between the assert
3783 * and deassert. For e1000_82571 hardware and later, we instead delay
3784 * for 50us between and 10ms after the deassertion.
3787 ew32(CTRL, ctrl | E1000_CTRL_PHY_RST);
3788 E1000_WRITE_FLUSH();
3790 if (hw->mac_type < e1000_82571)
3796 E1000_WRITE_FLUSH();
3798 if (hw->mac_type >= e1000_82571)
3801 e1000_swfw_sync_release(hw, swfw);
3803 /* Read the Extended Device Control Register, assert the PHY_RESET_DIR
3804 * bit to put the PHY into reset. Then, take it out of reset.
3806 ctrl_ext = er32(CTRL_EXT);
3807 ctrl_ext |= E1000_CTRL_EXT_SDP4_DIR;
3808 ctrl_ext &= ~E1000_CTRL_EXT_SDP4_DATA;
3809 ew32(CTRL_EXT, ctrl_ext);
3810 E1000_WRITE_FLUSH();
3812 ctrl_ext |= E1000_CTRL_EXT_SDP4_DATA;
3813 ew32(CTRL_EXT, ctrl_ext);
3814 E1000_WRITE_FLUSH();
3818 if ((hw->mac_type == e1000_82541) || (hw->mac_type == e1000_82547)) {
3819 /* Configure activity LED after PHY reset */
3820 led_ctrl = er32(LEDCTL);
3821 led_ctrl &= IGP_ACTIVITY_LED_MASK;
3822 led_ctrl |= (IGP_ACTIVITY_LED_ENABLE | IGP_LED3_MODE);
3823 ew32(LEDCTL, led_ctrl);
3826 /* Wait for FW to finish PHY configuration. */
3827 ret_val = e1000_get_phy_cfg_done(hw);
3828 if (ret_val != E1000_SUCCESS)
3830 e1000_release_software_semaphore(hw);
3832 if ((hw->mac_type == e1000_ich8lan) && (hw->phy_type == e1000_phy_igp_3))
3833 ret_val = e1000_init_lcd_from_nvm(hw);
3838 /******************************************************************************
3841 * hw - Struct containing variables accessed by shared code
3843 * Sets bit 15 of the MII Control register
3844 ******************************************************************************/
3845 s32 e1000_phy_reset(struct e1000_hw *hw)
3850 DEBUGFUNC("e1000_phy_reset");
3852 /* In the case of the phy reset being blocked, it's not an error, we
3853 * simply return success without performing the reset. */
3854 ret_val = e1000_check_phy_reset_block(hw);
3856 return E1000_SUCCESS;
3858 switch (hw->phy_type) {
3860 case e1000_phy_igp_2:
3861 case e1000_phy_igp_3:
3863 ret_val = e1000_phy_hw_reset(hw);
3868 ret_val = e1000_read_phy_reg(hw, PHY_CTRL, &phy_data);
3872 phy_data |= MII_CR_RESET;
3873 ret_val = e1000_write_phy_reg(hw, PHY_CTRL, phy_data);
3881 if (hw->phy_type == e1000_phy_igp || hw->phy_type == e1000_phy_igp_2)
3882 e1000_phy_init_script(hw);
3884 return E1000_SUCCESS;
3887 /******************************************************************************
3888 * Work-around for 82566 power-down: on D3 entry-
3889 * 1) disable gigabit link
3890 * 2) write VR power-down enable
3892 * if successful continue, else issue LCD reset and repeat
3894 * hw - struct containing variables accessed by shared code
3895 ******************************************************************************/
3896 void e1000_phy_powerdown_workaround(struct e1000_hw *hw)
3902 DEBUGFUNC("e1000_phy_powerdown_workaround");
3904 if (hw->phy_type != e1000_phy_igp_3)
3909 reg = er32(PHY_CTRL);
3910 ew32(PHY_CTRL, reg | E1000_PHY_CTRL_GBE_DISABLE |
3911 E1000_PHY_CTRL_NOND0A_GBE_DISABLE);
3913 /* Write VR power-down enable - bits 9:8 should be 10b */
3914 e1000_read_phy_reg(hw, IGP3_VR_CTRL, &phy_data);
3915 phy_data |= (1 << 9);
3916 phy_data &= ~(1 << 8);
3917 e1000_write_phy_reg(hw, IGP3_VR_CTRL, phy_data);
3919 /* Read it back and test */
3920 e1000_read_phy_reg(hw, IGP3_VR_CTRL, &phy_data);
3921 if (((phy_data & IGP3_VR_CTRL_MODE_MASK) == IGP3_VR_CTRL_MODE_SHUT) || retry)
3924 /* Issue PHY reset and repeat at most one more time */
3926 ew32(CTRL, reg | E1000_CTRL_PHY_RST);
3934 /******************************************************************************
3935 * Work-around for 82566 Kumeran PCS lock loss:
3936 * On link status change (i.e. PCI reset, speed change) and link is up and
3938 * 0) if workaround is optionally disabled do nothing
3939 * 1) wait 1ms for Kumeran link to come up
3940 * 2) check Kumeran Diagnostic register PCS lock loss bit
3941 * 3) if not set the link is locked (all is good), otherwise...
3943 * 5) repeat up to 10 times
3944 * Note: this is only called for IGP3 copper when speed is 1gb.
3946 * hw - struct containing variables accessed by shared code
3947 ******************************************************************************/
3948 static s32 e1000_kumeran_lock_loss_workaround(struct e1000_hw *hw)
3955 if (hw->kmrn_lock_loss_workaround_disabled)
3956 return E1000_SUCCESS;
3958 /* Make sure link is up before proceeding. If not just return.
3959 * Attempting this while link is negotiating fouled up link
3961 ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
3962 ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
3964 if (phy_data & MII_SR_LINK_STATUS) {
3965 for (cnt = 0; cnt < 10; cnt++) {
3966 /* read once to clear */
3967 ret_val = e1000_read_phy_reg(hw, IGP3_KMRN_DIAG, &phy_data);
3970 /* and again to get new status */
3971 ret_val = e1000_read_phy_reg(hw, IGP3_KMRN_DIAG, &phy_data);
3975 /* check for PCS lock */
3976 if (!(phy_data & IGP3_KMRN_DIAG_PCS_LOCK_LOSS))
3977 return E1000_SUCCESS;
3979 /* Issue PHY reset */
3980 e1000_phy_hw_reset(hw);
3983 /* Disable GigE link negotiation */
3984 reg = er32(PHY_CTRL);
3985 ew32(PHY_CTRL, reg | E1000_PHY_CTRL_GBE_DISABLE |
3986 E1000_PHY_CTRL_NOND0A_GBE_DISABLE);
3988 /* unable to acquire PCS lock */
3989 return E1000_ERR_PHY;
3992 return E1000_SUCCESS;
3995 /******************************************************************************
3996 * Probes the expected PHY address for known PHY IDs
3998 * hw - Struct containing variables accessed by shared code
3999 ******************************************************************************/
4000 static s32 e1000_detect_gig_phy(struct e1000_hw *hw)
4002 s32 phy_init_status, ret_val;
4003 u16 phy_id_high, phy_id_low;
4006 DEBUGFUNC("e1000_detect_gig_phy");
4008 if (hw->phy_id != 0)
4009 return E1000_SUCCESS;
4011 /* The 82571 firmware may still be configuring the PHY. In this
4012 * case, we cannot access the PHY until the configuration is done. So
4013 * we explicitly set the PHY values. */
4014 if (hw->mac_type == e1000_82571 ||
4015 hw->mac_type == e1000_82572) {
4016 hw->phy_id = IGP01E1000_I_PHY_ID;
4017 hw->phy_type = e1000_phy_igp_2;
4018 return E1000_SUCCESS;
4021 /* ESB-2 PHY reads require e1000_phy_gg82563 to be set because of a work-
4022 * around that forces PHY page 0 to be set or the reads fail. The rest of
4023 * the code in this routine uses e1000_read_phy_reg to read the PHY ID.
4024 * So for ESB-2 we need to have this set so our reads won't fail. If the
4025 * attached PHY is not a e1000_phy_gg82563, the routines below will figure
4026 * this out as well. */
4027 if (hw->mac_type == e1000_80003es2lan)
4028 hw->phy_type = e1000_phy_gg82563;
4030 /* Read the PHY ID Registers to identify which PHY is onboard. */
4031 ret_val = e1000_read_phy_reg(hw, PHY_ID1, &phy_id_high);
4035 hw->phy_id = (u32)(phy_id_high << 16);
4037 ret_val = e1000_read_phy_reg(hw, PHY_ID2, &phy_id_low);
4041 hw->phy_id |= (u32)(phy_id_low & PHY_REVISION_MASK);
4042 hw->phy_revision = (u32)phy_id_low & ~PHY_REVISION_MASK;
4044 switch (hw->mac_type) {
4046 if (hw->phy_id == M88E1000_E_PHY_ID) match = true;
4049 if (hw->phy_id == M88E1000_I_PHY_ID) match = true;
4053 case e1000_82545_rev_3:
4055 case e1000_82546_rev_3:
4056 if (hw->phy_id == M88E1011_I_PHY_ID) match = true;
4059 case e1000_82541_rev_2:
4061 case e1000_82547_rev_2:
4062 if (hw->phy_id == IGP01E1000_I_PHY_ID) match = true;
4065 if (hw->phy_id == M88E1111_I_PHY_ID) match = true;
4067 case e1000_80003es2lan:
4068 if (hw->phy_id == GG82563_E_PHY_ID) match = true;
4071 if (hw->phy_id == IGP03E1000_E_PHY_ID) match = true;
4072 if (hw->phy_id == IFE_E_PHY_ID) match = true;
4073 if (hw->phy_id == IFE_PLUS_E_PHY_ID) match = true;
4074 if (hw->phy_id == IFE_C_E_PHY_ID) match = true;
4077 DEBUGOUT1("Invalid MAC type %d\n", hw->mac_type);
4078 return -E1000_ERR_CONFIG;
4080 phy_init_status = e1000_set_phy_type(hw);
4082 if ((match) && (phy_init_status == E1000_SUCCESS)) {
4083 DEBUGOUT1("PHY ID 0x%X detected\n", hw->phy_id);
4084 return E1000_SUCCESS;
4086 DEBUGOUT1("Invalid PHY ID 0x%X\n", hw->phy_id);
4087 return -E1000_ERR_PHY;
4090 /******************************************************************************
4091 * Resets the PHY's DSP
4093 * hw - Struct containing variables accessed by shared code
4094 ******************************************************************************/
4095 static s32 e1000_phy_reset_dsp(struct e1000_hw *hw)
4098 DEBUGFUNC("e1000_phy_reset_dsp");
4101 if (hw->phy_type != e1000_phy_gg82563) {
4102 ret_val = e1000_write_phy_reg(hw, 29, 0x001d);
4105 ret_val = e1000_write_phy_reg(hw, 30, 0x00c1);
4107 ret_val = e1000_write_phy_reg(hw, 30, 0x0000);
4109 ret_val = E1000_SUCCESS;
4115 /******************************************************************************
4116 * Get PHY information from various PHY registers for igp PHY only.
4118 * hw - Struct containing variables accessed by shared code
4119 * phy_info - PHY information structure
4120 ******************************************************************************/
4121 static s32 e1000_phy_igp_get_info(struct e1000_hw *hw,
4122 struct e1000_phy_info *phy_info)
4125 u16 phy_data, min_length, max_length, average;
4126 e1000_rev_polarity polarity;
4128 DEBUGFUNC("e1000_phy_igp_get_info");
4130 /* The downshift status is checked only once, after link is established,
4131 * and it stored in the hw->speed_downgraded parameter. */
4132 phy_info->downshift = (e1000_downshift)hw->speed_downgraded;
4134 /* IGP01E1000 does not need to support it. */
4135 phy_info->extended_10bt_distance = e1000_10bt_ext_dist_enable_normal;
4137 /* IGP01E1000 always correct polarity reversal */
4138 phy_info->polarity_correction = e1000_polarity_reversal_enabled;
4140 /* Check polarity status */
4141 ret_val = e1000_check_polarity(hw, &polarity);
4145 phy_info->cable_polarity = polarity;
4147 ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_STATUS, &phy_data);
4151 phy_info->mdix_mode = (e1000_auto_x_mode)((phy_data & IGP01E1000_PSSR_MDIX) >>
4152 IGP01E1000_PSSR_MDIX_SHIFT);
4154 if ((phy_data & IGP01E1000_PSSR_SPEED_MASK) ==
4155 IGP01E1000_PSSR_SPEED_1000MBPS) {
4156 /* Local/Remote Receiver Information are only valid at 1000 Mbps */
4157 ret_val = e1000_read_phy_reg(hw, PHY_1000T_STATUS, &phy_data);
4161 phy_info->local_rx = ((phy_data & SR_1000T_LOCAL_RX_STATUS) >>
4162 SR_1000T_LOCAL_RX_STATUS_SHIFT) ?
4163 e1000_1000t_rx_status_ok : e1000_1000t_rx_status_not_ok;
4164 phy_info->remote_rx = ((phy_data & SR_1000T_REMOTE_RX_STATUS) >>
4165 SR_1000T_REMOTE_RX_STATUS_SHIFT) ?
4166 e1000_1000t_rx_status_ok : e1000_1000t_rx_status_not_ok;
4168 /* Get cable length */
4169 ret_val = e1000_get_cable_length(hw, &min_length, &max_length);
4173 /* Translate to old method */
4174 average = (max_length + min_length) / 2;
4176 if (average <= e1000_igp_cable_length_50)
4177 phy_info->cable_length = e1000_cable_length_50;
4178 else if (average <= e1000_igp_cable_length_80)
4179 phy_info->cable_length = e1000_cable_length_50_80;
4180 else if (average <= e1000_igp_cable_length_110)
4181 phy_info->cable_length = e1000_cable_length_80_110;
4182 else if (average <= e1000_igp_cable_length_140)
4183 phy_info->cable_length = e1000_cable_length_110_140;
4185 phy_info->cable_length = e1000_cable_length_140;
4188 return E1000_SUCCESS;
4191 /******************************************************************************
4192 * Get PHY information from various PHY registers for ife PHY only.
4194 * hw - Struct containing variables accessed by shared code
4195 * phy_info - PHY information structure
4196 ******************************************************************************/
4197 static s32 e1000_phy_ife_get_info(struct e1000_hw *hw,
4198 struct e1000_phy_info *phy_info)
4202 e1000_rev_polarity polarity;
4204 DEBUGFUNC("e1000_phy_ife_get_info");
4206 phy_info->downshift = (e1000_downshift)hw->speed_downgraded;
4207 phy_info->extended_10bt_distance = e1000_10bt_ext_dist_enable_normal;
4209 ret_val = e1000_read_phy_reg(hw, IFE_PHY_SPECIAL_CONTROL, &phy_data);
4212 phy_info->polarity_correction =
4213 ((phy_data & IFE_PSC_AUTO_POLARITY_DISABLE) >>
4214 IFE_PSC_AUTO_POLARITY_DISABLE_SHIFT) ?
4215 e1000_polarity_reversal_disabled : e1000_polarity_reversal_enabled;
4217 if (phy_info->polarity_correction == e1000_polarity_reversal_enabled) {
4218 ret_val = e1000_check_polarity(hw, &polarity);
4222 /* Polarity is forced. */
4223 polarity = ((phy_data & IFE_PSC_FORCE_POLARITY) >>
4224 IFE_PSC_FORCE_POLARITY_SHIFT) ?
4225 e1000_rev_polarity_reversed : e1000_rev_polarity_normal;
4227 phy_info->cable_polarity = polarity;
4229 ret_val = e1000_read_phy_reg(hw, IFE_PHY_MDIX_CONTROL, &phy_data);
4233 phy_info->mdix_mode = (e1000_auto_x_mode)
4234 ((phy_data & (IFE_PMC_AUTO_MDIX | IFE_PMC_FORCE_MDIX)) >>
4235 IFE_PMC_MDIX_MODE_SHIFT);
4237 return E1000_SUCCESS;
4240 /******************************************************************************
4241 * Get PHY information from various PHY registers fot m88 PHY only.
4243 * hw - Struct containing variables accessed by shared code
4244 * phy_info - PHY information structure
4245 ******************************************************************************/
4246 static s32 e1000_phy_m88_get_info(struct e1000_hw *hw,
4247 struct e1000_phy_info *phy_info)
4251 e1000_rev_polarity polarity;
4253 DEBUGFUNC("e1000_phy_m88_get_info");
4255 /* The downshift status is checked only once, after link is established,
4256 * and it stored in the hw->speed_downgraded parameter. */
4257 phy_info->downshift = (e1000_downshift)hw->speed_downgraded;
4259 ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
4263 phy_info->extended_10bt_distance =
4264 ((phy_data & M88E1000_PSCR_10BT_EXT_DIST_ENABLE) >>
4265 M88E1000_PSCR_10BT_EXT_DIST_ENABLE_SHIFT) ?
4266 e1000_10bt_ext_dist_enable_lower : e1000_10bt_ext_dist_enable_normal;
4268 phy_info->polarity_correction =
4269 ((phy_data & M88E1000_PSCR_POLARITY_REVERSAL) >>
4270 M88E1000_PSCR_POLARITY_REVERSAL_SHIFT) ?
4271 e1000_polarity_reversal_disabled : e1000_polarity_reversal_enabled;
4273 /* Check polarity status */
4274 ret_val = e1000_check_polarity(hw, &polarity);
4277 phy_info->cable_polarity = polarity;
4279 ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS, &phy_data);
4283 phy_info->mdix_mode = (e1000_auto_x_mode)((phy_data & M88E1000_PSSR_MDIX) >>
4284 M88E1000_PSSR_MDIX_SHIFT);
4286 if ((phy_data & M88E1000_PSSR_SPEED) == M88E1000_PSSR_1000MBS) {
4287 /* Cable Length Estimation and Local/Remote Receiver Information
4288 * are only valid at 1000 Mbps.
4290 if (hw->phy_type != e1000_phy_gg82563) {
4291 phy_info->cable_length = (e1000_cable_length)((phy_data & M88E1000_PSSR_CABLE_LENGTH) >>
4292 M88E1000_PSSR_CABLE_LENGTH_SHIFT);
4294 ret_val = e1000_read_phy_reg(hw, GG82563_PHY_DSP_DISTANCE,
4299 phy_info->cable_length = (e1000_cable_length)(phy_data & GG82563_DSPD_CABLE_LENGTH);
4302 ret_val = e1000_read_phy_reg(hw, PHY_1000T_STATUS, &phy_data);
4306 phy_info->local_rx = ((phy_data & SR_1000T_LOCAL_RX_STATUS) >>
4307 SR_1000T_LOCAL_RX_STATUS_SHIFT) ?
4308 e1000_1000t_rx_status_ok : e1000_1000t_rx_status_not_ok;
4309 phy_info->remote_rx = ((phy_data & SR_1000T_REMOTE_RX_STATUS) >>
4310 SR_1000T_REMOTE_RX_STATUS_SHIFT) ?
4311 e1000_1000t_rx_status_ok : e1000_1000t_rx_status_not_ok;
4315 return E1000_SUCCESS;
4318 /******************************************************************************
4319 * Get PHY information from various PHY registers
4321 * hw - Struct containing variables accessed by shared code
4322 * phy_info - PHY information structure
4323 ******************************************************************************/
4324 s32 e1000_phy_get_info(struct e1000_hw *hw, struct e1000_phy_info *phy_info)
4329 DEBUGFUNC("e1000_phy_get_info");
4331 phy_info->cable_length = e1000_cable_length_undefined;
4332 phy_info->extended_10bt_distance = e1000_10bt_ext_dist_enable_undefined;
4333 phy_info->cable_polarity = e1000_rev_polarity_undefined;
4334 phy_info->downshift = e1000_downshift_undefined;
4335 phy_info->polarity_correction = e1000_polarity_reversal_undefined;
4336 phy_info->mdix_mode = e1000_auto_x_mode_undefined;
4337 phy_info->local_rx = e1000_1000t_rx_status_undefined;
4338 phy_info->remote_rx = e1000_1000t_rx_status_undefined;
4340 if (hw->media_type != e1000_media_type_copper) {
4341 DEBUGOUT("PHY info is only valid for copper media\n");
4342 return -E1000_ERR_CONFIG;
4345 ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
4349 ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
4353 if ((phy_data & MII_SR_LINK_STATUS) != MII_SR_LINK_STATUS) {
4354 DEBUGOUT("PHY info is only valid if link is up\n");
4355 return -E1000_ERR_CONFIG;
4358 if (hw->phy_type == e1000_phy_igp ||
4359 hw->phy_type == e1000_phy_igp_3 ||
4360 hw->phy_type == e1000_phy_igp_2)
4361 return e1000_phy_igp_get_info(hw, phy_info);
4362 else if (hw->phy_type == e1000_phy_ife)
4363 return e1000_phy_ife_get_info(hw, phy_info);
4365 return e1000_phy_m88_get_info(hw, phy_info);
4368 s32 e1000_validate_mdi_setting(struct e1000_hw *hw)
4370 DEBUGFUNC("e1000_validate_mdi_settings");
4372 if (!hw->autoneg && (hw->mdix == 0 || hw->mdix == 3)) {
4373 DEBUGOUT("Invalid MDI setting detected\n");
4375 return -E1000_ERR_CONFIG;
4377 return E1000_SUCCESS;
4381 /******************************************************************************
4382 * Sets up eeprom variables in the hw struct. Must be called after mac_type
4383 * is configured. Additionally, if this is ICH8, the flash controller GbE
4384 * registers must be mapped, or this will crash.
4386 * hw - Struct containing variables accessed by shared code
4387 *****************************************************************************/
4388 s32 e1000_init_eeprom_params(struct e1000_hw *hw)
4390 struct e1000_eeprom_info *eeprom = &hw->eeprom;
4391 u32 eecd = er32(EECD);
4392 s32 ret_val = E1000_SUCCESS;
4395 DEBUGFUNC("e1000_init_eeprom_params");
4397 switch (hw->mac_type) {
4398 case e1000_82542_rev2_0:
4399 case e1000_82542_rev2_1:
4402 eeprom->type = e1000_eeprom_microwire;
4403 eeprom->word_size = 64;
4404 eeprom->opcode_bits = 3;
4405 eeprom->address_bits = 6;
4406 eeprom->delay_usec = 50;
4407 eeprom->use_eerd = false;
4408 eeprom->use_eewr = false;
4412 case e1000_82545_rev_3:
4414 case e1000_82546_rev_3:
4415 eeprom->type = e1000_eeprom_microwire;
4416 eeprom->opcode_bits = 3;
4417 eeprom->delay_usec = 50;
4418 if (eecd & E1000_EECD_SIZE) {
4419 eeprom->word_size = 256;
4420 eeprom->address_bits = 8;
4422 eeprom->word_size = 64;
4423 eeprom->address_bits = 6;
4425 eeprom->use_eerd = false;
4426 eeprom->use_eewr = false;
4429 case e1000_82541_rev_2:
4431 case e1000_82547_rev_2:
4432 if (eecd & E1000_EECD_TYPE) {
4433 eeprom->type = e1000_eeprom_spi;
4434 eeprom->opcode_bits = 8;
4435 eeprom->delay_usec = 1;
4436 if (eecd & E1000_EECD_ADDR_BITS) {
4437 eeprom->page_size = 32;
4438 eeprom->address_bits = 16;
4440 eeprom->page_size = 8;
4441 eeprom->address_bits = 8;
4444 eeprom->type = e1000_eeprom_microwire;
4445 eeprom->opcode_bits = 3;
4446 eeprom->delay_usec = 50;
4447 if (eecd & E1000_EECD_ADDR_BITS) {
4448 eeprom->word_size = 256;
4449 eeprom->address_bits = 8;
4451 eeprom->word_size = 64;
4452 eeprom->address_bits = 6;
4455 eeprom->use_eerd = false;
4456 eeprom->use_eewr = false;
4460 eeprom->type = e1000_eeprom_spi;
4461 eeprom->opcode_bits = 8;
4462 eeprom->delay_usec = 1;
4463 if (eecd & E1000_EECD_ADDR_BITS) {
4464 eeprom->page_size = 32;
4465 eeprom->address_bits = 16;
4467 eeprom->page_size = 8;
4468 eeprom->address_bits = 8;
4470 eeprom->use_eerd = false;
4471 eeprom->use_eewr = false;
4474 eeprom->type = e1000_eeprom_spi;
4475 eeprom->opcode_bits = 8;
4476 eeprom->delay_usec = 1;
4477 if (eecd & E1000_EECD_ADDR_BITS) {
4478 eeprom->page_size = 32;
4479 eeprom->address_bits = 16;
4481 eeprom->page_size = 8;
4482 eeprom->address_bits = 8;
4484 eeprom->use_eerd = true;
4485 eeprom->use_eewr = true;
4486 if (!e1000_is_onboard_nvm_eeprom(hw)) {
4487 eeprom->type = e1000_eeprom_flash;
4488 eeprom->word_size = 2048;
4490 /* Ensure that the Autonomous FLASH update bit is cleared due to
4491 * Flash update issue on parts which use a FLASH for NVM. */
4492 eecd &= ~E1000_EECD_AUPDEN;
4496 case e1000_80003es2lan:
4497 eeprom->type = e1000_eeprom_spi;
4498 eeprom->opcode_bits = 8;
4499 eeprom->delay_usec = 1;
4500 if (eecd & E1000_EECD_ADDR_BITS) {
4501 eeprom->page_size = 32;
4502 eeprom->address_bits = 16;
4504 eeprom->page_size = 8;
4505 eeprom->address_bits = 8;
4507 eeprom->use_eerd = true;
4508 eeprom->use_eewr = false;
4513 u32 flash_size = E1000_READ_ICH_FLASH_REG(hw, ICH_FLASH_GFPREG);
4515 eeprom->type = e1000_eeprom_ich8;
4516 eeprom->use_eerd = false;
4517 eeprom->use_eewr = false;
4518 eeprom->word_size = E1000_SHADOW_RAM_WORDS;
4520 /* Zero the shadow RAM structure. But don't load it from NVM
4521 * so as to save time for driver init */
4522 if (hw->eeprom_shadow_ram != NULL) {
4523 for (i = 0; i < E1000_SHADOW_RAM_WORDS; i++) {
4524 hw->eeprom_shadow_ram[i].modified = false;
4525 hw->eeprom_shadow_ram[i].eeprom_word = 0xFFFF;
4529 hw->flash_base_addr = (flash_size & ICH_GFPREG_BASE_MASK) *
4530 ICH_FLASH_SECTOR_SIZE;
4532 hw->flash_bank_size = ((flash_size >> 16) & ICH_GFPREG_BASE_MASK) + 1;
4533 hw->flash_bank_size -= (flash_size & ICH_GFPREG_BASE_MASK);
4535 hw->flash_bank_size *= ICH_FLASH_SECTOR_SIZE;
4537 hw->flash_bank_size /= 2 * sizeof(u16);
4545 if (eeprom->type == e1000_eeprom_spi) {
4546 /* eeprom_size will be an enum [0..8] that maps to eeprom sizes 128B to
4547 * 32KB (incremented by powers of 2).
4549 if (hw->mac_type <= e1000_82547_rev_2) {
4550 /* Set to default value for initial eeprom read. */
4551 eeprom->word_size = 64;
4552 ret_val = e1000_read_eeprom(hw, EEPROM_CFG, 1, &eeprom_size);
4555 eeprom_size = (eeprom_size & EEPROM_SIZE_MASK) >> EEPROM_SIZE_SHIFT;
4556 /* 256B eeprom size was not supported in earlier hardware, so we
4557 * bump eeprom_size up one to ensure that "1" (which maps to 256B)
4558 * is never the result used in the shifting logic below. */
4562 eeprom_size = (u16)((eecd & E1000_EECD_SIZE_EX_MASK) >>
4563 E1000_EECD_SIZE_EX_SHIFT);
4566 eeprom->word_size = 1 << (eeprom_size + EEPROM_WORD_SIZE_SHIFT);
4571 /******************************************************************************
4572 * Raises the EEPROM's clock input.
4574 * hw - Struct containing variables accessed by shared code
4575 * eecd - EECD's current value
4576 *****************************************************************************/
4577 static void e1000_raise_ee_clk(struct e1000_hw *hw, u32 *eecd)
4579 /* Raise the clock input to the EEPROM (by setting the SK bit), and then
4580 * wait <delay> microseconds.
4582 *eecd = *eecd | E1000_EECD_SK;
4584 E1000_WRITE_FLUSH();
4585 udelay(hw->eeprom.delay_usec);
4588 /******************************************************************************
4589 * Lowers the EEPROM's clock input.
4591 * hw - Struct containing variables accessed by shared code
4592 * eecd - EECD's current value
4593 *****************************************************************************/
4594 static void e1000_lower_ee_clk(struct e1000_hw *hw, u32 *eecd)
4596 /* Lower the clock input to the EEPROM (by clearing the SK bit), and then
4597 * wait 50 microseconds.
4599 *eecd = *eecd & ~E1000_EECD_SK;
4601 E1000_WRITE_FLUSH();
4602 udelay(hw->eeprom.delay_usec);
4605 /******************************************************************************
4606 * Shift data bits out to the EEPROM.
4608 * hw - Struct containing variables accessed by shared code
4609 * data - data to send to the EEPROM
4610 * count - number of bits to shift out
4611 *****************************************************************************/
4612 static void e1000_shift_out_ee_bits(struct e1000_hw *hw, u16 data, u16 count)
4614 struct e1000_eeprom_info *eeprom = &hw->eeprom;
4618 /* We need to shift "count" bits out to the EEPROM. So, value in the
4619 * "data" parameter will be shifted out to the EEPROM one bit at a time.
4620 * In order to do this, "data" must be broken down into bits.
4622 mask = 0x01 << (count - 1);
4624 if (eeprom->type == e1000_eeprom_microwire) {
4625 eecd &= ~E1000_EECD_DO;
4626 } else if (eeprom->type == e1000_eeprom_spi) {
4627 eecd |= E1000_EECD_DO;
4630 /* A "1" is shifted out to the EEPROM by setting bit "DI" to a "1",
4631 * and then raising and then lowering the clock (the SK bit controls
4632 * the clock input to the EEPROM). A "0" is shifted out to the EEPROM
4633 * by setting "DI" to "0" and then raising and then lowering the clock.
4635 eecd &= ~E1000_EECD_DI;
4638 eecd |= E1000_EECD_DI;
4641 E1000_WRITE_FLUSH();
4643 udelay(eeprom->delay_usec);
4645 e1000_raise_ee_clk(hw, &eecd);
4646 e1000_lower_ee_clk(hw, &eecd);
4652 /* We leave the "DI" bit set to "0" when we leave this routine. */
4653 eecd &= ~E1000_EECD_DI;
4657 /******************************************************************************
4658 * Shift data bits in from the EEPROM
4660 * hw - Struct containing variables accessed by shared code
4661 *****************************************************************************/
4662 static u16 e1000_shift_in_ee_bits(struct e1000_hw *hw, u16 count)
4668 /* In order to read a register from the EEPROM, we need to shift 'count'
4669 * bits in from the EEPROM. Bits are "shifted in" by raising the clock
4670 * input to the EEPROM (setting the SK bit), and then reading the value of
4671 * the "DO" bit. During this "shifting in" process the "DI" bit should
4677 eecd &= ~(E1000_EECD_DO | E1000_EECD_DI);
4680 for (i = 0; i < count; i++) {
4682 e1000_raise_ee_clk(hw, &eecd);
4686 eecd &= ~(E1000_EECD_DI);
4687 if (eecd & E1000_EECD_DO)
4690 e1000_lower_ee_clk(hw, &eecd);
4696 /******************************************************************************
4697 * Prepares EEPROM for access
4699 * hw - Struct containing variables accessed by shared code
4701 * Lowers EEPROM clock. Clears input pin. Sets the chip select pin. This
4702 * function should be called before issuing a command to the EEPROM.
4703 *****************************************************************************/
4704 static s32 e1000_acquire_eeprom(struct e1000_hw *hw)
4706 struct e1000_eeprom_info *eeprom = &hw->eeprom;
4709 DEBUGFUNC("e1000_acquire_eeprom");
4711 if (e1000_swfw_sync_acquire(hw, E1000_SWFW_EEP_SM))
4712 return -E1000_ERR_SWFW_SYNC;
4715 if (hw->mac_type != e1000_82573) {
4716 /* Request EEPROM Access */
4717 if (hw->mac_type > e1000_82544) {
4718 eecd |= E1000_EECD_REQ;
4721 while ((!(eecd & E1000_EECD_GNT)) &&
4722 (i < E1000_EEPROM_GRANT_ATTEMPTS)) {
4727 if (!(eecd & E1000_EECD_GNT)) {
4728 eecd &= ~E1000_EECD_REQ;
4730 DEBUGOUT("Could not acquire EEPROM grant\n");
4731 e1000_swfw_sync_release(hw, E1000_SWFW_EEP_SM);
4732 return -E1000_ERR_EEPROM;
4737 /* Setup EEPROM for Read/Write */
4739 if (eeprom->type == e1000_eeprom_microwire) {
4740 /* Clear SK and DI */
4741 eecd &= ~(E1000_EECD_DI | E1000_EECD_SK);
4745 eecd |= E1000_EECD_CS;
4747 } else if (eeprom->type == e1000_eeprom_spi) {
4748 /* Clear SK and CS */
4749 eecd &= ~(E1000_EECD_CS | E1000_EECD_SK);
4754 return E1000_SUCCESS;
4757 /******************************************************************************
4758 * Returns EEPROM to a "standby" state
4760 * hw - Struct containing variables accessed by shared code
4761 *****************************************************************************/
4762 static void e1000_standby_eeprom(struct e1000_hw *hw)
4764 struct e1000_eeprom_info *eeprom = &hw->eeprom;
4769 if (eeprom->type == e1000_eeprom_microwire) {
4770 eecd &= ~(E1000_EECD_CS | E1000_EECD_SK);
4772 E1000_WRITE_FLUSH();
4773 udelay(eeprom->delay_usec);
4776 eecd |= E1000_EECD_SK;
4778 E1000_WRITE_FLUSH();
4779 udelay(eeprom->delay_usec);
4782 eecd |= E1000_EECD_CS;
4784 E1000_WRITE_FLUSH();
4785 udelay(eeprom->delay_usec);
4788 eecd &= ~E1000_EECD_SK;
4790 E1000_WRITE_FLUSH();
4791 udelay(eeprom->delay_usec);
4792 } else if (eeprom->type == e1000_eeprom_spi) {
4793 /* Toggle CS to flush commands */
4794 eecd |= E1000_EECD_CS;
4796 E1000_WRITE_FLUSH();
4797 udelay(eeprom->delay_usec);
4798 eecd &= ~E1000_EECD_CS;
4800 E1000_WRITE_FLUSH();
4801 udelay(eeprom->delay_usec);
4805 /******************************************************************************
4806 * Terminates a command by inverting the EEPROM's chip select pin
4808 * hw - Struct containing variables accessed by shared code
4809 *****************************************************************************/
4810 static void e1000_release_eeprom(struct e1000_hw *hw)
4814 DEBUGFUNC("e1000_release_eeprom");
4818 if (hw->eeprom.type == e1000_eeprom_spi) {
4819 eecd |= E1000_EECD_CS; /* Pull CS high */
4820 eecd &= ~E1000_EECD_SK; /* Lower SCK */
4824 udelay(hw->eeprom.delay_usec);
4825 } else if (hw->eeprom.type == e1000_eeprom_microwire) {
4826 /* cleanup eeprom */
4828 /* CS on Microwire is active-high */
4829 eecd &= ~(E1000_EECD_CS | E1000_EECD_DI);
4833 /* Rising edge of clock */
4834 eecd |= E1000_EECD_SK;
4836 E1000_WRITE_FLUSH();
4837 udelay(hw->eeprom.delay_usec);
4839 /* Falling edge of clock */
4840 eecd &= ~E1000_EECD_SK;
4842 E1000_WRITE_FLUSH();
4843 udelay(hw->eeprom.delay_usec);
4846 /* Stop requesting EEPROM access */
4847 if (hw->mac_type > e1000_82544) {
4848 eecd &= ~E1000_EECD_REQ;
4852 e1000_swfw_sync_release(hw, E1000_SWFW_EEP_SM);
4855 /******************************************************************************
4856 * Reads a 16 bit word from the EEPROM.
4858 * hw - Struct containing variables accessed by shared code
4859 *****************************************************************************/
4860 static s32 e1000_spi_eeprom_ready(struct e1000_hw *hw)
4862 u16 retry_count = 0;
4865 DEBUGFUNC("e1000_spi_eeprom_ready");
4867 /* Read "Status Register" repeatedly until the LSB is cleared. The
4868 * EEPROM will signal that the command has been completed by clearing
4869 * bit 0 of the internal status register. If it's not cleared within
4870 * 5 milliseconds, then error out.
4874 e1000_shift_out_ee_bits(hw, EEPROM_RDSR_OPCODE_SPI,
4875 hw->eeprom.opcode_bits);
4876 spi_stat_reg = (u8)e1000_shift_in_ee_bits(hw, 8);
4877 if (!(spi_stat_reg & EEPROM_STATUS_RDY_SPI))
4883 e1000_standby_eeprom(hw);
4884 } while (retry_count < EEPROM_MAX_RETRY_SPI);
4886 /* ATMEL SPI write time could vary from 0-20mSec on 3.3V devices (and
4887 * only 0-5mSec on 5V devices)
4889 if (retry_count >= EEPROM_MAX_RETRY_SPI) {
4890 DEBUGOUT("SPI EEPROM Status error\n");
4891 return -E1000_ERR_EEPROM;
4894 return E1000_SUCCESS;
4897 /******************************************************************************
4898 * Reads a 16 bit word from the EEPROM.
4900 * hw - Struct containing variables accessed by shared code
4901 * offset - offset of word in the EEPROM to read
4902 * data - word read from the EEPROM
4903 * words - number of words to read
4904 *****************************************************************************/
4905 s32 e1000_read_eeprom(struct e1000_hw *hw, u16 offset, u16 words, u16 *data)
4907 struct e1000_eeprom_info *eeprom = &hw->eeprom;
4910 DEBUGFUNC("e1000_read_eeprom");
4912 /* If eeprom is not yet detected, do so now */
4913 if (eeprom->word_size == 0)
4914 e1000_init_eeprom_params(hw);
4916 /* A check for invalid values: offset too large, too many words, and not
4919 if ((offset >= eeprom->word_size) || (words > eeprom->word_size - offset) ||
4921 DEBUGOUT2("\"words\" parameter out of bounds. Words = %d, size = %d\n", offset, eeprom->word_size);
4922 return -E1000_ERR_EEPROM;
4925 /* EEPROM's that don't use EERD to read require us to bit-bang the SPI
4926 * directly. In this case, we need to acquire the EEPROM so that
4927 * FW or other port software does not interrupt.
4929 if (e1000_is_onboard_nvm_eeprom(hw) && !hw->eeprom.use_eerd) {
4930 /* Prepare the EEPROM for bit-bang reading */
4931 if (e1000_acquire_eeprom(hw) != E1000_SUCCESS)
4932 return -E1000_ERR_EEPROM;
4935 /* Eerd register EEPROM access requires no eeprom aquire/release */
4936 if (eeprom->use_eerd)
4937 return e1000_read_eeprom_eerd(hw, offset, words, data);
4939 /* ICH EEPROM access is done via the ICH flash controller */
4940 if (eeprom->type == e1000_eeprom_ich8)
4941 return e1000_read_eeprom_ich8(hw, offset, words, data);
4943 /* Set up the SPI or Microwire EEPROM for bit-bang reading. We have
4944 * acquired the EEPROM at this point, so any returns should relase it */
4945 if (eeprom->type == e1000_eeprom_spi) {
4947 u8 read_opcode = EEPROM_READ_OPCODE_SPI;
4949 if (e1000_spi_eeprom_ready(hw)) {
4950 e1000_release_eeprom(hw);
4951 return -E1000_ERR_EEPROM;
4954 e1000_standby_eeprom(hw);
4956 /* Some SPI eeproms use the 8th address bit embedded in the opcode */
4957 if ((eeprom->address_bits == 8) && (offset >= 128))
4958 read_opcode |= EEPROM_A8_OPCODE_SPI;
4960 /* Send the READ command (opcode + addr) */
4961 e1000_shift_out_ee_bits(hw, read_opcode, eeprom->opcode_bits);
4962 e1000_shift_out_ee_bits(hw, (u16)(offset*2), eeprom->address_bits);
4964 /* Read the data. The address of the eeprom internally increments with
4965 * each byte (spi) being read, saving on the overhead of eeprom setup
4966 * and tear-down. The address counter will roll over if reading beyond
4967 * the size of the eeprom, thus allowing the entire memory to be read
4968 * starting from any offset. */
4969 for (i = 0; i < words; i++) {
4970 word_in = e1000_shift_in_ee_bits(hw, 16);
4971 data[i] = (word_in >> 8) | (word_in << 8);
4973 } else if (eeprom->type == e1000_eeprom_microwire) {
4974 for (i = 0; i < words; i++) {
4975 /* Send the READ command (opcode + addr) */
4976 e1000_shift_out_ee_bits(hw, EEPROM_READ_OPCODE_MICROWIRE,
4977 eeprom->opcode_bits);
4978 e1000_shift_out_ee_bits(hw, (u16)(offset + i),
4979 eeprom->address_bits);
4981 /* Read the data. For microwire, each word requires the overhead
4982 * of eeprom setup and tear-down. */
4983 data[i] = e1000_shift_in_ee_bits(hw, 16);
4984 e1000_standby_eeprom(hw);
4988 /* End this read operation */
4989 e1000_release_eeprom(hw);
4991 return E1000_SUCCESS;
4994 /******************************************************************************
4995 * Reads a 16 bit word from the EEPROM using the EERD register.
4997 * hw - Struct containing variables accessed by shared code
4998 * offset - offset of word in the EEPROM to read
4999 * data - word read from the EEPROM
5000 * words - number of words to read
5001 *****************************************************************************/
5002 static s32 e1000_read_eeprom_eerd(struct e1000_hw *hw, u16 offset, u16 words,
5008 for (i = 0; i < words; i++) {
5009 eerd = ((offset+i) << E1000_EEPROM_RW_ADDR_SHIFT) +
5010 E1000_EEPROM_RW_REG_START;
5013 error = e1000_poll_eerd_eewr_done(hw, E1000_EEPROM_POLL_READ);
5018 data[i] = (er32(EERD) >> E1000_EEPROM_RW_REG_DATA);
5025 /******************************************************************************
5026 * Writes a 16 bit word from the EEPROM using the EEWR register.
5028 * hw - Struct containing variables accessed by shared code
5029 * offset - offset of word in the EEPROM to read
5030 * data - word read from the EEPROM
5031 * words - number of words to read
5032 *****************************************************************************/
5033 static s32 e1000_write_eeprom_eewr(struct e1000_hw *hw, u16 offset, u16 words,
5036 u32 register_value = 0;
5040 if (e1000_swfw_sync_acquire(hw, E1000_SWFW_EEP_SM))
5041 return -E1000_ERR_SWFW_SYNC;
5043 for (i = 0; i < words; i++) {
5044 register_value = (data[i] << E1000_EEPROM_RW_REG_DATA) |
5045 ((offset+i) << E1000_EEPROM_RW_ADDR_SHIFT) |
5046 E1000_EEPROM_RW_REG_START;
5048 error = e1000_poll_eerd_eewr_done(hw, E1000_EEPROM_POLL_WRITE);
5053 ew32(EEWR, register_value);
5055 error = e1000_poll_eerd_eewr_done(hw, E1000_EEPROM_POLL_WRITE);
5062 e1000_swfw_sync_release(hw, E1000_SWFW_EEP_SM);
5066 /******************************************************************************
5067 * Polls the status bit (bit 1) of the EERD to determine when the read is done.
5069 * hw - Struct containing variables accessed by shared code
5070 *****************************************************************************/
5071 static s32 e1000_poll_eerd_eewr_done(struct e1000_hw *hw, int eerd)
5073 u32 attempts = 100000;
5075 s32 done = E1000_ERR_EEPROM;
5077 for (i = 0; i < attempts; i++) {
5078 if (eerd == E1000_EEPROM_POLL_READ)
5083 if (reg & E1000_EEPROM_RW_REG_DONE) {
5084 done = E1000_SUCCESS;
5093 /***************************************************************************
5094 * Description: Determines if the onboard NVM is FLASH or EEPROM.
5096 * hw - Struct containing variables accessed by shared code
5097 ****************************************************************************/
5098 static bool e1000_is_onboard_nvm_eeprom(struct e1000_hw *hw)
5102 DEBUGFUNC("e1000_is_onboard_nvm_eeprom");
5104 if (hw->mac_type == e1000_ich8lan)
5107 if (hw->mac_type == e1000_82573) {
5110 /* Isolate bits 15 & 16 */
5111 eecd = ((eecd >> 15) & 0x03);
5113 /* If both bits are set, device is Flash type */
5121 /******************************************************************************
5122 * Verifies that the EEPROM has a valid checksum
5124 * hw - Struct containing variables accessed by shared code
5126 * Reads the first 64 16 bit words of the EEPROM and sums the values read.
5127 * If the the sum of the 64 16 bit words is 0xBABA, the EEPROM's checksum is
5129 *****************************************************************************/
5130 s32 e1000_validate_eeprom_checksum(struct e1000_hw *hw)
5135 DEBUGFUNC("e1000_validate_eeprom_checksum");
5137 if ((hw->mac_type == e1000_82573) && !e1000_is_onboard_nvm_eeprom(hw)) {
5138 /* Check bit 4 of word 10h. If it is 0, firmware is done updating
5139 * 10h-12h. Checksum may need to be fixed. */
5140 e1000_read_eeprom(hw, 0x10, 1, &eeprom_data);
5141 if ((eeprom_data & 0x10) == 0) {
5142 /* Read 0x23 and check bit 15. This bit is a 1 when the checksum
5143 * has already been fixed. If the checksum is still wrong and this
5144 * bit is a 1, we need to return bad checksum. Otherwise, we need
5145 * to set this bit to a 1 and update the checksum. */
5146 e1000_read_eeprom(hw, 0x23, 1, &eeprom_data);
5147 if ((eeprom_data & 0x8000) == 0) {
5148 eeprom_data |= 0x8000;
5149 e1000_write_eeprom(hw, 0x23, 1, &eeprom_data);
5150 e1000_update_eeprom_checksum(hw);
5155 if (hw->mac_type == e1000_ich8lan) {
5156 /* Drivers must allocate the shadow ram structure for the
5157 * EEPROM checksum to be updated. Otherwise, this bit as well
5158 * as the checksum must both be set correctly for this
5159 * validation to pass.
5161 e1000_read_eeprom(hw, 0x19, 1, &eeprom_data);
5162 if ((eeprom_data & 0x40) == 0) {
5163 eeprom_data |= 0x40;
5164 e1000_write_eeprom(hw, 0x19, 1, &eeprom_data);
5165 e1000_update_eeprom_checksum(hw);
5169 for (i = 0; i < (EEPROM_CHECKSUM_REG + 1); i++) {
5170 if (e1000_read_eeprom(hw, i, 1, &eeprom_data) < 0) {
5171 DEBUGOUT("EEPROM Read Error\n");
5172 return -E1000_ERR_EEPROM;
5174 checksum += eeprom_data;
5177 if (checksum == (u16)EEPROM_SUM)
5178 return E1000_SUCCESS;
5180 DEBUGOUT("EEPROM Checksum Invalid\n");
5181 return -E1000_ERR_EEPROM;
5185 /******************************************************************************
5186 * Calculates the EEPROM checksum and writes it to the EEPROM
5188 * hw - Struct containing variables accessed by shared code
5190 * Sums the first 63 16 bit words of the EEPROM. Subtracts the sum from 0xBABA.
5191 * Writes the difference to word offset 63 of the EEPROM.
5192 *****************************************************************************/
5193 s32 e1000_update_eeprom_checksum(struct e1000_hw *hw)
5199 DEBUGFUNC("e1000_update_eeprom_checksum");
5201 for (i = 0; i < EEPROM_CHECKSUM_REG; i++) {
5202 if (e1000_read_eeprom(hw, i, 1, &eeprom_data) < 0) {
5203 DEBUGOUT("EEPROM Read Error\n");
5204 return -E1000_ERR_EEPROM;
5206 checksum += eeprom_data;
5208 checksum = (u16)EEPROM_SUM - checksum;
5209 if (e1000_write_eeprom(hw, EEPROM_CHECKSUM_REG, 1, &checksum) < 0) {
5210 DEBUGOUT("EEPROM Write Error\n");
5211 return -E1000_ERR_EEPROM;
5212 } else if (hw->eeprom.type == e1000_eeprom_flash) {
5213 e1000_commit_shadow_ram(hw);
5214 } else if (hw->eeprom.type == e1000_eeprom_ich8) {
5215 e1000_commit_shadow_ram(hw);
5216 /* Reload the EEPROM, or else modifications will not appear
5217 * until after next adapter reset. */
5218 ctrl_ext = er32(CTRL_EXT);
5219 ctrl_ext |= E1000_CTRL_EXT_EE_RST;
5220 ew32(CTRL_EXT, ctrl_ext);
5223 return E1000_SUCCESS;
5226 /******************************************************************************
5227 * Parent function for writing words to the different EEPROM types.
5229 * hw - Struct containing variables accessed by shared code
5230 * offset - offset within the EEPROM to be written to
5231 * words - number of words to write
5232 * data - 16 bit word to be written to the EEPROM
5234 * If e1000_update_eeprom_checksum is not called after this function, the
5235 * EEPROM will most likely contain an invalid checksum.
5236 *****************************************************************************/
5237 s32 e1000_write_eeprom(struct e1000_hw *hw, u16 offset, u16 words, u16 *data)
5239 struct e1000_eeprom_info *eeprom = &hw->eeprom;
5242 DEBUGFUNC("e1000_write_eeprom");
5244 /* If eeprom is not yet detected, do so now */
5245 if (eeprom->word_size == 0)
5246 e1000_init_eeprom_params(hw);
5248 /* A check for invalid values: offset too large, too many words, and not
5251 if ((offset >= eeprom->word_size) || (words > eeprom->word_size - offset) ||
5253 DEBUGOUT("\"words\" parameter out of bounds\n");
5254 return -E1000_ERR_EEPROM;
5257 /* 82573 writes only through eewr */
5258 if (eeprom->use_eewr)
5259 return e1000_write_eeprom_eewr(hw, offset, words, data);
5261 if (eeprom->type == e1000_eeprom_ich8)
5262 return e1000_write_eeprom_ich8(hw, offset, words, data);
5264 /* Prepare the EEPROM for writing */
5265 if (e1000_acquire_eeprom(hw) != E1000_SUCCESS)
5266 return -E1000_ERR_EEPROM;
5268 if (eeprom->type == e1000_eeprom_microwire) {
5269 status = e1000_write_eeprom_microwire(hw, offset, words, data);
5271 status = e1000_write_eeprom_spi(hw, offset, words, data);
5275 /* Done with writing */
5276 e1000_release_eeprom(hw);
5281 /******************************************************************************
5282 * Writes a 16 bit word to a given offset in an SPI EEPROM.
5284 * hw - Struct containing variables accessed by shared code
5285 * offset - offset within the EEPROM to be written to
5286 * words - number of words to write
5287 * data - pointer to array of 8 bit words to be written to the EEPROM
5289 *****************************************************************************/
5290 static s32 e1000_write_eeprom_spi(struct e1000_hw *hw, u16 offset, u16 words,
5293 struct e1000_eeprom_info *eeprom = &hw->eeprom;
5296 DEBUGFUNC("e1000_write_eeprom_spi");
5298 while (widx < words) {
5299 u8 write_opcode = EEPROM_WRITE_OPCODE_SPI;
5301 if (e1000_spi_eeprom_ready(hw)) return -E1000_ERR_EEPROM;
5303 e1000_standby_eeprom(hw);
5305 /* Send the WRITE ENABLE command (8 bit opcode ) */
5306 e1000_shift_out_ee_bits(hw, EEPROM_WREN_OPCODE_SPI,
5307 eeprom->opcode_bits);
5309 e1000_standby_eeprom(hw);
5311 /* Some SPI eeproms use the 8th address bit embedded in the opcode */
5312 if ((eeprom->address_bits == 8) && (offset >= 128))
5313 write_opcode |= EEPROM_A8_OPCODE_SPI;
5315 /* Send the Write command (8-bit opcode + addr) */
5316 e1000_shift_out_ee_bits(hw, write_opcode, eeprom->opcode_bits);
5318 e1000_shift_out_ee_bits(hw, (u16)((offset + widx)*2),
5319 eeprom->address_bits);
5323 /* Loop to allow for up to whole page write (32 bytes) of eeprom */
5324 while (widx < words) {
5325 u16 word_out = data[widx];
5326 word_out = (word_out >> 8) | (word_out << 8);
5327 e1000_shift_out_ee_bits(hw, word_out, 16);
5330 /* Some larger eeprom sizes are capable of a 32-byte PAGE WRITE
5331 * operation, while the smaller eeproms are capable of an 8-byte
5332 * PAGE WRITE operation. Break the inner loop to pass new address
5334 if ((((offset + widx)*2) % eeprom->page_size) == 0) {
5335 e1000_standby_eeprom(hw);
5341 return E1000_SUCCESS;
5344 /******************************************************************************
5345 * Writes a 16 bit word to a given offset in a Microwire EEPROM.
5347 * hw - Struct containing variables accessed by shared code
5348 * offset - offset within the EEPROM to be written to
5349 * words - number of words to write
5350 * data - pointer to array of 16 bit words to be written to the EEPROM
5352 *****************************************************************************/
5353 static s32 e1000_write_eeprom_microwire(struct e1000_hw *hw, u16 offset,
5354 u16 words, u16 *data)
5356 struct e1000_eeprom_info *eeprom = &hw->eeprom;
5358 u16 words_written = 0;
5361 DEBUGFUNC("e1000_write_eeprom_microwire");
5363 /* Send the write enable command to the EEPROM (3-bit opcode plus
5364 * 6/8-bit dummy address beginning with 11). It's less work to include
5365 * the 11 of the dummy address as part of the opcode than it is to shift
5366 * it over the correct number of bits for the address. This puts the
5367 * EEPROM into write/erase mode.
5369 e1000_shift_out_ee_bits(hw, EEPROM_EWEN_OPCODE_MICROWIRE,
5370 (u16)(eeprom->opcode_bits + 2));
5372 e1000_shift_out_ee_bits(hw, 0, (u16)(eeprom->address_bits - 2));
5374 /* Prepare the EEPROM */
5375 e1000_standby_eeprom(hw);
5377 while (words_written < words) {
5378 /* Send the Write command (3-bit opcode + addr) */
5379 e1000_shift_out_ee_bits(hw, EEPROM_WRITE_OPCODE_MICROWIRE,
5380 eeprom->opcode_bits);
5382 e1000_shift_out_ee_bits(hw, (u16)(offset + words_written),
5383 eeprom->address_bits);
5386 e1000_shift_out_ee_bits(hw, data[words_written], 16);
5388 /* Toggle the CS line. This in effect tells the EEPROM to execute
5389 * the previous command.
5391 e1000_standby_eeprom(hw);
5393 /* Read DO repeatedly until it is high (equal to '1'). The EEPROM will
5394 * signal that the command has been completed by raising the DO signal.
5395 * If DO does not go high in 10 milliseconds, then error out.
5397 for (i = 0; i < 200; i++) {
5399 if (eecd & E1000_EECD_DO) break;
5403 DEBUGOUT("EEPROM Write did not complete\n");
5404 return -E1000_ERR_EEPROM;
5407 /* Recover from write */
5408 e1000_standby_eeprom(hw);
5413 /* Send the write disable command to the EEPROM (3-bit opcode plus
5414 * 6/8-bit dummy address beginning with 10). It's less work to include
5415 * the 10 of the dummy address as part of the opcode than it is to shift
5416 * it over the correct number of bits for the address. This takes the
5417 * EEPROM out of write/erase mode.
5419 e1000_shift_out_ee_bits(hw, EEPROM_EWDS_OPCODE_MICROWIRE,
5420 (u16)(eeprom->opcode_bits + 2));
5422 e1000_shift_out_ee_bits(hw, 0, (u16)(eeprom->address_bits - 2));
5424 return E1000_SUCCESS;
5427 /******************************************************************************
5428 * Flushes the cached eeprom to NVM. This is done by saving the modified values
5429 * in the eeprom cache and the non modified values in the currently active bank
5432 * hw - Struct containing variables accessed by shared code
5433 * offset - offset of word in the EEPROM to read
5434 * data - word read from the EEPROM
5435 * words - number of words to read
5436 *****************************************************************************/
5437 static s32 e1000_commit_shadow_ram(struct e1000_hw *hw)
5439 u32 attempts = 100000;
5443 s32 error = E1000_SUCCESS;
5444 u32 old_bank_offset = 0;
5445 u32 new_bank_offset = 0;
5448 bool sector_write_failed = false;
5450 if (hw->mac_type == e1000_82573) {
5451 /* The flop register will be used to determine if flash type is STM */
5453 for (i=0; i < attempts; i++) {
5455 if ((eecd & E1000_EECD_FLUPD) == 0) {
5461 if (i == attempts) {
5462 return -E1000_ERR_EEPROM;
5465 /* If STM opcode located in bits 15:8 of flop, reset firmware */
5466 if ((flop & 0xFF00) == E1000_STM_OPCODE) {
5467 ew32(HICR, E1000_HICR_FW_RESET);
5470 /* Perform the flash update */
5471 ew32(EECD, eecd | E1000_EECD_FLUPD);
5473 for (i=0; i < attempts; i++) {
5475 if ((eecd & E1000_EECD_FLUPD) == 0) {
5481 if (i == attempts) {
5482 return -E1000_ERR_EEPROM;
5486 if (hw->mac_type == e1000_ich8lan && hw->eeprom_shadow_ram != NULL) {
5487 /* We're writing to the opposite bank so if we're on bank 1,
5488 * write to bank 0 etc. We also need to erase the segment that
5489 * is going to be written */
5490 if (!(er32(EECD) & E1000_EECD_SEC1VAL)) {
5491 new_bank_offset = hw->flash_bank_size * 2;
5492 old_bank_offset = 0;
5493 e1000_erase_ich8_4k_segment(hw, 1);
5495 old_bank_offset = hw->flash_bank_size * 2;
5496 new_bank_offset = 0;
5497 e1000_erase_ich8_4k_segment(hw, 0);
5500 sector_write_failed = false;
5501 /* Loop for every byte in the shadow RAM,
5502 * which is in units of words. */
5503 for (i = 0; i < E1000_SHADOW_RAM_WORDS; i++) {
5504 /* Determine whether to write the value stored
5505 * in the other NVM bank or a modified value stored
5506 * in the shadow RAM */
5507 if (hw->eeprom_shadow_ram[i].modified) {
5508 low_byte = (u8)hw->eeprom_shadow_ram[i].eeprom_word;
5510 error = e1000_verify_write_ich8_byte(hw,
5511 (i << 1) + new_bank_offset, low_byte);
5513 if (error != E1000_SUCCESS)
5514 sector_write_failed = true;
5517 (u8)(hw->eeprom_shadow_ram[i].eeprom_word >> 8);
5521 e1000_read_ich8_byte(hw, (i << 1) + old_bank_offset,
5524 error = e1000_verify_write_ich8_byte(hw,
5525 (i << 1) + new_bank_offset, low_byte);
5527 if (error != E1000_SUCCESS)
5528 sector_write_failed = true;
5530 e1000_read_ich8_byte(hw, (i << 1) + old_bank_offset + 1,
5536 /* If the write of the low byte was successful, go ahead and
5537 * write the high byte while checking to make sure that if it
5538 * is the signature byte, then it is handled properly */
5539 if (!sector_write_failed) {
5540 /* If the word is 0x13, then make sure the signature bits
5541 * (15:14) are 11b until the commit has completed.
5542 * This will allow us to write 10b which indicates the
5543 * signature is valid. We want to do this after the write
5544 * has completed so that we don't mark the segment valid
5545 * while the write is still in progress */
5546 if (i == E1000_ICH_NVM_SIG_WORD)
5547 high_byte = E1000_ICH_NVM_SIG_MASK | high_byte;
5549 error = e1000_verify_write_ich8_byte(hw,
5550 (i << 1) + new_bank_offset + 1, high_byte);
5551 if (error != E1000_SUCCESS)
5552 sector_write_failed = true;
5555 /* If the write failed then break from the loop and
5556 * return an error */
5561 /* Don't bother writing the segment valid bits if sector
5562 * programming failed. */
5563 if (!sector_write_failed) {
5564 /* Finally validate the new segment by setting bit 15:14
5565 * to 10b in word 0x13 , this can be done without an
5566 * erase as well since these bits are 11 to start with
5567 * and we need to change bit 14 to 0b */
5568 e1000_read_ich8_byte(hw,
5569 E1000_ICH_NVM_SIG_WORD * 2 + 1 + new_bank_offset,
5572 error = e1000_verify_write_ich8_byte(hw,
5573 E1000_ICH_NVM_SIG_WORD * 2 + 1 + new_bank_offset, high_byte);
5574 /* And invalidate the previously valid segment by setting
5575 * its signature word (0x13) high_byte to 0b. This can be
5576 * done without an erase because flash erase sets all bits
5577 * to 1's. We can write 1's to 0's without an erase */
5578 if (error == E1000_SUCCESS) {
5579 error = e1000_verify_write_ich8_byte(hw,
5580 E1000_ICH_NVM_SIG_WORD * 2 + 1 + old_bank_offset, 0);
5583 /* Clear the now not used entry in the cache */
5584 for (i = 0; i < E1000_SHADOW_RAM_WORDS; i++) {
5585 hw->eeprom_shadow_ram[i].modified = false;
5586 hw->eeprom_shadow_ram[i].eeprom_word = 0xFFFF;
5594 /******************************************************************************
5595 * Reads the adapter's MAC address from the EEPROM and inverts the LSB for the
5596 * second function of dual function devices
5598 * hw - Struct containing variables accessed by shared code
5599 *****************************************************************************/
5600 s32 e1000_read_mac_addr(struct e1000_hw *hw)
5605 DEBUGFUNC("e1000_read_mac_addr");
5607 for (i = 0; i < NODE_ADDRESS_SIZE; i += 2) {
5609 if (e1000_read_eeprom(hw, offset, 1, &eeprom_data) < 0) {
5610 DEBUGOUT("EEPROM Read Error\n");
5611 return -E1000_ERR_EEPROM;
5613 hw->perm_mac_addr[i] = (u8)(eeprom_data & 0x00FF);
5614 hw->perm_mac_addr[i+1] = (u8)(eeprom_data >> 8);
5617 switch (hw->mac_type) {
5621 case e1000_82546_rev_3:
5623 case e1000_80003es2lan:
5624 if (er32(STATUS) & E1000_STATUS_FUNC_1)
5625 hw->perm_mac_addr[5] ^= 0x01;
5629 for (i = 0; i < NODE_ADDRESS_SIZE; i++)
5630 hw->mac_addr[i] = hw->perm_mac_addr[i];
5631 return E1000_SUCCESS;
5634 /******************************************************************************
5635 * Initializes receive address filters.
5637 * hw - Struct containing variables accessed by shared code
5639 * Places the MAC address in receive address register 0 and clears the rest
5640 * of the receive addresss registers. Clears the multicast table. Assumes
5641 * the receiver is in reset when the routine is called.
5642 *****************************************************************************/
5643 static void e1000_init_rx_addrs(struct e1000_hw *hw)
5648 DEBUGFUNC("e1000_init_rx_addrs");
5650 /* Setup the receive address. */
5651 DEBUGOUT("Programming MAC Address into RAR[0]\n");
5653 e1000_rar_set(hw, hw->mac_addr, 0);
5655 rar_num = E1000_RAR_ENTRIES;
5657 /* Reserve a spot for the Locally Administered Address to work around
5658 * an 82571 issue in which a reset on one port will reload the MAC on
5659 * the other port. */
5660 if ((hw->mac_type == e1000_82571) && (hw->laa_is_present))
5662 if (hw->mac_type == e1000_ich8lan)
5663 rar_num = E1000_RAR_ENTRIES_ICH8LAN;
5665 /* Zero out the other 15 receive addresses. */
5666 DEBUGOUT("Clearing RAR[1-15]\n");
5667 for (i = 1; i < rar_num; i++) {
5668 E1000_WRITE_REG_ARRAY(hw, RA, (i << 1), 0);
5669 E1000_WRITE_FLUSH();
5670 E1000_WRITE_REG_ARRAY(hw, RA, ((i << 1) + 1), 0);
5671 E1000_WRITE_FLUSH();
5675 /******************************************************************************
5676 * Hashes an address to determine its location in the multicast table
5678 * hw - Struct containing variables accessed by shared code
5679 * mc_addr - the multicast address to hash
5680 *****************************************************************************/
5681 u32 e1000_hash_mc_addr(struct e1000_hw *hw, u8 *mc_addr)
5685 /* The portion of the address that is used for the hash table is
5686 * determined by the mc_filter_type setting.
5688 switch (hw->mc_filter_type) {
5689 /* [0] [1] [2] [3] [4] [5]
5694 if (hw->mac_type == e1000_ich8lan) {
5695 /* [47:38] i.e. 0x158 for above example address */
5696 hash_value = ((mc_addr[4] >> 6) | (((u16)mc_addr[5]) << 2));
5698 /* [47:36] i.e. 0x563 for above example address */
5699 hash_value = ((mc_addr[4] >> 4) | (((u16)mc_addr[5]) << 4));
5703 if (hw->mac_type == e1000_ich8lan) {
5704 /* [46:37] i.e. 0x2B1 for above example address */
5705 hash_value = ((mc_addr[4] >> 5) | (((u16)mc_addr[5]) << 3));
5707 /* [46:35] i.e. 0xAC6 for above example address */
5708 hash_value = ((mc_addr[4] >> 3) | (((u16)mc_addr[5]) << 5));
5712 if (hw->mac_type == e1000_ich8lan) {
5713 /*[45:36] i.e. 0x163 for above example address */
5714 hash_value = ((mc_addr[4] >> 4) | (((u16)mc_addr[5]) << 4));
5716 /* [45:34] i.e. 0x5D8 for above example address */
5717 hash_value = ((mc_addr[4] >> 2) | (((u16)mc_addr[5]) << 6));
5721 if (hw->mac_type == e1000_ich8lan) {
5722 /* [43:34] i.e. 0x18D for above example address */
5723 hash_value = ((mc_addr[4] >> 2) | (((u16)mc_addr[5]) << 6));
5725 /* [43:32] i.e. 0x634 for above example address */
5726 hash_value = ((mc_addr[4]) | (((u16)mc_addr[5]) << 8));
5731 hash_value &= 0xFFF;
5732 if (hw->mac_type == e1000_ich8lan)
5733 hash_value &= 0x3FF;
5738 /******************************************************************************
5739 * Sets the bit in the multicast table corresponding to the hash value.
5741 * hw - Struct containing variables accessed by shared code
5742 * hash_value - Multicast address hash value
5743 *****************************************************************************/
5744 void e1000_mta_set(struct e1000_hw *hw, u32 hash_value)
5746 u32 hash_bit, hash_reg;
5750 /* The MTA is a register array of 128 32-bit registers.
5751 * It is treated like an array of 4096 bits. We want to set
5752 * bit BitArray[hash_value]. So we figure out what register
5753 * the bit is in, read it, OR in the new bit, then write
5754 * back the new value. The register is determined by the
5755 * upper 7 bits of the hash value and the bit within that
5756 * register are determined by the lower 5 bits of the value.
5758 hash_reg = (hash_value >> 5) & 0x7F;
5759 if (hw->mac_type == e1000_ich8lan)
5762 hash_bit = hash_value & 0x1F;
5764 mta = E1000_READ_REG_ARRAY(hw, MTA, hash_reg);
5766 mta |= (1 << hash_bit);
5768 /* If we are on an 82544 and we are trying to write an odd offset
5769 * in the MTA, save off the previous entry before writing and
5770 * restore the old value after writing.
5772 if ((hw->mac_type == e1000_82544) && ((hash_reg & 0x1) == 1)) {
5773 temp = E1000_READ_REG_ARRAY(hw, MTA, (hash_reg - 1));
5774 E1000_WRITE_REG_ARRAY(hw, MTA, hash_reg, mta);
5775 E1000_WRITE_FLUSH();
5776 E1000_WRITE_REG_ARRAY(hw, MTA, (hash_reg - 1), temp);
5777 E1000_WRITE_FLUSH();
5779 E1000_WRITE_REG_ARRAY(hw, MTA, hash_reg, mta);
5780 E1000_WRITE_FLUSH();
5784 /******************************************************************************
5785 * Puts an ethernet address into a receive address register.
5787 * hw - Struct containing variables accessed by shared code
5788 * addr - Address to put into receive address register
5789 * index - Receive address register to write
5790 *****************************************************************************/
5791 void e1000_rar_set(struct e1000_hw *hw, u8 *addr, u32 index)
5793 u32 rar_low, rar_high;
5795 /* HW expects these in little endian so we reverse the byte order
5796 * from network order (big endian) to little endian
5798 rar_low = ((u32)addr[0] | ((u32)addr[1] << 8) |
5799 ((u32)addr[2] << 16) | ((u32)addr[3] << 24));
5800 rar_high = ((u32)addr[4] | ((u32)addr[5] << 8));
5802 /* Disable Rx and flush all Rx frames before enabling RSS to avoid Rx
5806 * If there are any Rx frames queued up or otherwise present in the HW
5807 * before RSS is enabled, and then we enable RSS, the HW Rx unit will
5808 * hang. To work around this issue, we have to disable receives and
5809 * flush out all Rx frames before we enable RSS. To do so, we modify we
5810 * redirect all Rx traffic to manageability and then reset the HW.
5811 * This flushes away Rx frames, and (since the redirections to
5812 * manageability persists across resets) keeps new ones from coming in
5813 * while we work. Then, we clear the Address Valid AV bit for all MAC
5814 * addresses and undo the re-direction to manageability.
5815 * Now, frames are coming in again, but the MAC won't accept them, so
5816 * far so good. We now proceed to initialize RSS (if necessary) and
5817 * configure the Rx unit. Last, we re-enable the AV bits and continue
5820 switch (hw->mac_type) {
5823 case e1000_80003es2lan:
5824 if (hw->leave_av_bit_off)
5827 /* Indicate to hardware the Address is Valid. */
5828 rar_high |= E1000_RAH_AV;
5832 E1000_WRITE_REG_ARRAY(hw, RA, (index << 1), rar_low);
5833 E1000_WRITE_FLUSH();
5834 E1000_WRITE_REG_ARRAY(hw, RA, ((index << 1) + 1), rar_high);
5835 E1000_WRITE_FLUSH();
5838 /******************************************************************************
5839 * Writes a value to the specified offset in the VLAN filter table.
5841 * hw - Struct containing variables accessed by shared code
5842 * offset - Offset in VLAN filer table to write
5843 * value - Value to write into VLAN filter table
5844 *****************************************************************************/
5845 void e1000_write_vfta(struct e1000_hw *hw, u32 offset, u32 value)
5849 if (hw->mac_type == e1000_ich8lan)
5852 if ((hw->mac_type == e1000_82544) && ((offset & 0x1) == 1)) {
5853 temp = E1000_READ_REG_ARRAY(hw, VFTA, (offset - 1));
5854 E1000_WRITE_REG_ARRAY(hw, VFTA, offset, value);
5855 E1000_WRITE_FLUSH();
5856 E1000_WRITE_REG_ARRAY(hw, VFTA, (offset - 1), temp);
5857 E1000_WRITE_FLUSH();
5859 E1000_WRITE_REG_ARRAY(hw, VFTA, offset, value);
5860 E1000_WRITE_FLUSH();
5864 /******************************************************************************
5865 * Clears the VLAN filer table
5867 * hw - Struct containing variables accessed by shared code
5868 *****************************************************************************/
5869 static void e1000_clear_vfta(struct e1000_hw *hw)
5873 u32 vfta_offset = 0;
5874 u32 vfta_bit_in_reg = 0;
5876 if (hw->mac_type == e1000_ich8lan)
5879 if (hw->mac_type == e1000_82573) {
5880 if (hw->mng_cookie.vlan_id != 0) {
5881 /* The VFTA is a 4096b bit-field, each identifying a single VLAN
5882 * ID. The following operations determine which 32b entry
5883 * (i.e. offset) into the array we want to set the VLAN ID
5884 * (i.e. bit) of the manageability unit. */
5885 vfta_offset = (hw->mng_cookie.vlan_id >>
5886 E1000_VFTA_ENTRY_SHIFT) &
5887 E1000_VFTA_ENTRY_MASK;
5888 vfta_bit_in_reg = 1 << (hw->mng_cookie.vlan_id &
5889 E1000_VFTA_ENTRY_BIT_SHIFT_MASK);
5892 for (offset = 0; offset < E1000_VLAN_FILTER_TBL_SIZE; offset++) {
5893 /* If the offset we want to clear is the same offset of the
5894 * manageability VLAN ID, then clear all bits except that of the
5895 * manageability unit */
5896 vfta_value = (offset == vfta_offset) ? vfta_bit_in_reg : 0;
5897 E1000_WRITE_REG_ARRAY(hw, VFTA, offset, vfta_value);
5898 E1000_WRITE_FLUSH();
5902 static s32 e1000_id_led_init(struct e1000_hw *hw)
5905 const u32 ledctl_mask = 0x000000FF;
5906 const u32 ledctl_on = E1000_LEDCTL_MODE_LED_ON;
5907 const u32 ledctl_off = E1000_LEDCTL_MODE_LED_OFF;
5908 u16 eeprom_data, i, temp;
5909 const u16 led_mask = 0x0F;
5911 DEBUGFUNC("e1000_id_led_init");
5913 if (hw->mac_type < e1000_82540) {
5915 return E1000_SUCCESS;
5918 ledctl = er32(LEDCTL);
5919 hw->ledctl_default = ledctl;
5920 hw->ledctl_mode1 = hw->ledctl_default;
5921 hw->ledctl_mode2 = hw->ledctl_default;
5923 if (e1000_read_eeprom(hw, EEPROM_ID_LED_SETTINGS, 1, &eeprom_data) < 0) {
5924 DEBUGOUT("EEPROM Read Error\n");
5925 return -E1000_ERR_EEPROM;
5928 if ((hw->mac_type == e1000_82573) &&
5929 (eeprom_data == ID_LED_RESERVED_82573))
5930 eeprom_data = ID_LED_DEFAULT_82573;
5931 else if ((eeprom_data == ID_LED_RESERVED_0000) ||
5932 (eeprom_data == ID_LED_RESERVED_FFFF)) {
5933 if (hw->mac_type == e1000_ich8lan)
5934 eeprom_data = ID_LED_DEFAULT_ICH8LAN;
5936 eeprom_data = ID_LED_DEFAULT;
5939 for (i = 0; i < 4; i++) {
5940 temp = (eeprom_data >> (i << 2)) & led_mask;
5942 case ID_LED_ON1_DEF2:
5943 case ID_LED_ON1_ON2:
5944 case ID_LED_ON1_OFF2:
5945 hw->ledctl_mode1 &= ~(ledctl_mask << (i << 3));
5946 hw->ledctl_mode1 |= ledctl_on << (i << 3);
5948 case ID_LED_OFF1_DEF2:
5949 case ID_LED_OFF1_ON2:
5950 case ID_LED_OFF1_OFF2:
5951 hw->ledctl_mode1 &= ~(ledctl_mask << (i << 3));
5952 hw->ledctl_mode1 |= ledctl_off << (i << 3);
5959 case ID_LED_DEF1_ON2:
5960 case ID_LED_ON1_ON2:
5961 case ID_LED_OFF1_ON2:
5962 hw->ledctl_mode2 &= ~(ledctl_mask << (i << 3));
5963 hw->ledctl_mode2 |= ledctl_on << (i << 3);
5965 case ID_LED_DEF1_OFF2:
5966 case ID_LED_ON1_OFF2:
5967 case ID_LED_OFF1_OFF2:
5968 hw->ledctl_mode2 &= ~(ledctl_mask << (i << 3));
5969 hw->ledctl_mode2 |= ledctl_off << (i << 3);
5976 return E1000_SUCCESS;
5979 /******************************************************************************
5980 * Prepares SW controlable LED for use and saves the current state of the LED.
5982 * hw - Struct containing variables accessed by shared code
5983 *****************************************************************************/
5984 s32 e1000_setup_led(struct e1000_hw *hw)
5987 s32 ret_val = E1000_SUCCESS;
5989 DEBUGFUNC("e1000_setup_led");
5991 switch (hw->mac_type) {
5992 case e1000_82542_rev2_0:
5993 case e1000_82542_rev2_1:
5996 /* No setup necessary */
6000 case e1000_82541_rev_2:
6001 case e1000_82547_rev_2:
6002 /* Turn off PHY Smart Power Down (if enabled) */
6003 ret_val = e1000_read_phy_reg(hw, IGP01E1000_GMII_FIFO,
6004 &hw->phy_spd_default);
6007 ret_val = e1000_write_phy_reg(hw, IGP01E1000_GMII_FIFO,
6008 (u16)(hw->phy_spd_default &
6009 ~IGP01E1000_GMII_SPD));
6014 if (hw->media_type == e1000_media_type_fiber) {
6015 ledctl = er32(LEDCTL);
6016 /* Save current LEDCTL settings */
6017 hw->ledctl_default = ledctl;
6019 ledctl &= ~(E1000_LEDCTL_LED0_IVRT |
6020 E1000_LEDCTL_LED0_BLINK |
6021 E1000_LEDCTL_LED0_MODE_MASK);
6022 ledctl |= (E1000_LEDCTL_MODE_LED_OFF <<
6023 E1000_LEDCTL_LED0_MODE_SHIFT);
6024 ew32(LEDCTL, ledctl);
6025 } else if (hw->media_type == e1000_media_type_copper)
6026 ew32(LEDCTL, hw->ledctl_mode1);
6030 return E1000_SUCCESS;
6034 /******************************************************************************
6035 * Used on 82571 and later Si that has LED blink bits.
6036 * Callers must use their own timer and should have already called
6037 * e1000_id_led_init()
6038 * Call e1000_cleanup led() to stop blinking
6040 * hw - Struct containing variables accessed by shared code
6041 *****************************************************************************/
6042 s32 e1000_blink_led_start(struct e1000_hw *hw)
6045 u32 ledctl_blink = 0;
6047 DEBUGFUNC("e1000_id_led_blink_on");
6049 if (hw->mac_type < e1000_82571) {
6051 return E1000_SUCCESS;
6053 if (hw->media_type == e1000_media_type_fiber) {
6054 /* always blink LED0 for PCI-E fiber */
6055 ledctl_blink = E1000_LEDCTL_LED0_BLINK |
6056 (E1000_LEDCTL_MODE_LED_ON << E1000_LEDCTL_LED0_MODE_SHIFT);
6058 /* set the blink bit for each LED that's "on" (0x0E) in ledctl_mode2 */
6059 ledctl_blink = hw->ledctl_mode2;
6060 for (i=0; i < 4; i++)
6061 if (((hw->ledctl_mode2 >> (i * 8)) & 0xFF) ==
6062 E1000_LEDCTL_MODE_LED_ON)
6063 ledctl_blink |= (E1000_LEDCTL_LED0_BLINK << (i * 8));
6066 ew32(LEDCTL, ledctl_blink);
6068 return E1000_SUCCESS;
6071 /******************************************************************************
6072 * Restores the saved state of the SW controlable LED.
6074 * hw - Struct containing variables accessed by shared code
6075 *****************************************************************************/
6076 s32 e1000_cleanup_led(struct e1000_hw *hw)
6078 s32 ret_val = E1000_SUCCESS;
6080 DEBUGFUNC("e1000_cleanup_led");
6082 switch (hw->mac_type) {
6083 case e1000_82542_rev2_0:
6084 case e1000_82542_rev2_1:
6087 /* No cleanup necessary */
6091 case e1000_82541_rev_2:
6092 case e1000_82547_rev_2:
6093 /* Turn on PHY Smart Power Down (if previously enabled) */
6094 ret_val = e1000_write_phy_reg(hw, IGP01E1000_GMII_FIFO,
6095 hw->phy_spd_default);
6100 if (hw->phy_type == e1000_phy_ife) {
6101 e1000_write_phy_reg(hw, IFE_PHY_SPECIAL_CONTROL_LED, 0);
6104 /* Restore LEDCTL settings */
6105 ew32(LEDCTL, hw->ledctl_default);
6109 return E1000_SUCCESS;
6112 /******************************************************************************
6113 * Turns on the software controllable LED
6115 * hw - Struct containing variables accessed by shared code
6116 *****************************************************************************/
6117 s32 e1000_led_on(struct e1000_hw *hw)
6119 u32 ctrl = er32(CTRL);
6121 DEBUGFUNC("e1000_led_on");
6123 switch (hw->mac_type) {
6124 case e1000_82542_rev2_0:
6125 case e1000_82542_rev2_1:
6127 /* Set SW Defineable Pin 0 to turn on the LED */
6128 ctrl |= E1000_CTRL_SWDPIN0;
6129 ctrl |= E1000_CTRL_SWDPIO0;
6132 if (hw->media_type == e1000_media_type_fiber) {
6133 /* Set SW Defineable Pin 0 to turn on the LED */
6134 ctrl |= E1000_CTRL_SWDPIN0;
6135 ctrl |= E1000_CTRL_SWDPIO0;
6137 /* Clear SW Defineable Pin 0 to turn on the LED */
6138 ctrl &= ~E1000_CTRL_SWDPIN0;
6139 ctrl |= E1000_CTRL_SWDPIO0;
6143 if (hw->media_type == e1000_media_type_fiber) {
6144 /* Clear SW Defineable Pin 0 to turn on the LED */
6145 ctrl &= ~E1000_CTRL_SWDPIN0;
6146 ctrl |= E1000_CTRL_SWDPIO0;
6147 } else if (hw->phy_type == e1000_phy_ife) {
6148 e1000_write_phy_reg(hw, IFE_PHY_SPECIAL_CONTROL_LED,
6149 (IFE_PSCL_PROBE_MODE | IFE_PSCL_PROBE_LEDS_ON));
6150 } else if (hw->media_type == e1000_media_type_copper) {
6151 ew32(LEDCTL, hw->ledctl_mode2);
6152 return E1000_SUCCESS;
6159 return E1000_SUCCESS;
6162 /******************************************************************************
6163 * Turns off the software controllable LED
6165 * hw - Struct containing variables accessed by shared code
6166 *****************************************************************************/
6167 s32 e1000_led_off(struct e1000_hw *hw)
6169 u32 ctrl = er32(CTRL);
6171 DEBUGFUNC("e1000_led_off");
6173 switch (hw->mac_type) {
6174 case e1000_82542_rev2_0:
6175 case e1000_82542_rev2_1:
6177 /* Clear SW Defineable Pin 0 to turn off the LED */
6178 ctrl &= ~E1000_CTRL_SWDPIN0;
6179 ctrl |= E1000_CTRL_SWDPIO0;
6182 if (hw->media_type == e1000_media_type_fiber) {
6183 /* Clear SW Defineable Pin 0 to turn off the LED */
6184 ctrl &= ~E1000_CTRL_SWDPIN0;
6185 ctrl |= E1000_CTRL_SWDPIO0;
6187 /* Set SW Defineable Pin 0 to turn off the LED */
6188 ctrl |= E1000_CTRL_SWDPIN0;
6189 ctrl |= E1000_CTRL_SWDPIO0;
6193 if (hw->media_type == e1000_media_type_fiber) {
6194 /* Set SW Defineable Pin 0 to turn off the LED */
6195 ctrl |= E1000_CTRL_SWDPIN0;
6196 ctrl |= E1000_CTRL_SWDPIO0;
6197 } else if (hw->phy_type == e1000_phy_ife) {
6198 e1000_write_phy_reg(hw, IFE_PHY_SPECIAL_CONTROL_LED,
6199 (IFE_PSCL_PROBE_MODE | IFE_PSCL_PROBE_LEDS_OFF));
6200 } else if (hw->media_type == e1000_media_type_copper) {
6201 ew32(LEDCTL, hw->ledctl_mode1);
6202 return E1000_SUCCESS;
6209 return E1000_SUCCESS;
6212 /******************************************************************************
6213 * Clears all hardware statistics counters.
6215 * hw - Struct containing variables accessed by shared code
6216 *****************************************************************************/
6217 static void e1000_clear_hw_cntrs(struct e1000_hw *hw)
6221 temp = er32(CRCERRS);
6222 temp = er32(SYMERRS);
6227 temp = er32(LATECOL);
6232 temp = er32(XONRXC);
6233 temp = er32(XONTXC);
6234 temp = er32(XOFFRXC);
6235 temp = er32(XOFFTXC);
6238 if (hw->mac_type != e1000_ich8lan) {
6240 temp = er32(PRC127);
6241 temp = er32(PRC255);
6242 temp = er32(PRC511);
6243 temp = er32(PRC1023);
6244 temp = er32(PRC1522);
6267 if (hw->mac_type != e1000_ich8lan) {
6269 temp = er32(PTC127);
6270 temp = er32(PTC255);
6271 temp = er32(PTC511);
6272 temp = er32(PTC1023);
6273 temp = er32(PTC1522);
6279 if (hw->mac_type < e1000_82543) return;
6281 temp = er32(ALGNERRC);
6282 temp = er32(RXERRC);
6284 temp = er32(CEXTERR);
6286 temp = er32(TSCTFC);
6288 if (hw->mac_type <= e1000_82544) return;
6290 temp = er32(MGTPRC);
6291 temp = er32(MGTPDC);
6292 temp = er32(MGTPTC);
6294 if (hw->mac_type <= e1000_82547_rev_2) return;
6297 temp = er32(ICRXOC);
6299 if (hw->mac_type == e1000_ich8lan) return;
6301 temp = er32(ICRXPTC);
6302 temp = er32(ICRXATC);
6303 temp = er32(ICTXPTC);
6304 temp = er32(ICTXATC);
6305 temp = er32(ICTXQEC);
6306 temp = er32(ICTXQMTC);
6307 temp = er32(ICRXDMTC);
6310 /******************************************************************************
6311 * Resets Adaptive IFS to its default state.
6313 * hw - Struct containing variables accessed by shared code
6315 * Call this after e1000_init_hw. You may override the IFS defaults by setting
6316 * hw->ifs_params_forced to true. However, you must initialize hw->
6317 * current_ifs_val, ifs_min_val, ifs_max_val, ifs_step_size, and ifs_ratio
6318 * before calling this function.
6319 *****************************************************************************/
6320 void e1000_reset_adaptive(struct e1000_hw *hw)
6322 DEBUGFUNC("e1000_reset_adaptive");
6324 if (hw->adaptive_ifs) {
6325 if (!hw->ifs_params_forced) {
6326 hw->current_ifs_val = 0;
6327 hw->ifs_min_val = IFS_MIN;
6328 hw->ifs_max_val = IFS_MAX;
6329 hw->ifs_step_size = IFS_STEP;
6330 hw->ifs_ratio = IFS_RATIO;
6332 hw->in_ifs_mode = false;
6335 DEBUGOUT("Not in Adaptive IFS mode!\n");
6339 /******************************************************************************
6340 * Called during the callback/watchdog routine to update IFS value based on
6341 * the ratio of transmits to collisions.
6343 * hw - Struct containing variables accessed by shared code
6344 * tx_packets - Number of transmits since last callback
6345 * total_collisions - Number of collisions since last callback
6346 *****************************************************************************/
6347 void e1000_update_adaptive(struct e1000_hw *hw)
6349 DEBUGFUNC("e1000_update_adaptive");
6351 if (hw->adaptive_ifs) {
6352 if ((hw->collision_delta * hw->ifs_ratio) > hw->tx_packet_delta) {
6353 if (hw->tx_packet_delta > MIN_NUM_XMITS) {
6354 hw->in_ifs_mode = true;
6355 if (hw->current_ifs_val < hw->ifs_max_val) {
6356 if (hw->current_ifs_val == 0)
6357 hw->current_ifs_val = hw->ifs_min_val;
6359 hw->current_ifs_val += hw->ifs_step_size;
6360 ew32(AIT, hw->current_ifs_val);
6364 if (hw->in_ifs_mode && (hw->tx_packet_delta <= MIN_NUM_XMITS)) {
6365 hw->current_ifs_val = 0;
6366 hw->in_ifs_mode = false;
6371 DEBUGOUT("Not in Adaptive IFS mode!\n");
6375 /******************************************************************************
6376 * Adjusts the statistic counters when a frame is accepted by TBI_ACCEPT
6378 * hw - Struct containing variables accessed by shared code
6379 * frame_len - The length of the frame in question
6380 * mac_addr - The Ethernet destination address of the frame in question
6381 *****************************************************************************/
6382 void e1000_tbi_adjust_stats(struct e1000_hw *hw, struct e1000_hw_stats *stats,
6383 u32 frame_len, u8 *mac_addr)
6387 /* First adjust the frame length. */
6389 /* We need to adjust the statistics counters, since the hardware
6390 * counters overcount this packet as a CRC error and undercount
6391 * the packet as a good packet
6393 /* This packet should not be counted as a CRC error. */
6395 /* This packet does count as a Good Packet Received. */
6398 /* Adjust the Good Octets received counters */
6399 carry_bit = 0x80000000 & stats->gorcl;
6400 stats->gorcl += frame_len;
6401 /* If the high bit of Gorcl (the low 32 bits of the Good Octets
6402 * Received Count) was one before the addition,
6403 * AND it is zero after, then we lost the carry out,
6404 * need to add one to Gorch (Good Octets Received Count High).
6405 * This could be simplified if all environments supported
6408 if (carry_bit && ((stats->gorcl & 0x80000000) == 0))
6410 /* Is this a broadcast or multicast? Check broadcast first,
6411 * since the test for a multicast frame will test positive on
6412 * a broadcast frame.
6414 if ((mac_addr[0] == (u8)0xff) && (mac_addr[1] == (u8)0xff))
6415 /* Broadcast packet */
6417 else if (*mac_addr & 0x01)
6418 /* Multicast packet */
6421 if (frame_len == hw->max_frame_size) {
6422 /* In this case, the hardware has overcounted the number of
6429 /* Adjust the bin counters when the extra byte put the frame in the
6430 * wrong bin. Remember that the frame_len was adjusted above.
6432 if (frame_len == 64) {
6435 } else if (frame_len == 127) {
6438 } else if (frame_len == 255) {
6441 } else if (frame_len == 511) {
6444 } else if (frame_len == 1023) {
6447 } else if (frame_len == 1522) {
6452 /******************************************************************************
6453 * Gets the current PCI bus type, speed, and width of the hardware
6455 * hw - Struct containing variables accessed by shared code
6456 *****************************************************************************/
6457 void e1000_get_bus_info(struct e1000_hw *hw)
6460 u16 pci_ex_link_status;
6463 switch (hw->mac_type) {
6464 case e1000_82542_rev2_0:
6465 case e1000_82542_rev2_1:
6466 hw->bus_type = e1000_bus_type_pci;
6467 hw->bus_speed = e1000_bus_speed_unknown;
6468 hw->bus_width = e1000_bus_width_unknown;
6473 case e1000_80003es2lan:
6474 hw->bus_type = e1000_bus_type_pci_express;
6475 hw->bus_speed = e1000_bus_speed_2500;
6476 ret_val = e1000_read_pcie_cap_reg(hw,
6478 &pci_ex_link_status);
6480 hw->bus_width = e1000_bus_width_unknown;
6482 hw->bus_width = (pci_ex_link_status & PCI_EX_LINK_WIDTH_MASK) >>
6483 PCI_EX_LINK_WIDTH_SHIFT;
6486 hw->bus_type = e1000_bus_type_pci_express;
6487 hw->bus_speed = e1000_bus_speed_2500;
6488 hw->bus_width = e1000_bus_width_pciex_1;
6491 status = er32(STATUS);
6492 hw->bus_type = (status & E1000_STATUS_PCIX_MODE) ?
6493 e1000_bus_type_pcix : e1000_bus_type_pci;
6495 if (hw->device_id == E1000_DEV_ID_82546EB_QUAD_COPPER) {
6496 hw->bus_speed = (hw->bus_type == e1000_bus_type_pci) ?
6497 e1000_bus_speed_66 : e1000_bus_speed_120;
6498 } else if (hw->bus_type == e1000_bus_type_pci) {
6499 hw->bus_speed = (status & E1000_STATUS_PCI66) ?
6500 e1000_bus_speed_66 : e1000_bus_speed_33;
6502 switch (status & E1000_STATUS_PCIX_SPEED) {
6503 case E1000_STATUS_PCIX_SPEED_66:
6504 hw->bus_speed = e1000_bus_speed_66;
6506 case E1000_STATUS_PCIX_SPEED_100:
6507 hw->bus_speed = e1000_bus_speed_100;
6509 case E1000_STATUS_PCIX_SPEED_133:
6510 hw->bus_speed = e1000_bus_speed_133;
6513 hw->bus_speed = e1000_bus_speed_reserved;
6517 hw->bus_width = (status & E1000_STATUS_BUS64) ?
6518 e1000_bus_width_64 : e1000_bus_width_32;
6523 /******************************************************************************
6524 * Writes a value to one of the devices registers using port I/O (as opposed to
6525 * memory mapped I/O). Only 82544 and newer devices support port I/O.
6527 * hw - Struct containing variables accessed by shared code
6528 * offset - offset to write to
6529 * value - value to write
6530 *****************************************************************************/
6531 static void e1000_write_reg_io(struct e1000_hw *hw, u32 offset, u32 value)
6533 unsigned long io_addr = hw->io_base;
6534 unsigned long io_data = hw->io_base + 4;
6536 e1000_io_write(hw, io_addr, offset);
6537 e1000_io_write(hw, io_data, value);
6540 /******************************************************************************
6541 * Estimates the cable length.
6543 * hw - Struct containing variables accessed by shared code
6544 * min_length - The estimated minimum length
6545 * max_length - The estimated maximum length
6547 * returns: - E1000_ERR_XXX
6550 * This function always returns a ranged length (minimum & maximum).
6551 * So for M88 phy's, this function interprets the one value returned from the
6552 * register to the minimum and maximum range.
6553 * For IGP phy's, the function calculates the range by the AGC registers.
6554 *****************************************************************************/
6555 static s32 e1000_get_cable_length(struct e1000_hw *hw, u16 *min_length,
6563 DEBUGFUNC("e1000_get_cable_length");
6565 *min_length = *max_length = 0;
6567 /* Use old method for Phy older than IGP */
6568 if (hw->phy_type == e1000_phy_m88) {
6570 ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS,
6574 cable_length = (phy_data & M88E1000_PSSR_CABLE_LENGTH) >>
6575 M88E1000_PSSR_CABLE_LENGTH_SHIFT;
6577 /* Convert the enum value to ranged values */
6578 switch (cable_length) {
6579 case e1000_cable_length_50:
6581 *max_length = e1000_igp_cable_length_50;
6583 case e1000_cable_length_50_80:
6584 *min_length = e1000_igp_cable_length_50;
6585 *max_length = e1000_igp_cable_length_80;
6587 case e1000_cable_length_80_110:
6588 *min_length = e1000_igp_cable_length_80;
6589 *max_length = e1000_igp_cable_length_110;
6591 case e1000_cable_length_110_140:
6592 *min_length = e1000_igp_cable_length_110;
6593 *max_length = e1000_igp_cable_length_140;
6595 case e1000_cable_length_140:
6596 *min_length = e1000_igp_cable_length_140;
6597 *max_length = e1000_igp_cable_length_170;
6600 return -E1000_ERR_PHY;
6603 } else if (hw->phy_type == e1000_phy_gg82563) {
6604 ret_val = e1000_read_phy_reg(hw, GG82563_PHY_DSP_DISTANCE,
6608 cable_length = phy_data & GG82563_DSPD_CABLE_LENGTH;
6610 switch (cable_length) {
6611 case e1000_gg_cable_length_60:
6613 *max_length = e1000_igp_cable_length_60;
6615 case e1000_gg_cable_length_60_115:
6616 *min_length = e1000_igp_cable_length_60;
6617 *max_length = e1000_igp_cable_length_115;
6619 case e1000_gg_cable_length_115_150:
6620 *min_length = e1000_igp_cable_length_115;
6621 *max_length = e1000_igp_cable_length_150;
6623 case e1000_gg_cable_length_150:
6624 *min_length = e1000_igp_cable_length_150;
6625 *max_length = e1000_igp_cable_length_180;
6628 return -E1000_ERR_PHY;
6631 } else if (hw->phy_type == e1000_phy_igp) { /* For IGP PHY */
6633 u16 min_agc_value = IGP01E1000_AGC_LENGTH_TABLE_SIZE;
6634 u16 agc_reg_array[IGP01E1000_PHY_CHANNEL_NUM] =
6635 {IGP01E1000_PHY_AGC_A,
6636 IGP01E1000_PHY_AGC_B,
6637 IGP01E1000_PHY_AGC_C,
6638 IGP01E1000_PHY_AGC_D};
6639 /* Read the AGC registers for all channels */
6640 for (i = 0; i < IGP01E1000_PHY_CHANNEL_NUM; i++) {
6642 ret_val = e1000_read_phy_reg(hw, agc_reg_array[i], &phy_data);
6646 cur_agc_value = phy_data >> IGP01E1000_AGC_LENGTH_SHIFT;
6648 /* Value bound check. */
6649 if ((cur_agc_value >= IGP01E1000_AGC_LENGTH_TABLE_SIZE - 1) ||
6650 (cur_agc_value == 0))
6651 return -E1000_ERR_PHY;
6653 agc_value += cur_agc_value;
6655 /* Update minimal AGC value. */
6656 if (min_agc_value > cur_agc_value)
6657 min_agc_value = cur_agc_value;
6660 /* Remove the minimal AGC result for length < 50m */
6661 if (agc_value < IGP01E1000_PHY_CHANNEL_NUM * e1000_igp_cable_length_50) {
6662 agc_value -= min_agc_value;
6664 /* Get the average length of the remaining 3 channels */
6665 agc_value /= (IGP01E1000_PHY_CHANNEL_NUM - 1);
6667 /* Get the average length of all the 4 channels. */
6668 agc_value /= IGP01E1000_PHY_CHANNEL_NUM;
6671 /* Set the range of the calculated length. */
6672 *min_length = ((e1000_igp_cable_length_table[agc_value] -
6673 IGP01E1000_AGC_RANGE) > 0) ?
6674 (e1000_igp_cable_length_table[agc_value] -
6675 IGP01E1000_AGC_RANGE) : 0;
6676 *max_length = e1000_igp_cable_length_table[agc_value] +
6677 IGP01E1000_AGC_RANGE;
6678 } else if (hw->phy_type == e1000_phy_igp_2 ||
6679 hw->phy_type == e1000_phy_igp_3) {
6680 u16 cur_agc_index, max_agc_index = 0;
6681 u16 min_agc_index = IGP02E1000_AGC_LENGTH_TABLE_SIZE - 1;
6682 u16 agc_reg_array[IGP02E1000_PHY_CHANNEL_NUM] =
6683 {IGP02E1000_PHY_AGC_A,
6684 IGP02E1000_PHY_AGC_B,
6685 IGP02E1000_PHY_AGC_C,
6686 IGP02E1000_PHY_AGC_D};
6687 /* Read the AGC registers for all channels */
6688 for (i = 0; i < IGP02E1000_PHY_CHANNEL_NUM; i++) {
6689 ret_val = e1000_read_phy_reg(hw, agc_reg_array[i], &phy_data);
6693 /* Getting bits 15:9, which represent the combination of course and
6694 * fine gain values. The result is a number that can be put into
6695 * the lookup table to obtain the approximate cable length. */
6696 cur_agc_index = (phy_data >> IGP02E1000_AGC_LENGTH_SHIFT) &
6697 IGP02E1000_AGC_LENGTH_MASK;
6699 /* Array index bound check. */
6700 if ((cur_agc_index >= IGP02E1000_AGC_LENGTH_TABLE_SIZE) ||
6701 (cur_agc_index == 0))
6702 return -E1000_ERR_PHY;
6704 /* Remove min & max AGC values from calculation. */
6705 if (e1000_igp_2_cable_length_table[min_agc_index] >
6706 e1000_igp_2_cable_length_table[cur_agc_index])
6707 min_agc_index = cur_agc_index;
6708 if (e1000_igp_2_cable_length_table[max_agc_index] <
6709 e1000_igp_2_cable_length_table[cur_agc_index])
6710 max_agc_index = cur_agc_index;
6712 agc_value += e1000_igp_2_cable_length_table[cur_agc_index];
6715 agc_value -= (e1000_igp_2_cable_length_table[min_agc_index] +
6716 e1000_igp_2_cable_length_table[max_agc_index]);
6717 agc_value /= (IGP02E1000_PHY_CHANNEL_NUM - 2);
6719 /* Calculate cable length with the error range of +/- 10 meters. */
6720 *min_length = ((agc_value - IGP02E1000_AGC_RANGE) > 0) ?
6721 (agc_value - IGP02E1000_AGC_RANGE) : 0;
6722 *max_length = agc_value + IGP02E1000_AGC_RANGE;
6725 return E1000_SUCCESS;
6728 /******************************************************************************
6729 * Check the cable polarity
6731 * hw - Struct containing variables accessed by shared code
6732 * polarity - output parameter : 0 - Polarity is not reversed
6733 * 1 - Polarity is reversed.
6735 * returns: - E1000_ERR_XXX
6738 * For phy's older then IGP, this function simply reads the polarity bit in the
6739 * Phy Status register. For IGP phy's, this bit is valid only if link speed is
6740 * 10 Mbps. If the link speed is 100 Mbps there is no polarity so this bit will
6741 * return 0. If the link speed is 1000 Mbps the polarity status is in the
6742 * IGP01E1000_PHY_PCS_INIT_REG.
6743 *****************************************************************************/
6744 static s32 e1000_check_polarity(struct e1000_hw *hw,
6745 e1000_rev_polarity *polarity)
6750 DEBUGFUNC("e1000_check_polarity");
6752 if ((hw->phy_type == e1000_phy_m88) ||
6753 (hw->phy_type == e1000_phy_gg82563)) {
6754 /* return the Polarity bit in the Status register. */
6755 ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS,
6759 *polarity = ((phy_data & M88E1000_PSSR_REV_POLARITY) >>
6760 M88E1000_PSSR_REV_POLARITY_SHIFT) ?
6761 e1000_rev_polarity_reversed : e1000_rev_polarity_normal;
6763 } else if (hw->phy_type == e1000_phy_igp ||
6764 hw->phy_type == e1000_phy_igp_3 ||
6765 hw->phy_type == e1000_phy_igp_2) {
6766 /* Read the Status register to check the speed */
6767 ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_STATUS,
6772 /* If speed is 1000 Mbps, must read the IGP01E1000_PHY_PCS_INIT_REG to
6773 * find the polarity status */
6774 if ((phy_data & IGP01E1000_PSSR_SPEED_MASK) ==
6775 IGP01E1000_PSSR_SPEED_1000MBPS) {
6777 /* Read the GIG initialization PCS register (0x00B4) */
6778 ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PCS_INIT_REG,
6783 /* Check the polarity bits */
6784 *polarity = (phy_data & IGP01E1000_PHY_POLARITY_MASK) ?
6785 e1000_rev_polarity_reversed : e1000_rev_polarity_normal;
6787 /* For 10 Mbps, read the polarity bit in the status register. (for
6788 * 100 Mbps this bit is always 0) */
6789 *polarity = (phy_data & IGP01E1000_PSSR_POLARITY_REVERSED) ?
6790 e1000_rev_polarity_reversed : e1000_rev_polarity_normal;
6792 } else if (hw->phy_type == e1000_phy_ife) {
6793 ret_val = e1000_read_phy_reg(hw, IFE_PHY_EXTENDED_STATUS_CONTROL,
6797 *polarity = ((phy_data & IFE_PESC_POLARITY_REVERSED) >>
6798 IFE_PESC_POLARITY_REVERSED_SHIFT) ?
6799 e1000_rev_polarity_reversed : e1000_rev_polarity_normal;
6801 return E1000_SUCCESS;
6804 /******************************************************************************
6805 * Check if Downshift occured
6807 * hw - Struct containing variables accessed by shared code
6808 * downshift - output parameter : 0 - No Downshift ocured.
6809 * 1 - Downshift ocured.
6811 * returns: - E1000_ERR_XXX
6814 * For phy's older then IGP, this function reads the Downshift bit in the Phy
6815 * Specific Status register. For IGP phy's, it reads the Downgrade bit in the
6816 * Link Health register. In IGP this bit is latched high, so the driver must
6817 * read it immediately after link is established.
6818 *****************************************************************************/
6819 static s32 e1000_check_downshift(struct e1000_hw *hw)
6824 DEBUGFUNC("e1000_check_downshift");
6826 if (hw->phy_type == e1000_phy_igp ||
6827 hw->phy_type == e1000_phy_igp_3 ||
6828 hw->phy_type == e1000_phy_igp_2) {
6829 ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_LINK_HEALTH,
6834 hw->speed_downgraded = (phy_data & IGP01E1000_PLHR_SS_DOWNGRADE) ? 1 : 0;
6835 } else if ((hw->phy_type == e1000_phy_m88) ||
6836 (hw->phy_type == e1000_phy_gg82563)) {
6837 ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS,
6842 hw->speed_downgraded = (phy_data & M88E1000_PSSR_DOWNSHIFT) >>
6843 M88E1000_PSSR_DOWNSHIFT_SHIFT;
6844 } else if (hw->phy_type == e1000_phy_ife) {
6845 /* e1000_phy_ife supports 10/100 speed only */
6846 hw->speed_downgraded = false;
6849 return E1000_SUCCESS;
6852 /*****************************************************************************
6854 * 82541_rev_2 & 82547_rev_2 have the capability to configure the DSP when a
6855 * gigabit link is achieved to improve link quality.
6857 * hw: Struct containing variables accessed by shared code
6859 * returns: - E1000_ERR_PHY if fail to read/write the PHY
6860 * E1000_SUCCESS at any other case.
6862 ****************************************************************************/
6864 static s32 e1000_config_dsp_after_link_change(struct e1000_hw *hw, bool link_up)
6867 u16 phy_data, phy_saved_data, speed, duplex, i;
6868 u16 dsp_reg_array[IGP01E1000_PHY_CHANNEL_NUM] =
6869 {IGP01E1000_PHY_AGC_PARAM_A,
6870 IGP01E1000_PHY_AGC_PARAM_B,
6871 IGP01E1000_PHY_AGC_PARAM_C,
6872 IGP01E1000_PHY_AGC_PARAM_D};
6873 u16 min_length, max_length;
6875 DEBUGFUNC("e1000_config_dsp_after_link_change");
6877 if (hw->phy_type != e1000_phy_igp)
6878 return E1000_SUCCESS;
6881 ret_val = e1000_get_speed_and_duplex(hw, &speed, &duplex);
6883 DEBUGOUT("Error getting link speed and duplex\n");
6887 if (speed == SPEED_1000) {
6889 ret_val = e1000_get_cable_length(hw, &min_length, &max_length);
6893 if ((hw->dsp_config_state == e1000_dsp_config_enabled) &&
6894 min_length >= e1000_igp_cable_length_50) {
6896 for (i = 0; i < IGP01E1000_PHY_CHANNEL_NUM; i++) {
6897 ret_val = e1000_read_phy_reg(hw, dsp_reg_array[i],
6902 phy_data &= ~IGP01E1000_PHY_EDAC_MU_INDEX;
6904 ret_val = e1000_write_phy_reg(hw, dsp_reg_array[i],
6909 hw->dsp_config_state = e1000_dsp_config_activated;
6912 if ((hw->ffe_config_state == e1000_ffe_config_enabled) &&
6913 (min_length < e1000_igp_cable_length_50)) {
6915 u16 ffe_idle_err_timeout = FFE_IDLE_ERR_COUNT_TIMEOUT_20;
6918 /* clear previous idle error counts */
6919 ret_val = e1000_read_phy_reg(hw, PHY_1000T_STATUS,
6924 for (i = 0; i < ffe_idle_err_timeout; i++) {
6926 ret_val = e1000_read_phy_reg(hw, PHY_1000T_STATUS,
6931 idle_errs += (phy_data & SR_1000T_IDLE_ERROR_CNT);
6932 if (idle_errs > SR_1000T_PHY_EXCESSIVE_IDLE_ERR_COUNT) {
6933 hw->ffe_config_state = e1000_ffe_config_active;
6935 ret_val = e1000_write_phy_reg(hw,
6936 IGP01E1000_PHY_DSP_FFE,
6937 IGP01E1000_PHY_DSP_FFE_CM_CP);
6944 ffe_idle_err_timeout = FFE_IDLE_ERR_COUNT_TIMEOUT_100;
6949 if (hw->dsp_config_state == e1000_dsp_config_activated) {
6950 /* Save off the current value of register 0x2F5B to be restored at
6951 * the end of the routines. */
6952 ret_val = e1000_read_phy_reg(hw, 0x2F5B, &phy_saved_data);
6957 /* Disable the PHY transmitter */
6958 ret_val = e1000_write_phy_reg(hw, 0x2F5B, 0x0003);
6965 ret_val = e1000_write_phy_reg(hw, 0x0000,
6966 IGP01E1000_IEEE_FORCE_GIGA);
6969 for (i = 0; i < IGP01E1000_PHY_CHANNEL_NUM; i++) {
6970 ret_val = e1000_read_phy_reg(hw, dsp_reg_array[i], &phy_data);
6974 phy_data &= ~IGP01E1000_PHY_EDAC_MU_INDEX;
6975 phy_data |= IGP01E1000_PHY_EDAC_SIGN_EXT_9_BITS;
6977 ret_val = e1000_write_phy_reg(hw,dsp_reg_array[i], phy_data);
6982 ret_val = e1000_write_phy_reg(hw, 0x0000,
6983 IGP01E1000_IEEE_RESTART_AUTONEG);
6989 /* Now enable the transmitter */
6990 ret_val = e1000_write_phy_reg(hw, 0x2F5B, phy_saved_data);
6995 hw->dsp_config_state = e1000_dsp_config_enabled;
6998 if (hw->ffe_config_state == e1000_ffe_config_active) {
6999 /* Save off the current value of register 0x2F5B to be restored at
7000 * the end of the routines. */
7001 ret_val = e1000_read_phy_reg(hw, 0x2F5B, &phy_saved_data);
7006 /* Disable the PHY transmitter */
7007 ret_val = e1000_write_phy_reg(hw, 0x2F5B, 0x0003);
7014 ret_val = e1000_write_phy_reg(hw, 0x0000,
7015 IGP01E1000_IEEE_FORCE_GIGA);
7018 ret_val = e1000_write_phy_reg(hw, IGP01E1000_PHY_DSP_FFE,
7019 IGP01E1000_PHY_DSP_FFE_DEFAULT);
7023 ret_val = e1000_write_phy_reg(hw, 0x0000,
7024 IGP01E1000_IEEE_RESTART_AUTONEG);
7030 /* Now enable the transmitter */
7031 ret_val = e1000_write_phy_reg(hw, 0x2F5B, phy_saved_data);
7036 hw->ffe_config_state = e1000_ffe_config_enabled;
7039 return E1000_SUCCESS;
7042 /*****************************************************************************
7043 * Set PHY to class A mode
7044 * Assumes the following operations will follow to enable the new class mode.
7045 * 1. Do a PHY soft reset
7046 * 2. Restart auto-negotiation or force link.
7048 * hw - Struct containing variables accessed by shared code
7049 ****************************************************************************/
7050 static s32 e1000_set_phy_mode(struct e1000_hw *hw)
7055 DEBUGFUNC("e1000_set_phy_mode");
7057 if ((hw->mac_type == e1000_82545_rev_3) &&
7058 (hw->media_type == e1000_media_type_copper)) {
7059 ret_val = e1000_read_eeprom(hw, EEPROM_PHY_CLASS_WORD, 1, &eeprom_data);
7064 if ((eeprom_data != EEPROM_RESERVED_WORD) &&
7065 (eeprom_data & EEPROM_PHY_CLASS_A)) {
7066 ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, 0x000B);
7069 ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, 0x8104);
7073 hw->phy_reset_disable = false;
7077 return E1000_SUCCESS;
7080 /*****************************************************************************
7082 * This function sets the lplu state according to the active flag. When
7083 * activating lplu this function also disables smart speed and vise versa.
7084 * lplu will not be activated unless the device autonegotiation advertisment
7085 * meets standards of either 10 or 10/100 or 10/100/1000 at all duplexes.
7086 * hw: Struct containing variables accessed by shared code
7087 * active - true to enable lplu false to disable lplu.
7089 * returns: - E1000_ERR_PHY if fail to read/write the PHY
7090 * E1000_SUCCESS at any other case.
7092 ****************************************************************************/
7094 static s32 e1000_set_d3_lplu_state(struct e1000_hw *hw, bool active)
7099 DEBUGFUNC("e1000_set_d3_lplu_state");
7101 if (hw->phy_type != e1000_phy_igp && hw->phy_type != e1000_phy_igp_2
7102 && hw->phy_type != e1000_phy_igp_3)
7103 return E1000_SUCCESS;
7105 /* During driver activity LPLU should not be used or it will attain link
7106 * from the lowest speeds starting from 10Mbps. The capability is used for
7107 * Dx transitions and states */
7108 if (hw->mac_type == e1000_82541_rev_2 || hw->mac_type == e1000_82547_rev_2) {
7109 ret_val = e1000_read_phy_reg(hw, IGP01E1000_GMII_FIFO, &phy_data);
7112 } else if (hw->mac_type == e1000_ich8lan) {
7113 /* MAC writes into PHY register based on the state transition
7114 * and start auto-negotiation. SW driver can overwrite the settings
7115 * in CSR PHY power control E1000_PHY_CTRL register. */
7116 phy_ctrl = er32(PHY_CTRL);
7118 ret_val = e1000_read_phy_reg(hw, IGP02E1000_PHY_POWER_MGMT, &phy_data);
7124 if (hw->mac_type == e1000_82541_rev_2 ||
7125 hw->mac_type == e1000_82547_rev_2) {
7126 phy_data &= ~IGP01E1000_GMII_FLEX_SPD;
7127 ret_val = e1000_write_phy_reg(hw, IGP01E1000_GMII_FIFO, phy_data);
7131 if (hw->mac_type == e1000_ich8lan) {
7132 phy_ctrl &= ~E1000_PHY_CTRL_NOND0A_LPLU;
7133 ew32(PHY_CTRL, phy_ctrl);
7135 phy_data &= ~IGP02E1000_PM_D3_LPLU;
7136 ret_val = e1000_write_phy_reg(hw, IGP02E1000_PHY_POWER_MGMT,
7143 /* LPLU and SmartSpeed are mutually exclusive. LPLU is used during
7144 * Dx states where the power conservation is most important. During
7145 * driver activity we should enable SmartSpeed, so performance is
7147 if (hw->smart_speed == e1000_smart_speed_on) {
7148 ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
7153 phy_data |= IGP01E1000_PSCFR_SMART_SPEED;
7154 ret_val = e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
7158 } else if (hw->smart_speed == e1000_smart_speed_off) {
7159 ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
7164 phy_data &= ~IGP01E1000_PSCFR_SMART_SPEED;
7165 ret_val = e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
7171 } else if ((hw->autoneg_advertised == AUTONEG_ADVERTISE_SPEED_DEFAULT) ||
7172 (hw->autoneg_advertised == AUTONEG_ADVERTISE_10_ALL ) ||
7173 (hw->autoneg_advertised == AUTONEG_ADVERTISE_10_100_ALL)) {
7175 if (hw->mac_type == e1000_82541_rev_2 ||
7176 hw->mac_type == e1000_82547_rev_2) {
7177 phy_data |= IGP01E1000_GMII_FLEX_SPD;
7178 ret_val = e1000_write_phy_reg(hw, IGP01E1000_GMII_FIFO, phy_data);
7182 if (hw->mac_type == e1000_ich8lan) {
7183 phy_ctrl |= E1000_PHY_CTRL_NOND0A_LPLU;
7184 ew32(PHY_CTRL, phy_ctrl);
7186 phy_data |= IGP02E1000_PM_D3_LPLU;
7187 ret_val = e1000_write_phy_reg(hw, IGP02E1000_PHY_POWER_MGMT,
7194 /* When LPLU is enabled we should disable SmartSpeed */
7195 ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG, &phy_data);
7199 phy_data &= ~IGP01E1000_PSCFR_SMART_SPEED;
7200 ret_val = e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG, phy_data);
7205 return E1000_SUCCESS;
7208 /*****************************************************************************
7210 * This function sets the lplu d0 state according to the active flag. When
7211 * activating lplu this function also disables smart speed and vise versa.
7212 * lplu will not be activated unless the device autonegotiation advertisment
7213 * meets standards of either 10 or 10/100 or 10/100/1000 at all duplexes.
7214 * hw: Struct containing variables accessed by shared code
7215 * active - true to enable lplu false to disable lplu.
7217 * returns: - E1000_ERR_PHY if fail to read/write the PHY
7218 * E1000_SUCCESS at any other case.
7220 ****************************************************************************/
7222 static s32 e1000_set_d0_lplu_state(struct e1000_hw *hw, bool active)
7227 DEBUGFUNC("e1000_set_d0_lplu_state");
7229 if (hw->mac_type <= e1000_82547_rev_2)
7230 return E1000_SUCCESS;
7232 if (hw->mac_type == e1000_ich8lan) {
7233 phy_ctrl = er32(PHY_CTRL);
7235 ret_val = e1000_read_phy_reg(hw, IGP02E1000_PHY_POWER_MGMT, &phy_data);
7241 if (hw->mac_type == e1000_ich8lan) {
7242 phy_ctrl &= ~E1000_PHY_CTRL_D0A_LPLU;
7243 ew32(PHY_CTRL, phy_ctrl);
7245 phy_data &= ~IGP02E1000_PM_D0_LPLU;
7246 ret_val = e1000_write_phy_reg(hw, IGP02E1000_PHY_POWER_MGMT, phy_data);
7251 /* LPLU and SmartSpeed are mutually exclusive. LPLU is used during
7252 * Dx states where the power conservation is most important. During
7253 * driver activity we should enable SmartSpeed, so performance is
7255 if (hw->smart_speed == e1000_smart_speed_on) {
7256 ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
7261 phy_data |= IGP01E1000_PSCFR_SMART_SPEED;
7262 ret_val = e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
7266 } else if (hw->smart_speed == e1000_smart_speed_off) {
7267 ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
7272 phy_data &= ~IGP01E1000_PSCFR_SMART_SPEED;
7273 ret_val = e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
7282 if (hw->mac_type == e1000_ich8lan) {
7283 phy_ctrl |= E1000_PHY_CTRL_D0A_LPLU;
7284 ew32(PHY_CTRL, phy_ctrl);
7286 phy_data |= IGP02E1000_PM_D0_LPLU;
7287 ret_val = e1000_write_phy_reg(hw, IGP02E1000_PHY_POWER_MGMT, phy_data);
7292 /* When LPLU is enabled we should disable SmartSpeed */
7293 ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG, &phy_data);
7297 phy_data &= ~IGP01E1000_PSCFR_SMART_SPEED;
7298 ret_val = e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG, phy_data);
7303 return E1000_SUCCESS;
7306 /******************************************************************************
7307 * Change VCO speed register to improve Bit Error Rate performance of SERDES.
7309 * hw - Struct containing variables accessed by shared code
7310 *****************************************************************************/
7311 static s32 e1000_set_vco_speed(struct e1000_hw *hw)
7314 u16 default_page = 0;
7317 DEBUGFUNC("e1000_set_vco_speed");
7319 switch (hw->mac_type) {
7320 case e1000_82545_rev_3:
7321 case e1000_82546_rev_3:
7324 return E1000_SUCCESS;
7327 /* Set PHY register 30, page 5, bit 8 to 0 */
7329 ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, &default_page);
7333 ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, 0x0005);
7337 ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, &phy_data);
7341 phy_data &= ~M88E1000_PHY_VCO_REG_BIT8;
7342 ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, phy_data);
7346 /* Set PHY register 30, page 4, bit 11 to 1 */
7348 ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, 0x0004);
7352 ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, &phy_data);
7356 phy_data |= M88E1000_PHY_VCO_REG_BIT11;
7357 ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, phy_data);
7361 ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, default_page);
7365 return E1000_SUCCESS;
7369 /*****************************************************************************
7370 * This function reads the cookie from ARC ram.
7372 * returns: - E1000_SUCCESS .
7373 ****************************************************************************/
7374 static s32 e1000_host_if_read_cookie(struct e1000_hw *hw, u8 *buffer)
7377 u32 offset = E1000_MNG_DHCP_COOKIE_OFFSET;
7378 u8 length = E1000_MNG_DHCP_COOKIE_LENGTH;
7380 length = (length >> 2);
7381 offset = (offset >> 2);
7383 for (i = 0; i < length; i++) {
7384 *((u32 *)buffer + i) =
7385 E1000_READ_REG_ARRAY_DWORD(hw, HOST_IF, offset + i);
7387 return E1000_SUCCESS;
7391 /*****************************************************************************
7392 * This function checks whether the HOST IF is enabled for command operaton
7393 * and also checks whether the previous command is completed.
7394 * It busy waits in case of previous command is not completed.
7396 * returns: - E1000_ERR_HOST_INTERFACE_COMMAND in case if is not ready or
7398 * - E1000_SUCCESS for success.
7399 ****************************************************************************/
7400 static s32 e1000_mng_enable_host_if(struct e1000_hw *hw)
7405 /* Check that the host interface is enabled. */
7407 if ((hicr & E1000_HICR_EN) == 0) {
7408 DEBUGOUT("E1000_HOST_EN bit disabled.\n");
7409 return -E1000_ERR_HOST_INTERFACE_COMMAND;
7411 /* check the previous command is completed */
7412 for (i = 0; i < E1000_MNG_DHCP_COMMAND_TIMEOUT; i++) {
7414 if (!(hicr & E1000_HICR_C))
7419 if (i == E1000_MNG_DHCP_COMMAND_TIMEOUT) {
7420 DEBUGOUT("Previous command timeout failed .\n");
7421 return -E1000_ERR_HOST_INTERFACE_COMMAND;
7423 return E1000_SUCCESS;
7426 /*****************************************************************************
7427 * This function writes the buffer content at the offset given on the host if.
7428 * It also does alignment considerations to do the writes in most efficient way.
7429 * Also fills up the sum of the buffer in *buffer parameter.
7431 * returns - E1000_SUCCESS for success.
7432 ****************************************************************************/
7433 static s32 e1000_mng_host_if_write(struct e1000_hw *hw, u8 *buffer, u16 length,
7434 u16 offset, u8 *sum)
7437 u8 *bufptr = buffer;
7439 u16 remaining, i, j, prev_bytes;
7441 /* sum = only sum of the data and it is not checksum */
7443 if (length == 0 || offset + length > E1000_HI_MAX_MNG_DATA_LENGTH) {
7444 return -E1000_ERR_PARAM;
7448 prev_bytes = offset & 0x3;
7453 data = E1000_READ_REG_ARRAY_DWORD(hw, HOST_IF, offset);
7454 for (j = prev_bytes; j < sizeof(u32); j++) {
7455 *(tmp + j) = *bufptr++;
7458 E1000_WRITE_REG_ARRAY_DWORD(hw, HOST_IF, offset, data);
7459 length -= j - prev_bytes;
7463 remaining = length & 0x3;
7464 length -= remaining;
7466 /* Calculate length in DWORDs */
7469 /* The device driver writes the relevant command block into the
7471 for (i = 0; i < length; i++) {
7472 for (j = 0; j < sizeof(u32); j++) {
7473 *(tmp + j) = *bufptr++;
7477 E1000_WRITE_REG_ARRAY_DWORD(hw, HOST_IF, offset + i, data);
7480 for (j = 0; j < sizeof(u32); j++) {
7482 *(tmp + j) = *bufptr++;
7488 E1000_WRITE_REG_ARRAY_DWORD(hw, HOST_IF, offset + i, data);
7491 return E1000_SUCCESS;
7495 /*****************************************************************************
7496 * This function writes the command header after does the checksum calculation.
7498 * returns - E1000_SUCCESS for success.
7499 ****************************************************************************/
7500 static s32 e1000_mng_write_cmd_header(struct e1000_hw *hw,
7501 struct e1000_host_mng_command_header *hdr)
7507 /* Write the whole command header structure which includes sum of
7510 u16 length = sizeof(struct e1000_host_mng_command_header);
7512 sum = hdr->checksum;
7520 hdr->checksum = 0 - sum;
7523 /* The device driver writes the relevant command block into the ram area. */
7524 for (i = 0; i < length; i++) {
7525 E1000_WRITE_REG_ARRAY_DWORD(hw, HOST_IF, i, *((u32 *)hdr + i));
7526 E1000_WRITE_FLUSH();
7529 return E1000_SUCCESS;
7533 /*****************************************************************************
7534 * This function indicates to ARC that a new command is pending which completes
7535 * one write operation by the driver.
7537 * returns - E1000_SUCCESS for success.
7538 ****************************************************************************/
7539 static s32 e1000_mng_write_commit(struct e1000_hw *hw)
7544 /* Setting this bit tells the ARC that a new command is pending. */
7545 ew32(HICR, hicr | E1000_HICR_C);
7547 return E1000_SUCCESS;
7551 /*****************************************************************************
7552 * This function checks the mode of the firmware.
7554 * returns - true when the mode is IAMT or false.
7555 ****************************************************************************/
7556 bool e1000_check_mng_mode(struct e1000_hw *hw)
7562 if (hw->mac_type == e1000_ich8lan) {
7563 if ((fwsm & E1000_FWSM_MODE_MASK) ==
7564 (E1000_MNG_ICH_IAMT_MODE << E1000_FWSM_MODE_SHIFT))
7566 } else if ((fwsm & E1000_FWSM_MODE_MASK) ==
7567 (E1000_MNG_IAMT_MODE << E1000_FWSM_MODE_SHIFT))
7574 /*****************************************************************************
7575 * This function writes the dhcp info .
7576 ****************************************************************************/
7577 s32 e1000_mng_write_dhcp_info(struct e1000_hw *hw, u8 *buffer, u16 length)
7580 struct e1000_host_mng_command_header hdr;
7582 hdr.command_id = E1000_MNG_DHCP_TX_PAYLOAD_CMD;
7583 hdr.command_length = length;
7588 ret_val = e1000_mng_enable_host_if(hw);
7589 if (ret_val == E1000_SUCCESS) {
7590 ret_val = e1000_mng_host_if_write(hw, buffer, length, sizeof(hdr),
7592 if (ret_val == E1000_SUCCESS) {
7593 ret_val = e1000_mng_write_cmd_header(hw, &hdr);
7594 if (ret_val == E1000_SUCCESS)
7595 ret_val = e1000_mng_write_commit(hw);
7602 /*****************************************************************************
7603 * This function calculates the checksum.
7605 * returns - checksum of buffer contents.
7606 ****************************************************************************/
7607 static u8 e1000_calculate_mng_checksum(char *buffer, u32 length)
7615 for (i=0; i < length; i++)
7618 return (u8)(0 - sum);
7621 /*****************************************************************************
7622 * This function checks whether tx pkt filtering needs to be enabled or not.
7624 * returns - true for packet filtering or false.
7625 ****************************************************************************/
7626 bool e1000_enable_tx_pkt_filtering(struct e1000_hw *hw)
7628 /* called in init as well as watchdog timer functions */
7630 s32 ret_val, checksum;
7631 bool tx_filter = false;
7632 struct e1000_host_mng_dhcp_cookie *hdr = &(hw->mng_cookie);
7633 u8 *buffer = (u8 *) &(hw->mng_cookie);
7635 if (e1000_check_mng_mode(hw)) {
7636 ret_val = e1000_mng_enable_host_if(hw);
7637 if (ret_val == E1000_SUCCESS) {
7638 ret_val = e1000_host_if_read_cookie(hw, buffer);
7639 if (ret_val == E1000_SUCCESS) {
7640 checksum = hdr->checksum;
7642 if ((hdr->signature == E1000_IAMT_SIGNATURE) &&
7643 checksum == e1000_calculate_mng_checksum((char *)buffer,
7644 E1000_MNG_DHCP_COOKIE_LENGTH)) {
7646 E1000_MNG_DHCP_COOKIE_STATUS_PARSING_SUPPORT)
7655 hw->tx_pkt_filtering = tx_filter;
7659 /******************************************************************************
7660 * Verifies the hardware needs to allow ARPs to be processed by the host
7662 * hw - Struct containing variables accessed by shared code
7664 * returns: - true/false
7666 *****************************************************************************/
7667 u32 e1000_enable_mng_pass_thru(struct e1000_hw *hw)
7672 if (hw->asf_firmware_present) {
7675 if (!(manc & E1000_MANC_RCV_TCO_EN) ||
7676 !(manc & E1000_MANC_EN_MAC_ADDR_FILTER))
7678 if (e1000_arc_subsystem_valid(hw)) {
7680 factps = er32(FACTPS);
7682 if ((((fwsm & E1000_FWSM_MODE_MASK) >> E1000_FWSM_MODE_SHIFT) ==
7683 e1000_mng_mode_pt) && !(factps & E1000_FACTPS_MNGCG))
7686 if ((manc & E1000_MANC_SMBUS_EN) && !(manc & E1000_MANC_ASF_EN))
7692 static s32 e1000_polarity_reversal_workaround(struct e1000_hw *hw)
7698 /* Polarity reversal workaround for forced 10F/10H links. */
7700 /* Disable the transmitter on the PHY */
7702 ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, 0x0019);
7705 ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, 0xFFFF);
7709 ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, 0x0000);
7713 /* This loop will early-out if the NO link condition has been met. */
7714 for (i = PHY_FORCE_TIME; i > 0; i--) {
7715 /* Read the MII Status Register and wait for Link Status bit
7719 ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
7723 ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
7727 if ((mii_status_reg & ~MII_SR_LINK_STATUS) == 0) break;
7731 /* Recommended delay time after link has been lost */
7734 /* Now we will re-enable th transmitter on the PHY */
7736 ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, 0x0019);
7740 ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, 0xFFF0);
7744 ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, 0xFF00);
7748 ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, 0x0000);
7752 ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, 0x0000);
7756 /* This loop will early-out if the link condition has been met. */
7757 for (i = PHY_FORCE_TIME; i > 0; i--) {
7758 /* Read the MII Status Register and wait for Link Status bit
7762 ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
7766 ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
7770 if (mii_status_reg & MII_SR_LINK_STATUS) break;
7773 return E1000_SUCCESS;
7776 /***************************************************************************
7778 * Disables PCI-Express master access.
7780 * hw: Struct containing variables accessed by shared code
7784 ***************************************************************************/
7785 static void e1000_set_pci_express_master_disable(struct e1000_hw *hw)
7789 DEBUGFUNC("e1000_set_pci_express_master_disable");
7791 if (hw->bus_type != e1000_bus_type_pci_express)
7795 ctrl |= E1000_CTRL_GIO_MASTER_DISABLE;
7799 /*******************************************************************************
7801 * Disables PCI-Express master access and verifies there are no pending requests
7803 * hw: Struct containing variables accessed by shared code
7805 * returns: - E1000_ERR_MASTER_REQUESTS_PENDING if master disable bit hasn't
7806 * caused the master requests to be disabled.
7807 * E1000_SUCCESS master requests disabled.
7809 ******************************************************************************/
7810 s32 e1000_disable_pciex_master(struct e1000_hw *hw)
7812 s32 timeout = MASTER_DISABLE_TIMEOUT; /* 80ms */
7814 DEBUGFUNC("e1000_disable_pciex_master");
7816 if (hw->bus_type != e1000_bus_type_pci_express)
7817 return E1000_SUCCESS;
7819 e1000_set_pci_express_master_disable(hw);
7822 if (!(er32(STATUS) & E1000_STATUS_GIO_MASTER_ENABLE))
7830 DEBUGOUT("Master requests are pending.\n");
7831 return -E1000_ERR_MASTER_REQUESTS_PENDING;
7834 return E1000_SUCCESS;
7837 /*******************************************************************************
7839 * Check for EEPROM Auto Read bit done.
7841 * hw: Struct containing variables accessed by shared code
7843 * returns: - E1000_ERR_RESET if fail to reset MAC
7844 * E1000_SUCCESS at any other case.
7846 ******************************************************************************/
7847 static s32 e1000_get_auto_rd_done(struct e1000_hw *hw)
7849 s32 timeout = AUTO_READ_DONE_TIMEOUT;
7851 DEBUGFUNC("e1000_get_auto_rd_done");
7853 switch (hw->mac_type) {
7860 case e1000_80003es2lan:
7863 if (er32(EECD) & E1000_EECD_AUTO_RD)
7870 DEBUGOUT("Auto read by HW from EEPROM has not completed.\n");
7871 return -E1000_ERR_RESET;
7876 /* PHY configuration from NVM just starts after EECD_AUTO_RD sets to high.
7877 * Need to wait for PHY configuration completion before accessing NVM
7879 if (hw->mac_type == e1000_82573)
7882 return E1000_SUCCESS;
7885 /***************************************************************************
7886 * Checks if the PHY configuration is done
7888 * hw: Struct containing variables accessed by shared code
7890 * returns: - E1000_ERR_RESET if fail to reset MAC
7891 * E1000_SUCCESS at any other case.
7893 ***************************************************************************/
7894 static s32 e1000_get_phy_cfg_done(struct e1000_hw *hw)
7896 s32 timeout = PHY_CFG_TIMEOUT;
7897 u32 cfg_mask = E1000_EEPROM_CFG_DONE;
7899 DEBUGFUNC("e1000_get_phy_cfg_done");
7901 switch (hw->mac_type) {
7905 case e1000_80003es2lan:
7906 /* Separate *_CFG_DONE_* bit for each port */
7907 if (er32(STATUS) & E1000_STATUS_FUNC_1)
7908 cfg_mask = E1000_EEPROM_CFG_DONE_PORT_1;
7913 if (er32(EEMNGCTL) & cfg_mask)
7920 DEBUGOUT("MNG configuration cycle has not completed.\n");
7921 return -E1000_ERR_RESET;
7926 return E1000_SUCCESS;
7929 /***************************************************************************
7931 * Using the combination of SMBI and SWESMBI semaphore bits when resetting
7932 * adapter or Eeprom access.
7934 * hw: Struct containing variables accessed by shared code
7936 * returns: - E1000_ERR_EEPROM if fail to access EEPROM.
7937 * E1000_SUCCESS at any other case.
7939 ***************************************************************************/
7940 static s32 e1000_get_hw_eeprom_semaphore(struct e1000_hw *hw)
7945 DEBUGFUNC("e1000_get_hw_eeprom_semaphore");
7947 if (!hw->eeprom_semaphore_present)
7948 return E1000_SUCCESS;
7950 if (hw->mac_type == e1000_80003es2lan) {
7951 /* Get the SW semaphore. */
7952 if (e1000_get_software_semaphore(hw) != E1000_SUCCESS)
7953 return -E1000_ERR_EEPROM;
7956 /* Get the FW semaphore. */
7957 timeout = hw->eeprom.word_size + 1;
7960 swsm |= E1000_SWSM_SWESMBI;
7962 /* if we managed to set the bit we got the semaphore. */
7964 if (swsm & E1000_SWSM_SWESMBI)
7972 /* Release semaphores */
7973 e1000_put_hw_eeprom_semaphore(hw);
7974 DEBUGOUT("Driver can't access the Eeprom - SWESMBI bit is set.\n");
7975 return -E1000_ERR_EEPROM;
7978 return E1000_SUCCESS;
7981 /***************************************************************************
7982 * This function clears HW semaphore bits.
7984 * hw: Struct containing variables accessed by shared code
7988 ***************************************************************************/
7989 static void e1000_put_hw_eeprom_semaphore(struct e1000_hw *hw)
7993 DEBUGFUNC("e1000_put_hw_eeprom_semaphore");
7995 if (!hw->eeprom_semaphore_present)
7999 if (hw->mac_type == e1000_80003es2lan) {
8000 /* Release both semaphores. */
8001 swsm &= ~(E1000_SWSM_SMBI | E1000_SWSM_SWESMBI);
8003 swsm &= ~(E1000_SWSM_SWESMBI);
8007 /***************************************************************************
8009 * Obtaining software semaphore bit (SMBI) before resetting PHY.
8011 * hw: Struct containing variables accessed by shared code
8013 * returns: - E1000_ERR_RESET if fail to obtain semaphore.
8014 * E1000_SUCCESS at any other case.
8016 ***************************************************************************/
8017 static s32 e1000_get_software_semaphore(struct e1000_hw *hw)
8019 s32 timeout = hw->eeprom.word_size + 1;
8022 DEBUGFUNC("e1000_get_software_semaphore");
8024 if (hw->mac_type != e1000_80003es2lan) {
8025 return E1000_SUCCESS;
8030 /* If SMBI bit cleared, it is now set and we hold the semaphore */
8031 if (!(swsm & E1000_SWSM_SMBI))
8038 DEBUGOUT("Driver can't access device - SMBI bit is set.\n");
8039 return -E1000_ERR_RESET;
8042 return E1000_SUCCESS;
8045 /***************************************************************************
8047 * Release semaphore bit (SMBI).
8049 * hw: Struct containing variables accessed by shared code
8051 ***************************************************************************/
8052 static void e1000_release_software_semaphore(struct e1000_hw *hw)
8056 DEBUGFUNC("e1000_release_software_semaphore");
8058 if (hw->mac_type != e1000_80003es2lan) {
8063 /* Release the SW semaphores.*/
8064 swsm &= ~E1000_SWSM_SMBI;
8068 /******************************************************************************
8069 * Checks if PHY reset is blocked due to SOL/IDER session, for example.
8070 * Returning E1000_BLK_PHY_RESET isn't necessarily an error. But it's up to
8071 * the caller to figure out how to deal with it.
8073 * hw - Struct containing variables accessed by shared code
8075 * returns: - E1000_BLK_PHY_RESET
8078 *****************************************************************************/
8079 s32 e1000_check_phy_reset_block(struct e1000_hw *hw)
8084 if (hw->mac_type == e1000_ich8lan) {
8086 return (fwsm & E1000_FWSM_RSPCIPHY) ? E1000_SUCCESS
8087 : E1000_BLK_PHY_RESET;
8090 if (hw->mac_type > e1000_82547_rev_2)
8092 return (manc & E1000_MANC_BLK_PHY_RST_ON_IDE) ?
8093 E1000_BLK_PHY_RESET : E1000_SUCCESS;
8096 static u8 e1000_arc_subsystem_valid(struct e1000_hw *hw)
8100 /* On 8257x silicon, registers in the range of 0x8800 - 0x8FFC
8101 * may not be provided a DMA clock when no manageability features are
8102 * enabled. We do not want to perform any reads/writes to these registers
8103 * if this is the case. We read FWSM to determine the manageability mode.
8105 switch (hw->mac_type) {
8109 case e1000_80003es2lan:
8111 if ((fwsm & E1000_FWSM_MODE_MASK) != 0)
8123 /******************************************************************************
8124 * Configure PCI-Ex no-snoop
8126 * hw - Struct containing variables accessed by shared code.
8127 * no_snoop - Bitmap of no-snoop events.
8129 * returns: E1000_SUCCESS
8131 *****************************************************************************/
8132 static s32 e1000_set_pci_ex_no_snoop(struct e1000_hw *hw, u32 no_snoop)
8136 DEBUGFUNC("e1000_set_pci_ex_no_snoop");
8138 if (hw->bus_type == e1000_bus_type_unknown)
8139 e1000_get_bus_info(hw);
8141 if (hw->bus_type != e1000_bus_type_pci_express)
8142 return E1000_SUCCESS;
8145 gcr_reg = er32(GCR);
8146 gcr_reg &= ~(PCI_EX_NO_SNOOP_ALL);
8147 gcr_reg |= no_snoop;
8150 if (hw->mac_type == e1000_ich8lan) {
8153 ew32(GCR, PCI_EX_82566_SNOOP_ALL);
8155 ctrl_ext = er32(CTRL_EXT);
8156 ctrl_ext |= E1000_CTRL_EXT_RO_DIS;
8157 ew32(CTRL_EXT, ctrl_ext);
8160 return E1000_SUCCESS;
8163 /***************************************************************************
8165 * Get software semaphore FLAG bit (SWFLAG).
8166 * SWFLAG is used to synchronize the access to all shared resource between
8169 * hw: Struct containing variables accessed by shared code
8171 ***************************************************************************/
8172 static s32 e1000_get_software_flag(struct e1000_hw *hw)
8174 s32 timeout = PHY_CFG_TIMEOUT;
8177 DEBUGFUNC("e1000_get_software_flag");
8179 if (hw->mac_type == e1000_ich8lan) {
8181 extcnf_ctrl = er32(EXTCNF_CTRL);
8182 extcnf_ctrl |= E1000_EXTCNF_CTRL_SWFLAG;
8183 ew32(EXTCNF_CTRL, extcnf_ctrl);
8185 extcnf_ctrl = er32(EXTCNF_CTRL);
8186 if (extcnf_ctrl & E1000_EXTCNF_CTRL_SWFLAG)
8193 DEBUGOUT("FW or HW locks the resource too long.\n");
8194 return -E1000_ERR_CONFIG;
8198 return E1000_SUCCESS;
8201 /***************************************************************************
8203 * Release software semaphore FLAG bit (SWFLAG).
8204 * SWFLAG is used to synchronize the access to all shared resource between
8207 * hw: Struct containing variables accessed by shared code
8209 ***************************************************************************/
8210 static void e1000_release_software_flag(struct e1000_hw *hw)
8214 DEBUGFUNC("e1000_release_software_flag");
8216 if (hw->mac_type == e1000_ich8lan) {
8217 extcnf_ctrl= er32(EXTCNF_CTRL);
8218 extcnf_ctrl &= ~E1000_EXTCNF_CTRL_SWFLAG;
8219 ew32(EXTCNF_CTRL, extcnf_ctrl);
8225 /******************************************************************************
8226 * Reads a 16 bit word or words from the EEPROM using the ICH8's flash access
8229 * hw - Struct containing variables accessed by shared code
8230 * offset - offset of word in the EEPROM to read
8231 * data - word read from the EEPROM
8232 * words - number of words to read
8233 *****************************************************************************/
8234 static s32 e1000_read_eeprom_ich8(struct e1000_hw *hw, u16 offset, u16 words,
8237 s32 error = E1000_SUCCESS;
8240 u32 bank_offset = 0;
8244 /* We need to know which is the valid flash bank. In the event
8245 * that we didn't allocate eeprom_shadow_ram, we may not be
8246 * managing flash_bank. So it cannot be trusted and needs
8247 * to be updated with each read.
8249 /* Value of bit 22 corresponds to the flash bank we're on. */
8250 flash_bank = (er32(EECD) & E1000_EECD_SEC1VAL) ? 1 : 0;
8252 /* Adjust offset appropriately if we're on bank 1 - adjust for word size */
8253 bank_offset = flash_bank * (hw->flash_bank_size * 2);
8255 error = e1000_get_software_flag(hw);
8256 if (error != E1000_SUCCESS)
8259 for (i = 0; i < words; i++) {
8260 if (hw->eeprom_shadow_ram != NULL &&
8261 hw->eeprom_shadow_ram[offset+i].modified) {
8262 data[i] = hw->eeprom_shadow_ram[offset+i].eeprom_word;
8264 /* The NVM part needs a byte offset, hence * 2 */
8265 act_offset = bank_offset + ((offset + i) * 2);
8266 error = e1000_read_ich8_word(hw, act_offset, &word);
8267 if (error != E1000_SUCCESS)
8273 e1000_release_software_flag(hw);
8278 /******************************************************************************
8279 * Writes a 16 bit word or words to the EEPROM using the ICH8's flash access
8280 * register. Actually, writes are written to the shadow ram cache in the hw
8281 * structure hw->e1000_shadow_ram. e1000_commit_shadow_ram flushes this to
8282 * the NVM, which occurs when the NVM checksum is updated.
8284 * hw - Struct containing variables accessed by shared code
8285 * offset - offset of word in the EEPROM to write
8286 * words - number of words to write
8287 * data - words to write to the EEPROM
8288 *****************************************************************************/
8289 static s32 e1000_write_eeprom_ich8(struct e1000_hw *hw, u16 offset, u16 words,
8293 s32 error = E1000_SUCCESS;
8295 error = e1000_get_software_flag(hw);
8296 if (error != E1000_SUCCESS)
8299 /* A driver can write to the NVM only if it has eeprom_shadow_ram
8300 * allocated. Subsequent reads to the modified words are read from
8301 * this cached structure as well. Writes will only go into this
8302 * cached structure unless it's followed by a call to
8303 * e1000_update_eeprom_checksum() where it will commit the changes
8304 * and clear the "modified" field.
8306 if (hw->eeprom_shadow_ram != NULL) {
8307 for (i = 0; i < words; i++) {
8308 if ((offset + i) < E1000_SHADOW_RAM_WORDS) {
8309 hw->eeprom_shadow_ram[offset+i].modified = true;
8310 hw->eeprom_shadow_ram[offset+i].eeprom_word = data[i];
8312 error = -E1000_ERR_EEPROM;
8317 /* Drivers have the option to not allocate eeprom_shadow_ram as long
8318 * as they don't perform any NVM writes. An attempt in doing so
8319 * will result in this error.
8321 error = -E1000_ERR_EEPROM;
8324 e1000_release_software_flag(hw);
8329 /******************************************************************************
8330 * This function does initial flash setup so that a new read/write/erase cycle
8333 * hw - The pointer to the hw structure
8334 ****************************************************************************/
8335 static s32 e1000_ich8_cycle_init(struct e1000_hw *hw)
8337 union ich8_hws_flash_status hsfsts;
8338 s32 error = E1000_ERR_EEPROM;
8341 DEBUGFUNC("e1000_ich8_cycle_init");
8343 hsfsts.regval = E1000_READ_ICH_FLASH_REG16(hw, ICH_FLASH_HSFSTS);
8345 /* May be check the Flash Des Valid bit in Hw status */
8346 if (hsfsts.hsf_status.fldesvalid == 0) {
8347 DEBUGOUT("Flash descriptor invalid. SW Sequencing must be used.");
8351 /* Clear FCERR in Hw status by writing 1 */
8352 /* Clear DAEL in Hw status by writing a 1 */
8353 hsfsts.hsf_status.flcerr = 1;
8354 hsfsts.hsf_status.dael = 1;
8356 E1000_WRITE_ICH_FLASH_REG16(hw, ICH_FLASH_HSFSTS, hsfsts.regval);
8358 /* Either we should have a hardware SPI cycle in progress bit to check
8359 * against, in order to start a new cycle or FDONE bit should be changed
8360 * in the hardware so that it is 1 after harware reset, which can then be
8361 * used as an indication whether a cycle is in progress or has been
8362 * completed .. we should also have some software semaphore mechanism to
8363 * guard FDONE or the cycle in progress bit so that two threads access to
8364 * those bits can be sequentiallized or a way so that 2 threads dont
8365 * start the cycle at the same time */
8367 if (hsfsts.hsf_status.flcinprog == 0) {
8368 /* There is no cycle running at present, so we can start a cycle */
8369 /* Begin by setting Flash Cycle Done. */
8370 hsfsts.hsf_status.flcdone = 1;
8371 E1000_WRITE_ICH_FLASH_REG16(hw, ICH_FLASH_HSFSTS, hsfsts.regval);
8372 error = E1000_SUCCESS;
8374 /* otherwise poll for sometime so the current cycle has a chance
8375 * to end before giving up. */
8376 for (i = 0; i < ICH_FLASH_COMMAND_TIMEOUT; i++) {
8377 hsfsts.regval = E1000_READ_ICH_FLASH_REG16(hw, ICH_FLASH_HSFSTS);
8378 if (hsfsts.hsf_status.flcinprog == 0) {
8379 error = E1000_SUCCESS;
8384 if (error == E1000_SUCCESS) {
8385 /* Successful in waiting for previous cycle to timeout,
8386 * now set the Flash Cycle Done. */
8387 hsfsts.hsf_status.flcdone = 1;
8388 E1000_WRITE_ICH_FLASH_REG16(hw, ICH_FLASH_HSFSTS, hsfsts.regval);
8390 DEBUGOUT("Flash controller busy, cannot get access");
8396 /******************************************************************************
8397 * This function starts a flash cycle and waits for its completion
8399 * hw - The pointer to the hw structure
8400 ****************************************************************************/
8401 static s32 e1000_ich8_flash_cycle(struct e1000_hw *hw, u32 timeout)
8403 union ich8_hws_flash_ctrl hsflctl;
8404 union ich8_hws_flash_status hsfsts;
8405 s32 error = E1000_ERR_EEPROM;
8408 /* Start a cycle by writing 1 in Flash Cycle Go in Hw Flash Control */
8409 hsflctl.regval = E1000_READ_ICH_FLASH_REG16(hw, ICH_FLASH_HSFCTL);
8410 hsflctl.hsf_ctrl.flcgo = 1;
8411 E1000_WRITE_ICH_FLASH_REG16(hw, ICH_FLASH_HSFCTL, hsflctl.regval);
8413 /* wait till FDONE bit is set to 1 */
8415 hsfsts.regval = E1000_READ_ICH_FLASH_REG16(hw, ICH_FLASH_HSFSTS);
8416 if (hsfsts.hsf_status.flcdone == 1)
8420 } while (i < timeout);
8421 if (hsfsts.hsf_status.flcdone == 1 && hsfsts.hsf_status.flcerr == 0) {
8422 error = E1000_SUCCESS;
8427 /******************************************************************************
8428 * Reads a byte or word from the NVM using the ICH8 flash access registers.
8430 * hw - The pointer to the hw structure
8431 * index - The index of the byte or word to read.
8432 * size - Size of data to read, 1=byte 2=word
8433 * data - Pointer to the word to store the value read.
8434 *****************************************************************************/
8435 static s32 e1000_read_ich8_data(struct e1000_hw *hw, u32 index, u32 size,
8438 union ich8_hws_flash_status hsfsts;
8439 union ich8_hws_flash_ctrl hsflctl;
8440 u32 flash_linear_address;
8442 s32 error = -E1000_ERR_EEPROM;
8445 DEBUGFUNC("e1000_read_ich8_data");
8447 if (size < 1 || size > 2 || data == NULL ||
8448 index > ICH_FLASH_LINEAR_ADDR_MASK)
8451 flash_linear_address = (ICH_FLASH_LINEAR_ADDR_MASK & index) +
8452 hw->flash_base_addr;
8457 error = e1000_ich8_cycle_init(hw);
8458 if (error != E1000_SUCCESS)
8461 hsflctl.regval = E1000_READ_ICH_FLASH_REG16(hw, ICH_FLASH_HSFCTL);
8462 /* 0b/1b corresponds to 1 or 2 byte size, respectively. */
8463 hsflctl.hsf_ctrl.fldbcount = size - 1;
8464 hsflctl.hsf_ctrl.flcycle = ICH_CYCLE_READ;
8465 E1000_WRITE_ICH_FLASH_REG16(hw, ICH_FLASH_HSFCTL, hsflctl.regval);
8467 /* Write the last 24 bits of index into Flash Linear address field in
8469 /* TODO: TBD maybe check the index against the size of flash */
8471 E1000_WRITE_ICH_FLASH_REG(hw, ICH_FLASH_FADDR, flash_linear_address);
8473 error = e1000_ich8_flash_cycle(hw, ICH_FLASH_COMMAND_TIMEOUT);
8475 /* Check if FCERR is set to 1, if set to 1, clear it and try the whole
8476 * sequence a few more times, else read in (shift in) the Flash Data0,
8477 * the order is least significant byte first msb to lsb */
8478 if (error == E1000_SUCCESS) {
8479 flash_data = E1000_READ_ICH_FLASH_REG(hw, ICH_FLASH_FDATA0);
8481 *data = (u8)(flash_data & 0x000000FF);
8482 } else if (size == 2) {
8483 *data = (u16)(flash_data & 0x0000FFFF);
8487 /* If we've gotten here, then things are probably completely hosed,
8488 * but if the error condition is detected, it won't hurt to give
8489 * it another try...ICH_FLASH_CYCLE_REPEAT_COUNT times.
8491 hsfsts.regval = E1000_READ_ICH_FLASH_REG16(hw, ICH_FLASH_HSFSTS);
8492 if (hsfsts.hsf_status.flcerr == 1) {
8493 /* Repeat for some time before giving up. */
8495 } else if (hsfsts.hsf_status.flcdone == 0) {
8496 DEBUGOUT("Timeout error - flash cycle did not complete.");
8500 } while (count++ < ICH_FLASH_CYCLE_REPEAT_COUNT);
8505 /******************************************************************************
8506 * Writes One /two bytes to the NVM using the ICH8 flash access registers.
8508 * hw - The pointer to the hw structure
8509 * index - The index of the byte/word to read.
8510 * size - Size of data to read, 1=byte 2=word
8511 * data - The byte(s) to write to the NVM.
8512 *****************************************************************************/
8513 static s32 e1000_write_ich8_data(struct e1000_hw *hw, u32 index, u32 size,
8516 union ich8_hws_flash_status hsfsts;
8517 union ich8_hws_flash_ctrl hsflctl;
8518 u32 flash_linear_address;
8520 s32 error = -E1000_ERR_EEPROM;
8523 DEBUGFUNC("e1000_write_ich8_data");
8525 if (size < 1 || size > 2 || data > size * 0xff ||
8526 index > ICH_FLASH_LINEAR_ADDR_MASK)
8529 flash_linear_address = (ICH_FLASH_LINEAR_ADDR_MASK & index) +
8530 hw->flash_base_addr;
8535 error = e1000_ich8_cycle_init(hw);
8536 if (error != E1000_SUCCESS)
8539 hsflctl.regval = E1000_READ_ICH_FLASH_REG16(hw, ICH_FLASH_HSFCTL);
8540 /* 0b/1b corresponds to 1 or 2 byte size, respectively. */
8541 hsflctl.hsf_ctrl.fldbcount = size -1;
8542 hsflctl.hsf_ctrl.flcycle = ICH_CYCLE_WRITE;
8543 E1000_WRITE_ICH_FLASH_REG16(hw, ICH_FLASH_HSFCTL, hsflctl.regval);
8545 /* Write the last 24 bits of index into Flash Linear address field in
8547 E1000_WRITE_ICH_FLASH_REG(hw, ICH_FLASH_FADDR, flash_linear_address);
8550 flash_data = (u32)data & 0x00FF;
8552 flash_data = (u32)data;
8554 E1000_WRITE_ICH_FLASH_REG(hw, ICH_FLASH_FDATA0, flash_data);
8556 /* check if FCERR is set to 1 , if set to 1, clear it and try the whole
8557 * sequence a few more times else done */
8558 error = e1000_ich8_flash_cycle(hw, ICH_FLASH_COMMAND_TIMEOUT);
8559 if (error == E1000_SUCCESS) {
8562 /* If we're here, then things are most likely completely hosed,
8563 * but if the error condition is detected, it won't hurt to give
8564 * it another try...ICH_FLASH_CYCLE_REPEAT_COUNT times.
8566 hsfsts.regval = E1000_READ_ICH_FLASH_REG16(hw, ICH_FLASH_HSFSTS);
8567 if (hsfsts.hsf_status.flcerr == 1) {
8568 /* Repeat for some time before giving up. */
8570 } else if (hsfsts.hsf_status.flcdone == 0) {
8571 DEBUGOUT("Timeout error - flash cycle did not complete.");
8575 } while (count++ < ICH_FLASH_CYCLE_REPEAT_COUNT);
8580 /******************************************************************************
8581 * Reads a single byte from the NVM using the ICH8 flash access registers.
8583 * hw - pointer to e1000_hw structure
8584 * index - The index of the byte to read.
8585 * data - Pointer to a byte to store the value read.
8586 *****************************************************************************/
8587 static s32 e1000_read_ich8_byte(struct e1000_hw *hw, u32 index, u8 *data)
8589 s32 status = E1000_SUCCESS;
8592 status = e1000_read_ich8_data(hw, index, 1, &word);
8593 if (status == E1000_SUCCESS) {
8600 /******************************************************************************
8601 * Writes a single byte to the NVM using the ICH8 flash access registers.
8602 * Performs verification by reading back the value and then going through
8603 * a retry algorithm before giving up.
8605 * hw - pointer to e1000_hw structure
8606 * index - The index of the byte to write.
8607 * byte - The byte to write to the NVM.
8608 *****************************************************************************/
8609 static s32 e1000_verify_write_ich8_byte(struct e1000_hw *hw, u32 index, u8 byte)
8611 s32 error = E1000_SUCCESS;
8612 s32 program_retries = 0;
8614 DEBUGOUT2("Byte := %2.2X Offset := %d\n", byte, index);
8616 error = e1000_write_ich8_byte(hw, index, byte);
8618 if (error != E1000_SUCCESS) {
8619 for (program_retries = 0; program_retries < 100; program_retries++) {
8620 DEBUGOUT2("Retrying \t Byte := %2.2X Offset := %d\n", byte, index);
8621 error = e1000_write_ich8_byte(hw, index, byte);
8623 if (error == E1000_SUCCESS)
8628 if (program_retries == 100)
8629 error = E1000_ERR_EEPROM;
8634 /******************************************************************************
8635 * Writes a single byte to the NVM using the ICH8 flash access registers.
8637 * hw - pointer to e1000_hw structure
8638 * index - The index of the byte to read.
8639 * data - The byte to write to the NVM.
8640 *****************************************************************************/
8641 static s32 e1000_write_ich8_byte(struct e1000_hw *hw, u32 index, u8 data)
8643 s32 status = E1000_SUCCESS;
8644 u16 word = (u16)data;
8646 status = e1000_write_ich8_data(hw, index, 1, word);
8651 /******************************************************************************
8652 * Reads a word from the NVM using the ICH8 flash access registers.
8654 * hw - pointer to e1000_hw structure
8655 * index - The starting byte index of the word to read.
8656 * data - Pointer to a word to store the value read.
8657 *****************************************************************************/
8658 static s32 e1000_read_ich8_word(struct e1000_hw *hw, u32 index, u16 *data)
8660 s32 status = E1000_SUCCESS;
8661 status = e1000_read_ich8_data(hw, index, 2, data);
8665 /******************************************************************************
8666 * Erases the bank specified. Each bank may be a 4, 8 or 64k block. Banks are 0
8669 * hw - pointer to e1000_hw structure
8670 * bank - 0 for first bank, 1 for second bank
8672 * Note that this function may actually erase as much as 8 or 64 KBytes. The
8673 * amount of NVM used in each bank is a *minimum* of 4 KBytes, but in fact the
8674 * bank size may be 4, 8 or 64 KBytes
8675 *****************************************************************************/
8676 static s32 e1000_erase_ich8_4k_segment(struct e1000_hw *hw, u32 bank)
8678 union ich8_hws_flash_status hsfsts;
8679 union ich8_hws_flash_ctrl hsflctl;
8680 u32 flash_linear_address;
8682 s32 error = E1000_ERR_EEPROM;
8684 s32 sub_sector_size = 0;
8689 hsfsts.regval = E1000_READ_ICH_FLASH_REG16(hw, ICH_FLASH_HSFSTS);
8691 /* Determine HW Sector size: Read BERASE bits of Hw flash Status register */
8692 /* 00: The Hw sector is 256 bytes, hence we need to erase 16
8693 * consecutive sectors. The start index for the nth Hw sector can be
8694 * calculated as bank * 4096 + n * 256
8695 * 01: The Hw sector is 4K bytes, hence we need to erase 1 sector.
8696 * The start index for the nth Hw sector can be calculated
8698 * 10: The HW sector is 8K bytes
8699 * 11: The Hw sector size is 64K bytes */
8700 if (hsfsts.hsf_status.berasesz == 0x0) {
8701 /* Hw sector size 256 */
8702 sub_sector_size = ICH_FLASH_SEG_SIZE_256;
8703 bank_size = ICH_FLASH_SECTOR_SIZE;
8704 iteration = ICH_FLASH_SECTOR_SIZE / ICH_FLASH_SEG_SIZE_256;
8705 } else if (hsfsts.hsf_status.berasesz == 0x1) {
8706 bank_size = ICH_FLASH_SEG_SIZE_4K;
8708 } else if (hsfsts.hsf_status.berasesz == 0x3) {
8709 bank_size = ICH_FLASH_SEG_SIZE_64K;
8715 for (j = 0; j < iteration ; j++) {
8719 error = e1000_ich8_cycle_init(hw);
8720 if (error != E1000_SUCCESS) {
8725 /* Write a value 11 (block Erase) in Flash Cycle field in Hw flash
8727 hsflctl.regval = E1000_READ_ICH_FLASH_REG16(hw, ICH_FLASH_HSFCTL);
8728 hsflctl.hsf_ctrl.flcycle = ICH_CYCLE_ERASE;
8729 E1000_WRITE_ICH_FLASH_REG16(hw, ICH_FLASH_HSFCTL, hsflctl.regval);
8731 /* Write the last 24 bits of an index within the block into Flash
8732 * Linear address field in Flash Address. This probably needs to
8733 * be calculated here based off the on-chip erase sector size and
8734 * the software bank size (4, 8 or 64 KBytes) */
8735 flash_linear_address = bank * bank_size + j * sub_sector_size;
8736 flash_linear_address += hw->flash_base_addr;
8737 flash_linear_address &= ICH_FLASH_LINEAR_ADDR_MASK;
8739 E1000_WRITE_ICH_FLASH_REG(hw, ICH_FLASH_FADDR, flash_linear_address);
8741 error = e1000_ich8_flash_cycle(hw, ICH_FLASH_ERASE_TIMEOUT);
8742 /* Check if FCERR is set to 1. If 1, clear it and try the whole
8743 * sequence a few more times else Done */
8744 if (error == E1000_SUCCESS) {
8747 hsfsts.regval = E1000_READ_ICH_FLASH_REG16(hw, ICH_FLASH_HSFSTS);
8748 if (hsfsts.hsf_status.flcerr == 1) {
8749 /* repeat for some time before giving up */
8751 } else if (hsfsts.hsf_status.flcdone == 0) {
8756 } while ((count < ICH_FLASH_CYCLE_REPEAT_COUNT) && !error_flag);
8757 if (error_flag == 1)
8760 if (error_flag != 1)
8761 error = E1000_SUCCESS;
8765 static s32 e1000_init_lcd_from_nvm_config_region(struct e1000_hw *hw,
8769 u32 ret_val = E1000_SUCCESS;
8770 u16 word_addr, reg_data, reg_addr;
8773 /* cnf_base_addr is in DWORD */
8774 word_addr = (u16)(cnf_base_addr << 1);
8776 /* cnf_size is returned in size of dwords */
8777 for (i = 0; i < cnf_size; i++) {
8778 ret_val = e1000_read_eeprom(hw, (word_addr + i*2), 1, ®_data);
8782 ret_val = e1000_read_eeprom(hw, (word_addr + i*2 + 1), 1, ®_addr);
8786 ret_val = e1000_get_software_flag(hw);
8787 if (ret_val != E1000_SUCCESS)
8790 ret_val = e1000_write_phy_reg_ex(hw, (u32)reg_addr, reg_data);
8792 e1000_release_software_flag(hw);
8799 /******************************************************************************
8800 * This function initializes the PHY from the NVM on ICH8 platforms. This
8801 * is needed due to an issue where the NVM configuration is not properly
8802 * autoloaded after power transitions. Therefore, after each PHY reset, we
8803 * will load the configuration data out of the NVM manually.
8805 * hw: Struct containing variables accessed by shared code
8806 *****************************************************************************/
8807 static s32 e1000_init_lcd_from_nvm(struct e1000_hw *hw)
8809 u32 reg_data, cnf_base_addr, cnf_size, ret_val, loop;
8811 if (hw->phy_type != e1000_phy_igp_3)
8812 return E1000_SUCCESS;
8814 /* Check if SW needs configure the PHY */
8815 reg_data = er32(FEXTNVM);
8816 if (!(reg_data & FEXTNVM_SW_CONFIG))
8817 return E1000_SUCCESS;
8819 /* Wait for basic configuration completes before proceeding*/
8822 reg_data = er32(STATUS) & E1000_STATUS_LAN_INIT_DONE;
8825 } while ((!reg_data) && (loop < 50));
8827 /* Clear the Init Done bit for the next init event */
8828 reg_data = er32(STATUS);
8829 reg_data &= ~E1000_STATUS_LAN_INIT_DONE;
8830 ew32(STATUS, reg_data);
8832 /* Make sure HW does not configure LCD from PHY extended configuration
8833 before SW configuration */
8834 reg_data = er32(EXTCNF_CTRL);
8835 if ((reg_data & E1000_EXTCNF_CTRL_LCD_WRITE_ENABLE) == 0x0000) {
8836 reg_data = er32(EXTCNF_SIZE);
8837 cnf_size = reg_data & E1000_EXTCNF_SIZE_EXT_PCIE_LENGTH;
8840 reg_data = er32(EXTCNF_CTRL);
8841 cnf_base_addr = reg_data & E1000_EXTCNF_CTRL_EXT_CNF_POINTER;
8842 /* cnf_base_addr is in DWORD */
8843 cnf_base_addr >>= 16;
8845 /* Configure LCD from extended configuration region. */
8846 ret_val = e1000_init_lcd_from_nvm_config_region(hw, cnf_base_addr,
8853 return E1000_SUCCESS;