xref: /freebsd/sys/dev/e1000/e1000_80003es2lan.c (revision 4ed925457ab06e83238a5db33e89ccc94b99a713)
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  * 80003ES2LAN Gigabit Ethernet Controller (Copper)
37  * 80003ES2LAN Gigabit Ethernet Controller (Serdes)
38  */
39 
40 #include "e1000_api.h"
41 
42 static s32  e1000_init_phy_params_80003es2lan(struct e1000_hw *hw);
43 static s32  e1000_init_nvm_params_80003es2lan(struct e1000_hw *hw);
44 static s32  e1000_init_mac_params_80003es2lan(struct e1000_hw *hw);
45 static s32  e1000_acquire_phy_80003es2lan(struct e1000_hw *hw);
46 static void e1000_release_phy_80003es2lan(struct e1000_hw *hw);
47 static s32  e1000_acquire_nvm_80003es2lan(struct e1000_hw *hw);
48 static void e1000_release_nvm_80003es2lan(struct e1000_hw *hw);
49 static s32  e1000_read_phy_reg_gg82563_80003es2lan(struct e1000_hw *hw,
50                                                    u32 offset,
51                                                    u16 *data);
52 static s32  e1000_write_phy_reg_gg82563_80003es2lan(struct e1000_hw *hw,
53                                                     u32 offset,
54                                                     u16 data);
55 static s32  e1000_write_nvm_80003es2lan(struct e1000_hw *hw, u16 offset,
56                                         u16 words, u16 *data);
57 static s32  e1000_get_cfg_done_80003es2lan(struct e1000_hw *hw);
58 static s32  e1000_phy_force_speed_duplex_80003es2lan(struct e1000_hw *hw);
59 static s32  e1000_get_cable_length_80003es2lan(struct e1000_hw *hw);
60 static s32  e1000_get_link_up_info_80003es2lan(struct e1000_hw *hw, u16 *speed,
61                                                u16 *duplex);
62 static s32  e1000_reset_hw_80003es2lan(struct e1000_hw *hw);
63 static s32  e1000_init_hw_80003es2lan(struct e1000_hw *hw);
64 static s32  e1000_setup_copper_link_80003es2lan(struct e1000_hw *hw);
65 static void e1000_clear_hw_cntrs_80003es2lan(struct e1000_hw *hw);
66 static s32  e1000_acquire_swfw_sync_80003es2lan(struct e1000_hw *hw, u16 mask);
67 static s32  e1000_cfg_kmrn_10_100_80003es2lan(struct e1000_hw *hw, u16 duplex);
68 static s32  e1000_cfg_kmrn_1000_80003es2lan(struct e1000_hw *hw);
69 static s32  e1000_cfg_on_link_up_80003es2lan(struct e1000_hw *hw);
70 static s32  e1000_read_kmrn_reg_80003es2lan(struct e1000_hw *hw, u32 offset,
71                                             u16 *data);
72 static s32  e1000_write_kmrn_reg_80003es2lan(struct e1000_hw *hw, u32 offset,
73                                              u16 data);
74 static s32  e1000_copper_link_setup_gg82563_80003es2lan(struct e1000_hw *hw);
75 static void e1000_initialize_hw_bits_80003es2lan(struct e1000_hw *hw);
76 static void e1000_release_swfw_sync_80003es2lan(struct e1000_hw *hw, u16 mask);
77 static s32  e1000_read_mac_addr_80003es2lan(struct e1000_hw *hw);
78 static void e1000_power_down_phy_copper_80003es2lan(struct e1000_hw *hw);
79 
80 /*
81  * A table for the GG82563 cable length where the range is defined
82  * with a lower bound at "index" and the upper bound at
83  * "index + 5".
84  */
85 static const u16 e1000_gg82563_cable_length_table[] =
86          { 0, 60, 115, 150, 150, 60, 115, 150, 180, 180, 0xFF };
87 #define GG82563_CABLE_LENGTH_TABLE_SIZE \
88                 (sizeof(e1000_gg82563_cable_length_table) / \
89                  sizeof(e1000_gg82563_cable_length_table[0]))
90 
91 /**
92  *  e1000_init_phy_params_80003es2lan - Init ESB2 PHY func ptrs.
93  *  @hw: pointer to the HW structure
94  **/
95 static s32 e1000_init_phy_params_80003es2lan(struct e1000_hw *hw)
96 {
97 	struct e1000_phy_info *phy = &hw->phy;
98 	s32 ret_val = E1000_SUCCESS;
99 
100 	DEBUGFUNC("e1000_init_phy_params_80003es2lan");
101 
102 	if (hw->phy.media_type != e1000_media_type_copper) {
103 		phy->type        = e1000_phy_none;
104 		goto out;
105 	} else {
106 		phy->ops.power_up = e1000_power_up_phy_copper;
107 		phy->ops.power_down = e1000_power_down_phy_copper_80003es2lan;
108 	}
109 
110 	phy->addr                = 1;
111 	phy->autoneg_mask        = AUTONEG_ADVERTISE_SPEED_DEFAULT;
112 	phy->reset_delay_us      = 100;
113 	phy->type                = e1000_phy_gg82563;
114 
115 	phy->ops.acquire            = e1000_acquire_phy_80003es2lan;
116 	phy->ops.check_polarity     = e1000_check_polarity_m88;
117 	phy->ops.check_reset_block  = e1000_check_reset_block_generic;
118 	phy->ops.commit             = e1000_phy_sw_reset_generic;
119 	phy->ops.get_cfg_done       = e1000_get_cfg_done_80003es2lan;
120 	phy->ops.get_info           = e1000_get_phy_info_m88;
121 	phy->ops.release            = e1000_release_phy_80003es2lan;
122 	phy->ops.reset              = e1000_phy_hw_reset_generic;
123 	phy->ops.set_d3_lplu_state  = e1000_set_d3_lplu_state_generic;
124 
125 	phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_80003es2lan;
126 	phy->ops.get_cable_length   = e1000_get_cable_length_80003es2lan;
127 	phy->ops.read_reg           = e1000_read_phy_reg_gg82563_80003es2lan;
128 	phy->ops.write_reg          = e1000_write_phy_reg_gg82563_80003es2lan;
129 
130 	phy->ops.cfg_on_link_up    = e1000_cfg_on_link_up_80003es2lan;
131 
132 	/* This can only be done after all function pointers are setup. */
133 	ret_val = e1000_get_phy_id(hw);
134 
135 	/* Verify phy id */
136 	if (phy->id != GG82563_E_PHY_ID) {
137 		ret_val = -E1000_ERR_PHY;
138 		goto out;
139 	}
140 
141 out:
142 	return ret_val;
143 }
144 
145 /**
146  *  e1000_init_nvm_params_80003es2lan - Init ESB2 NVM func ptrs.
147  *  @hw: pointer to the HW structure
148  **/
149 static s32 e1000_init_nvm_params_80003es2lan(struct e1000_hw *hw)
150 {
151 	struct e1000_nvm_info *nvm = &hw->nvm;
152 	u32 eecd = E1000_READ_REG(hw, E1000_EECD);
153 	u16 size;
154 
155 	DEBUGFUNC("e1000_init_nvm_params_80003es2lan");
156 
157 	nvm->opcode_bits        = 8;
158 	nvm->delay_usec         = 1;
159 	switch (nvm->override) {
160 	case e1000_nvm_override_spi_large:
161 		nvm->page_size    = 32;
162 		nvm->address_bits = 16;
163 		break;
164 	case e1000_nvm_override_spi_small:
165 		nvm->page_size    = 8;
166 		nvm->address_bits = 8;
167 		break;
168 	default:
169 		nvm->page_size    = eecd & E1000_EECD_ADDR_BITS ? 32 : 8;
170 		nvm->address_bits = eecd & E1000_EECD_ADDR_BITS ? 16 : 8;
171 		break;
172 	}
173 
174 	nvm->type = e1000_nvm_eeprom_spi;
175 
176 	size = (u16)((eecd & E1000_EECD_SIZE_EX_MASK) >>
177 	                  E1000_EECD_SIZE_EX_SHIFT);
178 
179 	/*
180 	 * Added to a constant, "size" becomes the left-shift value
181 	 * for setting word_size.
182 	 */
183 	size += NVM_WORD_SIZE_BASE_SHIFT;
184 
185 	/* EEPROM access above 16k is unsupported */
186 	if (size > 14)
187 		size = 14;
188 	nvm->word_size	= 1 << size;
189 
190 	/* Function Pointers */
191 	nvm->ops.acquire           = e1000_acquire_nvm_80003es2lan;
192 	nvm->ops.read              = e1000_read_nvm_eerd;
193 	nvm->ops.release           = e1000_release_nvm_80003es2lan;
194 	nvm->ops.update            = e1000_update_nvm_checksum_generic;
195 	nvm->ops.valid_led_default = e1000_valid_led_default_generic;
196 	nvm->ops.validate          = e1000_validate_nvm_checksum_generic;
197 	nvm->ops.write             = e1000_write_nvm_80003es2lan;
198 
199 	return E1000_SUCCESS;
200 }
201 
202 /**
203  *  e1000_init_mac_params_80003es2lan - Init ESB2 MAC func ptrs.
204  *  @hw: pointer to the HW structure
205  **/
206 static s32 e1000_init_mac_params_80003es2lan(struct e1000_hw *hw)
207 {
208 	struct e1000_mac_info *mac = &hw->mac;
209 
210 	DEBUGFUNC("e1000_init_mac_params_80003es2lan");
211 
212 	/* Set media type and media-dependent function pointers */
213 	switch (hw->device_id) {
214 	case E1000_DEV_ID_80003ES2LAN_SERDES_DPT:
215 		hw->phy.media_type = e1000_media_type_internal_serdes;
216 		mac->ops.check_for_link = e1000_check_for_serdes_link_generic;
217 		mac->ops.setup_physical_interface =
218 			e1000_setup_fiber_serdes_link_generic;
219 		break;
220 	default:
221 		hw->phy.media_type = e1000_media_type_copper;
222 		mac->ops.check_for_link = e1000_check_for_copper_link_generic;
223 		mac->ops.setup_physical_interface =
224 			e1000_setup_copper_link_80003es2lan;
225 		break;
226 	}
227 
228 	/* Set mta register count */
229 	mac->mta_reg_count = 128;
230 	/* Set rar entry count */
231 	mac->rar_entry_count = E1000_RAR_ENTRIES;
232 	/* Set if part includes ASF firmware */
233 	mac->asf_firmware_present = TRUE;
234 	/* Set if manageability features are enabled. */
235 	mac->arc_subsystem_valid =
236 	        (E1000_READ_REG(hw, E1000_FWSM) & E1000_FWSM_MODE_MASK)
237 	                ? TRUE : FALSE;
238 	/* Adaptive IFS not supported */
239 	mac->adaptive_ifs = FALSE;
240 
241 	/* Function pointers */
242 
243 	/* bus type/speed/width */
244 	mac->ops.get_bus_info = e1000_get_bus_info_pcie_generic;
245 	/* reset */
246 	mac->ops.reset_hw = e1000_reset_hw_80003es2lan;
247 	/* hw initialization */
248 	mac->ops.init_hw = e1000_init_hw_80003es2lan;
249 	/* link setup */
250 	mac->ops.setup_link = e1000_setup_link_generic;
251 	/* check management mode */
252 	mac->ops.check_mng_mode = e1000_check_mng_mode_generic;
253 	/* multicast address update */
254 	mac->ops.update_mc_addr_list = e1000_update_mc_addr_list_generic;
255 	/* writing VFTA */
256 	mac->ops.write_vfta = e1000_write_vfta_generic;
257 	/* clearing VFTA */
258 	mac->ops.clear_vfta = e1000_clear_vfta_generic;
259 	/* read mac address */
260 	mac->ops.read_mac_addr = e1000_read_mac_addr_80003es2lan;
261 	/* ID LED init */
262 	mac->ops.id_led_init = e1000_id_led_init_generic;
263 	/* blink LED */
264 	mac->ops.blink_led = e1000_blink_led_generic;
265 	/* setup LED */
266 	mac->ops.setup_led = e1000_setup_led_generic;
267 	/* cleanup LED */
268 	mac->ops.cleanup_led = e1000_cleanup_led_generic;
269 	/* turn on/off LED */
270 	mac->ops.led_on = e1000_led_on_generic;
271 	mac->ops.led_off = e1000_led_off_generic;
272 	/* clear hardware counters */
273 	mac->ops.clear_hw_cntrs = e1000_clear_hw_cntrs_80003es2lan;
274 	/* link info */
275 	mac->ops.get_link_up_info = e1000_get_link_up_info_80003es2lan;
276 
277 	/* set lan id for port to determine which phy lock to use */
278 	hw->mac.ops.set_lan_id(hw);
279 
280 	return E1000_SUCCESS;
281 }
282 
283 /**
284  *  e1000_init_function_pointers_80003es2lan - Init ESB2 func ptrs.
285  *  @hw: pointer to the HW structure
286  *
287  *  Called to initialize all function pointers and parameters.
288  **/
289 void e1000_init_function_pointers_80003es2lan(struct e1000_hw *hw)
290 {
291 	DEBUGFUNC("e1000_init_function_pointers_80003es2lan");
292 
293 	hw->mac.ops.init_params = e1000_init_mac_params_80003es2lan;
294 	hw->nvm.ops.init_params = e1000_init_nvm_params_80003es2lan;
295 	hw->phy.ops.init_params = e1000_init_phy_params_80003es2lan;
296 }
297 
298 /**
299  *  e1000_acquire_phy_80003es2lan - Acquire rights to access PHY
300  *  @hw: pointer to the HW structure
301  *
302  *  A wrapper to acquire access rights to the correct PHY.
303  **/
304 static s32 e1000_acquire_phy_80003es2lan(struct e1000_hw *hw)
305 {
306 	u16 mask;
307 
308 	DEBUGFUNC("e1000_acquire_phy_80003es2lan");
309 
310 	mask = hw->bus.func ? E1000_SWFW_PHY1_SM : E1000_SWFW_PHY0_SM;
311 	return e1000_acquire_swfw_sync_80003es2lan(hw, mask);
312 }
313 
314 /**
315  *  e1000_release_phy_80003es2lan - Release rights to access PHY
316  *  @hw: pointer to the HW structure
317  *
318  *  A wrapper to release access rights to the correct PHY.
319  **/
320 static void e1000_release_phy_80003es2lan(struct e1000_hw *hw)
321 {
322 	u16 mask;
323 
324 	DEBUGFUNC("e1000_release_phy_80003es2lan");
325 
326 	mask = hw->bus.func ? E1000_SWFW_PHY1_SM : E1000_SWFW_PHY0_SM;
327 	e1000_release_swfw_sync_80003es2lan(hw, mask);
328 }
329 
330 /**
331  *  e1000_acquire_mac_csr_80003es2lan - Acquire rights to access Kumeran register
332  *  @hw: pointer to the HW structure
333  *
334  *  Acquire the semaphore to access the Kumeran interface.
335  *
336  **/
337 static s32 e1000_acquire_mac_csr_80003es2lan(struct e1000_hw *hw)
338 {
339 	u16 mask;
340 
341 	DEBUGFUNC("e1000_acquire_mac_csr_80003es2lan");
342 
343 	mask = E1000_SWFW_CSR_SM;
344 
345 	return e1000_acquire_swfw_sync_80003es2lan(hw, mask);
346 }
347 
348 /**
349  *  e1000_release_mac_csr_80003es2lan - Release rights to access Kumeran Register
350  *  @hw: pointer to the HW structure
351  *
352  *  Release the semaphore used to access the Kumeran interface
353  **/
354 static void e1000_release_mac_csr_80003es2lan(struct e1000_hw *hw)
355 {
356 	u16 mask;
357 
358 	DEBUGFUNC("e1000_release_mac_csr_80003es2lan");
359 
360 	mask = E1000_SWFW_CSR_SM;
361 
362 	e1000_release_swfw_sync_80003es2lan(hw, mask);
363 }
364 
365 /**
366  *  e1000_acquire_nvm_80003es2lan - Acquire rights to access NVM
367  *  @hw: pointer to the HW structure
368  *
369  *  Acquire the semaphore to access the EEPROM.
370  **/
371 static s32 e1000_acquire_nvm_80003es2lan(struct e1000_hw *hw)
372 {
373 	s32 ret_val;
374 
375 	DEBUGFUNC("e1000_acquire_nvm_80003es2lan");
376 
377 	ret_val = e1000_acquire_swfw_sync_80003es2lan(hw, E1000_SWFW_EEP_SM);
378 	if (ret_val)
379 		goto out;
380 
381 	ret_val = e1000_acquire_nvm_generic(hw);
382 
383 	if (ret_val)
384 		e1000_release_swfw_sync_80003es2lan(hw, E1000_SWFW_EEP_SM);
385 
386 out:
387 	return ret_val;
388 }
389 
390 /**
391  *  e1000_release_nvm_80003es2lan - Relinquish rights to access NVM
392  *  @hw: pointer to the HW structure
393  *
394  *  Release the semaphore used to access the EEPROM.
395  **/
396 static void e1000_release_nvm_80003es2lan(struct e1000_hw *hw)
397 {
398 	DEBUGFUNC("e1000_release_nvm_80003es2lan");
399 
400 	e1000_release_nvm_generic(hw);
401 	e1000_release_swfw_sync_80003es2lan(hw, E1000_SWFW_EEP_SM);
402 }
403 
404 /**
405  *  e1000_acquire_swfw_sync_80003es2lan - Acquire SW/FW semaphore
406  *  @hw: pointer to the HW structure
407  *  @mask: specifies which semaphore to acquire
408  *
409  *  Acquire the SW/FW semaphore to access the PHY or NVM.  The mask
410  *  will also specify which port we're acquiring the lock for.
411  **/
412 static s32 e1000_acquire_swfw_sync_80003es2lan(struct e1000_hw *hw, u16 mask)
413 {
414 	u32 swfw_sync;
415 	u32 swmask = mask;
416 	u32 fwmask = mask << 16;
417 	s32 ret_val = E1000_SUCCESS;
418 	s32 i = 0, timeout = 50;
419 
420 	DEBUGFUNC("e1000_acquire_swfw_sync_80003es2lan");
421 
422 	while (i < timeout) {
423 		if (e1000_get_hw_semaphore_generic(hw)) {
424 			ret_val = -E1000_ERR_SWFW_SYNC;
425 			goto out;
426 		}
427 
428 		swfw_sync = E1000_READ_REG(hw, E1000_SW_FW_SYNC);
429 		if (!(swfw_sync & (fwmask | swmask)))
430 			break;
431 
432 		/*
433 		 * Firmware currently using resource (fwmask)
434 		 * or other software thread using resource (swmask)
435 		 */
436 		e1000_put_hw_semaphore_generic(hw);
437 		msec_delay_irq(5);
438 		i++;
439 	}
440 
441 	if (i == timeout) {
442 		DEBUGOUT("Driver can't access resource, SW_FW_SYNC timeout.\n");
443 		ret_val = -E1000_ERR_SWFW_SYNC;
444 		goto out;
445 	}
446 
447 	swfw_sync |= swmask;
448 	E1000_WRITE_REG(hw, E1000_SW_FW_SYNC, swfw_sync);
449 
450 	e1000_put_hw_semaphore_generic(hw);
451 
452 out:
453 	return ret_val;
454 }
455 
456 /**
457  *  e1000_release_swfw_sync_80003es2lan - Release SW/FW semaphore
458  *  @hw: pointer to the HW structure
459  *  @mask: specifies which semaphore to acquire
460  *
461  *  Release the SW/FW semaphore used to access the PHY or NVM.  The mask
462  *  will also specify which port we're releasing the lock for.
463  **/
464 static void e1000_release_swfw_sync_80003es2lan(struct e1000_hw *hw, u16 mask)
465 {
466 	u32 swfw_sync;
467 
468 	DEBUGFUNC("e1000_release_swfw_sync_80003es2lan");
469 
470 	while (e1000_get_hw_semaphore_generic(hw) != E1000_SUCCESS)
471 		; /* Empty */
472 
473 	swfw_sync = E1000_READ_REG(hw, E1000_SW_FW_SYNC);
474 	swfw_sync &= ~mask;
475 	E1000_WRITE_REG(hw, E1000_SW_FW_SYNC, swfw_sync);
476 
477 	e1000_put_hw_semaphore_generic(hw);
478 }
479 
480 /**
481  *  e1000_read_phy_reg_gg82563_80003es2lan - Read GG82563 PHY register
482  *  @hw: pointer to the HW structure
483  *  @offset: offset of the register to read
484  *  @data: pointer to the data returned from the operation
485  *
486  *  Read the GG82563 PHY register.
487  **/
488 static s32 e1000_read_phy_reg_gg82563_80003es2lan(struct e1000_hw *hw,
489                                                   u32 offset, u16 *data)
490 {
491 	s32 ret_val;
492 	u32 page_select;
493 	u16 temp;
494 
495 	DEBUGFUNC("e1000_read_phy_reg_gg82563_80003es2lan");
496 
497 	ret_val = e1000_acquire_phy_80003es2lan(hw);
498 	if (ret_val)
499 		goto out;
500 
501 	/* Select Configuration Page */
502 	if ((offset & MAX_PHY_REG_ADDRESS) < GG82563_MIN_ALT_REG) {
503 		page_select = GG82563_PHY_PAGE_SELECT;
504 	} else {
505 		/*
506 		 * Use Alternative Page Select register to access
507 		 * registers 30 and 31
508 		 */
509 		page_select = GG82563_PHY_PAGE_SELECT_ALT;
510 	}
511 
512 	temp = (u16)((u16)offset >> GG82563_PAGE_SHIFT);
513 	ret_val = e1000_write_phy_reg_mdic(hw, page_select, temp);
514 	if (ret_val) {
515 		e1000_release_phy_80003es2lan(hw);
516 		goto out;
517 	}
518 
519 	if (hw->dev_spec._80003es2lan.mdic_wa_enable == TRUE) {
520 		/*
521 		 * The "ready" bit in the MDIC register may be incorrectly set
522 		 * before the device has completed the "Page Select" MDI
523 		 * transaction.  So we wait 200us after each MDI command...
524 		 */
525 		usec_delay(200);
526 
527 		/* ...and verify the command was successful. */
528 		ret_val = e1000_read_phy_reg_mdic(hw, page_select, &temp);
529 
530 		if (((u16)offset >> GG82563_PAGE_SHIFT) != temp) {
531 			ret_val = -E1000_ERR_PHY;
532 			e1000_release_phy_80003es2lan(hw);
533 			goto out;
534 		}
535 
536 		usec_delay(200);
537 
538 		ret_val = e1000_read_phy_reg_mdic(hw,
539 		                                  MAX_PHY_REG_ADDRESS & offset,
540 		                                  data);
541 
542 		usec_delay(200);
543 	} else {
544 		ret_val = e1000_read_phy_reg_mdic(hw,
545 		                                  MAX_PHY_REG_ADDRESS & offset,
546 		                                  data);
547 	}
548 
549 	e1000_release_phy_80003es2lan(hw);
550 
551 out:
552 	return ret_val;
553 }
554 
555 /**
556  *  e1000_write_phy_reg_gg82563_80003es2lan - Write GG82563 PHY register
557  *  @hw: pointer to the HW structure
558  *  @offset: offset of the register to read
559  *  @data: value to write to the register
560  *
561  *  Write to the GG82563 PHY register.
562  **/
563 static s32 e1000_write_phy_reg_gg82563_80003es2lan(struct e1000_hw *hw,
564                                                    u32 offset, u16 data)
565 {
566 	s32 ret_val;
567 	u32 page_select;
568 	u16 temp;
569 
570 	DEBUGFUNC("e1000_write_phy_reg_gg82563_80003es2lan");
571 
572 	ret_val = e1000_acquire_phy_80003es2lan(hw);
573 	if (ret_val)
574 		goto out;
575 
576 	/* Select Configuration Page */
577 	if ((offset & MAX_PHY_REG_ADDRESS) < GG82563_MIN_ALT_REG) {
578 		page_select = GG82563_PHY_PAGE_SELECT;
579 	} else {
580 		/*
581 		 * Use Alternative Page Select register to access
582 		 * registers 30 and 31
583 		 */
584 		page_select = GG82563_PHY_PAGE_SELECT_ALT;
585 	}
586 
587 	temp = (u16)((u16)offset >> GG82563_PAGE_SHIFT);
588 	ret_val = e1000_write_phy_reg_mdic(hw, page_select, temp);
589 	if (ret_val) {
590 		e1000_release_phy_80003es2lan(hw);
591 		goto out;
592 	}
593 
594 	if (hw->dev_spec._80003es2lan.mdic_wa_enable == TRUE) {
595 		/*
596 		 * The "ready" bit in the MDIC register may be incorrectly set
597 		 * before the device has completed the "Page Select" MDI
598 		 * transaction.  So we wait 200us after each MDI command...
599 		 */
600 		usec_delay(200);
601 
602 		/* ...and verify the command was successful. */
603 		ret_val = e1000_read_phy_reg_mdic(hw, page_select, &temp);
604 
605 		if (((u16)offset >> GG82563_PAGE_SHIFT) != temp) {
606 			ret_val = -E1000_ERR_PHY;
607 			e1000_release_phy_80003es2lan(hw);
608 			goto out;
609 		}
610 
611 		usec_delay(200);
612 
613 		ret_val = e1000_write_phy_reg_mdic(hw,
614 		                                  MAX_PHY_REG_ADDRESS & offset,
615 		                                  data);
616 
617 		usec_delay(200);
618 	} else {
619 		ret_val = e1000_write_phy_reg_mdic(hw,
620 		                                  MAX_PHY_REG_ADDRESS & offset,
621 		                                  data);
622 	}
623 
624 	e1000_release_phy_80003es2lan(hw);
625 
626 out:
627 	return ret_val;
628 }
629 
630 /**
631  *  e1000_write_nvm_80003es2lan - Write to ESB2 NVM
632  *  @hw: pointer to the HW structure
633  *  @offset: offset of the register to read
634  *  @words: number of words to write
635  *  @data: buffer of data to write to the NVM
636  *
637  *  Write "words" of data to the ESB2 NVM.
638  **/
639 static s32 e1000_write_nvm_80003es2lan(struct e1000_hw *hw, u16 offset,
640                             u16 words, u16 *data)
641 {
642 	DEBUGFUNC("e1000_write_nvm_80003es2lan");
643 
644 	return e1000_write_nvm_spi(hw, offset, words, data);
645 }
646 
647 /**
648  *  e1000_get_cfg_done_80003es2lan - Wait for configuration to complete
649  *  @hw: pointer to the HW structure
650  *
651  *  Wait a specific amount of time for manageability processes to complete.
652  *  This is a function pointer entry point called by the phy module.
653  **/
654 static s32 e1000_get_cfg_done_80003es2lan(struct e1000_hw *hw)
655 {
656 	s32 timeout = PHY_CFG_TIMEOUT;
657 	s32 ret_val = E1000_SUCCESS;
658 	u32 mask = E1000_NVM_CFG_DONE_PORT_0;
659 
660 	DEBUGFUNC("e1000_get_cfg_done_80003es2lan");
661 
662 	if (hw->bus.func == 1)
663 		mask = E1000_NVM_CFG_DONE_PORT_1;
664 
665 	while (timeout) {
666 		if (E1000_READ_REG(hw, E1000_EEMNGCTL) & mask)
667 			break;
668 		msec_delay(1);
669 		timeout--;
670 	}
671 	if (!timeout) {
672 		DEBUGOUT("MNG configuration cycle has not completed.\n");
673 		ret_val = -E1000_ERR_RESET;
674 		goto out;
675 	}
676 
677 out:
678 	return ret_val;
679 }
680 
681 /**
682  *  e1000_phy_force_speed_duplex_80003es2lan - Force PHY speed and duplex
683  *  @hw: pointer to the HW structure
684  *
685  *  Force the speed and duplex settings onto the PHY.  This is a
686  *  function pointer entry point called by the phy module.
687  **/
688 static s32 e1000_phy_force_speed_duplex_80003es2lan(struct e1000_hw *hw)
689 {
690 	s32 ret_val = E1000_SUCCESS;
691 	u16 phy_data;
692 	bool link;
693 
694 	DEBUGFUNC("e1000_phy_force_speed_duplex_80003es2lan");
695 
696 	if (!(hw->phy.ops.read_reg))
697 		goto out;
698 
699 	/*
700 	 * Clear Auto-Crossover to force MDI manually.  M88E1000 requires MDI
701 	 * forced whenever speed and duplex are forced.
702 	 */
703 	ret_val = hw->phy.ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
704 	if (ret_val)
705 		goto out;
706 
707 	phy_data &= ~GG82563_PSCR_CROSSOVER_MODE_AUTO;
708 	ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_SPEC_CTRL, phy_data);
709 	if (ret_val)
710 		goto out;
711 
712 	DEBUGOUT1("GG82563 PSCR: %X\n", phy_data);
713 
714 	ret_val = hw->phy.ops.read_reg(hw, PHY_CONTROL, &phy_data);
715 	if (ret_val)
716 		goto out;
717 
718 	e1000_phy_force_speed_duplex_setup(hw, &phy_data);
719 
720 	/* Reset the phy to commit changes. */
721 	phy_data |= MII_CR_RESET;
722 
723 	ret_val = hw->phy.ops.write_reg(hw, PHY_CONTROL, phy_data);
724 	if (ret_val)
725 		goto out;
726 
727 	usec_delay(1);
728 
729 	if (hw->phy.autoneg_wait_to_complete) {
730 		DEBUGOUT("Waiting for forced speed/duplex link "
731 		         "on GG82563 phy.\n");
732 
733 		ret_val = e1000_phy_has_link_generic(hw, PHY_FORCE_LIMIT,
734 		                                     100000, &link);
735 		if (ret_val)
736 			goto out;
737 
738 		if (!link) {
739 			/*
740 			 * We didn't get link.
741 			 * Reset the DSP and cross our fingers.
742 			 */
743 			ret_val = e1000_phy_reset_dsp_generic(hw);
744 			if (ret_val)
745 				goto out;
746 		}
747 
748 		/* Try once more */
749 		ret_val = e1000_phy_has_link_generic(hw, PHY_FORCE_LIMIT,
750 		                                     100000, &link);
751 		if (ret_val)
752 			goto out;
753 	}
754 
755 	ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_MAC_SPEC_CTRL, &phy_data);
756 	if (ret_val)
757 		goto out;
758 
759 	/*
760 	 * Resetting the phy means we need to verify the TX_CLK corresponds
761 	 * to the link speed.  10Mbps -> 2.5MHz, else 25MHz.
762 	 */
763 	phy_data &= ~GG82563_MSCR_TX_CLK_MASK;
764 	if (hw->mac.forced_speed_duplex & E1000_ALL_10_SPEED)
765 		phy_data |= GG82563_MSCR_TX_CLK_10MBPS_2_5;
766 	else
767 		phy_data |= GG82563_MSCR_TX_CLK_100MBPS_25;
768 
769 	/*
770 	 * In addition, we must re-enable CRS on Tx for both half and full
771 	 * duplex.
772 	 */
773 	phy_data |= GG82563_MSCR_ASSERT_CRS_ON_TX;
774 	ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_MAC_SPEC_CTRL, phy_data);
775 
776 out:
777 	return ret_val;
778 }
779 
780 /**
781  *  e1000_get_cable_length_80003es2lan - Set approximate cable length
782  *  @hw: pointer to the HW structure
783  *
784  *  Find the approximate cable length as measured by the GG82563 PHY.
785  *  This is a function pointer entry point called by the phy module.
786  **/
787 static s32 e1000_get_cable_length_80003es2lan(struct e1000_hw *hw)
788 {
789 	struct e1000_phy_info *phy = &hw->phy;
790 	s32 ret_val = E1000_SUCCESS;
791 	u16 phy_data, index;
792 
793 	DEBUGFUNC("e1000_get_cable_length_80003es2lan");
794 
795 	if (!(hw->phy.ops.read_reg))
796 		goto out;
797 
798 	ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_DSP_DISTANCE, &phy_data);
799 	if (ret_val)
800 		goto out;
801 
802 	index = phy_data & GG82563_DSPD_CABLE_LENGTH;
803 
804 	if (index >= GG82563_CABLE_LENGTH_TABLE_SIZE - 5) {
805 		ret_val = -E1000_ERR_PHY;
806 		goto out;
807 	}
808 
809 	phy->min_cable_length = e1000_gg82563_cable_length_table[index];
810 	phy->max_cable_length = e1000_gg82563_cable_length_table[index + 5];
811 
812 	phy->cable_length = (phy->min_cable_length + phy->max_cable_length) / 2;
813 
814 out:
815 	return ret_val;
816 }
817 
818 /**
819  *  e1000_get_link_up_info_80003es2lan - Report speed and duplex
820  *  @hw: pointer to the HW structure
821  *  @speed: pointer to speed buffer
822  *  @duplex: pointer to duplex buffer
823  *
824  *  Retrieve the current speed and duplex configuration.
825  **/
826 static s32 e1000_get_link_up_info_80003es2lan(struct e1000_hw *hw, u16 *speed,
827                                               u16 *duplex)
828 {
829 	s32 ret_val;
830 
831 	DEBUGFUNC("e1000_get_link_up_info_80003es2lan");
832 
833 	if (hw->phy.media_type == e1000_media_type_copper) {
834 		ret_val = e1000_get_speed_and_duplex_copper_generic(hw,
835 		                                                    speed,
836 		                                                    duplex);
837 		hw->phy.ops.cfg_on_link_up(hw);
838 	} else {
839 		ret_val = e1000_get_speed_and_duplex_fiber_serdes_generic(hw,
840 		                                                  speed,
841 		                                                  duplex);
842 	}
843 
844 	return ret_val;
845 }
846 
847 /**
848  *  e1000_reset_hw_80003es2lan - Reset the ESB2 controller
849  *  @hw: pointer to the HW structure
850  *
851  *  Perform a global reset to the ESB2 controller.
852  **/
853 static s32 e1000_reset_hw_80003es2lan(struct e1000_hw *hw)
854 {
855 	u32 ctrl, icr;
856 	s32 ret_val;
857 
858 	DEBUGFUNC("e1000_reset_hw_80003es2lan");
859 
860 	/*
861 	 * Prevent the PCI-E bus from sticking if there is no TLP connection
862 	 * on the last TLP read/write transaction when MAC is reset.
863 	 */
864 	ret_val = e1000_disable_pcie_master_generic(hw);
865 	if (ret_val)
866 		DEBUGOUT("PCI-E Master disable polling has failed.\n");
867 
868 	DEBUGOUT("Masking off all interrupts\n");
869 	E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
870 
871 	E1000_WRITE_REG(hw, E1000_RCTL, 0);
872 	E1000_WRITE_REG(hw, E1000_TCTL, E1000_TCTL_PSP);
873 	E1000_WRITE_FLUSH(hw);
874 
875 	msec_delay(10);
876 
877 	ctrl = E1000_READ_REG(hw, E1000_CTRL);
878 
879 	ret_val = e1000_acquire_phy_80003es2lan(hw);
880 	DEBUGOUT("Issuing a global reset to MAC\n");
881 	E1000_WRITE_REG(hw, E1000_CTRL, ctrl | E1000_CTRL_RST);
882 	e1000_release_phy_80003es2lan(hw);
883 
884 	ret_val = e1000_get_auto_rd_done_generic(hw);
885 	if (ret_val)
886 		/* We don't want to continue accessing MAC registers. */
887 		goto out;
888 
889 	/* Clear any pending interrupt events. */
890 	E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
891 	icr = E1000_READ_REG(hw, E1000_ICR);
892 
893 	ret_val = e1000_check_alt_mac_addr_generic(hw);
894 
895 out:
896 	return ret_val;
897 }
898 
899 /**
900  *  e1000_init_hw_80003es2lan - Initialize the ESB2 controller
901  *  @hw: pointer to the HW structure
902  *
903  *  Initialize the hw bits, LED, VFTA, MTA, link and hw counters.
904  **/
905 static s32 e1000_init_hw_80003es2lan(struct e1000_hw *hw)
906 {
907 	struct e1000_mac_info *mac = &hw->mac;
908 	u32 reg_data;
909 	s32 ret_val;
910 	u16 i;
911 
912 	DEBUGFUNC("e1000_init_hw_80003es2lan");
913 
914 	e1000_initialize_hw_bits_80003es2lan(hw);
915 
916 	/* Initialize identification LED */
917 	ret_val = mac->ops.id_led_init(hw);
918 	if (ret_val)
919 		DEBUGOUT("Error initializing identification LED\n");
920 		/* This is not fatal and we should not stop init due to this */
921 
922 	/* Disabling VLAN filtering */
923 	DEBUGOUT("Initializing the IEEE VLAN\n");
924 	mac->ops.clear_vfta(hw);
925 
926 	/* Setup the receive address. */
927 	e1000_init_rx_addrs_generic(hw, mac->rar_entry_count);
928 
929 	/* Zero out the Multicast HASH table */
930 	DEBUGOUT("Zeroing the MTA\n");
931 	for (i = 0; i < mac->mta_reg_count; i++)
932 		E1000_WRITE_REG_ARRAY(hw, E1000_MTA, i, 0);
933 
934 	/* Setup link and flow control */
935 	ret_val = mac->ops.setup_link(hw);
936 
937 	/* Set the transmit descriptor write-back policy */
938 	reg_data = E1000_READ_REG(hw, E1000_TXDCTL(0));
939 	reg_data = (reg_data & ~E1000_TXDCTL_WTHRESH) |
940 	           E1000_TXDCTL_FULL_TX_DESC_WB | E1000_TXDCTL_COUNT_DESC;
941 	E1000_WRITE_REG(hw, E1000_TXDCTL(0), reg_data);
942 
943 	/* ...for both queues. */
944 	reg_data = E1000_READ_REG(hw, E1000_TXDCTL(1));
945 	reg_data = (reg_data & ~E1000_TXDCTL_WTHRESH) |
946 	           E1000_TXDCTL_FULL_TX_DESC_WB | E1000_TXDCTL_COUNT_DESC;
947 	E1000_WRITE_REG(hw, E1000_TXDCTL(1), reg_data);
948 
949 	/* Enable retransmit on late collisions */
950 	reg_data = E1000_READ_REG(hw, E1000_TCTL);
951 	reg_data |= E1000_TCTL_RTLC;
952 	E1000_WRITE_REG(hw, E1000_TCTL, reg_data);
953 
954 	/* Configure Gigabit Carry Extend Padding */
955 	reg_data = E1000_READ_REG(hw, E1000_TCTL_EXT);
956 	reg_data &= ~E1000_TCTL_EXT_GCEX_MASK;
957 	reg_data |= DEFAULT_TCTL_EXT_GCEX_80003ES2LAN;
958 	E1000_WRITE_REG(hw, E1000_TCTL_EXT, reg_data);
959 
960 	/* Configure Transmit Inter-Packet Gap */
961 	reg_data = E1000_READ_REG(hw, E1000_TIPG);
962 	reg_data &= ~E1000_TIPG_IPGT_MASK;
963 	reg_data |= DEFAULT_TIPG_IPGT_1000_80003ES2LAN;
964 	E1000_WRITE_REG(hw, E1000_TIPG, reg_data);
965 
966 	reg_data = E1000_READ_REG_ARRAY(hw, E1000_FFLT, 0x0001);
967 	reg_data &= ~0x00100000;
968 	E1000_WRITE_REG_ARRAY(hw, E1000_FFLT, 0x0001, reg_data);
969 
970 	/* default to TRUE to enable the MDIC W/A */
971 	hw->dev_spec._80003es2lan.mdic_wa_enable = TRUE;
972 
973 	ret_val = e1000_read_kmrn_reg_80003es2lan(hw,
974 	                              E1000_KMRNCTRLSTA_OFFSET >>
975 	                              E1000_KMRNCTRLSTA_OFFSET_SHIFT,
976 	                              &i);
977 	if (!ret_val) {
978 		if ((i & E1000_KMRNCTRLSTA_OPMODE_MASK) ==
979 		     E1000_KMRNCTRLSTA_OPMODE_INBAND_MDIO)
980 			hw->dev_spec._80003es2lan.mdic_wa_enable = FALSE;
981 	}
982 
983 	/*
984 	 * Clear all of the statistics registers (clear on read).  It is
985 	 * important that we do this after we have tried to establish link
986 	 * because the symbol error count will increment wildly if there
987 	 * is no link.
988 	 */
989 	e1000_clear_hw_cntrs_80003es2lan(hw);
990 
991 	return ret_val;
992 }
993 
994 /**
995  *  e1000_initialize_hw_bits_80003es2lan - Init hw bits of ESB2
996  *  @hw: pointer to the HW structure
997  *
998  *  Initializes required hardware-dependent bits needed for normal operation.
999  **/
1000 static void e1000_initialize_hw_bits_80003es2lan(struct e1000_hw *hw)
1001 {
1002 	u32 reg;
1003 
1004 	DEBUGFUNC("e1000_initialize_hw_bits_80003es2lan");
1005 
1006 	/* Transmit Descriptor Control 0 */
1007 	reg = E1000_READ_REG(hw, E1000_TXDCTL(0));
1008 	reg |= (1 << 22);
1009 	E1000_WRITE_REG(hw, E1000_TXDCTL(0), reg);
1010 
1011 	/* Transmit Descriptor Control 1 */
1012 	reg = E1000_READ_REG(hw, E1000_TXDCTL(1));
1013 	reg |= (1 << 22);
1014 	E1000_WRITE_REG(hw, E1000_TXDCTL(1), reg);
1015 
1016 	/* Transmit Arbitration Control 0 */
1017 	reg = E1000_READ_REG(hw, E1000_TARC(0));
1018 	reg &= ~(0xF << 27); /* 30:27 */
1019 	if (hw->phy.media_type != e1000_media_type_copper)
1020 		reg &= ~(1 << 20);
1021 	E1000_WRITE_REG(hw, E1000_TARC(0), reg);
1022 
1023 	/* Transmit Arbitration Control 1 */
1024 	reg = E1000_READ_REG(hw, E1000_TARC(1));
1025 	if (E1000_READ_REG(hw, E1000_TCTL) & E1000_TCTL_MULR)
1026 		reg &= ~(1 << 28);
1027 	else
1028 		reg |= (1 << 28);
1029 	E1000_WRITE_REG(hw, E1000_TARC(1), reg);
1030 
1031 	return;
1032 }
1033 
1034 /**
1035  *  e1000_copper_link_setup_gg82563_80003es2lan - Configure GG82563 Link
1036  *  @hw: pointer to the HW structure
1037  *
1038  *  Setup some GG82563 PHY registers for obtaining link
1039  **/
1040 static s32 e1000_copper_link_setup_gg82563_80003es2lan(struct e1000_hw *hw)
1041 {
1042 	struct e1000_phy_info *phy = &hw->phy;
1043 	s32 ret_val;
1044 	u32 ctrl_ext;
1045 	u16 data;
1046 
1047 	DEBUGFUNC("e1000_copper_link_setup_gg82563_80003es2lan");
1048 
1049 	if (phy->reset_disable)
1050 		goto skip_reset;
1051 
1052 	ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_MAC_SPEC_CTRL,
1053 				     &data);
1054 	if (ret_val)
1055 		goto out;
1056 
1057 	data |= GG82563_MSCR_ASSERT_CRS_ON_TX;
1058 	/* Use 25MHz for both link down and 1000Base-T for Tx clock. */
1059 	data |= GG82563_MSCR_TX_CLK_1000MBPS_25;
1060 
1061 	ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_MAC_SPEC_CTRL,
1062 				      data);
1063 	if (ret_val)
1064 		goto out;
1065 
1066 	/*
1067 	 * Options:
1068 	 *   MDI/MDI-X = 0 (default)
1069 	 *   0 - Auto for all speeds
1070 	 *   1 - MDI mode
1071 	 *   2 - MDI-X mode
1072 	 *   3 - Auto for 1000Base-T only (MDI-X for 10/100Base-T modes)
1073 	 */
1074 	ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_SPEC_CTRL, &data);
1075 	if (ret_val)
1076 		goto out;
1077 
1078 	data &= ~GG82563_PSCR_CROSSOVER_MODE_MASK;
1079 
1080 	switch (phy->mdix) {
1081 	case 1:
1082 		data |= GG82563_PSCR_CROSSOVER_MODE_MDI;
1083 		break;
1084 	case 2:
1085 		data |= GG82563_PSCR_CROSSOVER_MODE_MDIX;
1086 		break;
1087 	case 0:
1088 	default:
1089 		data |= GG82563_PSCR_CROSSOVER_MODE_AUTO;
1090 		break;
1091 	}
1092 
1093 	/*
1094 	 * Options:
1095 	 *   disable_polarity_correction = 0 (default)
1096 	 *       Automatic Correction for Reversed Cable Polarity
1097 	 *   0 - Disabled
1098 	 *   1 - Enabled
1099 	 */
1100 	data &= ~GG82563_PSCR_POLARITY_REVERSAL_DISABLE;
1101 	if (phy->disable_polarity_correction)
1102 		data |= GG82563_PSCR_POLARITY_REVERSAL_DISABLE;
1103 
1104 	ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_SPEC_CTRL, data);
1105 	if (ret_val)
1106 		goto out;
1107 
1108 	/* SW Reset the PHY so all changes take effect */
1109 	ret_val = hw->phy.ops.commit(hw);
1110 	if (ret_val) {
1111 		DEBUGOUT("Error Resetting the PHY\n");
1112 		goto out;
1113 	}
1114 
1115 skip_reset:
1116 	/* Bypass Rx and Tx FIFO's */
1117 	ret_val = e1000_write_kmrn_reg_80003es2lan(hw,
1118 					E1000_KMRNCTRLSTA_OFFSET_FIFO_CTRL,
1119 					E1000_KMRNCTRLSTA_FIFO_CTRL_RX_BYPASS |
1120 					E1000_KMRNCTRLSTA_FIFO_CTRL_TX_BYPASS);
1121 	if (ret_val)
1122 		goto out;
1123 
1124 	ret_val = e1000_read_kmrn_reg_80003es2lan(hw,
1125 	                              E1000_KMRNCTRLSTA_OFFSET_MAC2PHY_OPMODE,
1126 	                              &data);
1127 	if (ret_val)
1128 		goto out;
1129 	data |= E1000_KMRNCTRLSTA_OPMODE_E_IDLE;
1130 	ret_val = e1000_write_kmrn_reg_80003es2lan(hw,
1131 	                               E1000_KMRNCTRLSTA_OFFSET_MAC2PHY_OPMODE,
1132 	                               data);
1133 	if (ret_val)
1134 		goto out;
1135 
1136 	ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_SPEC_CTRL_2, &data);
1137 	if (ret_val)
1138 		goto out;
1139 
1140 	data &= ~GG82563_PSCR2_REVERSE_AUTO_NEG;
1141 	ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_SPEC_CTRL_2, data);
1142 	if (ret_val)
1143 		goto out;
1144 
1145 	ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
1146 	ctrl_ext &= ~(E1000_CTRL_EXT_LINK_MODE_MASK);
1147 	E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext);
1148 
1149 	ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_PWR_MGMT_CTRL, &data);
1150 	if (ret_val)
1151 		goto out;
1152 
1153 	/*
1154 	 * Do not init these registers when the HW is in IAMT mode, since the
1155 	 * firmware will have already initialized them.  We only initialize
1156 	 * them if the HW is not in IAMT mode.
1157 	 */
1158 	if (!(hw->mac.ops.check_mng_mode(hw))) {
1159 		/* Enable Electrical Idle on the PHY */
1160 		data |= GG82563_PMCR_ENABLE_ELECTRICAL_IDLE;
1161 		ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_PWR_MGMT_CTRL,
1162 		                                data);
1163 		if (ret_val)
1164 			goto out;
1165 
1166 		ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
1167 		                               &data);
1168 		if (ret_val)
1169 			goto out;
1170 
1171 		data &= ~GG82563_KMCR_PASS_FALSE_CARRIER;
1172 		ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
1173 		                                data);
1174 		if (ret_val)
1175 			goto out;
1176 	}
1177 
1178 	/*
1179 	 * Workaround: Disable padding in Kumeran interface in the MAC
1180 	 * and in the PHY to avoid CRC errors.
1181 	 */
1182 	ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_INBAND_CTRL, &data);
1183 	if (ret_val)
1184 		goto out;
1185 
1186 	data |= GG82563_ICR_DIS_PADDING;
1187 	ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_INBAND_CTRL, data);
1188 	if (ret_val)
1189 		goto out;
1190 
1191 out:
1192 	return ret_val;
1193 }
1194 
1195 /**
1196  *  e1000_setup_copper_link_80003es2lan - Setup Copper Link for ESB2
1197  *  @hw: pointer to the HW structure
1198  *
1199  *  Essentially a wrapper for setting up all things "copper" related.
1200  *  This is a function pointer entry point called by the mac module.
1201  **/
1202 static s32 e1000_setup_copper_link_80003es2lan(struct e1000_hw *hw)
1203 {
1204 	u32 ctrl;
1205 	s32 ret_val;
1206 	u16 reg_data;
1207 
1208 	DEBUGFUNC("e1000_setup_copper_link_80003es2lan");
1209 
1210 	ctrl = E1000_READ_REG(hw, E1000_CTRL);
1211 	ctrl |= E1000_CTRL_SLU;
1212 	ctrl &= ~(E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
1213 	E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
1214 
1215 	/*
1216 	 * Set the mac to wait the maximum time between each
1217 	 * iteration and increase the max iterations when
1218 	 * polling the phy; this fixes erroneous timeouts at 10Mbps.
1219 	 */
1220 	ret_val = e1000_write_kmrn_reg_80003es2lan(hw, GG82563_REG(0x34, 4),
1221 	                                           0xFFFF);
1222 	if (ret_val)
1223 		goto out;
1224 	ret_val = e1000_read_kmrn_reg_80003es2lan(hw, GG82563_REG(0x34, 9),
1225 	                                          &reg_data);
1226 	if (ret_val)
1227 		goto out;
1228 	reg_data |= 0x3F;
1229 	ret_val = e1000_write_kmrn_reg_80003es2lan(hw, GG82563_REG(0x34, 9),
1230 	                                           reg_data);
1231 	if (ret_val)
1232 		goto out;
1233 	ret_val = e1000_read_kmrn_reg_80003es2lan(hw,
1234 	                              E1000_KMRNCTRLSTA_OFFSET_INB_CTRL,
1235 	                              &reg_data);
1236 	if (ret_val)
1237 		goto out;
1238 	reg_data |= E1000_KMRNCTRLSTA_INB_CTRL_DIS_PADDING;
1239 	ret_val = e1000_write_kmrn_reg_80003es2lan(hw,
1240 	                               E1000_KMRNCTRLSTA_OFFSET_INB_CTRL,
1241 	                               reg_data);
1242 	if (ret_val)
1243 		goto out;
1244 
1245 	ret_val = e1000_copper_link_setup_gg82563_80003es2lan(hw);
1246 	if (ret_val)
1247 		goto out;
1248 
1249 	ret_val = e1000_setup_copper_link_generic(hw);
1250 
1251 out:
1252 	return ret_val;
1253 }
1254 
1255 /**
1256  *  e1000_cfg_on_link_up_80003es2lan - es2 link configuration after link-up
1257  *  @hw: pointer to the HW structure
1258  *  @duplex: current duplex setting
1259  *
1260  *  Configure the KMRN interface by applying last minute quirks for
1261  *  10/100 operation.
1262  **/
1263 static s32 e1000_cfg_on_link_up_80003es2lan(struct e1000_hw *hw)
1264 {
1265 	s32 ret_val = E1000_SUCCESS;
1266 	u16 speed;
1267 	u16 duplex;
1268 
1269 	DEBUGFUNC("e1000_configure_on_link_up");
1270 
1271 	if (hw->phy.media_type == e1000_media_type_copper) {
1272 		ret_val = e1000_get_speed_and_duplex_copper_generic(hw,
1273 		                                                    &speed,
1274 		                                                    &duplex);
1275 		if (ret_val)
1276 			goto out;
1277 
1278 		if (speed == SPEED_1000)
1279 			ret_val = e1000_cfg_kmrn_1000_80003es2lan(hw);
1280 		else
1281 			ret_val = e1000_cfg_kmrn_10_100_80003es2lan(hw, duplex);
1282 	}
1283 
1284 out:
1285 	return ret_val;
1286 }
1287 
1288 /**
1289  *  e1000_cfg_kmrn_10_100_80003es2lan - Apply "quirks" for 10/100 operation
1290  *  @hw: pointer to the HW structure
1291  *  @duplex: current duplex setting
1292  *
1293  *  Configure the KMRN interface by applying last minute quirks for
1294  *  10/100 operation.
1295  **/
1296 static s32 e1000_cfg_kmrn_10_100_80003es2lan(struct e1000_hw *hw, u16 duplex)
1297 {
1298 	s32 ret_val = E1000_SUCCESS;
1299 	u32 tipg;
1300 	u32 i = 0;
1301 	u16 reg_data, reg_data2;
1302 
1303 	DEBUGFUNC("e1000_configure_kmrn_for_10_100");
1304 
1305 	reg_data = E1000_KMRNCTRLSTA_HD_CTRL_10_100_DEFAULT;
1306 	ret_val = e1000_write_kmrn_reg_80003es2lan(hw,
1307 	                               E1000_KMRNCTRLSTA_OFFSET_HD_CTRL,
1308 	                               reg_data);
1309 	if (ret_val)
1310 		goto out;
1311 
1312 	/* Configure Transmit Inter-Packet Gap */
1313 	tipg = E1000_READ_REG(hw, E1000_TIPG);
1314 	tipg &= ~E1000_TIPG_IPGT_MASK;
1315 	tipg |= DEFAULT_TIPG_IPGT_10_100_80003ES2LAN;
1316 	E1000_WRITE_REG(hw, E1000_TIPG, tipg);
1317 
1318 	do {
1319 		ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
1320 		                               &reg_data);
1321 		if (ret_val)
1322 			goto out;
1323 
1324 		ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
1325 		                               &reg_data2);
1326 		if (ret_val)
1327 			goto out;
1328 		i++;
1329 	} while ((reg_data != reg_data2) && (i < GG82563_MAX_KMRN_RETRY));
1330 
1331 	if (duplex == HALF_DUPLEX)
1332 		reg_data |= GG82563_KMCR_PASS_FALSE_CARRIER;
1333 	else
1334 		reg_data &= ~GG82563_KMCR_PASS_FALSE_CARRIER;
1335 
1336 	ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_KMRN_MODE_CTRL, reg_data);
1337 
1338 out:
1339 	return ret_val;
1340 }
1341 
1342 /**
1343  *  e1000_cfg_kmrn_1000_80003es2lan - Apply "quirks" for gigabit operation
1344  *  @hw: pointer to the HW structure
1345  *
1346  *  Configure the KMRN interface by applying last minute quirks for
1347  *  gigabit operation.
1348  **/
1349 static s32 e1000_cfg_kmrn_1000_80003es2lan(struct e1000_hw *hw)
1350 {
1351 	s32 ret_val = E1000_SUCCESS;
1352 	u16 reg_data, reg_data2;
1353 	u32 tipg;
1354 	u32 i = 0;
1355 
1356 	DEBUGFUNC("e1000_configure_kmrn_for_1000");
1357 
1358 	reg_data = E1000_KMRNCTRLSTA_HD_CTRL_1000_DEFAULT;
1359 	ret_val = e1000_write_kmrn_reg_80003es2lan(hw,
1360 	                               E1000_KMRNCTRLSTA_OFFSET_HD_CTRL,
1361 	                               reg_data);
1362 	if (ret_val)
1363 		goto out;
1364 
1365 	/* Configure Transmit Inter-Packet Gap */
1366 	tipg = E1000_READ_REG(hw, E1000_TIPG);
1367 	tipg &= ~E1000_TIPG_IPGT_MASK;
1368 	tipg |= DEFAULT_TIPG_IPGT_1000_80003ES2LAN;
1369 	E1000_WRITE_REG(hw, E1000_TIPG, tipg);
1370 
1371 	do {
1372 		ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
1373 		                               &reg_data);
1374 		if (ret_val)
1375 			goto out;
1376 
1377 		ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
1378 		                               &reg_data2);
1379 		if (ret_val)
1380 			goto out;
1381 		i++;
1382 	} while ((reg_data != reg_data2) && (i < GG82563_MAX_KMRN_RETRY));
1383 
1384 	reg_data &= ~GG82563_KMCR_PASS_FALSE_CARRIER;
1385 	ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_KMRN_MODE_CTRL, reg_data);
1386 
1387 out:
1388 	return ret_val;
1389 }
1390 
1391 /**
1392  *  e1000_read_kmrn_reg_80003es2lan - Read kumeran register
1393  *  @hw: pointer to the HW structure
1394  *  @offset: register offset to be read
1395  *  @data: pointer to the read data
1396  *
1397  *  Acquire semaphore, then read the PHY register at offset
1398  *  using the kumeran interface.  The information retrieved is stored in data.
1399  *  Release the semaphore before exiting.
1400  **/
1401 static s32 e1000_read_kmrn_reg_80003es2lan(struct e1000_hw *hw, u32 offset,
1402                                            u16 *data)
1403 {
1404 	u32 kmrnctrlsta;
1405 	s32 ret_val = E1000_SUCCESS;
1406 
1407 	DEBUGFUNC("e1000_read_kmrn_reg_80003es2lan");
1408 
1409 	ret_val = e1000_acquire_mac_csr_80003es2lan(hw);
1410 	if (ret_val)
1411 		goto out;
1412 
1413 	kmrnctrlsta = ((offset << E1000_KMRNCTRLSTA_OFFSET_SHIFT) &
1414 	               E1000_KMRNCTRLSTA_OFFSET) | E1000_KMRNCTRLSTA_REN;
1415 	E1000_WRITE_REG(hw, E1000_KMRNCTRLSTA, kmrnctrlsta);
1416 
1417 	usec_delay(2);
1418 
1419 	kmrnctrlsta = E1000_READ_REG(hw, E1000_KMRNCTRLSTA);
1420 	*data = (u16)kmrnctrlsta;
1421 
1422 	e1000_release_mac_csr_80003es2lan(hw);
1423 
1424 out:
1425 	return ret_val;
1426 }
1427 
1428 /**
1429  *  e1000_write_kmrn_reg_80003es2lan - Write kumeran register
1430  *  @hw: pointer to the HW structure
1431  *  @offset: register offset to write to
1432  *  @data: data to write at register offset
1433  *
1434  *  Acquire semaphore, then write the data to PHY register
1435  *  at the offset using the kumeran interface.  Release semaphore
1436  *  before exiting.
1437  **/
1438 static s32 e1000_write_kmrn_reg_80003es2lan(struct e1000_hw *hw, u32 offset,
1439                                             u16 data)
1440 {
1441 	u32 kmrnctrlsta;
1442 	s32 ret_val = E1000_SUCCESS;
1443 
1444 	DEBUGFUNC("e1000_write_kmrn_reg_80003es2lan");
1445 
1446 	ret_val = e1000_acquire_mac_csr_80003es2lan(hw);
1447 	if (ret_val)
1448 		goto out;
1449 
1450 	kmrnctrlsta = ((offset << E1000_KMRNCTRLSTA_OFFSET_SHIFT) &
1451 	               E1000_KMRNCTRLSTA_OFFSET) | data;
1452 	E1000_WRITE_REG(hw, E1000_KMRNCTRLSTA, kmrnctrlsta);
1453 
1454 	usec_delay(2);
1455 
1456 	e1000_release_mac_csr_80003es2lan(hw);
1457 
1458 out:
1459 	return ret_val;
1460 }
1461 
1462 /**
1463  *  e1000_read_mac_addr_80003es2lan - Read device MAC address
1464  *  @hw: pointer to the HW structure
1465  **/
1466 static s32 e1000_read_mac_addr_80003es2lan(struct e1000_hw *hw)
1467 {
1468 	s32 ret_val = E1000_SUCCESS;
1469 
1470 	DEBUGFUNC("e1000_read_mac_addr_80003es2lan");
1471 
1472 	/*
1473 	 * If there's an alternate MAC address place it in RAR0
1474 	 * so that it will override the Si installed default perm
1475 	 * address.
1476 	 */
1477 	ret_val = e1000_check_alt_mac_addr_generic(hw);
1478 	if (ret_val)
1479 		goto out;
1480 
1481 	ret_val = e1000_read_mac_addr_generic(hw);
1482 
1483 out:
1484 	return ret_val;
1485 }
1486 
1487 /**
1488  * e1000_power_down_phy_copper_80003es2lan - Remove link during PHY power down
1489  * @hw: pointer to the HW structure
1490  *
1491  * In the case of a PHY power down to save power, or to turn off link during a
1492  * driver unload, or wake on lan is not enabled, remove the link.
1493  **/
1494 static void e1000_power_down_phy_copper_80003es2lan(struct e1000_hw *hw)
1495 {
1496 	/* If the management interface is not enabled, then power down */
1497 	if (!(hw->mac.ops.check_mng_mode(hw) ||
1498 	      hw->phy.ops.check_reset_block(hw)))
1499 		e1000_power_down_phy_copper(hw);
1500 
1501 	return;
1502 }
1503 
1504 /**
1505  *  e1000_clear_hw_cntrs_80003es2lan - Clear device specific hardware counters
1506  *  @hw: pointer to the HW structure
1507  *
1508  *  Clears the hardware counters by reading the counter registers.
1509  **/
1510 static void e1000_clear_hw_cntrs_80003es2lan(struct e1000_hw *hw)
1511 {
1512 	DEBUGFUNC("e1000_clear_hw_cntrs_80003es2lan");
1513 
1514 	e1000_clear_hw_cntrs_base_generic(hw);
1515 
1516 	E1000_READ_REG(hw, E1000_PRC64);
1517 	E1000_READ_REG(hw, E1000_PRC127);
1518 	E1000_READ_REG(hw, E1000_PRC255);
1519 	E1000_READ_REG(hw, E1000_PRC511);
1520 	E1000_READ_REG(hw, E1000_PRC1023);
1521 	E1000_READ_REG(hw, E1000_PRC1522);
1522 	E1000_READ_REG(hw, E1000_PTC64);
1523 	E1000_READ_REG(hw, E1000_PTC127);
1524 	E1000_READ_REG(hw, E1000_PTC255);
1525 	E1000_READ_REG(hw, E1000_PTC511);
1526 	E1000_READ_REG(hw, E1000_PTC1023);
1527 	E1000_READ_REG(hw, E1000_PTC1522);
1528 
1529 	E1000_READ_REG(hw, E1000_ALGNERRC);
1530 	E1000_READ_REG(hw, E1000_RXERRC);
1531 	E1000_READ_REG(hw, E1000_TNCRS);
1532 	E1000_READ_REG(hw, E1000_CEXTERR);
1533 	E1000_READ_REG(hw, E1000_TSCTC);
1534 	E1000_READ_REG(hw, E1000_TSCTFC);
1535 
1536 	E1000_READ_REG(hw, E1000_MGTPRC);
1537 	E1000_READ_REG(hw, E1000_MGTPDC);
1538 	E1000_READ_REG(hw, E1000_MGTPTC);
1539 
1540 	E1000_READ_REG(hw, E1000_IAC);
1541 	E1000_READ_REG(hw, E1000_ICRXOC);
1542 
1543 	E1000_READ_REG(hw, E1000_ICRXPTC);
1544 	E1000_READ_REG(hw, E1000_ICRXATC);
1545 	E1000_READ_REG(hw, E1000_ICTXPTC);
1546 	E1000_READ_REG(hw, E1000_ICTXATC);
1547 	E1000_READ_REG(hw, E1000_ICTXQEC);
1548 	E1000_READ_REG(hw, E1000_ICTXQMTC);
1549 	E1000_READ_REG(hw, E1000_ICRXDMTC);
1550 }
1551