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