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 	/* FWSM register */
235 	mac->has_fwsm = TRUE;
236 	/* ARC supported; valid only if manageability features are enabled. */
237 	mac->arc_subsystem_valid =
238 	        (E1000_READ_REG(hw, E1000_FWSM) & E1000_FWSM_MODE_MASK)
239 	                ? TRUE : FALSE;
240 	/* Adaptive IFS not supported */
241 	mac->adaptive_ifs = FALSE;
242 
243 	/* Function pointers */
244 
245 	/* bus type/speed/width */
246 	mac->ops.get_bus_info = e1000_get_bus_info_pcie_generic;
247 	/* reset */
248 	mac->ops.reset_hw = e1000_reset_hw_80003es2lan;
249 	/* hw initialization */
250 	mac->ops.init_hw = e1000_init_hw_80003es2lan;
251 	/* link setup */
252 	mac->ops.setup_link = e1000_setup_link_generic;
253 	/* check management mode */
254 	mac->ops.check_mng_mode = e1000_check_mng_mode_generic;
255 	/* multicast address update */
256 	mac->ops.update_mc_addr_list = e1000_update_mc_addr_list_generic;
257 	/* writing VFTA */
258 	mac->ops.write_vfta = e1000_write_vfta_generic;
259 	/* clearing VFTA */
260 	mac->ops.clear_vfta = e1000_clear_vfta_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 		goto skip_reset;
1053 
1054 	ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_MAC_SPEC_CTRL,
1055 				     &data);
1056 	if (ret_val)
1057 		goto out;
1058 
1059 	data |= GG82563_MSCR_ASSERT_CRS_ON_TX;
1060 	/* Use 25MHz for both link down and 1000Base-T for Tx clock. */
1061 	data |= GG82563_MSCR_TX_CLK_1000MBPS_25;
1062 
1063 	ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_MAC_SPEC_CTRL,
1064 				      data);
1065 	if (ret_val)
1066 		goto out;
1067 
1068 	/*
1069 	 * Options:
1070 	 *   MDI/MDI-X = 0 (default)
1071 	 *   0 - Auto for all speeds
1072 	 *   1 - MDI mode
1073 	 *   2 - MDI-X mode
1074 	 *   3 - Auto for 1000Base-T only (MDI-X for 10/100Base-T modes)
1075 	 */
1076 	ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_SPEC_CTRL, &data);
1077 	if (ret_val)
1078 		goto out;
1079 
1080 	data &= ~GG82563_PSCR_CROSSOVER_MODE_MASK;
1081 
1082 	switch (phy->mdix) {
1083 	case 1:
1084 		data |= GG82563_PSCR_CROSSOVER_MODE_MDI;
1085 		break;
1086 	case 2:
1087 		data |= GG82563_PSCR_CROSSOVER_MODE_MDIX;
1088 		break;
1089 	case 0:
1090 	default:
1091 		data |= GG82563_PSCR_CROSSOVER_MODE_AUTO;
1092 		break;
1093 	}
1094 
1095 	/*
1096 	 * Options:
1097 	 *   disable_polarity_correction = 0 (default)
1098 	 *       Automatic Correction for Reversed Cable Polarity
1099 	 *   0 - Disabled
1100 	 *   1 - Enabled
1101 	 */
1102 	data &= ~GG82563_PSCR_POLARITY_REVERSAL_DISABLE;
1103 	if (phy->disable_polarity_correction)
1104 		data |= GG82563_PSCR_POLARITY_REVERSAL_DISABLE;
1105 
1106 	ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_SPEC_CTRL, data);
1107 	if (ret_val)
1108 		goto out;
1109 
1110 	/* SW Reset the PHY so all changes take effect */
1111 	ret_val = hw->phy.ops.commit(hw);
1112 	if (ret_val) {
1113 		DEBUGOUT("Error Resetting the PHY\n");
1114 		goto out;
1115 	}
1116 
1117 skip_reset:
1118 	/* Bypass Rx and Tx FIFO's */
1119 	ret_val = e1000_write_kmrn_reg_80003es2lan(hw,
1120 					E1000_KMRNCTRLSTA_OFFSET_FIFO_CTRL,
1121 					E1000_KMRNCTRLSTA_FIFO_CTRL_RX_BYPASS |
1122 					E1000_KMRNCTRLSTA_FIFO_CTRL_TX_BYPASS);
1123 	if (ret_val)
1124 		goto out;
1125 
1126 	ret_val = e1000_read_kmrn_reg_80003es2lan(hw,
1127 	                              E1000_KMRNCTRLSTA_OFFSET_MAC2PHY_OPMODE,
1128 	                              &data);
1129 	if (ret_val)
1130 		goto out;
1131 	data |= E1000_KMRNCTRLSTA_OPMODE_E_IDLE;
1132 	ret_val = e1000_write_kmrn_reg_80003es2lan(hw,
1133 	                               E1000_KMRNCTRLSTA_OFFSET_MAC2PHY_OPMODE,
1134 	                               data);
1135 	if (ret_val)
1136 		goto out;
1137 
1138 	ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_SPEC_CTRL_2, &data);
1139 	if (ret_val)
1140 		goto out;
1141 
1142 	data &= ~GG82563_PSCR2_REVERSE_AUTO_NEG;
1143 	ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_SPEC_CTRL_2, data);
1144 	if (ret_val)
1145 		goto out;
1146 
1147 	ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
1148 	ctrl_ext &= ~(E1000_CTRL_EXT_LINK_MODE_MASK);
1149 	E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext);
1150 
1151 	ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_PWR_MGMT_CTRL, &data);
1152 	if (ret_val)
1153 		goto out;
1154 
1155 	/*
1156 	 * Do not init these registers when the HW is in IAMT mode, since the
1157 	 * firmware will have already initialized them.  We only initialize
1158 	 * them if the HW is not in IAMT mode.
1159 	 */
1160 	if (!(hw->mac.ops.check_mng_mode(hw))) {
1161 		/* Enable Electrical Idle on the PHY */
1162 		data |= GG82563_PMCR_ENABLE_ELECTRICAL_IDLE;
1163 		ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_PWR_MGMT_CTRL,
1164 		                                data);
1165 		if (ret_val)
1166 			goto out;
1167 
1168 		ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
1169 		                               &data);
1170 		if (ret_val)
1171 			goto out;
1172 
1173 		data &= ~GG82563_KMCR_PASS_FALSE_CARRIER;
1174 		ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
1175 		                                data);
1176 		if (ret_val)
1177 			goto out;
1178 	}
1179 
1180 	/*
1181 	 * Workaround: Disable padding in Kumeran interface in the MAC
1182 	 * and in the PHY to avoid CRC errors.
1183 	 */
1184 	ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_INBAND_CTRL, &data);
1185 	if (ret_val)
1186 		goto out;
1187 
1188 	data |= GG82563_ICR_DIS_PADDING;
1189 	ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_INBAND_CTRL, data);
1190 	if (ret_val)
1191 		goto out;
1192 
1193 out:
1194 	return ret_val;
1195 }
1196 
1197 /**
1198  *  e1000_setup_copper_link_80003es2lan - Setup Copper Link for ESB2
1199  *  @hw: pointer to the HW structure
1200  *
1201  *  Essentially a wrapper for setting up all things "copper" related.
1202  *  This is a function pointer entry point called by the mac module.
1203  **/
1204 static s32 e1000_setup_copper_link_80003es2lan(struct e1000_hw *hw)
1205 {
1206 	u32 ctrl;
1207 	s32 ret_val;
1208 	u16 reg_data;
1209 
1210 	DEBUGFUNC("e1000_setup_copper_link_80003es2lan");
1211 
1212 	ctrl = E1000_READ_REG(hw, E1000_CTRL);
1213 	ctrl |= E1000_CTRL_SLU;
1214 	ctrl &= ~(E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
1215 	E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
1216 
1217 	/*
1218 	 * Set the mac to wait the maximum time between each
1219 	 * iteration and increase the max iterations when
1220 	 * polling the phy; this fixes erroneous timeouts at 10Mbps.
1221 	 */
1222 	ret_val = e1000_write_kmrn_reg_80003es2lan(hw, GG82563_REG(0x34, 4),
1223 	                                           0xFFFF);
1224 	if (ret_val)
1225 		goto out;
1226 	ret_val = e1000_read_kmrn_reg_80003es2lan(hw, GG82563_REG(0x34, 9),
1227 	                                          &reg_data);
1228 	if (ret_val)
1229 		goto out;
1230 	reg_data |= 0x3F;
1231 	ret_val = e1000_write_kmrn_reg_80003es2lan(hw, GG82563_REG(0x34, 9),
1232 	                                           reg_data);
1233 	if (ret_val)
1234 		goto out;
1235 	ret_val = e1000_read_kmrn_reg_80003es2lan(hw,
1236 	                              E1000_KMRNCTRLSTA_OFFSET_INB_CTRL,
1237 	                              &reg_data);
1238 	if (ret_val)
1239 		goto out;
1240 	reg_data |= E1000_KMRNCTRLSTA_INB_CTRL_DIS_PADDING;
1241 	ret_val = e1000_write_kmrn_reg_80003es2lan(hw,
1242 	                               E1000_KMRNCTRLSTA_OFFSET_INB_CTRL,
1243 	                               reg_data);
1244 	if (ret_val)
1245 		goto out;
1246 
1247 	ret_val = e1000_copper_link_setup_gg82563_80003es2lan(hw);
1248 	if (ret_val)
1249 		goto out;
1250 
1251 	ret_val = e1000_setup_copper_link_generic(hw);
1252 
1253 out:
1254 	return ret_val;
1255 }
1256 
1257 /**
1258  *  e1000_cfg_on_link_up_80003es2lan - es2 link configuration after link-up
1259  *  @hw: pointer to the HW structure
1260  *  @duplex: current duplex setting
1261  *
1262  *  Configure the KMRN interface by applying last minute quirks for
1263  *  10/100 operation.
1264  **/
1265 static s32 e1000_cfg_on_link_up_80003es2lan(struct e1000_hw *hw)
1266 {
1267 	s32 ret_val = E1000_SUCCESS;
1268 	u16 speed;
1269 	u16 duplex;
1270 
1271 	DEBUGFUNC("e1000_configure_on_link_up");
1272 
1273 	if (hw->phy.media_type == e1000_media_type_copper) {
1274 		ret_val = e1000_get_speed_and_duplex_copper_generic(hw,
1275 		                                                    &speed,
1276 		                                                    &duplex);
1277 		if (ret_val)
1278 			goto out;
1279 
1280 		if (speed == SPEED_1000)
1281 			ret_val = e1000_cfg_kmrn_1000_80003es2lan(hw);
1282 		else
1283 			ret_val = e1000_cfg_kmrn_10_100_80003es2lan(hw, duplex);
1284 	}
1285 
1286 out:
1287 	return ret_val;
1288 }
1289 
1290 /**
1291  *  e1000_cfg_kmrn_10_100_80003es2lan - Apply "quirks" for 10/100 operation
1292  *  @hw: pointer to the HW structure
1293  *  @duplex: current duplex setting
1294  *
1295  *  Configure the KMRN interface by applying last minute quirks for
1296  *  10/100 operation.
1297  **/
1298 static s32 e1000_cfg_kmrn_10_100_80003es2lan(struct e1000_hw *hw, u16 duplex)
1299 {
1300 	s32 ret_val = E1000_SUCCESS;
1301 	u32 tipg;
1302 	u32 i = 0;
1303 	u16 reg_data, reg_data2;
1304 
1305 	DEBUGFUNC("e1000_configure_kmrn_for_10_100");
1306 
1307 	reg_data = E1000_KMRNCTRLSTA_HD_CTRL_10_100_DEFAULT;
1308 	ret_val = e1000_write_kmrn_reg_80003es2lan(hw,
1309 	                               E1000_KMRNCTRLSTA_OFFSET_HD_CTRL,
1310 	                               reg_data);
1311 	if (ret_val)
1312 		goto out;
1313 
1314 	/* Configure Transmit Inter-Packet Gap */
1315 	tipg = E1000_READ_REG(hw, E1000_TIPG);
1316 	tipg &= ~E1000_TIPG_IPGT_MASK;
1317 	tipg |= DEFAULT_TIPG_IPGT_10_100_80003ES2LAN;
1318 	E1000_WRITE_REG(hw, E1000_TIPG, tipg);
1319 
1320 	do {
1321 		ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
1322 		                               &reg_data);
1323 		if (ret_val)
1324 			goto out;
1325 
1326 		ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
1327 		                               &reg_data2);
1328 		if (ret_val)
1329 			goto out;
1330 		i++;
1331 	} while ((reg_data != reg_data2) && (i < GG82563_MAX_KMRN_RETRY));
1332 
1333 	if (duplex == HALF_DUPLEX)
1334 		reg_data |= GG82563_KMCR_PASS_FALSE_CARRIER;
1335 	else
1336 		reg_data &= ~GG82563_KMCR_PASS_FALSE_CARRIER;
1337 
1338 	ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_KMRN_MODE_CTRL, reg_data);
1339 
1340 out:
1341 	return ret_val;
1342 }
1343 
1344 /**
1345  *  e1000_cfg_kmrn_1000_80003es2lan - Apply "quirks" for gigabit operation
1346  *  @hw: pointer to the HW structure
1347  *
1348  *  Configure the KMRN interface by applying last minute quirks for
1349  *  gigabit operation.
1350  **/
1351 static s32 e1000_cfg_kmrn_1000_80003es2lan(struct e1000_hw *hw)
1352 {
1353 	s32 ret_val = E1000_SUCCESS;
1354 	u16 reg_data, reg_data2;
1355 	u32 tipg;
1356 	u32 i = 0;
1357 
1358 	DEBUGFUNC("e1000_configure_kmrn_for_1000");
1359 
1360 	reg_data = E1000_KMRNCTRLSTA_HD_CTRL_1000_DEFAULT;
1361 	ret_val = e1000_write_kmrn_reg_80003es2lan(hw,
1362 	                               E1000_KMRNCTRLSTA_OFFSET_HD_CTRL,
1363 	                               reg_data);
1364 	if (ret_val)
1365 		goto out;
1366 
1367 	/* Configure Transmit Inter-Packet Gap */
1368 	tipg = E1000_READ_REG(hw, E1000_TIPG);
1369 	tipg &= ~E1000_TIPG_IPGT_MASK;
1370 	tipg |= DEFAULT_TIPG_IPGT_1000_80003ES2LAN;
1371 	E1000_WRITE_REG(hw, E1000_TIPG, tipg);
1372 
1373 	do {
1374 		ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
1375 		                               &reg_data);
1376 		if (ret_val)
1377 			goto out;
1378 
1379 		ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
1380 		                               &reg_data2);
1381 		if (ret_val)
1382 			goto out;
1383 		i++;
1384 	} while ((reg_data != reg_data2) && (i < GG82563_MAX_KMRN_RETRY));
1385 
1386 	reg_data &= ~GG82563_KMCR_PASS_FALSE_CARRIER;
1387 	ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_KMRN_MODE_CTRL, reg_data);
1388 
1389 out:
1390 	return ret_val;
1391 }
1392 
1393 /**
1394  *  e1000_read_kmrn_reg_80003es2lan - Read kumeran register
1395  *  @hw: pointer to the HW structure
1396  *  @offset: register offset to be read
1397  *  @data: pointer to the read data
1398  *
1399  *  Acquire semaphore, then read the PHY register at offset
1400  *  using the kumeran interface.  The information retrieved is stored in data.
1401  *  Release the semaphore before exiting.
1402  **/
1403 static s32 e1000_read_kmrn_reg_80003es2lan(struct e1000_hw *hw, u32 offset,
1404                                            u16 *data)
1405 {
1406 	u32 kmrnctrlsta;
1407 	s32 ret_val = E1000_SUCCESS;
1408 
1409 	DEBUGFUNC("e1000_read_kmrn_reg_80003es2lan");
1410 
1411 	ret_val = e1000_acquire_mac_csr_80003es2lan(hw);
1412 	if (ret_val)
1413 		goto out;
1414 
1415 	kmrnctrlsta = ((offset << E1000_KMRNCTRLSTA_OFFSET_SHIFT) &
1416 	               E1000_KMRNCTRLSTA_OFFSET) | E1000_KMRNCTRLSTA_REN;
1417 	E1000_WRITE_REG(hw, E1000_KMRNCTRLSTA, kmrnctrlsta);
1418 
1419 	usec_delay(2);
1420 
1421 	kmrnctrlsta = E1000_READ_REG(hw, E1000_KMRNCTRLSTA);
1422 	*data = (u16)kmrnctrlsta;
1423 
1424 	e1000_release_mac_csr_80003es2lan(hw);
1425 
1426 out:
1427 	return ret_val;
1428 }
1429 
1430 /**
1431  *  e1000_write_kmrn_reg_80003es2lan - Write kumeran register
1432  *  @hw: pointer to the HW structure
1433  *  @offset: register offset to write to
1434  *  @data: data to write at register offset
1435  *
1436  *  Acquire semaphore, then write the data to PHY register
1437  *  at the offset using the kumeran interface.  Release semaphore
1438  *  before exiting.
1439  **/
1440 static s32 e1000_write_kmrn_reg_80003es2lan(struct e1000_hw *hw, u32 offset,
1441                                             u16 data)
1442 {
1443 	u32 kmrnctrlsta;
1444 	s32 ret_val = E1000_SUCCESS;
1445 
1446 	DEBUGFUNC("e1000_write_kmrn_reg_80003es2lan");
1447 
1448 	ret_val = e1000_acquire_mac_csr_80003es2lan(hw);
1449 	if (ret_val)
1450 		goto out;
1451 
1452 	kmrnctrlsta = ((offset << E1000_KMRNCTRLSTA_OFFSET_SHIFT) &
1453 	               E1000_KMRNCTRLSTA_OFFSET) | data;
1454 	E1000_WRITE_REG(hw, E1000_KMRNCTRLSTA, kmrnctrlsta);
1455 
1456 	usec_delay(2);
1457 
1458 	e1000_release_mac_csr_80003es2lan(hw);
1459 
1460 out:
1461 	return ret_val;
1462 }
1463 
1464 /**
1465  *  e1000_read_mac_addr_80003es2lan - Read device MAC address
1466  *  @hw: pointer to the HW structure
1467  **/
1468 static s32 e1000_read_mac_addr_80003es2lan(struct e1000_hw *hw)
1469 {
1470 	s32 ret_val = E1000_SUCCESS;
1471 
1472 	DEBUGFUNC("e1000_read_mac_addr_80003es2lan");
1473 
1474 	/*
1475 	 * If there's an alternate MAC address place it in RAR0
1476 	 * so that it will override the Si installed default perm
1477 	 * address.
1478 	 */
1479 	ret_val = e1000_check_alt_mac_addr_generic(hw);
1480 	if (ret_val)
1481 		goto out;
1482 
1483 	ret_val = e1000_read_mac_addr_generic(hw);
1484 
1485 out:
1486 	return ret_val;
1487 }
1488 
1489 /**
1490  * e1000_power_down_phy_copper_80003es2lan - Remove link during PHY power down
1491  * @hw: pointer to the HW structure
1492  *
1493  * In the case of a PHY power down to save power, or to turn off link during a
1494  * driver unload, or wake on lan is not enabled, remove the link.
1495  **/
1496 static void e1000_power_down_phy_copper_80003es2lan(struct e1000_hw *hw)
1497 {
1498 	/* If the management interface is not enabled, then power down */
1499 	if (!(hw->mac.ops.check_mng_mode(hw) ||
1500 	      hw->phy.ops.check_reset_block(hw)))
1501 		e1000_power_down_phy_copper(hw);
1502 
1503 	return;
1504 }
1505 
1506 /**
1507  *  e1000_clear_hw_cntrs_80003es2lan - Clear device specific hardware counters
1508  *  @hw: pointer to the HW structure
1509  *
1510  *  Clears the hardware counters by reading the counter registers.
1511  **/
1512 static void e1000_clear_hw_cntrs_80003es2lan(struct e1000_hw *hw)
1513 {
1514 	DEBUGFUNC("e1000_clear_hw_cntrs_80003es2lan");
1515 
1516 	e1000_clear_hw_cntrs_base_generic(hw);
1517 
1518 	E1000_READ_REG(hw, E1000_PRC64);
1519 	E1000_READ_REG(hw, E1000_PRC127);
1520 	E1000_READ_REG(hw, E1000_PRC255);
1521 	E1000_READ_REG(hw, E1000_PRC511);
1522 	E1000_READ_REG(hw, E1000_PRC1023);
1523 	E1000_READ_REG(hw, E1000_PRC1522);
1524 	E1000_READ_REG(hw, E1000_PTC64);
1525 	E1000_READ_REG(hw, E1000_PTC127);
1526 	E1000_READ_REG(hw, E1000_PTC255);
1527 	E1000_READ_REG(hw, E1000_PTC511);
1528 	E1000_READ_REG(hw, E1000_PTC1023);
1529 	E1000_READ_REG(hw, E1000_PTC1522);
1530 
1531 	E1000_READ_REG(hw, E1000_ALGNERRC);
1532 	E1000_READ_REG(hw, E1000_RXERRC);
1533 	E1000_READ_REG(hw, E1000_TNCRS);
1534 	E1000_READ_REG(hw, E1000_CEXTERR);
1535 	E1000_READ_REG(hw, E1000_TSCTC);
1536 	E1000_READ_REG(hw, E1000_TSCTFC);
1537 
1538 	E1000_READ_REG(hw, E1000_MGTPRC);
1539 	E1000_READ_REG(hw, E1000_MGTPDC);
1540 	E1000_READ_REG(hw, E1000_MGTPTC);
1541 
1542 	E1000_READ_REG(hw, E1000_IAC);
1543 	E1000_READ_REG(hw, E1000_ICRXOC);
1544 
1545 	E1000_READ_REG(hw, E1000_ICRXPTC);
1546 	E1000_READ_REG(hw, E1000_ICRXATC);
1547 	E1000_READ_REG(hw, E1000_ICTXPTC);
1548 	E1000_READ_REG(hw, E1000_ICTXATC);
1549 	E1000_READ_REG(hw, E1000_ICTXQEC);
1550 	E1000_READ_REG(hw, E1000_ICTXQMTC);
1551 	E1000_READ_REG(hw, E1000_ICRXDMTC);
1552 }
1553