xref: /freebsd/sys/dev/e1000/e1000_80003es2lan.c (revision eb6d21b4ca6d668cf89afd99eef7baeafa712197)
1 /******************************************************************************
2 
3   Copyright (c) 2001-2009, Intel Corporation
4   All rights reserved.
5 
6   Redistribution and use in source and binary forms, with or without
7   modification, are permitted provided that the following conditions are met:
8 
9    1. Redistributions of source code must retain the above copyright notice,
10       this list of conditions and the following disclaimer.
11 
12    2. Redistributions in binary form must reproduce the above copyright
13       notice, this list of conditions and the following disclaimer in the
14       documentation and/or other materials provided with the distribution.
15 
16    3. Neither the name of the Intel Corporation nor the names of its
17       contributors may be used to endorse or promote products derived from
18       this software without specific prior written permission.
19 
20   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30   POSSIBILITY OF SUCH DAMAGE.
31 
32 ******************************************************************************/
33 /*$FreeBSD$*/
34 
35 /*
36  * 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 	/* setting MTA */
260 	mac->ops.mta_set = e1000_mta_set_generic;
261 	/* read mac address */
262 	mac->ops.read_mac_addr = e1000_read_mac_addr_80003es2lan;
263 	/* ID LED init */
264 	mac->ops.id_led_init = e1000_id_led_init_generic;
265 	/* blink LED */
266 	mac->ops.blink_led = e1000_blink_led_generic;
267 	/* setup LED */
268 	mac->ops.setup_led = e1000_setup_led_generic;
269 	/* cleanup LED */
270 	mac->ops.cleanup_led = e1000_cleanup_led_generic;
271 	/* turn on/off LED */
272 	mac->ops.led_on = e1000_led_on_generic;
273 	mac->ops.led_off = e1000_led_off_generic;
274 	/* clear hardware counters */
275 	mac->ops.clear_hw_cntrs = e1000_clear_hw_cntrs_80003es2lan;
276 	/* link info */
277 	mac->ops.get_link_up_info = e1000_get_link_up_info_80003es2lan;
278 
279 	/* set lan id for port to determine which phy lock to use */
280 	hw->mac.ops.set_lan_id(hw);
281 
282 	return E1000_SUCCESS;
283 }
284 
285 /**
286  *  e1000_init_function_pointers_80003es2lan - Init ESB2 func ptrs.
287  *  @hw: pointer to the HW structure
288  *
289  *  Called to initialize all function pointers and parameters.
290  **/
291 void e1000_init_function_pointers_80003es2lan(struct e1000_hw *hw)
292 {
293 	DEBUGFUNC("e1000_init_function_pointers_80003es2lan");
294 
295 	hw->mac.ops.init_params = e1000_init_mac_params_80003es2lan;
296 	hw->nvm.ops.init_params = e1000_init_nvm_params_80003es2lan;
297 	hw->phy.ops.init_params = e1000_init_phy_params_80003es2lan;
298 }
299 
300 /**
301  *  e1000_acquire_phy_80003es2lan - Acquire rights to access PHY
302  *  @hw: pointer to the HW structure
303  *
304  *  A wrapper to acquire access rights to the correct PHY.
305  **/
306 static s32 e1000_acquire_phy_80003es2lan(struct e1000_hw *hw)
307 {
308 	u16 mask;
309 
310 	DEBUGFUNC("e1000_acquire_phy_80003es2lan");
311 
312 	mask = hw->bus.func ? E1000_SWFW_PHY1_SM : E1000_SWFW_PHY0_SM;
313 	return e1000_acquire_swfw_sync_80003es2lan(hw, mask);
314 }
315 
316 /**
317  *  e1000_release_phy_80003es2lan - Release rights to access PHY
318  *  @hw: pointer to the HW structure
319  *
320  *  A wrapper to release access rights to the correct PHY.
321  **/
322 static void e1000_release_phy_80003es2lan(struct e1000_hw *hw)
323 {
324 	u16 mask;
325 
326 	DEBUGFUNC("e1000_release_phy_80003es2lan");
327 
328 	mask = hw->bus.func ? E1000_SWFW_PHY1_SM : E1000_SWFW_PHY0_SM;
329 	e1000_release_swfw_sync_80003es2lan(hw, mask);
330 }
331 
332 /**
333  *  e1000_acquire_mac_csr_80003es2lan - Acquire rights to access Kumeran register
334  *  @hw: pointer to the HW structure
335  *
336  *  Acquire the semaphore to access the Kumeran interface.
337  *
338  **/
339 static s32 e1000_acquire_mac_csr_80003es2lan(struct e1000_hw *hw)
340 {
341 	u16 mask;
342 
343 	DEBUGFUNC("e1000_acquire_mac_csr_80003es2lan");
344 
345 	mask = E1000_SWFW_CSR_SM;
346 
347 	return e1000_acquire_swfw_sync_80003es2lan(hw, mask);
348 }
349 
350 /**
351  *  e1000_release_mac_csr_80003es2lan - Release rights to access Kumeran Register
352  *  @hw: pointer to the HW structure
353  *
354  *  Release the semaphore used to access the Kumeran interface
355  **/
356 static void e1000_release_mac_csr_80003es2lan(struct e1000_hw *hw)
357 {
358 	u16 mask;
359 
360 	DEBUGFUNC("e1000_release_mac_csr_80003es2lan");
361 
362 	mask = E1000_SWFW_CSR_SM;
363 
364 	e1000_release_swfw_sync_80003es2lan(hw, mask);
365 }
366 
367 /**
368  *  e1000_acquire_nvm_80003es2lan - Acquire rights to access NVM
369  *  @hw: pointer to the HW structure
370  *
371  *  Acquire the semaphore to access the EEPROM.
372  **/
373 static s32 e1000_acquire_nvm_80003es2lan(struct e1000_hw *hw)
374 {
375 	s32 ret_val;
376 
377 	DEBUGFUNC("e1000_acquire_nvm_80003es2lan");
378 
379 	ret_val = e1000_acquire_swfw_sync_80003es2lan(hw, E1000_SWFW_EEP_SM);
380 	if (ret_val)
381 		goto out;
382 
383 	ret_val = e1000_acquire_nvm_generic(hw);
384 
385 	if (ret_val)
386 		e1000_release_swfw_sync_80003es2lan(hw, E1000_SWFW_EEP_SM);
387 
388 out:
389 	return ret_val;
390 }
391 
392 /**
393  *  e1000_release_nvm_80003es2lan - Relinquish rights to access NVM
394  *  @hw: pointer to the HW structure
395  *
396  *  Release the semaphore used to access the EEPROM.
397  **/
398 static void e1000_release_nvm_80003es2lan(struct e1000_hw *hw)
399 {
400 	DEBUGFUNC("e1000_release_nvm_80003es2lan");
401 
402 	e1000_release_nvm_generic(hw);
403 	e1000_release_swfw_sync_80003es2lan(hw, E1000_SWFW_EEP_SM);
404 }
405 
406 /**
407  *  e1000_acquire_swfw_sync_80003es2lan - Acquire SW/FW semaphore
408  *  @hw: pointer to the HW structure
409  *  @mask: specifies which semaphore to acquire
410  *
411  *  Acquire the SW/FW semaphore to access the PHY or NVM.  The mask
412  *  will also specify which port we're acquiring the lock for.
413  **/
414 static s32 e1000_acquire_swfw_sync_80003es2lan(struct e1000_hw *hw, u16 mask)
415 {
416 	u32 swfw_sync;
417 	u32 swmask = mask;
418 	u32 fwmask = mask << 16;
419 	s32 ret_val = E1000_SUCCESS;
420 	s32 i = 0, timeout = 50;
421 
422 	DEBUGFUNC("e1000_acquire_swfw_sync_80003es2lan");
423 
424 	while (i < timeout) {
425 		if (e1000_get_hw_semaphore_generic(hw)) {
426 			ret_val = -E1000_ERR_SWFW_SYNC;
427 			goto out;
428 		}
429 
430 		swfw_sync = E1000_READ_REG(hw, E1000_SW_FW_SYNC);
431 		if (!(swfw_sync & (fwmask | swmask)))
432 			break;
433 
434 		/*
435 		 * Firmware currently using resource (fwmask)
436 		 * or other software thread using resource (swmask)
437 		 */
438 		e1000_put_hw_semaphore_generic(hw);
439 		msec_delay_irq(5);
440 		i++;
441 	}
442 
443 	if (i == timeout) {
444 		DEBUGOUT("Driver can't access resource, SW_FW_SYNC timeout.\n");
445 		ret_val = -E1000_ERR_SWFW_SYNC;
446 		goto out;
447 	}
448 
449 	swfw_sync |= swmask;
450 	E1000_WRITE_REG(hw, E1000_SW_FW_SYNC, swfw_sync);
451 
452 	e1000_put_hw_semaphore_generic(hw);
453 
454 out:
455 	return ret_val;
456 }
457 
458 /**
459  *  e1000_release_swfw_sync_80003es2lan - Release SW/FW semaphore
460  *  @hw: pointer to the HW structure
461  *  @mask: specifies which semaphore to acquire
462  *
463  *  Release the SW/FW semaphore used to access the PHY or NVM.  The mask
464  *  will also specify which port we're releasing the lock for.
465  **/
466 static void e1000_release_swfw_sync_80003es2lan(struct e1000_hw *hw, u16 mask)
467 {
468 	u32 swfw_sync;
469 
470 	DEBUGFUNC("e1000_release_swfw_sync_80003es2lan");
471 
472 	while (e1000_get_hw_semaphore_generic(hw) != E1000_SUCCESS)
473 		; /* Empty */
474 
475 	swfw_sync = E1000_READ_REG(hw, E1000_SW_FW_SYNC);
476 	swfw_sync &= ~mask;
477 	E1000_WRITE_REG(hw, E1000_SW_FW_SYNC, swfw_sync);
478 
479 	e1000_put_hw_semaphore_generic(hw);
480 }
481 
482 /**
483  *  e1000_read_phy_reg_gg82563_80003es2lan - Read GG82563 PHY register
484  *  @hw: pointer to the HW structure
485  *  @offset: offset of the register to read
486  *  @data: pointer to the data returned from the operation
487  *
488  *  Read the GG82563 PHY register.
489  **/
490 static s32 e1000_read_phy_reg_gg82563_80003es2lan(struct e1000_hw *hw,
491                                                   u32 offset, u16 *data)
492 {
493 	s32 ret_val;
494 	u32 page_select;
495 	u16 temp;
496 
497 	DEBUGFUNC("e1000_read_phy_reg_gg82563_80003es2lan");
498 
499 	ret_val = e1000_acquire_phy_80003es2lan(hw);
500 	if (ret_val)
501 		goto out;
502 
503 	/* Select Configuration Page */
504 	if ((offset & MAX_PHY_REG_ADDRESS) < GG82563_MIN_ALT_REG) {
505 		page_select = GG82563_PHY_PAGE_SELECT;
506 	} else {
507 		/*
508 		 * Use Alternative Page Select register to access
509 		 * registers 30 and 31
510 		 */
511 		page_select = GG82563_PHY_PAGE_SELECT_ALT;
512 	}
513 
514 	temp = (u16)((u16)offset >> GG82563_PAGE_SHIFT);
515 	ret_val = e1000_write_phy_reg_mdic(hw, page_select, temp);
516 	if (ret_val) {
517 		e1000_release_phy_80003es2lan(hw);
518 		goto out;
519 	}
520 
521 	if (hw->dev_spec._80003es2lan.mdic_wa_enable == TRUE) {
522 		/*
523 		 * The "ready" bit in the MDIC register may be incorrectly set
524 		 * before the device has completed the "Page Select" MDI
525 		 * transaction.  So we wait 200us after each MDI command...
526 		 */
527 		usec_delay(200);
528 
529 		/* ...and verify the command was successful. */
530 		ret_val = e1000_read_phy_reg_mdic(hw, page_select, &temp);
531 
532 		if (((u16)offset >> GG82563_PAGE_SHIFT) != temp) {
533 			ret_val = -E1000_ERR_PHY;
534 			e1000_release_phy_80003es2lan(hw);
535 			goto out;
536 		}
537 
538 		usec_delay(200);
539 
540 		ret_val = e1000_read_phy_reg_mdic(hw,
541 		                                  MAX_PHY_REG_ADDRESS & offset,
542 		                                  data);
543 
544 		usec_delay(200);
545 	} else {
546 		ret_val = e1000_read_phy_reg_mdic(hw,
547 		                                  MAX_PHY_REG_ADDRESS & offset,
548 		                                  data);
549 	}
550 
551 	e1000_release_phy_80003es2lan(hw);
552 
553 out:
554 	return ret_val;
555 }
556 
557 /**
558  *  e1000_write_phy_reg_gg82563_80003es2lan - Write GG82563 PHY register
559  *  @hw: pointer to the HW structure
560  *  @offset: offset of the register to read
561  *  @data: value to write to the register
562  *
563  *  Write to the GG82563 PHY register.
564  **/
565 static s32 e1000_write_phy_reg_gg82563_80003es2lan(struct e1000_hw *hw,
566                                                    u32 offset, u16 data)
567 {
568 	s32 ret_val;
569 	u32 page_select;
570 	u16 temp;
571 
572 	DEBUGFUNC("e1000_write_phy_reg_gg82563_80003es2lan");
573 
574 	ret_val = e1000_acquire_phy_80003es2lan(hw);
575 	if (ret_val)
576 		goto out;
577 
578 	/* Select Configuration Page */
579 	if ((offset & MAX_PHY_REG_ADDRESS) < GG82563_MIN_ALT_REG) {
580 		page_select = GG82563_PHY_PAGE_SELECT;
581 	} else {
582 		/*
583 		 * Use Alternative Page Select register to access
584 		 * registers 30 and 31
585 		 */
586 		page_select = GG82563_PHY_PAGE_SELECT_ALT;
587 	}
588 
589 	temp = (u16)((u16)offset >> GG82563_PAGE_SHIFT);
590 	ret_val = e1000_write_phy_reg_mdic(hw, page_select, temp);
591 	if (ret_val) {
592 		e1000_release_phy_80003es2lan(hw);
593 		goto out;
594 	}
595 
596 	if (hw->dev_spec._80003es2lan.mdic_wa_enable == TRUE) {
597 		/*
598 		 * The "ready" bit in the MDIC register may be incorrectly set
599 		 * before the device has completed the "Page Select" MDI
600 		 * transaction.  So we wait 200us after each MDI command...
601 		 */
602 		usec_delay(200);
603 
604 		/* ...and verify the command was successful. */
605 		ret_val = e1000_read_phy_reg_mdic(hw, page_select, &temp);
606 
607 		if (((u16)offset >> GG82563_PAGE_SHIFT) != temp) {
608 			ret_val = -E1000_ERR_PHY;
609 			e1000_release_phy_80003es2lan(hw);
610 			goto out;
611 		}
612 
613 		usec_delay(200);
614 
615 		ret_val = e1000_write_phy_reg_mdic(hw,
616 		                                  MAX_PHY_REG_ADDRESS & offset,
617 		                                  data);
618 
619 		usec_delay(200);
620 	} else {
621 		ret_val = e1000_write_phy_reg_mdic(hw,
622 		                                  MAX_PHY_REG_ADDRESS & offset,
623 		                                  data);
624 	}
625 
626 	e1000_release_phy_80003es2lan(hw);
627 
628 out:
629 	return ret_val;
630 }
631 
632 /**
633  *  e1000_write_nvm_80003es2lan - Write to ESB2 NVM
634  *  @hw: pointer to the HW structure
635  *  @offset: offset of the register to read
636  *  @words: number of words to write
637  *  @data: buffer of data to write to the NVM
638  *
639  *  Write "words" of data to the ESB2 NVM.
640  **/
641 static s32 e1000_write_nvm_80003es2lan(struct e1000_hw *hw, u16 offset,
642                             u16 words, u16 *data)
643 {
644 	DEBUGFUNC("e1000_write_nvm_80003es2lan");
645 
646 	return e1000_write_nvm_spi(hw, offset, words, data);
647 }
648 
649 /**
650  *  e1000_get_cfg_done_80003es2lan - Wait for configuration to complete
651  *  @hw: pointer to the HW structure
652  *
653  *  Wait a specific amount of time for manageability processes to complete.
654  *  This is a function pointer entry point called by the phy module.
655  **/
656 static s32 e1000_get_cfg_done_80003es2lan(struct e1000_hw *hw)
657 {
658 	s32 timeout = PHY_CFG_TIMEOUT;
659 	s32 ret_val = E1000_SUCCESS;
660 	u32 mask = E1000_NVM_CFG_DONE_PORT_0;
661 
662 	DEBUGFUNC("e1000_get_cfg_done_80003es2lan");
663 
664 	if (hw->bus.func == 1)
665 		mask = E1000_NVM_CFG_DONE_PORT_1;
666 
667 	while (timeout) {
668 		if (E1000_READ_REG(hw, E1000_EEMNGCTL) & mask)
669 			break;
670 		msec_delay(1);
671 		timeout--;
672 	}
673 	if (!timeout) {
674 		DEBUGOUT("MNG configuration cycle has not completed.\n");
675 		ret_val = -E1000_ERR_RESET;
676 		goto out;
677 	}
678 
679 out:
680 	return ret_val;
681 }
682 
683 /**
684  *  e1000_phy_force_speed_duplex_80003es2lan - Force PHY speed and duplex
685  *  @hw: pointer to the HW structure
686  *
687  *  Force the speed and duplex settings onto the PHY.  This is a
688  *  function pointer entry point called by the phy module.
689  **/
690 static s32 e1000_phy_force_speed_duplex_80003es2lan(struct e1000_hw *hw)
691 {
692 	s32 ret_val = E1000_SUCCESS;
693 	u16 phy_data;
694 	bool link;
695 
696 	DEBUGFUNC("e1000_phy_force_speed_duplex_80003es2lan");
697 
698 	if (!(hw->phy.ops.read_reg))
699 		goto out;
700 
701 	/*
702 	 * Clear Auto-Crossover to force MDI manually.  M88E1000 requires MDI
703 	 * forced whenever speed and duplex are forced.
704 	 */
705 	ret_val = hw->phy.ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
706 	if (ret_val)
707 		goto out;
708 
709 	phy_data &= ~GG82563_PSCR_CROSSOVER_MODE_AUTO;
710 	ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_SPEC_CTRL, phy_data);
711 	if (ret_val)
712 		goto out;
713 
714 	DEBUGOUT1("GG82563 PSCR: %X\n", phy_data);
715 
716 	ret_val = hw->phy.ops.read_reg(hw, PHY_CONTROL, &phy_data);
717 	if (ret_val)
718 		goto out;
719 
720 	e1000_phy_force_speed_duplex_setup(hw, &phy_data);
721 
722 	/* Reset the phy to commit changes. */
723 	phy_data |= MII_CR_RESET;
724 
725 	ret_val = hw->phy.ops.write_reg(hw, PHY_CONTROL, phy_data);
726 	if (ret_val)
727 		goto out;
728 
729 	usec_delay(1);
730 
731 	if (hw->phy.autoneg_wait_to_complete) {
732 		DEBUGOUT("Waiting for forced speed/duplex link "
733 		         "on GG82563 phy.\n");
734 
735 		ret_val = e1000_phy_has_link_generic(hw, PHY_FORCE_LIMIT,
736 		                                     100000, &link);
737 		if (ret_val)
738 			goto out;
739 
740 		if (!link) {
741 			/*
742 			 * We didn't get link.
743 			 * Reset the DSP and cross our fingers.
744 			 */
745 			ret_val = e1000_phy_reset_dsp_generic(hw);
746 			if (ret_val)
747 				goto out;
748 		}
749 
750 		/* Try once more */
751 		ret_val = e1000_phy_has_link_generic(hw, PHY_FORCE_LIMIT,
752 		                                     100000, &link);
753 		if (ret_val)
754 			goto out;
755 	}
756 
757 	ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_MAC_SPEC_CTRL, &phy_data);
758 	if (ret_val)
759 		goto out;
760 
761 	/*
762 	 * Resetting the phy means we need to verify the TX_CLK corresponds
763 	 * to the link speed.  10Mbps -> 2.5MHz, else 25MHz.
764 	 */
765 	phy_data &= ~GG82563_MSCR_TX_CLK_MASK;
766 	if (hw->mac.forced_speed_duplex & E1000_ALL_10_SPEED)
767 		phy_data |= GG82563_MSCR_TX_CLK_10MBPS_2_5;
768 	else
769 		phy_data |= GG82563_MSCR_TX_CLK_100MBPS_25;
770 
771 	/*
772 	 * In addition, we must re-enable CRS on Tx for both half and full
773 	 * duplex.
774 	 */
775 	phy_data |= GG82563_MSCR_ASSERT_CRS_ON_TX;
776 	ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_MAC_SPEC_CTRL, phy_data);
777 
778 out:
779 	return ret_val;
780 }
781 
782 /**
783  *  e1000_get_cable_length_80003es2lan - Set approximate cable length
784  *  @hw: pointer to the HW structure
785  *
786  *  Find the approximate cable length as measured by the GG82563 PHY.
787  *  This is a function pointer entry point called by the phy module.
788  **/
789 static s32 e1000_get_cable_length_80003es2lan(struct e1000_hw *hw)
790 {
791 	struct e1000_phy_info *phy = &hw->phy;
792 	s32 ret_val = E1000_SUCCESS;
793 	u16 phy_data, index;
794 
795 	DEBUGFUNC("e1000_get_cable_length_80003es2lan");
796 
797 	if (!(hw->phy.ops.read_reg))
798 		goto out;
799 
800 	ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_DSP_DISTANCE, &phy_data);
801 	if (ret_val)
802 		goto out;
803 
804 	index = phy_data & GG82563_DSPD_CABLE_LENGTH;
805 
806 	if (index >= GG82563_CABLE_LENGTH_TABLE_SIZE - 5) {
807 		ret_val = -E1000_ERR_PHY;
808 		goto out;
809 	}
810 
811 	phy->min_cable_length = e1000_gg82563_cable_length_table[index];
812 	phy->max_cable_length = e1000_gg82563_cable_length_table[index + 5];
813 
814 	phy->cable_length = (phy->min_cable_length + phy->max_cable_length) / 2;
815 
816 out:
817 	return ret_val;
818 }
819 
820 /**
821  *  e1000_get_link_up_info_80003es2lan - Report speed and duplex
822  *  @hw: pointer to the HW structure
823  *  @speed: pointer to speed buffer
824  *  @duplex: pointer to duplex buffer
825  *
826  *  Retrieve the current speed and duplex configuration.
827  **/
828 static s32 e1000_get_link_up_info_80003es2lan(struct e1000_hw *hw, u16 *speed,
829                                               u16 *duplex)
830 {
831 	s32 ret_val;
832 
833 	DEBUGFUNC("e1000_get_link_up_info_80003es2lan");
834 
835 	if (hw->phy.media_type == e1000_media_type_copper) {
836 		ret_val = e1000_get_speed_and_duplex_copper_generic(hw,
837 		                                                    speed,
838 		                                                    duplex);
839 		hw->phy.ops.cfg_on_link_up(hw);
840 	} else {
841 		ret_val = e1000_get_speed_and_duplex_fiber_serdes_generic(hw,
842 		                                                  speed,
843 		                                                  duplex);
844 	}
845 
846 	return ret_val;
847 }
848 
849 /**
850  *  e1000_reset_hw_80003es2lan - Reset the ESB2 controller
851  *  @hw: pointer to the HW structure
852  *
853  *  Perform a global reset to the ESB2 controller.
854  **/
855 static s32 e1000_reset_hw_80003es2lan(struct e1000_hw *hw)
856 {
857 	u32 ctrl, icr;
858 	s32 ret_val;
859 
860 	DEBUGFUNC("e1000_reset_hw_80003es2lan");
861 
862 	/*
863 	 * Prevent the PCI-E bus from sticking if there is no TLP connection
864 	 * on the last TLP read/write transaction when MAC is reset.
865 	 */
866 	ret_val = e1000_disable_pcie_master_generic(hw);
867 	if (ret_val)
868 		DEBUGOUT("PCI-E Master disable polling has failed.\n");
869 
870 	DEBUGOUT("Masking off all interrupts\n");
871 	E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
872 
873 	E1000_WRITE_REG(hw, E1000_RCTL, 0);
874 	E1000_WRITE_REG(hw, E1000_TCTL, E1000_TCTL_PSP);
875 	E1000_WRITE_FLUSH(hw);
876 
877 	msec_delay(10);
878 
879 	ctrl = E1000_READ_REG(hw, E1000_CTRL);
880 
881 	ret_val = e1000_acquire_phy_80003es2lan(hw);
882 	DEBUGOUT("Issuing a global reset to MAC\n");
883 	E1000_WRITE_REG(hw, E1000_CTRL, ctrl | E1000_CTRL_RST);
884 	e1000_release_phy_80003es2lan(hw);
885 
886 	ret_val = e1000_get_auto_rd_done_generic(hw);
887 	if (ret_val)
888 		/* We don't want to continue accessing MAC registers. */
889 		goto out;
890 
891 	/* Clear any pending interrupt events. */
892 	E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
893 	icr = E1000_READ_REG(hw, E1000_ICR);
894 
895 	ret_val = e1000_check_alt_mac_addr_generic(hw);
896 
897 out:
898 	return ret_val;
899 }
900 
901 /**
902  *  e1000_init_hw_80003es2lan - Initialize the ESB2 controller
903  *  @hw: pointer to the HW structure
904  *
905  *  Initialize the hw bits, LED, VFTA, MTA, link and hw counters.
906  **/
907 static s32 e1000_init_hw_80003es2lan(struct e1000_hw *hw)
908 {
909 	struct e1000_mac_info *mac = &hw->mac;
910 	u32 reg_data;
911 	s32 ret_val;
912 	u16 i;
913 
914 	DEBUGFUNC("e1000_init_hw_80003es2lan");
915 
916 	e1000_initialize_hw_bits_80003es2lan(hw);
917 
918 	/* Initialize identification LED */
919 	ret_val = mac->ops.id_led_init(hw);
920 	if (ret_val)
921 		DEBUGOUT("Error initializing identification LED\n");
922 		/* This is not fatal and we should not stop init due to this */
923 
924 	/* Disabling VLAN filtering */
925 	DEBUGOUT("Initializing the IEEE VLAN\n");
926 	mac->ops.clear_vfta(hw);
927 
928 	/* Setup the receive address. */
929 	e1000_init_rx_addrs_generic(hw, mac->rar_entry_count);
930 
931 	/* Zero out the Multicast HASH table */
932 	DEBUGOUT("Zeroing the MTA\n");
933 	for (i = 0; i < mac->mta_reg_count; i++)
934 		E1000_WRITE_REG_ARRAY(hw, E1000_MTA, i, 0);
935 
936 	/* Setup link and flow control */
937 	ret_val = mac->ops.setup_link(hw);
938 
939 	/* Set the transmit descriptor write-back policy */
940 	reg_data = E1000_READ_REG(hw, E1000_TXDCTL(0));
941 	reg_data = (reg_data & ~E1000_TXDCTL_WTHRESH) |
942 	           E1000_TXDCTL_FULL_TX_DESC_WB | E1000_TXDCTL_COUNT_DESC;
943 	E1000_WRITE_REG(hw, E1000_TXDCTL(0), reg_data);
944 
945 	/* ...for both queues. */
946 	reg_data = E1000_READ_REG(hw, E1000_TXDCTL(1));
947 	reg_data = (reg_data & ~E1000_TXDCTL_WTHRESH) |
948 	           E1000_TXDCTL_FULL_TX_DESC_WB | E1000_TXDCTL_COUNT_DESC;
949 	E1000_WRITE_REG(hw, E1000_TXDCTL(1), reg_data);
950 
951 	/* Enable retransmit on late collisions */
952 	reg_data = E1000_READ_REG(hw, E1000_TCTL);
953 	reg_data |= E1000_TCTL_RTLC;
954 	E1000_WRITE_REG(hw, E1000_TCTL, reg_data);
955 
956 	/* Configure Gigabit Carry Extend Padding */
957 	reg_data = E1000_READ_REG(hw, E1000_TCTL_EXT);
958 	reg_data &= ~E1000_TCTL_EXT_GCEX_MASK;
959 	reg_data |= DEFAULT_TCTL_EXT_GCEX_80003ES2LAN;
960 	E1000_WRITE_REG(hw, E1000_TCTL_EXT, reg_data);
961 
962 	/* Configure Transmit Inter-Packet Gap */
963 	reg_data = E1000_READ_REG(hw, E1000_TIPG);
964 	reg_data &= ~E1000_TIPG_IPGT_MASK;
965 	reg_data |= DEFAULT_TIPG_IPGT_1000_80003ES2LAN;
966 	E1000_WRITE_REG(hw, E1000_TIPG, reg_data);
967 
968 	reg_data = E1000_READ_REG_ARRAY(hw, E1000_FFLT, 0x0001);
969 	reg_data &= ~0x00100000;
970 	E1000_WRITE_REG_ARRAY(hw, E1000_FFLT, 0x0001, reg_data);
971 
972 	/* default to TRUE to enable the MDIC W/A */
973 	hw->dev_spec._80003es2lan.mdic_wa_enable = TRUE;
974 
975 	ret_val = e1000_read_kmrn_reg_80003es2lan(hw,
976 	                              E1000_KMRNCTRLSTA_OFFSET >>
977 	                              E1000_KMRNCTRLSTA_OFFSET_SHIFT,
978 	                              &i);
979 	if (!ret_val) {
980 		if ((i & E1000_KMRNCTRLSTA_OPMODE_MASK) ==
981 		     E1000_KMRNCTRLSTA_OPMODE_INBAND_MDIO)
982 			hw->dev_spec._80003es2lan.mdic_wa_enable = FALSE;
983 	}
984 
985 	/*
986 	 * Clear all of the statistics registers (clear on read).  It is
987 	 * important that we do this after we have tried to establish link
988 	 * because the symbol error count will increment wildly if there
989 	 * is no link.
990 	 */
991 	e1000_clear_hw_cntrs_80003es2lan(hw);
992 
993 	return ret_val;
994 }
995 
996 /**
997  *  e1000_initialize_hw_bits_80003es2lan - Init hw bits of ESB2
998  *  @hw: pointer to the HW structure
999  *
1000  *  Initializes required hardware-dependent bits needed for normal operation.
1001  **/
1002 static void e1000_initialize_hw_bits_80003es2lan(struct e1000_hw *hw)
1003 {
1004 	u32 reg;
1005 
1006 	DEBUGFUNC("e1000_initialize_hw_bits_80003es2lan");
1007 
1008 	/* Transmit Descriptor Control 0 */
1009 	reg = E1000_READ_REG(hw, E1000_TXDCTL(0));
1010 	reg |= (1 << 22);
1011 	E1000_WRITE_REG(hw, E1000_TXDCTL(0), reg);
1012 
1013 	/* Transmit Descriptor Control 1 */
1014 	reg = E1000_READ_REG(hw, E1000_TXDCTL(1));
1015 	reg |= (1 << 22);
1016 	E1000_WRITE_REG(hw, E1000_TXDCTL(1), reg);
1017 
1018 	/* Transmit Arbitration Control 0 */
1019 	reg = E1000_READ_REG(hw, E1000_TARC(0));
1020 	reg &= ~(0xF << 27); /* 30:27 */
1021 	if (hw->phy.media_type != e1000_media_type_copper)
1022 		reg &= ~(1 << 20);
1023 	E1000_WRITE_REG(hw, E1000_TARC(0), reg);
1024 
1025 	/* Transmit Arbitration Control 1 */
1026 	reg = E1000_READ_REG(hw, E1000_TARC(1));
1027 	if (E1000_READ_REG(hw, E1000_TCTL) & E1000_TCTL_MULR)
1028 		reg &= ~(1 << 28);
1029 	else
1030 		reg |= (1 << 28);
1031 	E1000_WRITE_REG(hw, E1000_TARC(1), reg);
1032 
1033 	return;
1034 }
1035 
1036 /**
1037  *  e1000_copper_link_setup_gg82563_80003es2lan - Configure GG82563 Link
1038  *  @hw: pointer to the HW structure
1039  *
1040  *  Setup some GG82563 PHY registers for obtaining link
1041  **/
1042 static s32 e1000_copper_link_setup_gg82563_80003es2lan(struct e1000_hw *hw)
1043 {
1044 	struct e1000_phy_info *phy = &hw->phy;
1045 	s32 ret_val;
1046 	u32 ctrl_ext;
1047 	u16 data;
1048 
1049 	DEBUGFUNC("e1000_copper_link_setup_gg82563_80003es2lan");
1050 
1051 	if (!phy->reset_disable) {
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 	}
1116 
1117 	/* Bypass Rx and Tx FIFO's */
1118 	ret_val = e1000_write_kmrn_reg_80003es2lan(hw,
1119 					E1000_KMRNCTRLSTA_OFFSET_FIFO_CTRL,
1120 					E1000_KMRNCTRLSTA_FIFO_CTRL_RX_BYPASS |
1121 					E1000_KMRNCTRLSTA_FIFO_CTRL_TX_BYPASS);
1122 	if (ret_val)
1123 		goto out;
1124 
1125 	ret_val = e1000_read_kmrn_reg_80003es2lan(hw,
1126 	                              E1000_KMRNCTRLSTA_OFFSET_MAC2PHY_OPMODE,
1127 	                              &data);
1128 	if (ret_val)
1129 		goto out;
1130 	data |= E1000_KMRNCTRLSTA_OPMODE_E_IDLE;
1131 	ret_val = e1000_write_kmrn_reg_80003es2lan(hw,
1132 	                               E1000_KMRNCTRLSTA_OFFSET_MAC2PHY_OPMODE,
1133 	                               data);
1134 	if (ret_val)
1135 		goto out;
1136 
1137 	ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_SPEC_CTRL_2, &data);
1138 	if (ret_val)
1139 		goto out;
1140 
1141 	data &= ~GG82563_PSCR2_REVERSE_AUTO_NEG;
1142 	ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_SPEC_CTRL_2, data);
1143 	if (ret_val)
1144 		goto out;
1145 
1146 	ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
1147 	ctrl_ext &= ~(E1000_CTRL_EXT_LINK_MODE_MASK);
1148 	E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext);
1149 
1150 	ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_PWR_MGMT_CTRL, &data);
1151 	if (ret_val)
1152 		goto out;
1153 
1154 	/*
1155 	 * Do not init these registers when the HW is in IAMT mode, since the
1156 	 * firmware will have already initialized them.  We only initialize
1157 	 * them if the HW is not in IAMT mode.
1158 	 */
1159 	if (!(hw->mac.ops.check_mng_mode(hw))) {
1160 		/* Enable Electrical Idle on the PHY */
1161 		data |= GG82563_PMCR_ENABLE_ELECTRICAL_IDLE;
1162 		ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_PWR_MGMT_CTRL,
1163 		                                data);
1164 		if (ret_val)
1165 			goto out;
1166 
1167 		ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
1168 		                               &data);
1169 		if (ret_val)
1170 			goto out;
1171 
1172 		data &= ~GG82563_KMCR_PASS_FALSE_CARRIER;
1173 		ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
1174 		                                data);
1175 		if (ret_val)
1176 			goto out;
1177 	}
1178 
1179 	/*
1180 	 * Workaround: Disable padding in Kumeran interface in the MAC
1181 	 * and in the PHY to avoid CRC errors.
1182 	 */
1183 	ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_INBAND_CTRL, &data);
1184 	if (ret_val)
1185 		goto out;
1186 
1187 	data |= GG82563_ICR_DIS_PADDING;
1188 	ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_INBAND_CTRL, data);
1189 	if (ret_val)
1190 		goto out;
1191 
1192 out:
1193 	return ret_val;
1194 }
1195 
1196 /**
1197  *  e1000_setup_copper_link_80003es2lan - Setup Copper Link for ESB2
1198  *  @hw: pointer to the HW structure
1199  *
1200  *  Essentially a wrapper for setting up all things "copper" related.
1201  *  This is a function pointer entry point called by the mac module.
1202  **/
1203 static s32 e1000_setup_copper_link_80003es2lan(struct e1000_hw *hw)
1204 {
1205 	u32 ctrl;
1206 	s32 ret_val;
1207 	u16 reg_data;
1208 
1209 	DEBUGFUNC("e1000_setup_copper_link_80003es2lan");
1210 
1211 	ctrl = E1000_READ_REG(hw, E1000_CTRL);
1212 	ctrl |= E1000_CTRL_SLU;
1213 	ctrl &= ~(E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
1214 	E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
1215 
1216 	/*
1217 	 * Set the mac to wait the maximum time between each
1218 	 * iteration and increase the max iterations when
1219 	 * polling the phy; this fixes erroneous timeouts at 10Mbps.
1220 	 */
1221 	ret_val = e1000_write_kmrn_reg_80003es2lan(hw, GG82563_REG(0x34, 4),
1222 	                                           0xFFFF);
1223 	if (ret_val)
1224 		goto out;
1225 	ret_val = e1000_read_kmrn_reg_80003es2lan(hw, GG82563_REG(0x34, 9),
1226 	                                          &reg_data);
1227 	if (ret_val)
1228 		goto out;
1229 	reg_data |= 0x3F;
1230 	ret_val = e1000_write_kmrn_reg_80003es2lan(hw, GG82563_REG(0x34, 9),
1231 	                                           reg_data);
1232 	if (ret_val)
1233 		goto out;
1234 	ret_val = e1000_read_kmrn_reg_80003es2lan(hw,
1235 	                              E1000_KMRNCTRLSTA_OFFSET_INB_CTRL,
1236 	                              &reg_data);
1237 	if (ret_val)
1238 		goto out;
1239 	reg_data |= E1000_KMRNCTRLSTA_INB_CTRL_DIS_PADDING;
1240 	ret_val = e1000_write_kmrn_reg_80003es2lan(hw,
1241 	                               E1000_KMRNCTRLSTA_OFFSET_INB_CTRL,
1242 	                               reg_data);
1243 	if (ret_val)
1244 		goto out;
1245 
1246 	ret_val = e1000_copper_link_setup_gg82563_80003es2lan(hw);
1247 	if (ret_val)
1248 		goto out;
1249 
1250 	ret_val = e1000_setup_copper_link_generic(hw);
1251 
1252 out:
1253 	return ret_val;
1254 }
1255 
1256 /**
1257  *  e1000_cfg_on_link_up_80003es2lan - es2 link configuration after link-up
1258  *  @hw: pointer to the HW structure
1259  *  @duplex: current duplex setting
1260  *
1261  *  Configure the KMRN interface by applying last minute quirks for
1262  *  10/100 operation.
1263  **/
1264 static s32 e1000_cfg_on_link_up_80003es2lan(struct e1000_hw *hw)
1265 {
1266 	s32 ret_val = E1000_SUCCESS;
1267 	u16 speed;
1268 	u16 duplex;
1269 
1270 	DEBUGFUNC("e1000_configure_on_link_up");
1271 
1272 	if (hw->phy.media_type == e1000_media_type_copper) {
1273 		ret_val = e1000_get_speed_and_duplex_copper_generic(hw,
1274 		                                                    &speed,
1275 		                                                    &duplex);
1276 		if (ret_val)
1277 			goto out;
1278 
1279 		if (speed == SPEED_1000)
1280 			ret_val = e1000_cfg_kmrn_1000_80003es2lan(hw);
1281 		else
1282 			ret_val = e1000_cfg_kmrn_10_100_80003es2lan(hw, duplex);
1283 	}
1284 
1285 out:
1286 	return ret_val;
1287 }
1288 
1289 /**
1290  *  e1000_cfg_kmrn_10_100_80003es2lan - Apply "quirks" for 10/100 operation
1291  *  @hw: pointer to the HW structure
1292  *  @duplex: current duplex setting
1293  *
1294  *  Configure the KMRN interface by applying last minute quirks for
1295  *  10/100 operation.
1296  **/
1297 static s32 e1000_cfg_kmrn_10_100_80003es2lan(struct e1000_hw *hw, u16 duplex)
1298 {
1299 	s32 ret_val = E1000_SUCCESS;
1300 	u32 tipg;
1301 	u32 i = 0;
1302 	u16 reg_data, reg_data2;
1303 
1304 	DEBUGFUNC("e1000_configure_kmrn_for_10_100");
1305 
1306 	reg_data = E1000_KMRNCTRLSTA_HD_CTRL_10_100_DEFAULT;
1307 	ret_val = e1000_write_kmrn_reg_80003es2lan(hw,
1308 	                               E1000_KMRNCTRLSTA_OFFSET_HD_CTRL,
1309 	                               reg_data);
1310 	if (ret_val)
1311 		goto out;
1312 
1313 	/* Configure Transmit Inter-Packet Gap */
1314 	tipg = E1000_READ_REG(hw, E1000_TIPG);
1315 	tipg &= ~E1000_TIPG_IPGT_MASK;
1316 	tipg |= DEFAULT_TIPG_IPGT_10_100_80003ES2LAN;
1317 	E1000_WRITE_REG(hw, E1000_TIPG, tipg);
1318 
1319 	do {
1320 		ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
1321 		                               &reg_data);
1322 		if (ret_val)
1323 			goto out;
1324 
1325 		ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
1326 		                               &reg_data2);
1327 		if (ret_val)
1328 			goto out;
1329 		i++;
1330 	} while ((reg_data != reg_data2) && (i < GG82563_MAX_KMRN_RETRY));
1331 
1332 	if (duplex == HALF_DUPLEX)
1333 		reg_data |= GG82563_KMCR_PASS_FALSE_CARRIER;
1334 	else
1335 		reg_data &= ~GG82563_KMCR_PASS_FALSE_CARRIER;
1336 
1337 	ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_KMRN_MODE_CTRL, reg_data);
1338 
1339 out:
1340 	return ret_val;
1341 }
1342 
1343 /**
1344  *  e1000_cfg_kmrn_1000_80003es2lan - Apply "quirks" for gigabit operation
1345  *  @hw: pointer to the HW structure
1346  *
1347  *  Configure the KMRN interface by applying last minute quirks for
1348  *  gigabit operation.
1349  **/
1350 static s32 e1000_cfg_kmrn_1000_80003es2lan(struct e1000_hw *hw)
1351 {
1352 	s32 ret_val = E1000_SUCCESS;
1353 	u16 reg_data, reg_data2;
1354 	u32 tipg;
1355 	u32 i = 0;
1356 
1357 	DEBUGFUNC("e1000_configure_kmrn_for_1000");
1358 
1359 	reg_data = E1000_KMRNCTRLSTA_HD_CTRL_1000_DEFAULT;
1360 	ret_val = e1000_write_kmrn_reg_80003es2lan(hw,
1361 	                               E1000_KMRNCTRLSTA_OFFSET_HD_CTRL,
1362 	                               reg_data);
1363 	if (ret_val)
1364 		goto out;
1365 
1366 	/* Configure Transmit Inter-Packet Gap */
1367 	tipg = E1000_READ_REG(hw, E1000_TIPG);
1368 	tipg &= ~E1000_TIPG_IPGT_MASK;
1369 	tipg |= DEFAULT_TIPG_IPGT_1000_80003ES2LAN;
1370 	E1000_WRITE_REG(hw, E1000_TIPG, tipg);
1371 
1372 	do {
1373 		ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
1374 		                               &reg_data);
1375 		if (ret_val)
1376 			goto out;
1377 
1378 		ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
1379 		                               &reg_data2);
1380 		if (ret_val)
1381 			goto out;
1382 		i++;
1383 	} while ((reg_data != reg_data2) && (i < GG82563_MAX_KMRN_RETRY));
1384 
1385 	reg_data &= ~GG82563_KMCR_PASS_FALSE_CARRIER;
1386 	ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_KMRN_MODE_CTRL, reg_data);
1387 
1388 out:
1389 	return ret_val;
1390 }
1391 
1392 /**
1393  *  e1000_read_kmrn_reg_80003es2lan - Read kumeran register
1394  *  @hw: pointer to the HW structure
1395  *  @offset: register offset to be read
1396  *  @data: pointer to the read data
1397  *
1398  *  Acquire semaphore, then read the PHY register at offset
1399  *  using the kumeran interface.  The information retrieved is stored in data.
1400  *  Release the semaphore before exiting.
1401  **/
1402 static s32 e1000_read_kmrn_reg_80003es2lan(struct e1000_hw *hw, u32 offset,
1403                                            u16 *data)
1404 {
1405 	u32 kmrnctrlsta;
1406 	s32 ret_val = E1000_SUCCESS;
1407 
1408 	DEBUGFUNC("e1000_read_kmrn_reg_80003es2lan");
1409 
1410 	ret_val = e1000_acquire_mac_csr_80003es2lan(hw);
1411 	if (ret_val)
1412 		goto out;
1413 
1414 	kmrnctrlsta = ((offset << E1000_KMRNCTRLSTA_OFFSET_SHIFT) &
1415 	               E1000_KMRNCTRLSTA_OFFSET) | E1000_KMRNCTRLSTA_REN;
1416 	E1000_WRITE_REG(hw, E1000_KMRNCTRLSTA, kmrnctrlsta);
1417 
1418 	usec_delay(2);
1419 
1420 	kmrnctrlsta = E1000_READ_REG(hw, E1000_KMRNCTRLSTA);
1421 	*data = (u16)kmrnctrlsta;
1422 
1423 	e1000_release_mac_csr_80003es2lan(hw);
1424 
1425 out:
1426 	return ret_val;
1427 }
1428 
1429 /**
1430  *  e1000_write_kmrn_reg_80003es2lan - Write kumeran register
1431  *  @hw: pointer to the HW structure
1432  *  @offset: register offset to write to
1433  *  @data: data to write at register offset
1434  *
1435  *  Acquire semaphore, then write the data to PHY register
1436  *  at the offset using the kumeran interface.  Release semaphore
1437  *  before exiting.
1438  **/
1439 static s32 e1000_write_kmrn_reg_80003es2lan(struct e1000_hw *hw, u32 offset,
1440                                             u16 data)
1441 {
1442 	u32 kmrnctrlsta;
1443 	s32 ret_val = E1000_SUCCESS;
1444 
1445 	DEBUGFUNC("e1000_write_kmrn_reg_80003es2lan");
1446 
1447 	ret_val = e1000_acquire_mac_csr_80003es2lan(hw);
1448 	if (ret_val)
1449 		goto out;
1450 
1451 	kmrnctrlsta = ((offset << E1000_KMRNCTRLSTA_OFFSET_SHIFT) &
1452 	               E1000_KMRNCTRLSTA_OFFSET) | data;
1453 	E1000_WRITE_REG(hw, E1000_KMRNCTRLSTA, kmrnctrlsta);
1454 
1455 	usec_delay(2);
1456 
1457 	e1000_release_mac_csr_80003es2lan(hw);
1458 
1459 out:
1460 	return ret_val;
1461 }
1462 
1463 /**
1464  *  e1000_read_mac_addr_80003es2lan - Read device MAC address
1465  *  @hw: pointer to the HW structure
1466  **/
1467 static s32 e1000_read_mac_addr_80003es2lan(struct e1000_hw *hw)
1468 {
1469 	s32 ret_val = E1000_SUCCESS;
1470 
1471 	DEBUGFUNC("e1000_read_mac_addr_80003es2lan");
1472 
1473 	/*
1474 	 * If there's an alternate MAC address place it in RAR0
1475 	 * so that it will override the Si installed default perm
1476 	 * address.
1477 	 */
1478 	ret_val = e1000_check_alt_mac_addr_generic(hw);
1479 	if (ret_val)
1480 		goto out;
1481 
1482 	ret_val = e1000_read_mac_addr_generic(hw);
1483 
1484 out:
1485 	return ret_val;
1486 }
1487 
1488 /**
1489  * e1000_power_down_phy_copper_80003es2lan - Remove link during PHY power down
1490  * @hw: pointer to the HW structure
1491  *
1492  * In the case of a PHY power down to save power, or to turn off link during a
1493  * driver unload, or wake on lan is not enabled, remove the link.
1494  **/
1495 static void e1000_power_down_phy_copper_80003es2lan(struct e1000_hw *hw)
1496 {
1497 	/* If the management interface is not enabled, then power down */
1498 	if (!(hw->mac.ops.check_mng_mode(hw) ||
1499 	      hw->phy.ops.check_reset_block(hw)))
1500 		e1000_power_down_phy_copper(hw);
1501 
1502 	return;
1503 }
1504 
1505 /**
1506  *  e1000_clear_hw_cntrs_80003es2lan - Clear device specific hardware counters
1507  *  @hw: pointer to the HW structure
1508  *
1509  *  Clears the hardware counters by reading the counter registers.
1510  **/
1511 static void e1000_clear_hw_cntrs_80003es2lan(struct e1000_hw *hw)
1512 {
1513 	DEBUGFUNC("e1000_clear_hw_cntrs_80003es2lan");
1514 
1515 	e1000_clear_hw_cntrs_base_generic(hw);
1516 
1517 	E1000_READ_REG(hw, E1000_PRC64);
1518 	E1000_READ_REG(hw, E1000_PRC127);
1519 	E1000_READ_REG(hw, E1000_PRC255);
1520 	E1000_READ_REG(hw, E1000_PRC511);
1521 	E1000_READ_REG(hw, E1000_PRC1023);
1522 	E1000_READ_REG(hw, E1000_PRC1522);
1523 	E1000_READ_REG(hw, E1000_PTC64);
1524 	E1000_READ_REG(hw, E1000_PTC127);
1525 	E1000_READ_REG(hw, E1000_PTC255);
1526 	E1000_READ_REG(hw, E1000_PTC511);
1527 	E1000_READ_REG(hw, E1000_PTC1023);
1528 	E1000_READ_REG(hw, E1000_PTC1522);
1529 
1530 	E1000_READ_REG(hw, E1000_ALGNERRC);
1531 	E1000_READ_REG(hw, E1000_RXERRC);
1532 	E1000_READ_REG(hw, E1000_TNCRS);
1533 	E1000_READ_REG(hw, E1000_CEXTERR);
1534 	E1000_READ_REG(hw, E1000_TSCTC);
1535 	E1000_READ_REG(hw, E1000_TSCTFC);
1536 
1537 	E1000_READ_REG(hw, E1000_MGTPRC);
1538 	E1000_READ_REG(hw, E1000_MGTPDC);
1539 	E1000_READ_REG(hw, E1000_MGTPTC);
1540 
1541 	E1000_READ_REG(hw, E1000_IAC);
1542 	E1000_READ_REG(hw, E1000_ICRXOC);
1543 
1544 	E1000_READ_REG(hw, E1000_ICRXPTC);
1545 	E1000_READ_REG(hw, E1000_ICRXATC);
1546 	E1000_READ_REG(hw, E1000_ICTXPTC);
1547 	E1000_READ_REG(hw, E1000_ICTXATC);
1548 	E1000_READ_REG(hw, E1000_ICTXQEC);
1549 	E1000_READ_REG(hw, E1000_ICTXQMTC);
1550 	E1000_READ_REG(hw, E1000_ICRXDMTC);
1551 }
1552