xref: /dragonfly/sys/dev/netif/ig_hal/e1000_82571.c (revision 52f9f0d9)
1 /******************************************************************************
2 
3   Copyright (c) 2001-2009, Intel Corporation
4   All rights reserved.
5 
6   Redistribution and use in source and binary forms, with or without
7   modification, are permitted provided that the following conditions are met:
8 
9    1. Redistributions of source code must retain the above copyright notice,
10       this list of conditions and the following disclaimer.
11 
12    2. Redistributions in binary form must reproduce the above copyright
13       notice, this list of conditions and the following disclaimer in the
14       documentation and/or other materials provided with the distribution.
15 
16    3. Neither the name of the Intel Corporation nor the names of its
17       contributors may be used to endorse or promote products derived from
18       this software without specific prior written permission.
19 
20   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30   POSSIBILITY OF SUCH DAMAGE.
31 
32 ******************************************************************************/
33 /*$FreeBSD: $*/
34 
35 /*
36  * 82571EB Gigabit Ethernet Controller
37  * 82571EB Gigabit Ethernet Controller (Copper)
38  * 82571EB Gigabit Ethernet Controller (Fiber)
39  * 82571EB Dual Port Gigabit Mezzanine Adapter
40  * 82571EB Quad Port Gigabit Mezzanine Adapter
41  * 82571PT Gigabit PT Quad Port Server ExpressModule
42  * 82572EI Gigabit Ethernet Controller (Copper)
43  * 82572EI Gigabit Ethernet Controller (Fiber)
44  * 82572EI Gigabit Ethernet Controller
45  * 82573V Gigabit Ethernet Controller (Copper)
46  * 82573E Gigabit Ethernet Controller (Copper)
47  * 82573L Gigabit Ethernet Controller
48  * 82574L Gigabit Network Connection
49  * 82583V Gigabit Network Connection
50  */
51 
52 #include "e1000_api.h"
53 
54 static s32  e1000_init_phy_params_82571(struct e1000_hw *hw);
55 static s32  e1000_init_nvm_params_82571(struct e1000_hw *hw);
56 static s32  e1000_init_mac_params_82571(struct e1000_hw *hw);
57 static s32  e1000_acquire_nvm_82571(struct e1000_hw *hw);
58 static void e1000_release_nvm_82571(struct e1000_hw *hw);
59 static s32  e1000_write_nvm_82571(struct e1000_hw *hw, u16 offset,
60                                   u16 words, u16 *data);
61 static s32  e1000_update_nvm_checksum_82571(struct e1000_hw *hw);
62 static s32  e1000_validate_nvm_checksum_82571(struct e1000_hw *hw);
63 static s32  e1000_get_cfg_done_82571(struct e1000_hw *hw);
64 static s32  e1000_set_d0_lplu_state_82571(struct e1000_hw *hw,
65                                           bool active);
66 static s32  e1000_reset_hw_82571(struct e1000_hw *hw);
67 static s32  e1000_init_hw_82571(struct e1000_hw *hw);
68 static void e1000_clear_vfta_82571(struct e1000_hw *hw);
69 static bool e1000_check_mng_mode_82574(struct e1000_hw *hw);
70 static s32 e1000_led_on_82574(struct e1000_hw *hw);
71 static s32  e1000_setup_link_82571(struct e1000_hw *hw);
72 static s32  e1000_setup_copper_link_82571(struct e1000_hw *hw);
73 static s32  e1000_check_for_serdes_link_82571(struct e1000_hw *hw);
74 static s32  e1000_setup_fiber_serdes_link_82571(struct e1000_hw *hw);
75 static s32  e1000_valid_led_default_82571(struct e1000_hw *hw, u16 *data);
76 static void e1000_clear_hw_cntrs_82571(struct e1000_hw *hw);
77 static s32  e1000_get_hw_semaphore_82571(struct e1000_hw *hw);
78 static s32  e1000_fix_nvm_checksum_82571(struct e1000_hw *hw);
79 static s32  e1000_get_phy_id_82571(struct e1000_hw *hw);
80 static void e1000_put_hw_semaphore_82571(struct e1000_hw *hw);
81 static s32  e1000_get_hw_semaphore_82573(struct e1000_hw *hw);
82 static void e1000_put_hw_semaphore_82573(struct e1000_hw *hw);
83 static s32  e1000_get_hw_semaphore_82574(struct e1000_hw *hw);
84 static void e1000_put_hw_semaphore_82574(struct e1000_hw *hw);
85 static s32  e1000_set_d0_lplu_state_82574(struct e1000_hw *hw,
86                                           bool active);
87 static s32  e1000_set_d3_lplu_state_82574(struct e1000_hw *hw,
88                                           bool active);
89 static void e1000_initialize_hw_bits_82571(struct e1000_hw *hw);
90 static s32  e1000_write_nvm_eewr_82571(struct e1000_hw *hw, u16 offset,
91                                        u16 words, u16 *data);
92 static s32  e1000_read_mac_addr_82571(struct e1000_hw *hw);
93 static void e1000_power_down_phy_copper_82571(struct e1000_hw *hw);
94 
95 /**
96  *  e1000_init_phy_params_82571 - Init PHY func ptrs.
97  *  @hw: pointer to the HW structure
98  **/
99 static s32 e1000_init_phy_params_82571(struct e1000_hw *hw)
100 {
101 	struct e1000_phy_info *phy = &hw->phy;
102 	s32 ret_val = E1000_SUCCESS;
103 
104 	DEBUGFUNC("e1000_init_phy_params_82571");
105 
106 	if (hw->phy.media_type != e1000_media_type_copper) {
107 		phy->type = e1000_phy_none;
108 		goto out;
109 	}
110 
111 	phy->addr                        = 1;
112 	phy->autoneg_mask                = AUTONEG_ADVERTISE_SPEED_DEFAULT;
113 	phy->reset_delay_us              = 100;
114 
115 	phy->ops.check_reset_block       = e1000_check_reset_block_generic;
116 	phy->ops.reset                   = e1000_phy_hw_reset_generic;
117 	phy->ops.set_d0_lplu_state       = e1000_set_d0_lplu_state_82571;
118 	phy->ops.set_d3_lplu_state       = e1000_set_d3_lplu_state_generic;
119 	phy->ops.power_up                = e1000_power_up_phy_copper;
120 	phy->ops.power_down              = e1000_power_down_phy_copper_82571;
121 
122 	switch (hw->mac.type) {
123 	case e1000_82571:
124 	case e1000_82572:
125 		phy->type                   = e1000_phy_igp_2;
126 		phy->ops.get_cfg_done       = e1000_get_cfg_done_82571;
127 		phy->ops.get_info           = e1000_get_phy_info_igp;
128 		phy->ops.check_polarity     = e1000_check_polarity_igp;
129 		phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_igp;
130 		phy->ops.get_cable_length   = e1000_get_cable_length_igp_2;
131 		phy->ops.read_reg           = e1000_read_phy_reg_igp;
132 		phy->ops.write_reg          = e1000_write_phy_reg_igp;
133 		phy->ops.acquire            = e1000_get_hw_semaphore_82571;
134 		phy->ops.release            = e1000_put_hw_semaphore_82571;
135 		break;
136 	case e1000_82573:
137 		phy->type                   = e1000_phy_m88;
138 		phy->ops.get_cfg_done       = e1000_get_cfg_done_generic;
139 		phy->ops.get_info           = e1000_get_phy_info_m88;
140 		phy->ops.check_polarity     = e1000_check_polarity_m88;
141 		phy->ops.commit             = e1000_phy_sw_reset_generic;
142 		phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_m88;
143 		phy->ops.get_cable_length   = e1000_get_cable_length_m88;
144 		phy->ops.read_reg           = e1000_read_phy_reg_m88;
145 		phy->ops.write_reg          = e1000_write_phy_reg_m88;
146 		phy->ops.acquire            = e1000_get_hw_semaphore_82571;
147 		phy->ops.release            = e1000_put_hw_semaphore_82571;
148 		break;
149 	case e1000_82574:
150 	case e1000_82583:
151 		phy->type                   = e1000_phy_bm;
152 		phy->ops.get_cfg_done       = e1000_get_cfg_done_generic;
153 		phy->ops.get_info           = e1000_get_phy_info_m88;
154 		phy->ops.check_polarity     = e1000_check_polarity_m88;
155 		phy->ops.commit             = e1000_phy_sw_reset_generic;
156 		phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_m88;
157 		phy->ops.get_cable_length   = e1000_get_cable_length_m88;
158 		phy->ops.read_reg           = e1000_read_phy_reg_bm2;
159 		phy->ops.write_reg          = e1000_write_phy_reg_bm2;
160 		phy->ops.acquire            = e1000_get_hw_semaphore_82574;
161 		phy->ops.release            = e1000_put_hw_semaphore_82574;
162 		phy->ops.set_d0_lplu_state  = e1000_set_d0_lplu_state_82574;
163 		phy->ops.set_d3_lplu_state  = e1000_set_d3_lplu_state_82574;
164 		break;
165 	default:
166 		ret_val = -E1000_ERR_PHY;
167 		goto out;
168 		break;
169 	}
170 
171 	/* This can only be done after all function pointers are setup. */
172 	ret_val = e1000_get_phy_id_82571(hw);
173 	if (ret_val) {
174 		DEBUGOUT("Error getting PHY ID\n");
175 		goto out;
176 	}
177 
178 	/* Verify phy id */
179 	switch (hw->mac.type) {
180 	case e1000_82571:
181 	case e1000_82572:
182 		if (phy->id != IGP01E1000_I_PHY_ID)
183 			ret_val = -E1000_ERR_PHY;
184 		break;
185 	case e1000_82573:
186 		if (phy->id != M88E1111_I_PHY_ID)
187 			ret_val = -E1000_ERR_PHY;
188 		break;
189 	case e1000_82574:
190 	case e1000_82583:
191 		if (phy->id != BME1000_E_PHY_ID_R2)
192 			ret_val = -E1000_ERR_PHY;
193 		break;
194 	default:
195 		ret_val = -E1000_ERR_PHY;
196 		break;
197 	}
198 
199 	if (ret_val)
200 		DEBUGOUT1("PHY ID unknown: type = 0x%08x\n", phy->id);
201 
202 out:
203 	return ret_val;
204 }
205 
206 /**
207  *  e1000_init_nvm_params_82571 - Init NVM func ptrs.
208  *  @hw: pointer to the HW structure
209  **/
210 static s32 e1000_init_nvm_params_82571(struct e1000_hw *hw)
211 {
212 	struct e1000_nvm_info *nvm = &hw->nvm;
213 	u32 eecd = E1000_READ_REG(hw, E1000_EECD);
214 	u16 size;
215 
216 	DEBUGFUNC("e1000_init_nvm_params_82571");
217 
218 	nvm->opcode_bits = 8;
219 	nvm->delay_usec = 1;
220 	switch (nvm->override) {
221 	case e1000_nvm_override_spi_large:
222 		nvm->page_size = 32;
223 		nvm->address_bits = 16;
224 		break;
225 	case e1000_nvm_override_spi_small:
226 		nvm->page_size = 8;
227 		nvm->address_bits = 8;
228 		break;
229 	default:
230 		nvm->page_size = eecd & E1000_EECD_ADDR_BITS ? 32 : 8;
231 		nvm->address_bits = eecd & E1000_EECD_ADDR_BITS ? 16 : 8;
232 		break;
233 	}
234 
235 	switch (hw->mac.type) {
236 	case e1000_82573:
237 	case e1000_82574:
238 	case e1000_82583:
239 		if (((eecd >> 15) & 0x3) == 0x3) {
240 			nvm->type = e1000_nvm_flash_hw;
241 			nvm->word_size = 2048;
242 			/*
243 			 * Autonomous Flash update bit must be cleared due
244 			 * to Flash update issue.
245 			 */
246 			eecd &= ~E1000_EECD_AUPDEN;
247 			E1000_WRITE_REG(hw, E1000_EECD, eecd);
248 			break;
249 		}
250 		/* Fall Through */
251 	default:
252 		nvm->type = e1000_nvm_eeprom_spi;
253 		size = (u16)((eecd & E1000_EECD_SIZE_EX_MASK) >>
254 		                  E1000_EECD_SIZE_EX_SHIFT);
255 		/*
256 		 * Added to a constant, "size" becomes the left-shift value
257 		 * for setting word_size.
258 		 */
259 		size += NVM_WORD_SIZE_BASE_SHIFT;
260 
261 		/* EEPROM access above 16k is unsupported */
262 		if (size > 14)
263 			size = 14;
264 		nvm->word_size	= 1 << size;
265 		break;
266 	}
267 
268 	/* Function Pointers */
269 	switch (hw->mac.type) {
270 	case e1000_82574:
271 	case e1000_82583:
272 		nvm->ops.acquire = e1000_get_hw_semaphore_82574;
273 		nvm->ops.release = e1000_put_hw_semaphore_82574;
274 		break;
275 	default:
276 		nvm->ops.acquire = e1000_acquire_nvm_82571;
277 		nvm->ops.release = e1000_release_nvm_82571;
278 		break;
279 	}
280 	nvm->ops.read          = e1000_read_nvm_eerd;
281 	nvm->ops.update        = e1000_update_nvm_checksum_82571;
282 	nvm->ops.validate      = e1000_validate_nvm_checksum_82571;
283 	nvm->ops.valid_led_default = e1000_valid_led_default_82571;
284 	nvm->ops.write         = e1000_write_nvm_82571;
285 
286 	return E1000_SUCCESS;
287 }
288 
289 /**
290  *  e1000_init_mac_params_82571 - Init MAC func ptrs.
291  *  @hw: pointer to the HW structure
292  **/
293 static s32 e1000_init_mac_params_82571(struct e1000_hw *hw)
294 {
295 	struct e1000_mac_info *mac = &hw->mac;
296 	u32 swsm = 0;
297 	u32 swsm2 = 0;
298 	bool force_clear_smbi = FALSE;
299 
300 	DEBUGFUNC("e1000_init_mac_params_82571");
301 
302 	/* Set media type and media-dependent function pointers */
303 	switch (hw->device_id) {
304 	case E1000_DEV_ID_82571EB_FIBER:
305 	case E1000_DEV_ID_82572EI_FIBER:
306 	case E1000_DEV_ID_82571EB_QUAD_FIBER:
307 		hw->phy.media_type = e1000_media_type_fiber;
308 		mac->ops.setup_physical_interface =
309 			e1000_setup_fiber_serdes_link_82571;
310 		mac->ops.check_for_link = e1000_check_for_fiber_link_generic;
311 		mac->ops.get_link_up_info =
312 			e1000_get_speed_and_duplex_fiber_serdes_generic;
313 		break;
314 	case E1000_DEV_ID_82571EB_SERDES:
315 	case E1000_DEV_ID_82571EB_SERDES_DUAL:
316 	case E1000_DEV_ID_82571EB_SERDES_QUAD:
317 	case E1000_DEV_ID_82572EI_SERDES:
318 		hw->phy.media_type = e1000_media_type_internal_serdes;
319 		mac->ops.setup_physical_interface =
320 			e1000_setup_fiber_serdes_link_82571;
321 		mac->ops.check_for_link = e1000_check_for_serdes_link_82571;
322 		mac->ops.get_link_up_info =
323 			e1000_get_speed_and_duplex_fiber_serdes_generic;
324 		break;
325 	default:
326 		hw->phy.media_type = e1000_media_type_copper;
327 		mac->ops.setup_physical_interface =
328 			e1000_setup_copper_link_82571;
329 		mac->ops.check_for_link = e1000_check_for_copper_link_generic;
330 		mac->ops.get_link_up_info =
331 			e1000_get_speed_and_duplex_copper_generic;
332 		break;
333 	}
334 
335 	/* Set mta register count */
336 	mac->mta_reg_count = 128;
337 	/* Set rar entry count */
338 	mac->rar_entry_count = E1000_RAR_ENTRIES;
339 	/* Set if part includes ASF firmware */
340 	mac->asf_firmware_present = TRUE;
341 	/* Adaptive IFS supported */
342 	mac->adaptive_ifs = TRUE;
343 
344 	/* Function pointers */
345 
346 	/* bus type/speed/width */
347 	mac->ops.get_bus_info = e1000_get_bus_info_pcie_generic;
348 	/* reset */
349 	mac->ops.reset_hw = e1000_reset_hw_82571;
350 	/* hw initialization */
351 	mac->ops.init_hw = e1000_init_hw_82571;
352 	/* link setup */
353 	mac->ops.setup_link = e1000_setup_link_82571;
354 	/* multicast address update */
355 	mac->ops.update_mc_addr_list = e1000_update_mc_addr_list_generic;
356 	/* writing VFTA */
357 	mac->ops.write_vfta = e1000_write_vfta_generic;
358 	/* clearing VFTA */
359 	mac->ops.clear_vfta = e1000_clear_vfta_82571;
360 	/* read mac address */
361 	mac->ops.read_mac_addr = e1000_read_mac_addr_82571;
362 	/* ID LED init */
363 	mac->ops.id_led_init = e1000_id_led_init_generic;
364 	/* setup LED */
365 	mac->ops.setup_led = e1000_setup_led_generic;
366 	/* cleanup LED */
367 	mac->ops.cleanup_led = e1000_cleanup_led_generic;
368 	/* turn off LED */
369 	mac->ops.led_off = e1000_led_off_generic;
370 	/* clear hardware counters */
371 	mac->ops.clear_hw_cntrs = e1000_clear_hw_cntrs_82571;
372 
373 	/* MAC-specific function pointers */
374 	switch (hw->mac.type) {
375 	case e1000_82573:
376 		mac->ops.set_lan_id = e1000_set_lan_id_single_port;
377 		mac->ops.check_mng_mode = e1000_check_mng_mode_generic;
378 		mac->ops.led_on = e1000_led_on_generic;
379 		mac->ops.blink_led = e1000_blink_led_generic;
380 
381 		/* FWSM register */
382 		mac->has_fwsm = TRUE;
383 		/*
384 		 * ARC supported; valid only if manageability features are
385 		 * enabled.
386 		 */
387 		mac->arc_subsystem_valid =
388 			(E1000_READ_REG(hw, E1000_FWSM) & E1000_FWSM_MODE_MASK)
389 			? TRUE : FALSE;
390 		break;
391 	case e1000_82574:
392 	case e1000_82583:
393 		mac->ops.set_lan_id = e1000_set_lan_id_single_port;
394 		mac->ops.check_mng_mode = e1000_check_mng_mode_82574;
395 		mac->ops.led_on = e1000_led_on_82574;
396 		break;
397 	default:
398 		mac->ops.check_mng_mode = e1000_check_mng_mode_generic;
399 		mac->ops.led_on = e1000_led_on_generic;
400 		mac->ops.blink_led = e1000_blink_led_generic;
401 
402 		/* FWSM register */
403 		mac->has_fwsm = TRUE;
404 		break;
405 	}
406 
407 	/*
408 	 * Ensure that the inter-port SWSM.SMBI lock bit is clear before
409 	 * first NVM or PHY acess. This should be done for single-port
410 	 * devices, and for one port only on dual-port devices so that
411 	 * for those devices we can still use the SMBI lock to synchronize
412 	 * inter-port accesses to the PHY & NVM.
413 	 */
414 	switch (hw->mac.type) {
415 	case e1000_82571:
416 	case e1000_82572:
417 		swsm2 = E1000_READ_REG(hw, E1000_SWSM2);
418 
419 		if (!(swsm2 & E1000_SWSM2_LOCK)) {
420 			/* Only do this for the first interface on this card */
421 			E1000_WRITE_REG(hw, E1000_SWSM2,
422 			    swsm2 | E1000_SWSM2_LOCK);
423 			force_clear_smbi = TRUE;
424 		} else
425 			force_clear_smbi = FALSE;
426 		break;
427 	default:
428 		force_clear_smbi = TRUE;
429 		break;
430 	}
431 
432 	if (force_clear_smbi) {
433 		/* Make sure SWSM.SMBI is clear */
434 		swsm = E1000_READ_REG(hw, E1000_SWSM);
435 		if (swsm & E1000_SWSM_SMBI) {
436 			/* This bit should not be set on a first interface, and
437 			 * indicates that the bootagent or EFI code has
438 			 * improperly left this bit enabled
439 			 */
440 			DEBUGOUT("Please update your 82571 Bootagent\n");
441 		}
442 		E1000_WRITE_REG(hw, E1000_SWSM, swsm & ~E1000_SWSM_SMBI);
443 	}
444 
445 	/*
446 	 * Initialze device specific counter of SMBI acquisition
447 	 * timeouts.
448 	 */
449 	 hw->dev_spec._82571.smb_counter = 0;
450 
451 	return E1000_SUCCESS;
452 }
453 
454 /**
455  *  e1000_init_function_pointers_82571 - Init func ptrs.
456  *  @hw: pointer to the HW structure
457  *
458  *  Called to initialize all function pointers and parameters.
459  **/
460 void e1000_init_function_pointers_82571(struct e1000_hw *hw)
461 {
462 	DEBUGFUNC("e1000_init_function_pointers_82571");
463 
464 	hw->mac.ops.init_params = e1000_init_mac_params_82571;
465 	hw->nvm.ops.init_params = e1000_init_nvm_params_82571;
466 	hw->phy.ops.init_params = e1000_init_phy_params_82571;
467 }
468 
469 /**
470  *  e1000_get_phy_id_82571 - Retrieve the PHY ID and revision
471  *  @hw: pointer to the HW structure
472  *
473  *  Reads the PHY registers and stores the PHY ID and possibly the PHY
474  *  revision in the hardware structure.
475  **/
476 static s32 e1000_get_phy_id_82571(struct e1000_hw *hw)
477 {
478 	struct e1000_phy_info *phy = &hw->phy;
479 	s32 ret_val = E1000_SUCCESS;
480 	u16 phy_id = 0;
481 
482 	DEBUGFUNC("e1000_get_phy_id_82571");
483 
484 	switch (hw->mac.type) {
485 	case e1000_82571:
486 	case e1000_82572:
487 		/*
488 		 * The 82571 firmware may still be configuring the PHY.
489 		 * In this case, we cannot access the PHY until the
490 		 * configuration is done.  So we explicitly set the
491 		 * PHY ID.
492 		 */
493 		phy->id = IGP01E1000_I_PHY_ID;
494 		break;
495 	case e1000_82573:
496 		ret_val = e1000_get_phy_id(hw);
497 		break;
498 	case e1000_82574:
499 	case e1000_82583:
500 		ret_val = phy->ops.read_reg(hw, PHY_ID1, &phy_id);
501 		if (ret_val)
502 			goto out;
503 
504 		phy->id = (u32)(phy_id << 16);
505 		usec_delay(20);
506 		ret_val = phy->ops.read_reg(hw, PHY_ID2, &phy_id);
507 		if (ret_val)
508 			goto out;
509 
510 		phy->id |= (u32)(phy_id);
511 		phy->revision = (u32)(phy_id & ~PHY_REVISION_MASK);
512 		break;
513 	default:
514 		ret_val = -E1000_ERR_PHY;
515 		break;
516 	}
517 out:
518 	return ret_val;
519 }
520 
521 /**
522  *  e1000_get_hw_semaphore_82571 - Acquire hardware semaphore
523  *  @hw: pointer to the HW structure
524  *
525  *  Acquire the HW semaphore to access the PHY or NVM
526  **/
527 static s32 e1000_get_hw_semaphore_82571(struct e1000_hw *hw)
528 {
529 	u32 swsm;
530 	s32 ret_val = E1000_SUCCESS;
531 	s32 sw_timeout = hw->nvm.word_size + 1;
532 	s32 fw_timeout = hw->nvm.word_size + 1;
533 	s32 i = 0;
534 
535 	DEBUGFUNC("e1000_get_hw_semaphore_82571");
536 
537 	/*
538 	 * If we have timedout 3 times on trying to acquire
539 	 * the inter-port SMBI semaphore, there is old code
540 	 * operating on the other port, and it is not
541 	 * releasing SMBI. Modify the number of times that
542 	 * we try for the semaphore to interwork with this
543 	 * older code.
544 	 */
545 	if (hw->dev_spec._82571.smb_counter > 2)
546 		sw_timeout = 1;
547 
548 	/* Get the SW semaphore */
549 	while (i < sw_timeout) {
550 		swsm = E1000_READ_REG(hw, E1000_SWSM);
551 		if (!(swsm & E1000_SWSM_SMBI))
552 			break;
553 
554 		usec_delay(50);
555 		i++;
556 	}
557 
558 	if (i == sw_timeout) {
559 		DEBUGOUT("Driver can't access device - SMBI bit is set.\n");
560 		hw->dev_spec._82571.smb_counter++;
561 	}
562 	/* Get the FW semaphore. */
563 	for (i = 0; i < fw_timeout; i++) {
564 		swsm = E1000_READ_REG(hw, E1000_SWSM);
565 		E1000_WRITE_REG(hw, E1000_SWSM, swsm | E1000_SWSM_SWESMBI);
566 
567 		/* Semaphore acquired if bit latched */
568 		if (E1000_READ_REG(hw, E1000_SWSM) & E1000_SWSM_SWESMBI)
569 			break;
570 
571 		usec_delay(50);
572 	}
573 
574 	if (i == fw_timeout) {
575 		/* Release semaphores */
576 		e1000_put_hw_semaphore_82571(hw);
577 		DEBUGOUT("Driver can't access the NVM\n");
578 		ret_val = -E1000_ERR_NVM;
579 		goto out;
580 	}
581 
582 out:
583 	return ret_val;
584 }
585 
586 /**
587  *  e1000_put_hw_semaphore_82571 - Release hardware semaphore
588  *  @hw: pointer to the HW structure
589  *
590  *  Release hardware semaphore used to access the PHY or NVM
591  **/
592 static void e1000_put_hw_semaphore_82571(struct e1000_hw *hw)
593 {
594 	u32 swsm;
595 
596 	DEBUGFUNC("e1000_put_hw_semaphore_generic");
597 
598 	swsm = E1000_READ_REG(hw, E1000_SWSM);
599 
600 	swsm &= ~(E1000_SWSM_SMBI | E1000_SWSM_SWESMBI);
601 
602 	E1000_WRITE_REG(hw, E1000_SWSM, swsm);
603 }
604 
605 /**
606  *  e1000_get_hw_semaphore_82573 - Acquire hardware semaphore
607  *  @hw: pointer to the HW structure
608  *
609  *  Acquire the HW semaphore during reset.
610  *
611  **/
612 static s32 e1000_get_hw_semaphore_82573(struct e1000_hw *hw)
613 {
614 	u32 extcnf_ctrl;
615 	s32 ret_val = E1000_SUCCESS;
616 	s32 i = 0;
617 
618 	DEBUGFUNC("e1000_get_hw_semaphore_82573");
619 
620 	extcnf_ctrl = E1000_READ_REG(hw, E1000_EXTCNF_CTRL);
621 	extcnf_ctrl |= E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP;
622 	do {
623 		E1000_WRITE_REG(hw, E1000_EXTCNF_CTRL, extcnf_ctrl);
624 		extcnf_ctrl = E1000_READ_REG(hw, E1000_EXTCNF_CTRL);
625 
626 		if (extcnf_ctrl & E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP)
627 			break;
628 
629 		extcnf_ctrl |= E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP;
630 
631 		msec_delay(2);
632 		i++;
633 	} while (i < MDIO_OWNERSHIP_TIMEOUT);
634 
635 	if (i == MDIO_OWNERSHIP_TIMEOUT) {
636 		/* Release semaphores */
637 		e1000_put_hw_semaphore_82573(hw);
638 		DEBUGOUT("Driver can't access the PHY\n");
639 		ret_val = -E1000_ERR_PHY;
640 		goto out;
641 	}
642 
643 out:
644 	return ret_val;
645 }
646 
647 /**
648  *  e1000_put_hw_semaphore_82573 - Release hardware semaphore
649  *  @hw: pointer to the HW structure
650  *
651  *  Release hardware semaphore used during reset.
652  *
653  **/
654 static void e1000_put_hw_semaphore_82573(struct e1000_hw *hw)
655 {
656 	u32 extcnf_ctrl;
657 
658 	DEBUGFUNC("e1000_put_hw_semaphore_82573");
659 
660 	extcnf_ctrl = E1000_READ_REG(hw, E1000_EXTCNF_CTRL);
661 	extcnf_ctrl &= ~E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP;
662 	E1000_WRITE_REG(hw, E1000_EXTCNF_CTRL, extcnf_ctrl);
663 }
664 
665 /**
666  *  e1000_get_hw_semaphore_82574 - Acquire hardware semaphore
667  *  @hw: pointer to the HW structure
668  *
669  *  Acquire the HW semaphore to access the PHY or NVM.
670  *
671  **/
672 static s32 e1000_get_hw_semaphore_82574(struct e1000_hw *hw)
673 {
674 	s32 ret_val;
675 
676 	DEBUGFUNC("e1000_get_hw_semaphore_82574");
677 
678 	ret_val = e1000_get_hw_semaphore_82573(hw);
679 	return ret_val;
680 }
681 
682 /**
683  *  e1000_put_hw_semaphore_82574 - Release hardware semaphore
684  *  @hw: pointer to the HW structure
685  *
686  *  Release hardware semaphore used to access the PHY or NVM
687  *
688  **/
689 static void e1000_put_hw_semaphore_82574(struct e1000_hw *hw)
690 {
691 	DEBUGFUNC("e1000_put_hw_semaphore_82574");
692 
693 	e1000_put_hw_semaphore_82573(hw);
694 }
695 
696 /**
697  *  e1000_set_d0_lplu_state_82574 - Set Low Power Linkup D0 state
698  *  @hw: pointer to the HW structure
699  *  @active: TRUE to enable LPLU, FALSE to disable
700  *
701  *  Sets the LPLU D0 state according to the active flag.
702  *  LPLU will not be activated unless the
703  *  device autonegotiation advertisement meets standards of
704  *  either 10 or 10/100 or 10/100/1000 at all duplexes.
705  *  This is a function pointer entry point only called by
706  *  PHY setup routines.
707  **/
708 static s32 e1000_set_d0_lplu_state_82574(struct e1000_hw *hw, bool active)
709 {
710 	u16 data = E1000_READ_REG(hw, E1000_POEMB);
711 
712 	DEBUGFUNC("e1000_set_d0_lplu_state_82574");
713 
714 	if (active)
715 		data |= E1000_PHY_CTRL_D0A_LPLU;
716 	else
717 		data &= ~E1000_PHY_CTRL_D0A_LPLU;
718 
719 	E1000_WRITE_REG(hw, E1000_POEMB, data);
720 	return E1000_SUCCESS;
721 }
722 
723 /**
724  *  e1000_set_d3_lplu_state_82574 - Sets low power link up state for D3
725  *  @hw: pointer to the HW structure
726  *  @active: boolean used to enable/disable lplu
727  *
728  *  The low power link up (lplu) state is set to the power management level D3
729  *  when active is TRUE, else clear lplu for D3. LPLU
730  *  is used during Dx states where the power conservation is most important.
731  *  During driver activity, SmartSpeed should be enabled so performance is
732  *  maintained.
733  **/
734 static s32 e1000_set_d3_lplu_state_82574(struct e1000_hw *hw, bool active)
735 {
736 	u16 data = E1000_READ_REG(hw, E1000_POEMB);
737 
738 	DEBUGFUNC("e1000_set_d3_lplu_state_82574");
739 
740 	if (!active) {
741 		data &= ~E1000_PHY_CTRL_NOND0A_LPLU;
742 	} else if ((hw->phy.autoneg_advertised == E1000_ALL_SPEED_DUPLEX) ||
743 	           (hw->phy.autoneg_advertised == E1000_ALL_NOT_GIG) ||
744 	           (hw->phy.autoneg_advertised == E1000_ALL_10_SPEED)) {
745 		data |= E1000_PHY_CTRL_NOND0A_LPLU;
746 	}
747 
748 	E1000_WRITE_REG(hw, E1000_POEMB, data);
749 	return E1000_SUCCESS;
750 }
751 
752 /**
753  *  e1000_acquire_nvm_82571 - Request for access to the EEPROM
754  *  @hw: pointer to the HW structure
755  *
756  *  To gain access to the EEPROM, first we must obtain a hardware semaphore.
757  *  Then for non-82573 hardware, set the EEPROM access request bit and wait
758  *  for EEPROM access grant bit.  If the access grant bit is not set, release
759  *  hardware semaphore.
760  **/
761 static s32 e1000_acquire_nvm_82571(struct e1000_hw *hw)
762 {
763 	s32 ret_val;
764 
765 	DEBUGFUNC("e1000_acquire_nvm_82571");
766 
767 	ret_val = e1000_get_hw_semaphore_82571(hw);
768 	if (ret_val)
769 		goto out;
770 
771 	switch (hw->mac.type) {
772 	case e1000_82573:
773 		break;
774 	default:
775 		ret_val = e1000_acquire_nvm_generic(hw);
776 		break;
777 	}
778 
779 	if (ret_val)
780 		e1000_put_hw_semaphore_82571(hw);
781 
782 out:
783 	return ret_val;
784 }
785 
786 /**
787  *  e1000_release_nvm_82571 - Release exclusive access to EEPROM
788  *  @hw: pointer to the HW structure
789  *
790  *  Stop any current commands to the EEPROM and clear the EEPROM request bit.
791  **/
792 static void e1000_release_nvm_82571(struct e1000_hw *hw)
793 {
794 	DEBUGFUNC("e1000_release_nvm_82571");
795 
796 	e1000_release_nvm_generic(hw);
797 	e1000_put_hw_semaphore_82571(hw);
798 }
799 
800 /**
801  *  e1000_write_nvm_82571 - Write to EEPROM using appropriate interface
802  *  @hw: pointer to the HW structure
803  *  @offset: offset within the EEPROM to be written to
804  *  @words: number of words to write
805  *  @data: 16 bit word(s) to be written to the EEPROM
806  *
807  *  For non-82573 silicon, write data to EEPROM at offset using SPI interface.
808  *
809  *  If e1000_update_nvm_checksum is not called after this function, the
810  *  EEPROM will most likely contain an invalid checksum.
811  **/
812 static s32 e1000_write_nvm_82571(struct e1000_hw *hw, u16 offset, u16 words,
813                                  u16 *data)
814 {
815 	s32 ret_val = E1000_SUCCESS;
816 
817 	DEBUGFUNC("e1000_write_nvm_82571");
818 
819 	switch (hw->mac.type) {
820 	case e1000_82573:
821 	case e1000_82574:
822 	case e1000_82583:
823 		ret_val = e1000_write_nvm_eewr_82571(hw, offset, words, data);
824 		break;
825 	case e1000_82571:
826 	case e1000_82572:
827 		ret_val = e1000_write_nvm_spi(hw, offset, words, data);
828 		break;
829 	default:
830 		ret_val = -E1000_ERR_NVM;
831 		break;
832 	}
833 
834 	return ret_val;
835 }
836 
837 /**
838  *  e1000_update_nvm_checksum_82571 - Update EEPROM checksum
839  *  @hw: pointer to the HW structure
840  *
841  *  Updates the EEPROM checksum by reading/adding each word of the EEPROM
842  *  up to the checksum.  Then calculates the EEPROM checksum and writes the
843  *  value to the EEPROM.
844  **/
845 static s32 e1000_update_nvm_checksum_82571(struct e1000_hw *hw)
846 {
847 	u32 eecd;
848 	s32 ret_val;
849 	u16 i;
850 
851 	DEBUGFUNC("e1000_update_nvm_checksum_82571");
852 
853 	ret_val = e1000_update_nvm_checksum_generic(hw);
854 	if (ret_val)
855 		goto out;
856 
857 	/*
858 	 * If our nvm is an EEPROM, then we're done
859 	 * otherwise, commit the checksum to the flash NVM.
860 	 */
861 	if (hw->nvm.type != e1000_nvm_flash_hw)
862 		goto out;
863 
864 	/* Check for pending operations. */
865 	for (i = 0; i < E1000_FLASH_UPDATES; i++) {
866 		msec_delay(1);
867 		if ((E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_FLUPD) == 0)
868 			break;
869 	}
870 
871 	if (i == E1000_FLASH_UPDATES) {
872 		ret_val = -E1000_ERR_NVM;
873 		goto out;
874 	}
875 
876 	/* Reset the firmware if using STM opcode. */
877 	if ((E1000_READ_REG(hw, E1000_FLOP) & 0xFF00) == E1000_STM_OPCODE) {
878 		/*
879 		 * The enabling of and the actual reset must be done
880 		 * in two write cycles.
881 		 */
882 		E1000_WRITE_REG(hw, E1000_HICR, E1000_HICR_FW_RESET_ENABLE);
883 		E1000_WRITE_FLUSH(hw);
884 		E1000_WRITE_REG(hw, E1000_HICR, E1000_HICR_FW_RESET);
885 	}
886 
887 	/* Commit the write to flash */
888 	eecd = E1000_READ_REG(hw, E1000_EECD) | E1000_EECD_FLUPD;
889 	E1000_WRITE_REG(hw, E1000_EECD, eecd);
890 
891 	for (i = 0; i < E1000_FLASH_UPDATES; i++) {
892 		msec_delay(1);
893 		if ((E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_FLUPD) == 0)
894 			break;
895 	}
896 
897 	if (i == E1000_FLASH_UPDATES) {
898 		ret_val = -E1000_ERR_NVM;
899 		goto out;
900 	}
901 
902 out:
903 	return ret_val;
904 }
905 
906 /**
907  *  e1000_validate_nvm_checksum_82571 - Validate EEPROM checksum
908  *  @hw: pointer to the HW structure
909  *
910  *  Calculates the EEPROM checksum by reading/adding each word of the EEPROM
911  *  and then verifies that the sum of the EEPROM is equal to 0xBABA.
912  **/
913 static s32 e1000_validate_nvm_checksum_82571(struct e1000_hw *hw)
914 {
915 	DEBUGFUNC("e1000_validate_nvm_checksum_82571");
916 
917 	if (hw->nvm.type == e1000_nvm_flash_hw)
918 		e1000_fix_nvm_checksum_82571(hw);
919 
920 	return e1000_validate_nvm_checksum_generic(hw);
921 }
922 
923 /**
924  *  e1000_write_nvm_eewr_82571 - Write to EEPROM for 82573 silicon
925  *  @hw: pointer to the HW structure
926  *  @offset: offset within the EEPROM to be written to
927  *  @words: number of words to write
928  *  @data: 16 bit word(s) to be written to the EEPROM
929  *
930  *  After checking for invalid values, poll the EEPROM to ensure the previous
931  *  command has completed before trying to write the next word.  After write
932  *  poll for completion.
933  *
934  *  If e1000_update_nvm_checksum is not called after this function, the
935  *  EEPROM will most likely contain an invalid checksum.
936  **/
937 static s32 e1000_write_nvm_eewr_82571(struct e1000_hw *hw, u16 offset,
938                                       u16 words, u16 *data)
939 {
940 	struct e1000_nvm_info *nvm = &hw->nvm;
941 	u32 i, eewr = 0;
942 	s32 ret_val = 0;
943 
944 	DEBUGFUNC("e1000_write_nvm_eewr_82571");
945 
946 	/*
947 	 * A check for invalid values:  offset too large, too many words,
948 	 * and not enough words.
949 	 */
950 	if ((offset >= nvm->word_size) || (words > (nvm->word_size - offset)) ||
951 	    (words == 0)) {
952 		DEBUGOUT("nvm parameter(s) out of bounds\n");
953 		ret_val = -E1000_ERR_NVM;
954 		goto out;
955 	}
956 
957 	for (i = 0; i < words; i++) {
958 		eewr = (data[i] << E1000_NVM_RW_REG_DATA) |
959 		       ((offset+i) << E1000_NVM_RW_ADDR_SHIFT) |
960 		       E1000_NVM_RW_REG_START;
961 
962 		ret_val = e1000_poll_eerd_eewr_done(hw, E1000_NVM_POLL_WRITE);
963 		if (ret_val)
964 			break;
965 
966 		E1000_WRITE_REG(hw, E1000_EEWR, eewr);
967 
968 		ret_val = e1000_poll_eerd_eewr_done(hw, E1000_NVM_POLL_WRITE);
969 		if (ret_val)
970 			break;
971 	}
972 
973 out:
974 	return ret_val;
975 }
976 
977 /**
978  *  e1000_get_cfg_done_82571 - Poll for configuration done
979  *  @hw: pointer to the HW structure
980  *
981  *  Reads the management control register for the config done bit to be set.
982  **/
983 static s32 e1000_get_cfg_done_82571(struct e1000_hw *hw)
984 {
985 	s32 timeout = PHY_CFG_TIMEOUT;
986 	s32 ret_val = E1000_SUCCESS;
987 
988 	DEBUGFUNC("e1000_get_cfg_done_82571");
989 
990 	while (timeout) {
991 		if (E1000_READ_REG(hw, E1000_EEMNGCTL) &
992 		    E1000_NVM_CFG_DONE_PORT_0)
993 			break;
994 		msec_delay(1);
995 		timeout--;
996 	}
997 	if (!timeout) {
998 		DEBUGOUT("MNG configuration cycle has not completed.\n");
999 		ret_val = -E1000_ERR_RESET;
1000 		goto out;
1001 	}
1002 
1003 out:
1004 	return ret_val;
1005 }
1006 
1007 /**
1008  *  e1000_set_d0_lplu_state_82571 - Set Low Power Linkup D0 state
1009  *  @hw: pointer to the HW structure
1010  *  @active: TRUE to enable LPLU, FALSE to disable
1011  *
1012  *  Sets the LPLU D0 state according to the active flag.  When activating LPLU
1013  *  this function also disables smart speed and vice versa.  LPLU will not be
1014  *  activated unless the device autonegotiation advertisement meets standards
1015  *  of either 10 or 10/100 or 10/100/1000 at all duplexes.  This is a function
1016  *  pointer entry point only called by PHY setup routines.
1017  **/
1018 static s32 e1000_set_d0_lplu_state_82571(struct e1000_hw *hw, bool active)
1019 {
1020 	struct e1000_phy_info *phy = &hw->phy;
1021 	s32 ret_val = E1000_SUCCESS;
1022 	u16 data;
1023 
1024 	DEBUGFUNC("e1000_set_d0_lplu_state_82571");
1025 
1026 	if (!(phy->ops.read_reg))
1027 		goto out;
1028 
1029 	ret_val = phy->ops.read_reg(hw, IGP02E1000_PHY_POWER_MGMT, &data);
1030 	if (ret_val)
1031 		goto out;
1032 
1033 	if (active) {
1034 		data |= IGP02E1000_PM_D0_LPLU;
1035 		ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT,
1036 		                             data);
1037 		if (ret_val)
1038 			goto out;
1039 
1040 		/* When LPLU is enabled, we should disable SmartSpeed */
1041 		ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
1042 		                            &data);
1043 		data &= ~IGP01E1000_PSCFR_SMART_SPEED;
1044 		ret_val = phy->ops.write_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
1045 		                             data);
1046 		if (ret_val)
1047 			goto out;
1048 	} else {
1049 		data &= ~IGP02E1000_PM_D0_LPLU;
1050 		ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT,
1051 		                             data);
1052 		/*
1053 		 * LPLU and SmartSpeed are mutually exclusive.  LPLU is used
1054 		 * during Dx states where the power conservation is most
1055 		 * important.  During driver activity we should enable
1056 		 * SmartSpeed, so performance is maintained.
1057 		 */
1058 		if (phy->smart_speed == e1000_smart_speed_on) {
1059 			ret_val = phy->ops.read_reg(hw,
1060 			                            IGP01E1000_PHY_PORT_CONFIG,
1061 			                            &data);
1062 			if (ret_val)
1063 				goto out;
1064 
1065 			data |= IGP01E1000_PSCFR_SMART_SPEED;
1066 			ret_val = phy->ops.write_reg(hw,
1067 			                             IGP01E1000_PHY_PORT_CONFIG,
1068 			                             data);
1069 			if (ret_val)
1070 				goto out;
1071 		} else if (phy->smart_speed == e1000_smart_speed_off) {
1072 			ret_val = phy->ops.read_reg(hw,
1073 			                            IGP01E1000_PHY_PORT_CONFIG,
1074 			                            &data);
1075 			if (ret_val)
1076 				goto out;
1077 
1078 			data &= ~IGP01E1000_PSCFR_SMART_SPEED;
1079 			ret_val = phy->ops.write_reg(hw,
1080 			                             IGP01E1000_PHY_PORT_CONFIG,
1081 			                             data);
1082 			if (ret_val)
1083 				goto out;
1084 		}
1085 	}
1086 
1087 out:
1088 	return ret_val;
1089 }
1090 
1091 /**
1092  *  e1000_reset_hw_82571 - Reset hardware
1093  *  @hw: pointer to the HW structure
1094  *
1095  *  This resets the hardware into a known state.
1096  **/
1097 static s32 e1000_reset_hw_82571(struct e1000_hw *hw)
1098 {
1099 	u32 ctrl, ctrl_ext;
1100 	s32 ret_val;
1101 
1102 	DEBUGFUNC("e1000_reset_hw_82571");
1103 
1104 	/*
1105 	 * Prevent the PCI-E bus from sticking if there is no TLP connection
1106 	 * on the last TLP read/write transaction when MAC is reset.
1107 	 */
1108 	ret_val = e1000_disable_pcie_master_generic(hw);
1109 	if (ret_val)
1110 		DEBUGOUT("PCI-E Master disable polling has failed.\n");
1111 
1112 	DEBUGOUT("Masking off all interrupts\n");
1113 	E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
1114 
1115 	E1000_WRITE_REG(hw, E1000_RCTL, 0);
1116 	E1000_WRITE_REG(hw, E1000_TCTL, E1000_TCTL_PSP);
1117 	E1000_WRITE_FLUSH(hw);
1118 
1119 	msec_delay(10);
1120 
1121 	/*
1122 	 * Must acquire the MDIO ownership before MAC reset.
1123 	 * Ownership defaults to firmware after a reset.
1124 	 */
1125 	switch (hw->mac.type) {
1126 	case e1000_82573:
1127 		ret_val = e1000_get_hw_semaphore_82573(hw);
1128 		break;
1129 	case e1000_82574:
1130 	case e1000_82583:
1131 		ret_val = e1000_get_hw_semaphore_82574(hw);
1132 		break;
1133 	default:
1134 		break;
1135 	}
1136 	if (ret_val)
1137 		DEBUGOUT("Cannot acquire MDIO ownership\n");
1138 
1139 	ctrl = E1000_READ_REG(hw, E1000_CTRL);
1140 
1141 	DEBUGOUT("Issuing a global reset to MAC\n");
1142 	E1000_WRITE_REG(hw, E1000_CTRL, ctrl | E1000_CTRL_RST);
1143 
1144 	/* Must release MDIO ownership and mutex after MAC reset. */
1145 	switch (hw->mac.type) {
1146 	case e1000_82574:
1147 	case e1000_82583:
1148 		e1000_put_hw_semaphore_82574(hw);
1149 		break;
1150 	default:
1151 		break;
1152 	}
1153 
1154 	if (hw->nvm.type == e1000_nvm_flash_hw) {
1155 		usec_delay(10);
1156 		ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
1157 		ctrl_ext |= E1000_CTRL_EXT_EE_RST;
1158 		E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext);
1159 		E1000_WRITE_FLUSH(hw);
1160 	}
1161 
1162 	ret_val = e1000_get_auto_rd_done_generic(hw);
1163 	if (ret_val)
1164 		/* We don't want to continue accessing MAC registers. */
1165 		goto out;
1166 
1167 	/*
1168 	 * Phy configuration from NVM just starts after EECD_AUTO_RD is set.
1169 	 * Need to wait for Phy configuration completion before accessing
1170 	 * NVM and Phy.
1171 	 */
1172 
1173 	switch (hw->mac.type) {
1174 	case e1000_82573:
1175 	case e1000_82574:
1176 	case e1000_82583:
1177 		msec_delay(25);
1178 		break;
1179 	default:
1180 		break;
1181 	}
1182 
1183 	/* Clear any pending interrupt events. */
1184 	E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
1185 	E1000_READ_REG(hw, E1000_ICR);
1186 
1187 	if (hw->mac.type == e1000_82571) {
1188 		/* Install any alternate MAC address into RAR0 */
1189 		ret_val = e1000_check_alt_mac_addr_generic(hw);
1190 		if (ret_val)
1191 			goto out;
1192 
1193 		e1000_set_laa_state_82571(hw, TRUE);
1194 	}
1195 
1196 	/* Reinitialize the 82571 serdes link state machine */
1197 	if (hw->phy.media_type == e1000_media_type_internal_serdes)
1198 		hw->mac.serdes_link_state = e1000_serdes_link_down;
1199 
1200 out:
1201 	return ret_val;
1202 }
1203 
1204 /**
1205  *  e1000_init_hw_82571 - Initialize hardware
1206  *  @hw: pointer to the HW structure
1207  *
1208  *  This inits the hardware readying it for operation.
1209  **/
1210 static s32 e1000_init_hw_82571(struct e1000_hw *hw)
1211 {
1212 	struct e1000_mac_info *mac = &hw->mac;
1213 	u32 reg_data;
1214 	s32 ret_val;
1215 	u16 i, rar_count = mac->rar_entry_count;
1216 
1217 	DEBUGFUNC("e1000_init_hw_82571");
1218 
1219 	e1000_initialize_hw_bits_82571(hw);
1220 
1221 	/* Initialize identification LED */
1222 	ret_val = mac->ops.id_led_init(hw);
1223 	if (ret_val)
1224 		DEBUGOUT("Error initializing identification LED\n");
1225 		/* This is not fatal and we should not stop init due to this */
1226 
1227 	/* Disabling VLAN filtering */
1228 	DEBUGOUT("Initializing the IEEE VLAN\n");
1229 	mac->ops.clear_vfta(hw);
1230 
1231 	/* Setup the receive address. */
1232 	/*
1233 	 * If, however, a locally administered address was assigned to the
1234 	 * 82571, we must reserve a RAR for it to work around an issue where
1235 	 * resetting one port will reload the MAC on the other port.
1236 	 */
1237 	if (e1000_get_laa_state_82571(hw))
1238 		rar_count--;
1239 	e1000_init_rx_addrs_generic(hw, rar_count);
1240 
1241 	/* Zero out the Multicast HASH table */
1242 	DEBUGOUT("Zeroing the MTA\n");
1243 	for (i = 0; i < mac->mta_reg_count; i++)
1244 		E1000_WRITE_REG_ARRAY(hw, E1000_MTA, i, 0);
1245 
1246 	/* Setup link and flow control */
1247 	ret_val = mac->ops.setup_link(hw);
1248 
1249 	/* Set the transmit descriptor write-back policy */
1250 	reg_data = E1000_READ_REG(hw, E1000_TXDCTL(0));
1251 	reg_data = (reg_data & ~E1000_TXDCTL_WTHRESH) |
1252 	           E1000_TXDCTL_FULL_TX_DESC_WB |
1253 	           E1000_TXDCTL_COUNT_DESC;
1254 	E1000_WRITE_REG(hw, E1000_TXDCTL(0), reg_data);
1255 
1256 	/* ...for both queues. */
1257 	switch (mac->type) {
1258 	case e1000_82573:
1259 		e1000_enable_tx_pkt_filtering_generic(hw);
1260 		/* fall through */
1261 	case e1000_82574:
1262 	case e1000_82583:
1263 		reg_data = E1000_READ_REG(hw, E1000_GCR);
1264 		reg_data |= E1000_GCR_L1_ACT_WITHOUT_L0S_RX;
1265 		E1000_WRITE_REG(hw, E1000_GCR, reg_data);
1266 		break;
1267 	default:
1268 		reg_data = E1000_READ_REG(hw, E1000_TXDCTL(1));
1269 		reg_data = (reg_data & ~E1000_TXDCTL_WTHRESH) |
1270 		           E1000_TXDCTL_FULL_TX_DESC_WB |
1271 		           E1000_TXDCTL_COUNT_DESC;
1272 		E1000_WRITE_REG(hw, E1000_TXDCTL(1), reg_data);
1273 		break;
1274 	}
1275 
1276 	/*
1277 	 * Clear all of the statistics registers (clear on read).  It is
1278 	 * important that we do this after we have tried to establish link
1279 	 * because the symbol error count will increment wildly if there
1280 	 * is no link.
1281 	 */
1282 	e1000_clear_hw_cntrs_82571(hw);
1283 
1284 	return ret_val;
1285 }
1286 
1287 /**
1288  *  e1000_initialize_hw_bits_82571 - Initialize hardware-dependent bits
1289  *  @hw: pointer to the HW structure
1290  *
1291  *  Initializes required hardware-dependent bits needed for normal operation.
1292  **/
1293 static void e1000_initialize_hw_bits_82571(struct e1000_hw *hw)
1294 {
1295 	u32 reg;
1296 
1297 	DEBUGFUNC("e1000_initialize_hw_bits_82571");
1298 
1299 	/* Transmit Descriptor Control 0 */
1300 	reg = E1000_READ_REG(hw, E1000_TXDCTL(0));
1301 	reg |= (1 << 22);
1302 	E1000_WRITE_REG(hw, E1000_TXDCTL(0), reg);
1303 
1304 	/* Transmit Descriptor Control 1 */
1305 	reg = E1000_READ_REG(hw, E1000_TXDCTL(1));
1306 	reg |= (1 << 22);
1307 	E1000_WRITE_REG(hw, E1000_TXDCTL(1), reg);
1308 
1309 	/* Transmit Arbitration Control 0 */
1310 	reg = E1000_READ_REG(hw, E1000_TARC(0));
1311 	reg &= ~(0xF << 27); /* 30:27 */
1312 	switch (hw->mac.type) {
1313 	case e1000_82571:
1314 	case e1000_82572:
1315 		reg |= (1 << 23) | (1 << 24) | (1 << 25) | (1 << 26);
1316 		break;
1317 	default:
1318 		break;
1319 	}
1320 	E1000_WRITE_REG(hw, E1000_TARC(0), reg);
1321 
1322 	/* Transmit Arbitration Control 1 */
1323 	reg = E1000_READ_REG(hw, E1000_TARC(1));
1324 	switch (hw->mac.type) {
1325 	case e1000_82571:
1326 	case e1000_82572:
1327 		reg &= ~((1 << 29) | (1 << 30));
1328 		reg |= (1 << 22) | (1 << 24) | (1 << 25) | (1 << 26);
1329 		if (E1000_READ_REG(hw, E1000_TCTL) & E1000_TCTL_MULR)
1330 			reg &= ~(1 << 28);
1331 		else
1332 			reg |= (1 << 28);
1333 		E1000_WRITE_REG(hw, E1000_TARC(1), reg);
1334 		break;
1335 	default:
1336 		break;
1337 	}
1338 
1339 	/* Device Control */
1340 	switch (hw->mac.type) {
1341 	case e1000_82573:
1342 	case e1000_82574:
1343 	case e1000_82583:
1344 		reg = E1000_READ_REG(hw, E1000_CTRL);
1345 		reg &= ~(1 << 29);
1346 		E1000_WRITE_REG(hw, E1000_CTRL, reg);
1347 		break;
1348 	default:
1349 		break;
1350 	}
1351 
1352 	/* Extended Device Control */
1353 	switch (hw->mac.type) {
1354 	case e1000_82573:
1355 	case e1000_82574:
1356 	case e1000_82583:
1357 		reg = E1000_READ_REG(hw, E1000_CTRL_EXT);
1358 		reg &= ~(1 << 23);
1359 		reg |= (1 << 22);
1360 		E1000_WRITE_REG(hw, E1000_CTRL_EXT, reg);
1361 		break;
1362 	default:
1363 		break;
1364 	}
1365 
1366 	if (hw->mac.type == e1000_82571) {
1367 		reg = E1000_READ_REG(hw, E1000_PBA_ECC);
1368 		reg |= E1000_PBA_ECC_CORR_EN;
1369 		E1000_WRITE_REG(hw, E1000_PBA_ECC, reg);
1370 	}
1371 
1372 	/*
1373 	 * Workaround for hardware errata.
1374 	 * Ensure that DMA Dynamic Clock gating is disabled on 82571 and 82572
1375 	 */
1376 	if ((hw->mac.type == e1000_82571) ||
1377 	   (hw->mac.type == e1000_82572)) {
1378 		reg = E1000_READ_REG(hw, E1000_CTRL_EXT);
1379 		reg &= ~E1000_CTRL_EXT_DMA_DYN_CLK_EN;
1380 		E1000_WRITE_REG(hw, E1000_CTRL_EXT, reg);
1381 	}
1382 
1383 	/* PCI-Ex Control Registers */
1384 	switch (hw->mac.type) {
1385 	case e1000_82574:
1386 	case e1000_82583:
1387 		reg = E1000_READ_REG(hw, E1000_GCR);
1388 		reg |= (1 << 22);
1389 		E1000_WRITE_REG(hw, E1000_GCR, reg);
1390 
1391 		/*
1392 		 * Workaround for hardware errata.
1393 		 * apply workaround for hardware errata documented in errata
1394 		 * docs Fixes issue where some error prone or unreliable PCIe
1395 		 * completions are occurring, particularly with ASPM enabled.
1396 		 * Without fix, issue can cause Tx timeouts.
1397 		 */
1398 		reg = E1000_READ_REG(hw, E1000_GCR2);
1399 		reg |= 1;
1400 		E1000_WRITE_REG(hw, E1000_GCR2, reg);
1401 		break;
1402 	default:
1403 		break;
1404 	}
1405 
1406 	return;
1407 }
1408 
1409 /**
1410  *  e1000_clear_vfta_82571 - Clear VLAN filter table
1411  *  @hw: pointer to the HW structure
1412  *
1413  *  Clears the register array which contains the VLAN filter table by
1414  *  setting all the values to 0.
1415  **/
1416 static void e1000_clear_vfta_82571(struct e1000_hw *hw)
1417 {
1418 	u32 offset;
1419 	u32 vfta_value = 0;
1420 	u32 vfta_offset = 0;
1421 	u32 vfta_bit_in_reg = 0;
1422 
1423 	DEBUGFUNC("e1000_clear_vfta_82571");
1424 
1425 	switch (hw->mac.type) {
1426 	case e1000_82573:
1427 	case e1000_82574:
1428 	case e1000_82583:
1429 		if (hw->mng_cookie.vlan_id != 0) {
1430 			/*
1431 			 * The VFTA is a 4096b bit-field, each identifying
1432 			 * a single VLAN ID.  The following operations
1433 			 * determine which 32b entry (i.e. offset) into the
1434 			 * array we want to set the VLAN ID (i.e. bit) of
1435 			 * the manageability unit.
1436 			 */
1437 			vfta_offset = (hw->mng_cookie.vlan_id >>
1438 				E1000_VFTA_ENTRY_SHIFT) & E1000_VFTA_ENTRY_MASK;
1439 			vfta_bit_in_reg = 1 << (hw->mng_cookie.vlan_id &
1440 				E1000_VFTA_ENTRY_BIT_SHIFT_MASK);
1441 		}
1442 		break;
1443 	default:
1444 		break;
1445 	}
1446 	for (offset = 0; offset < E1000_VLAN_FILTER_TBL_SIZE; offset++) {
1447 		/*
1448 		 * If the offset we want to clear is the same offset of the
1449 		 * manageability VLAN ID, then clear all bits except that of
1450 		 * the manageability unit.
1451 		 */
1452 		vfta_value = (offset == vfta_offset) ? vfta_bit_in_reg : 0;
1453 		E1000_WRITE_REG_ARRAY(hw, E1000_VFTA, offset, vfta_value);
1454 		E1000_WRITE_FLUSH(hw);
1455 	}
1456 }
1457 
1458 /**
1459  *  e1000_check_mng_mode_82574 - Check manageability is enabled
1460  *  @hw: pointer to the HW structure
1461  *
1462  *  Reads the NVM Initialization Control Word 2 and returns TRUE
1463  *  (>0) if any manageability is enabled, else FALSE (0).
1464  **/
1465 static bool e1000_check_mng_mode_82574(struct e1000_hw *hw)
1466 {
1467 	u16 data;
1468 
1469 	DEBUGFUNC("e1000_check_mng_mode_82574");
1470 
1471 	hw->nvm.ops.read(hw, NVM_INIT_CONTROL2_REG, 1, &data);
1472 	return (data & E1000_NVM_INIT_CTRL2_MNGM) != 0;
1473 }
1474 
1475 /**
1476  *  e1000_led_on_82574 - Turn LED on
1477  *  @hw: pointer to the HW structure
1478  *
1479  *  Turn LED on.
1480  **/
1481 static s32 e1000_led_on_82574(struct e1000_hw *hw)
1482 {
1483 	u32 ctrl;
1484 	u32 i;
1485 
1486 	DEBUGFUNC("e1000_led_on_82574");
1487 
1488 	ctrl = hw->mac.ledctl_mode2;
1489 	if (!(E1000_STATUS_LU & E1000_READ_REG(hw, E1000_STATUS))) {
1490 		/*
1491 		 * If no link, then turn LED on by setting the invert bit
1492 		 * for each LED that's "on" (0x0E) in ledctl_mode2.
1493 		 */
1494 		for (i = 0; i < 4; i++)
1495 			if (((hw->mac.ledctl_mode2 >> (i * 8)) & 0xFF) ==
1496 			    E1000_LEDCTL_MODE_LED_ON)
1497 				ctrl |= (E1000_LEDCTL_LED0_IVRT << (i * 8));
1498 	}
1499 	E1000_WRITE_REG(hw, E1000_LEDCTL, ctrl);
1500 
1501 	return E1000_SUCCESS;
1502 }
1503 
1504 /**
1505  *  e1000_check_phy_82574 - check 82574 phy hung state
1506  *  @hw: pointer to the HW structure
1507  *
1508  *  Returns whether phy is hung or not
1509  **/
1510 bool e1000_check_phy_82574(struct e1000_hw *hw)
1511 {
1512 	u16 status_1kbt = 0;
1513 	u16 receive_errors = 0;
1514 	bool phy_hung = FALSE;
1515 	s32 ret_val = E1000_SUCCESS;
1516 
1517 	DEBUGFUNC("e1000_check_phy_82574");
1518 
1519 	/*
1520 	 * Read PHY Receive Error counter first, if its is max - all F's then
1521 	 * read the Base1000T status register If both are max then PHY is hung.
1522 	 */
1523 	ret_val = hw->phy.ops.read_reg(hw, E1000_RECEIVE_ERROR_COUNTER,
1524 	                               &receive_errors);
1525 	if (ret_val)
1526 		goto out;
1527 	if (receive_errors == E1000_RECEIVE_ERROR_MAX) {
1528 		ret_val = hw->phy.ops.read_reg(hw, E1000_BASE1000T_STATUS,
1529 		                               &status_1kbt);
1530 		if (ret_val)
1531 			goto out;
1532 		if ((status_1kbt & E1000_IDLE_ERROR_COUNT_MASK) ==
1533 		    E1000_IDLE_ERROR_COUNT_MASK)
1534 			phy_hung = TRUE;
1535 	}
1536 out:
1537 	return phy_hung;
1538 }
1539 
1540 
1541 /**
1542  *  e1000_setup_link_82571 - Setup flow control and link settings
1543  *  @hw: pointer to the HW structure
1544  *
1545  *  Determines which flow control settings to use, then configures flow
1546  *  control.  Calls the appropriate media-specific link configuration
1547  *  function.  Assuming the adapter has a valid link partner, a valid link
1548  *  should be established.  Assumes the hardware has previously been reset
1549  *  and the transmitter and receiver are not enabled.
1550  **/
1551 static s32 e1000_setup_link_82571(struct e1000_hw *hw)
1552 {
1553 	DEBUGFUNC("e1000_setup_link_82571");
1554 
1555 	/*
1556 	 * 82573 does not have a word in the NVM to determine
1557 	 * the default flow control setting, so we explicitly
1558 	 * set it to full.
1559 	 */
1560 	switch (hw->mac.type) {
1561 	case e1000_82573:
1562 	case e1000_82574:
1563 	case e1000_82583:
1564 		if (hw->fc.requested_mode == e1000_fc_default)
1565 			hw->fc.requested_mode = e1000_fc_full;
1566 		break;
1567 	default:
1568 		break;
1569 	}
1570 
1571 	return e1000_setup_link_generic(hw);
1572 }
1573 
1574 /**
1575  *  e1000_setup_copper_link_82571 - Configure copper link settings
1576  *  @hw: pointer to the HW structure
1577  *
1578  *  Configures the link for auto-neg or forced speed and duplex.  Then we check
1579  *  for link, once link is established calls to configure collision distance
1580  *  and flow control are called.
1581  **/
1582 static s32 e1000_setup_copper_link_82571(struct e1000_hw *hw)
1583 {
1584 	u32 ctrl;
1585 	s32 ret_val;
1586 
1587 	DEBUGFUNC("e1000_setup_copper_link_82571");
1588 
1589 	ctrl = E1000_READ_REG(hw, E1000_CTRL);
1590 	ctrl |= E1000_CTRL_SLU;
1591 	ctrl &= ~(E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
1592 	E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
1593 
1594 	switch (hw->phy.type) {
1595 	case e1000_phy_m88:
1596 	case e1000_phy_bm:
1597 		ret_val = e1000_copper_link_setup_m88(hw);
1598 		break;
1599 	case e1000_phy_igp_2:
1600 		ret_val = e1000_copper_link_setup_igp(hw);
1601 		break;
1602 	default:
1603 		ret_val = -E1000_ERR_PHY;
1604 		break;
1605 	}
1606 
1607 	if (ret_val)
1608 		goto out;
1609 
1610 	ret_val = e1000_setup_copper_link_generic(hw);
1611 
1612 out:
1613 	return ret_val;
1614 }
1615 
1616 /**
1617  *  e1000_setup_fiber_serdes_link_82571 - Setup link for fiber/serdes
1618  *  @hw: pointer to the HW structure
1619  *
1620  *  Configures collision distance and flow control for fiber and serdes links.
1621  *  Upon successful setup, poll for link.
1622  **/
1623 static s32 e1000_setup_fiber_serdes_link_82571(struct e1000_hw *hw)
1624 {
1625 	DEBUGFUNC("e1000_setup_fiber_serdes_link_82571");
1626 
1627 	switch (hw->mac.type) {
1628 	case e1000_82571:
1629 	case e1000_82572:
1630 		/*
1631 		 * If SerDes loopback mode is entered, there is no form
1632 		 * of reset to take the adapter out of that mode.  So we
1633 		 * have to explicitly take the adapter out of loopback
1634 		 * mode.  This prevents drivers from twiddling their thumbs
1635 		 * if another tool failed to take it out of loopback mode.
1636 		 */
1637 		E1000_WRITE_REG(hw, E1000_SCTL, E1000_SCTL_DISABLE_SERDES_LOOPBACK);
1638 		break;
1639 	default:
1640 		break;
1641 	}
1642 
1643 	return e1000_setup_fiber_serdes_link_generic(hw);
1644 }
1645 
1646 /**
1647  *  e1000_check_for_serdes_link_82571 - Check for link (Serdes)
1648  *  @hw: pointer to the HW structure
1649  *
1650  *  Reports the link state as up or down.
1651  *
1652  *  If autonegotiation is supported by the link partner, the link state is
1653  *  determined by the result of autonegotiation. This is the most likely case.
1654  *  If autonegotiation is not supported by the link partner, and the link
1655  *  has a valid signal, force the link up.
1656  *
1657  *  The link state is represented internally here by 4 states:
1658  *
1659  *  1) down
1660  *  2) autoneg_progress
1661  *  3) autoneg_complete (the link sucessfully autonegotiated)
1662  *  4) forced_up (the link has been forced up, it did not autonegotiate)
1663  *
1664  **/
1665 static s32 e1000_check_for_serdes_link_82571(struct e1000_hw *hw)
1666 {
1667 	struct e1000_mac_info *mac = &hw->mac;
1668 	u32 rxcw;
1669 	u32 ctrl;
1670 	u32 status;
1671 	u32 txcw;
1672 	u32 i;
1673 	s32 ret_val = E1000_SUCCESS;
1674 
1675 	DEBUGFUNC("e1000_check_for_serdes_link_82571");
1676 
1677 	ctrl = E1000_READ_REG(hw, E1000_CTRL);
1678 	status = E1000_READ_REG(hw, E1000_STATUS);
1679 	rxcw = E1000_READ_REG(hw, E1000_RXCW);
1680 
1681 	if ((rxcw & E1000_RXCW_SYNCH) && !(rxcw & E1000_RXCW_IV)) {
1682 
1683 		/* Receiver is synchronized with no invalid bits.  */
1684 		switch (mac->serdes_link_state) {
1685 		case e1000_serdes_link_autoneg_complete:
1686 			if (!(status & E1000_STATUS_LU)) {
1687 				/*
1688 				 * We have lost link, retry autoneg before
1689 				 * reporting link failure
1690 				 */
1691 				mac->serdes_link_state =
1692 				    e1000_serdes_link_autoneg_progress;
1693 				mac->serdes_has_link = FALSE;
1694 				DEBUGOUT("AN_UP     -> AN_PROG\n");
1695 			} else {
1696 				mac->serdes_has_link = TRUE;
1697 			}
1698 			break;
1699 
1700 		case e1000_serdes_link_forced_up:
1701 			/*
1702 			 * If we are receiving /C/ ordered sets, re-enable
1703 			 * auto-negotiation in the TXCW register and disable
1704 			 * forced link in the Device Control register in an
1705 			 * attempt to auto-negotiate with our link partner.
1706 			 * If the partner code word is null, stop forcing
1707 			 * and restart auto negotiation.
1708 			 */
1709 			if ((rxcw & E1000_RXCW_C) || !(rxcw & E1000_RXCW_CW))  {
1710 				/* Enable autoneg, and unforce link up */
1711 				E1000_WRITE_REG(hw, E1000_TXCW, mac->txcw);
1712 				E1000_WRITE_REG(hw, E1000_CTRL,
1713 				    (ctrl & ~E1000_CTRL_SLU));
1714 				mac->serdes_link_state =
1715 				    e1000_serdes_link_autoneg_progress;
1716 				mac->serdes_has_link = FALSE;
1717 				DEBUGOUT("FORCED_UP -> AN_PROG\n");
1718 			} else {
1719 				mac->serdes_has_link = TRUE;
1720 			}
1721 			break;
1722 
1723 		case e1000_serdes_link_autoneg_progress:
1724 			if (rxcw & E1000_RXCW_C) {
1725 				/*
1726 				 * We received /C/ ordered sets, meaning the
1727 				 * link partner has autonegotiated, and we can
1728 				 * trust the Link Up (LU) status bit.
1729 				 */
1730 				if (status & E1000_STATUS_LU) {
1731 					mac->serdes_link_state =
1732 					    e1000_serdes_link_autoneg_complete;
1733 					DEBUGOUT("AN_PROG   -> AN_UP\n");
1734 					mac->serdes_has_link = TRUE;
1735 				} else {
1736 					/* Autoneg completed, but failed. */
1737 					mac->serdes_link_state =
1738 					    e1000_serdes_link_down;
1739 					DEBUGOUT("AN_PROG   -> DOWN\n");
1740 				}
1741 			} else {
1742 				/*
1743 				 * The link partner did not autoneg.
1744 				 * Force link up and full duplex, and change
1745 				 * state to forced.
1746 				 */
1747 				E1000_WRITE_REG(hw, E1000_TXCW,
1748 				(mac->txcw & ~E1000_TXCW_ANE));
1749 				ctrl |= (E1000_CTRL_SLU | E1000_CTRL_FD);
1750 				E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
1751 
1752 				/* Configure Flow Control after link up. */
1753 				ret_val =
1754 				    e1000_config_fc_after_link_up_generic(hw);
1755 				if (ret_val) {
1756 					DEBUGOUT("Error config flow control\n");
1757 					break;
1758 				}
1759 				mac->serdes_link_state =
1760 				e1000_serdes_link_forced_up;
1761 				mac->serdes_has_link = TRUE;
1762 				DEBUGOUT("AN_PROG   -> FORCED_UP\n");
1763 			}
1764 			break;
1765 
1766 		case e1000_serdes_link_down:
1767 		default:
1768 			/*
1769 			 * The link was down but the receiver has now gained
1770 			 * valid sync, so lets see if we can bring the link
1771 			 * up.
1772 			 */
1773 			E1000_WRITE_REG(hw, E1000_TXCW, mac->txcw);
1774 			E1000_WRITE_REG(hw, E1000_CTRL,
1775 			    (ctrl & ~E1000_CTRL_SLU));
1776 			mac->serdes_link_state =
1777 			    e1000_serdes_link_autoneg_progress;
1778 			mac->serdes_has_link = FALSE;
1779 			DEBUGOUT("DOWN      -> AN_PROG\n");
1780 			break;
1781 		}
1782 	} else {
1783 		if (!(rxcw & E1000_RXCW_SYNCH)) {
1784 			mac->serdes_has_link = FALSE;
1785 			mac->serdes_link_state = e1000_serdes_link_down;
1786 			DEBUGOUT("ANYSTATE  -> DOWN\n");
1787 		} else {
1788 			/*
1789 			 * Check several times, if Sync and Config
1790 			 * both are consistently 1 then simply ignore
1791 			 * the Invalid bit and restart Autoneg
1792 			 */
1793 			for (i = 0; i < AN_RETRY_COUNT; i++) {
1794 				usec_delay(10);
1795 				rxcw = E1000_READ_REG(hw, E1000_RXCW);
1796 				if ((rxcw & E1000_RXCW_IV) &&
1797 				    !((rxcw & E1000_RXCW_SYNCH) &&
1798 				      (rxcw & E1000_RXCW_C))) {
1799 					mac->serdes_has_link = FALSE;
1800 					mac->serdes_link_state =
1801 					    e1000_serdes_link_down;
1802 					DEBUGOUT("ANYSTATE  -> DOWN\n");
1803 					break;
1804 				}
1805 			}
1806 
1807 			if (i == AN_RETRY_COUNT) {
1808 				txcw = E1000_READ_REG(hw, E1000_TXCW);
1809 				txcw |= E1000_TXCW_ANE;
1810 				E1000_WRITE_REG(hw, E1000_TXCW, txcw);
1811 				mac->serdes_link_state =
1812 				    e1000_serdes_link_autoneg_progress;
1813 				mac->serdes_has_link = FALSE;
1814 				DEBUGOUT("ANYSTATE  -> AN_PROG\n");
1815 			}
1816 		}
1817 	}
1818 
1819 	return ret_val;
1820 }
1821 
1822 /**
1823  *  e1000_valid_led_default_82571 - Verify a valid default LED config
1824  *  @hw: pointer to the HW structure
1825  *  @data: pointer to the NVM (EEPROM)
1826  *
1827  *  Read the EEPROM for the current default LED configuration.  If the
1828  *  LED configuration is not valid, set to a valid LED configuration.
1829  **/
1830 static s32 e1000_valid_led_default_82571(struct e1000_hw *hw, u16 *data)
1831 {
1832 	s32 ret_val;
1833 
1834 	DEBUGFUNC("e1000_valid_led_default_82571");
1835 
1836 	ret_val = hw->nvm.ops.read(hw, NVM_ID_LED_SETTINGS, 1, data);
1837 	if (ret_val) {
1838 		DEBUGOUT("NVM Read Error\n");
1839 		goto out;
1840 	}
1841 
1842 	switch (hw->mac.type) {
1843 	case e1000_82573:
1844 	case e1000_82574:
1845 	case e1000_82583:
1846 		if (*data == ID_LED_RESERVED_F746)
1847 			*data = ID_LED_DEFAULT_82573;
1848 		break;
1849 	default:
1850 		if (*data == ID_LED_RESERVED_0000 ||
1851 		    *data == ID_LED_RESERVED_FFFF)
1852 			*data = ID_LED_DEFAULT;
1853 		break;
1854 	}
1855 
1856 out:
1857 	return ret_val;
1858 }
1859 
1860 /**
1861  *  e1000_get_laa_state_82571 - Get locally administered address state
1862  *  @hw: pointer to the HW structure
1863  *
1864  *  Retrieve and return the current locally administered address state.
1865  **/
1866 bool e1000_get_laa_state_82571(struct e1000_hw *hw)
1867 {
1868 	DEBUGFUNC("e1000_get_laa_state_82571");
1869 
1870 	if (hw->mac.type != e1000_82571)
1871 		return FALSE;
1872 
1873 	return hw->dev_spec._82571.laa_is_present;
1874 }
1875 
1876 /**
1877  *  e1000_set_laa_state_82571 - Set locally administered address state
1878  *  @hw: pointer to the HW structure
1879  *  @state: enable/disable locally administered address
1880  *
1881  *  Enable/Disable the current locally administered address state.
1882  **/
1883 void e1000_set_laa_state_82571(struct e1000_hw *hw, bool state)
1884 {
1885 	DEBUGFUNC("e1000_set_laa_state_82571");
1886 
1887 	if (hw->mac.type != e1000_82571)
1888 		return;
1889 
1890 	hw->dev_spec._82571.laa_is_present = state;
1891 
1892 	/* If workaround is activated... */
1893 	if (state)
1894 		/*
1895 		 * Hold a copy of the LAA in RAR[14] This is done so that
1896 		 * between the time RAR[0] gets clobbered and the time it
1897 		 * gets fixed, the actual LAA is in one of the RARs and no
1898 		 * incoming packets directed to this port are dropped.
1899 		 * Eventually the LAA will be in RAR[0] and RAR[14].
1900 		 */
1901 		e1000_rar_set_generic(hw, hw->mac.addr,
1902 		                      hw->mac.rar_entry_count - 1);
1903 	return;
1904 }
1905 
1906 /**
1907  *  e1000_fix_nvm_checksum_82571 - Fix EEPROM checksum
1908  *  @hw: pointer to the HW structure
1909  *
1910  *  Verifies that the EEPROM has completed the update.  After updating the
1911  *  EEPROM, we need to check bit 15 in work 0x23 for the checksum fix.  If
1912  *  the checksum fix is not implemented, we need to set the bit and update
1913  *  the checksum.  Otherwise, if bit 15 is set and the checksum is incorrect,
1914  *  we need to return bad checksum.
1915  **/
1916 static s32 e1000_fix_nvm_checksum_82571(struct e1000_hw *hw)
1917 {
1918 	struct e1000_nvm_info *nvm = &hw->nvm;
1919 	s32 ret_val = E1000_SUCCESS;
1920 	u16 data;
1921 
1922 	DEBUGFUNC("e1000_fix_nvm_checksum_82571");
1923 
1924 	if (nvm->type != e1000_nvm_flash_hw)
1925 		goto out;
1926 
1927 	/*
1928 	 * Check bit 4 of word 10h.  If it is 0, firmware is done updating
1929 	 * 10h-12h.  Checksum may need to be fixed.
1930 	 */
1931 	ret_val = nvm->ops.read(hw, 0x10, 1, &data);
1932 	if (ret_val)
1933 		goto out;
1934 
1935 	if (!(data & 0x10)) {
1936 		/*
1937 		 * Read 0x23 and check bit 15.  This bit is a 1
1938 		 * when the checksum has already been fixed.  If
1939 		 * the checksum is still wrong and this bit is a
1940 		 * 1, we need to return bad checksum.  Otherwise,
1941 		 * we need to set this bit to a 1 and update the
1942 		 * checksum.
1943 		 */
1944 		ret_val = nvm->ops.read(hw, 0x23, 1, &data);
1945 		if (ret_val)
1946 			goto out;
1947 
1948 		if (!(data & 0x8000)) {
1949 			data |= 0x8000;
1950 			ret_val = nvm->ops.write(hw, 0x23, 1, &data);
1951 			if (ret_val)
1952 				goto out;
1953 			ret_val = nvm->ops.update(hw);
1954 		}
1955 	}
1956 
1957 out:
1958 	return ret_val;
1959 }
1960 
1961 
1962 /**
1963  *  e1000_read_mac_addr_82571 - Read device MAC address
1964  *  @hw: pointer to the HW structure
1965  **/
1966 static s32 e1000_read_mac_addr_82571(struct e1000_hw *hw)
1967 {
1968 	s32 ret_val = E1000_SUCCESS;
1969 
1970 	DEBUGFUNC("e1000_read_mac_addr_82571");
1971 
1972 	if (hw->mac.type == e1000_82571) {
1973 		/*
1974 		 * If there's an alternate MAC address place it in RAR0
1975 		 * so that it will override the Si installed default perm
1976 		 * address.
1977 		 */
1978 		ret_val = e1000_check_alt_mac_addr_generic(hw);
1979 		if (ret_val)
1980 			goto out;
1981 	}
1982 
1983 	ret_val = e1000_read_mac_addr_generic(hw);
1984 
1985 out:
1986 	return ret_val;
1987 }
1988 
1989 /**
1990  * e1000_power_down_phy_copper_82571 - Remove link during PHY power down
1991  * @hw: pointer to the HW structure
1992  *
1993  * In the case of a PHY power down to save power, or to turn off link during a
1994  * driver unload, or wake on lan is not enabled, remove the link.
1995  **/
1996 static void e1000_power_down_phy_copper_82571(struct e1000_hw *hw)
1997 {
1998 	struct e1000_phy_info *phy = &hw->phy;
1999 	struct e1000_mac_info *mac = &hw->mac;
2000 
2001 	if (!(phy->ops.check_reset_block))
2002 		return;
2003 
2004 	/* If the management interface is not enabled, then power down */
2005 	if (!(mac->ops.check_mng_mode(hw) || phy->ops.check_reset_block(hw)))
2006 		e1000_power_down_phy_copper(hw);
2007 
2008 	return;
2009 }
2010 
2011 /**
2012  *  e1000_clear_hw_cntrs_82571 - Clear device specific hardware counters
2013  *  @hw: pointer to the HW structure
2014  *
2015  *  Clears the hardware counters by reading the counter registers.
2016  **/
2017 static void e1000_clear_hw_cntrs_82571(struct e1000_hw *hw)
2018 {
2019 	DEBUGFUNC("e1000_clear_hw_cntrs_82571");
2020 
2021 	e1000_clear_hw_cntrs_base_generic(hw);
2022 
2023 	E1000_READ_REG(hw, E1000_PRC64);
2024 	E1000_READ_REG(hw, E1000_PRC127);
2025 	E1000_READ_REG(hw, E1000_PRC255);
2026 	E1000_READ_REG(hw, E1000_PRC511);
2027 	E1000_READ_REG(hw, E1000_PRC1023);
2028 	E1000_READ_REG(hw, E1000_PRC1522);
2029 	E1000_READ_REG(hw, E1000_PTC64);
2030 	E1000_READ_REG(hw, E1000_PTC127);
2031 	E1000_READ_REG(hw, E1000_PTC255);
2032 	E1000_READ_REG(hw, E1000_PTC511);
2033 	E1000_READ_REG(hw, E1000_PTC1023);
2034 	E1000_READ_REG(hw, E1000_PTC1522);
2035 
2036 	E1000_READ_REG(hw, E1000_ALGNERRC);
2037 	E1000_READ_REG(hw, E1000_RXERRC);
2038 	E1000_READ_REG(hw, E1000_TNCRS);
2039 	E1000_READ_REG(hw, E1000_CEXTERR);
2040 	E1000_READ_REG(hw, E1000_TSCTC);
2041 	E1000_READ_REG(hw, E1000_TSCTFC);
2042 
2043 	E1000_READ_REG(hw, E1000_MGTPRC);
2044 	E1000_READ_REG(hw, E1000_MGTPDC);
2045 	E1000_READ_REG(hw, E1000_MGTPTC);
2046 
2047 	E1000_READ_REG(hw, E1000_IAC);
2048 	E1000_READ_REG(hw, E1000_ICRXOC);
2049 
2050 	E1000_READ_REG(hw, E1000_ICRXPTC);
2051 	E1000_READ_REG(hw, E1000_ICRXATC);
2052 	E1000_READ_REG(hw, E1000_ICTXPTC);
2053 	E1000_READ_REG(hw, E1000_ICTXATC);
2054 	E1000_READ_REG(hw, E1000_ICTXQEC);
2055 	E1000_READ_REG(hw, E1000_ICTXQMTC);
2056 	E1000_READ_REG(hw, E1000_ICRXDMTC);
2057 }
2058