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