e1000_82575.c revision 183714
1/******************************************************************************
2
3  Copyright (c) 2001-2008, 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: head/sys/dev/e1000/e1000_82575.c 183714 2008-10-09 02:25:18Z peter $*/
34
35/* e1000_82575
36 * e1000_82576
37 */
38
39#include "e1000_api.h"
40
41static s32  e1000_init_phy_params_82575(struct e1000_hw *hw);
42static s32  e1000_init_nvm_params_82575(struct e1000_hw *hw);
43static s32  e1000_init_mac_params_82575(struct e1000_hw *hw);
44static s32  e1000_acquire_phy_82575(struct e1000_hw *hw);
45static void e1000_release_phy_82575(struct e1000_hw *hw);
46static s32  e1000_acquire_nvm_82575(struct e1000_hw *hw);
47static void e1000_release_nvm_82575(struct e1000_hw *hw);
48static s32  e1000_check_for_link_82575(struct e1000_hw *hw);
49static s32  e1000_get_cfg_done_82575(struct e1000_hw *hw);
50static s32  e1000_get_link_up_info_82575(struct e1000_hw *hw, u16 *speed,
51                                         u16 *duplex);
52static s32  e1000_init_hw_82575(struct e1000_hw *hw);
53static s32  e1000_phy_hw_reset_sgmii_82575(struct e1000_hw *hw);
54static s32  e1000_read_phy_reg_sgmii_82575(struct e1000_hw *hw, u32 offset,
55                                           u16 *data);
56static s32  e1000_reset_hw_82575(struct e1000_hw *hw);
57static s32  e1000_set_d0_lplu_state_82575(struct e1000_hw *hw,
58                                          bool active);
59static s32  e1000_setup_copper_link_82575(struct e1000_hw *hw);
60static s32  e1000_setup_fiber_serdes_link_82575(struct e1000_hw *hw);
61static s32  e1000_valid_led_default_82575(struct e1000_hw *hw, u16 *data);
62static s32  e1000_write_phy_reg_sgmii_82575(struct e1000_hw *hw,
63                                            u32 offset, u16 data);
64static void e1000_clear_hw_cntrs_82575(struct e1000_hw *hw);
65static s32  e1000_acquire_swfw_sync_82575(struct e1000_hw *hw, u16 mask);
66static s32  e1000_configure_pcs_link_82575(struct e1000_hw *hw);
67static s32  e1000_get_pcs_speed_and_duplex_82575(struct e1000_hw *hw,
68                                                 u16 *speed, u16 *duplex);
69static s32  e1000_get_phy_id_82575(struct e1000_hw *hw);
70static void e1000_release_swfw_sync_82575(struct e1000_hw *hw, u16 mask);
71static bool e1000_sgmii_active_82575(struct e1000_hw *hw);
72static s32  e1000_reset_init_script_82575(struct e1000_hw *hw);
73static s32  e1000_read_mac_addr_82575(struct e1000_hw *hw);
74static void e1000_power_down_phy_copper_82575(struct e1000_hw *hw);
75
76static void e1000_init_rx_addrs_82575(struct e1000_hw *hw, u16 rar_count);
77static void e1000_update_mc_addr_list_82575(struct e1000_hw *hw,
78                                           u8 *mc_addr_list, u32 mc_addr_count,
79                                           u32 rar_used_count, u32 rar_count);
80void e1000_remove_device_82575(struct e1000_hw *hw);
81void e1000_shutdown_fiber_serdes_link_82575(struct e1000_hw *hw);
82
83struct e1000_dev_spec_82575 {
84	bool sgmii_active;
85};
86
87/**
88 *  e1000_init_phy_params_82575 - Init PHY func ptrs.
89 *  @hw: pointer to the HW structure
90 *
91 *  This is a function pointer entry point called by the api module.
92 **/
93static s32 e1000_init_phy_params_82575(struct e1000_hw *hw)
94{
95	struct e1000_phy_info *phy = &hw->phy;
96	s32 ret_val = E1000_SUCCESS;
97
98	DEBUGFUNC("e1000_init_phy_params_82575");
99
100	if (hw->phy.media_type != e1000_media_type_copper) {
101		phy->type = e1000_phy_none;
102		goto out;
103	} else {
104		phy->ops.power_up   = e1000_power_up_phy_copper;
105		phy->ops.power_down = e1000_power_down_phy_copper_82575;
106	}
107
108	phy->autoneg_mask           = AUTONEG_ADVERTISE_SPEED_DEFAULT;
109	phy->reset_delay_us         = 100;
110
111	phy->ops.acquire            = e1000_acquire_phy_82575;
112	phy->ops.check_reset_block  = e1000_check_reset_block_generic;
113	phy->ops.commit             = e1000_phy_sw_reset_generic;
114	phy->ops.get_cfg_done       = e1000_get_cfg_done_82575;
115	phy->ops.release            = e1000_release_phy_82575;
116
117	if (e1000_sgmii_active_82575(hw)) {
118		phy->ops.reset      = e1000_phy_hw_reset_sgmii_82575;
119		phy->ops.read_reg   = e1000_read_phy_reg_sgmii_82575;
120		phy->ops.write_reg  = e1000_write_phy_reg_sgmii_82575;
121	} else {
122		phy->ops.reset      = e1000_phy_hw_reset_generic;
123		phy->ops.read_reg   = e1000_read_phy_reg_igp;
124		phy->ops.write_reg  = e1000_write_phy_reg_igp;
125	}
126
127	/* Set phy->phy_addr and phy->id. */
128	ret_val = e1000_get_phy_id_82575(hw);
129
130	/* Verify phy id and set remaining function pointers */
131	switch (phy->id) {
132	case M88E1111_I_PHY_ID:
133		phy->type                   = e1000_phy_m88;
134		phy->ops.check_polarity     = e1000_check_polarity_m88;
135		phy->ops.get_info           = e1000_get_phy_info_m88;
136		phy->ops.get_cable_length   = e1000_get_cable_length_m88;
137		phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_m88;
138		break;
139	case IGP03E1000_E_PHY_ID:
140	case IGP04E1000_E_PHY_ID:
141		phy->type                   = e1000_phy_igp_3;
142		phy->ops.check_polarity     = e1000_check_polarity_igp;
143		phy->ops.get_info           = e1000_get_phy_info_igp;
144		phy->ops.get_cable_length   = e1000_get_cable_length_igp_2;
145		phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_igp;
146		phy->ops.set_d0_lplu_state  = e1000_set_d0_lplu_state_82575;
147		phy->ops.set_d3_lplu_state  = e1000_set_d3_lplu_state_generic;
148		break;
149	default:
150		ret_val = -E1000_ERR_PHY;
151		goto out;
152	}
153
154out:
155	return ret_val;
156}
157
158/**
159 *  e1000_init_nvm_params_82575 - Init NVM func ptrs.
160 *  @hw: pointer to the HW structure
161 *
162 *  This is a function pointer entry point called by the api module.
163 **/
164static s32 e1000_init_nvm_params_82575(struct e1000_hw *hw)
165{
166	struct e1000_nvm_info *nvm = &hw->nvm;
167	u32 eecd = E1000_READ_REG(hw, E1000_EECD);
168	u16 size;
169
170	DEBUGFUNC("e1000_init_nvm_params_82575");
171
172	nvm->opcode_bits        = 8;
173	nvm->delay_usec         = 1;
174	switch (nvm->override) {
175	case e1000_nvm_override_spi_large:
176		nvm->page_size    = 32;
177		nvm->address_bits = 16;
178		break;
179	case e1000_nvm_override_spi_small:
180		nvm->page_size    = 8;
181		nvm->address_bits = 8;
182		break;
183	default:
184		nvm->page_size    = eecd & E1000_EECD_ADDR_BITS ? 32 : 8;
185		nvm->address_bits = eecd & E1000_EECD_ADDR_BITS ? 16 : 8;
186		break;
187	}
188
189	nvm->type              = e1000_nvm_eeprom_spi;
190
191	size = (u16)((eecd & E1000_EECD_SIZE_EX_MASK) >>
192	                  E1000_EECD_SIZE_EX_SHIFT);
193
194	/*
195	 * Added to a constant, "size" becomes the left-shift value
196	 * for setting word_size.
197	 */
198	size += NVM_WORD_SIZE_BASE_SHIFT;
199
200	/* EEPROM access above 16k is unsupported */
201	if (size > 14)
202		size = 14;
203	nvm->word_size	= 1 << size;
204
205	/* Function Pointers */
206	nvm->ops.acquire       = e1000_acquire_nvm_82575;
207	nvm->ops.read          = e1000_read_nvm_eerd;
208	nvm->ops.release       = e1000_release_nvm_82575;
209	nvm->ops.update        = e1000_update_nvm_checksum_generic;
210	nvm->ops.valid_led_default = e1000_valid_led_default_82575;
211	nvm->ops.validate      = e1000_validate_nvm_checksum_generic;
212	nvm->ops.write         = e1000_write_nvm_spi;
213
214	return E1000_SUCCESS;
215}
216
217/**
218 *  e1000_init_mac_params_82575 - Init MAC func ptrs.
219 *  @hw: pointer to the HW structure
220 *
221 *  This is a function pointer entry point called by the api module.
222 **/
223static s32 e1000_init_mac_params_82575(struct e1000_hw *hw)
224{
225	struct e1000_mac_info *mac = &hw->mac;
226	struct e1000_dev_spec_82575 *dev_spec;
227	u32 ctrl_ext = 0;
228	s32 ret_val = E1000_SUCCESS;
229
230	DEBUGFUNC("e1000_init_mac_params_82575");
231
232	hw->dev_spec_size = sizeof(struct e1000_dev_spec_82575);
233
234	/* Device-specific structure allocation */
235	ret_val = e1000_alloc_zeroed_dev_spec_struct(hw, hw->dev_spec_size);
236	if (ret_val)
237		goto out;
238
239	dev_spec = (struct e1000_dev_spec_82575 *)hw->dev_spec;
240
241	/* Set media type */
242        /*
243	 * The 82575 uses bits 22:23 for link mode. The mode can be changed
244         * based on the EEPROM. We cannot rely upon device ID. There
245         * is no distinguishable difference between fiber and internal
246         * SerDes mode on the 82575. There can be an external PHY attached
247         * on the SGMII interface. For this, we'll set sgmii_active to TRUE.
248         */
249	hw->phy.media_type = e1000_media_type_copper;
250	dev_spec->sgmii_active = FALSE;
251
252	ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
253	if ((ctrl_ext & E1000_CTRL_EXT_LINK_MODE_MASK) ==
254	    E1000_CTRL_EXT_LINK_MODE_PCIE_SERDES) {
255		hw->phy.media_type = e1000_media_type_internal_serdes;
256		ctrl_ext |= E1000_CTRL_I2C_ENA;
257	} else if (ctrl_ext & E1000_CTRL_EXT_LINK_MODE_SGMII) {
258		dev_spec->sgmii_active = TRUE;
259		ctrl_ext |= E1000_CTRL_I2C_ENA;
260	} else {
261		ctrl_ext &= ~E1000_CTRL_I2C_ENA;
262	}
263	E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext);
264
265	/* Set mta register count */
266	mac->mta_reg_count = 128;
267	/* Set rar entry count */
268	mac->rar_entry_count = E1000_RAR_ENTRIES_82575;
269	if (mac->type == e1000_82576)
270		mac->rar_entry_count = E1000_RAR_ENTRIES_82576;
271	/* Set if part includes ASF firmware */
272	mac->asf_firmware_present = TRUE;
273	/* Set if manageability features are enabled. */
274	mac->arc_subsystem_valid =
275	        (E1000_READ_REG(hw, E1000_FWSM) & E1000_FWSM_MODE_MASK)
276	                ? TRUE : FALSE;
277
278	/* Function pointers */
279
280	/* bus type/speed/width */
281	mac->ops.get_bus_info = e1000_get_bus_info_pcie_generic;
282	/* reset */
283	mac->ops.reset_hw = e1000_reset_hw_82575;
284	/* hw initialization */
285	mac->ops.init_hw = e1000_init_hw_82575;
286	/* link setup */
287	mac->ops.setup_link = e1000_setup_link_generic;
288	/* physical interface link setup */
289	mac->ops.setup_physical_interface =
290	        (hw->phy.media_type == e1000_media_type_copper)
291	                ? e1000_setup_copper_link_82575
292	                : e1000_setup_fiber_serdes_link_82575;
293	/* physical interface shutdown */
294	mac->ops.shutdown_serdes = e1000_shutdown_fiber_serdes_link_82575;
295	/* check for link */
296	mac->ops.check_for_link = e1000_check_for_link_82575;
297	/* receive address register setting */
298	mac->ops.rar_set = e1000_rar_set_generic;
299	/* read mac address */
300	mac->ops.read_mac_addr = e1000_read_mac_addr_82575;
301	/* multicast address update */
302	mac->ops.update_mc_addr_list = e1000_update_mc_addr_list_82575;
303	/* writing VFTA */
304	mac->ops.write_vfta = e1000_write_vfta_generic;
305	/* clearing VFTA */
306	mac->ops.clear_vfta = e1000_clear_vfta_generic;
307	/* setting MTA */
308	mac->ops.mta_set = e1000_mta_set_generic;
309	/* blink LED */
310	mac->ops.blink_led = e1000_blink_led_generic;
311	/* setup LED */
312	mac->ops.setup_led = e1000_setup_led_generic;
313	/* cleanup LED */
314	mac->ops.cleanup_led = e1000_cleanup_led_generic;
315	/* turn on/off LED */
316	mac->ops.led_on = e1000_led_on_generic;
317	mac->ops.led_off = e1000_led_off_generic;
318	/* remove device */
319	mac->ops.remove_device = e1000_remove_device_82575;
320	/* clear hardware counters */
321	mac->ops.clear_hw_cntrs = e1000_clear_hw_cntrs_82575;
322	/* link info */
323	mac->ops.get_link_up_info = e1000_get_link_up_info_82575;
324
325out:
326	return ret_val;
327}
328
329/**
330 *  e1000_init_function_pointers_82575 - Init func ptrs.
331 *  @hw: pointer to the HW structure
332 *
333 *  The only function explicitly called by the api module to initialize
334 *  all function pointers and parameters.
335 **/
336void e1000_init_function_pointers_82575(struct e1000_hw *hw)
337{
338	DEBUGFUNC("e1000_init_function_pointers_82575");
339
340	hw->mac.ops.init_params = e1000_init_mac_params_82575;
341	hw->nvm.ops.init_params = e1000_init_nvm_params_82575;
342	hw->phy.ops.init_params = e1000_init_phy_params_82575;
343}
344
345/**
346 *  e1000_acquire_phy_82575 - Acquire rights to access PHY
347 *  @hw: pointer to the HW structure
348 *
349 *  Acquire access rights to the correct PHY.  This is a
350 *  function pointer entry point called by the api module.
351 **/
352static s32 e1000_acquire_phy_82575(struct e1000_hw *hw)
353{
354	u16 mask;
355
356	DEBUGFUNC("e1000_acquire_phy_82575");
357
358	mask = hw->bus.func ? E1000_SWFW_PHY1_SM : E1000_SWFW_PHY0_SM;
359
360	return e1000_acquire_swfw_sync_82575(hw, mask);
361}
362
363/**
364 *  e1000_release_phy_82575 - Release rights to access PHY
365 *  @hw: pointer to the HW structure
366 *
367 *  A wrapper to release access rights to the correct PHY.  This is a
368 *  function pointer entry point called by the api module.
369 **/
370static void e1000_release_phy_82575(struct e1000_hw *hw)
371{
372	u16 mask;
373
374	DEBUGFUNC("e1000_release_phy_82575");
375
376	mask = hw->bus.func ? E1000_SWFW_PHY1_SM : E1000_SWFW_PHY0_SM;
377	e1000_release_swfw_sync_82575(hw, mask);
378}
379
380/**
381 *  e1000_read_phy_reg_sgmii_82575 - Read PHY register using sgmii
382 *  @hw: pointer to the HW structure
383 *  @offset: register offset to be read
384 *  @data: pointer to the read data
385 *
386 *  Reads the PHY register at offset using the serial gigabit media independent
387 *  interface and stores the retrieved information in data.
388 **/
389static s32 e1000_read_phy_reg_sgmii_82575(struct e1000_hw *hw, u32 offset,
390                                          u16 *data)
391{
392	struct e1000_phy_info *phy = &hw->phy;
393	u32 i, i2ccmd = 0;
394
395	DEBUGFUNC("e1000_read_phy_reg_sgmii_82575");
396
397	if (offset > E1000_MAX_SGMII_PHY_REG_ADDR) {
398		DEBUGOUT1("PHY Address %u is out of range\n", offset);
399		return -E1000_ERR_PARAM;
400	}
401
402	/*
403	 * Set up Op-code, Phy Address, and register address in the I2CCMD
404	 * register.  The MAC will take care of interfacing with the
405	 * PHY to retrieve the desired data.
406	 */
407	i2ccmd = ((offset << E1000_I2CCMD_REG_ADDR_SHIFT) |
408	          (phy->addr << E1000_I2CCMD_PHY_ADDR_SHIFT) |
409	          (E1000_I2CCMD_OPCODE_READ));
410
411	E1000_WRITE_REG(hw, E1000_I2CCMD, i2ccmd);
412
413	/* Poll the ready bit to see if the I2C read completed */
414	for (i = 0; i < E1000_I2CCMD_PHY_TIMEOUT; i++) {
415		usec_delay(50);
416		i2ccmd = E1000_READ_REG(hw, E1000_I2CCMD);
417		if (i2ccmd & E1000_I2CCMD_READY)
418			break;
419	}
420	if (!(i2ccmd & E1000_I2CCMD_READY)) {
421		DEBUGOUT("I2CCMD Read did not complete\n");
422		return -E1000_ERR_PHY;
423	}
424	if (i2ccmd & E1000_I2CCMD_ERROR) {
425		DEBUGOUT("I2CCMD Error bit set\n");
426		return -E1000_ERR_PHY;
427	}
428
429	/* Need to byte-swap the 16-bit value. */
430	*data = ((i2ccmd >> 8) & 0x00FF) | ((i2ccmd << 8) & 0xFF00);
431
432	return E1000_SUCCESS;
433}
434
435/**
436 *  e1000_write_phy_reg_sgmii_82575 - Write PHY register using sgmii
437 *  @hw: pointer to the HW structure
438 *  @offset: register offset to write to
439 *  @data: data to write at register offset
440 *
441 *  Writes the data to PHY register at the offset using the serial gigabit
442 *  media independent interface.
443 **/
444static s32 e1000_write_phy_reg_sgmii_82575(struct e1000_hw *hw, u32 offset,
445                                           u16 data)
446{
447	struct e1000_phy_info *phy = &hw->phy;
448	u32 i, i2ccmd = 0;
449	u16 phy_data_swapped;
450
451	DEBUGFUNC("e1000_write_phy_reg_sgmii_82575");
452
453	if (offset > E1000_MAX_SGMII_PHY_REG_ADDR) {
454		DEBUGOUT1("PHY Address %d is out of range\n", offset);
455		return -E1000_ERR_PARAM;
456	}
457
458	/* Swap the data bytes for the I2C interface */
459	phy_data_swapped = ((data >> 8) & 0x00FF) | ((data << 8) & 0xFF00);
460
461	/*
462	 * Set up Op-code, Phy Address, and register address in the I2CCMD
463	 * register.  The MAC will take care of interfacing with the
464	 * PHY to retrieve the desired data.
465	 */
466	i2ccmd = ((offset << E1000_I2CCMD_REG_ADDR_SHIFT) |
467	          (phy->addr << E1000_I2CCMD_PHY_ADDR_SHIFT) |
468	          E1000_I2CCMD_OPCODE_WRITE |
469	          phy_data_swapped);
470
471	E1000_WRITE_REG(hw, E1000_I2CCMD, i2ccmd);
472
473	/* Poll the ready bit to see if the I2C read completed */
474	for (i = 0; i < E1000_I2CCMD_PHY_TIMEOUT; i++) {
475		usec_delay(50);
476		i2ccmd = E1000_READ_REG(hw, E1000_I2CCMD);
477		if (i2ccmd & E1000_I2CCMD_READY)
478			break;
479	}
480	if (!(i2ccmd & E1000_I2CCMD_READY)) {
481		DEBUGOUT("I2CCMD Write did not complete\n");
482		return -E1000_ERR_PHY;
483	}
484	if (i2ccmd & E1000_I2CCMD_ERROR) {
485		DEBUGOUT("I2CCMD Error bit set\n");
486		return -E1000_ERR_PHY;
487	}
488
489	return E1000_SUCCESS;
490}
491
492/**
493 *  e1000_get_phy_id_82575 - Retrieve PHY addr and id
494 *  @hw: pointer to the HW structure
495 *
496 *  Retrieves the PHY address and ID for both PHY's which do and do not use
497 *  sgmi interface.
498 **/
499static s32 e1000_get_phy_id_82575(struct e1000_hw *hw)
500{
501	struct e1000_phy_info *phy = &hw->phy;
502	s32  ret_val = E1000_SUCCESS;
503	u16 phy_id;
504
505	DEBUGFUNC("e1000_get_phy_id_82575");
506
507	/*
508	 * For SGMII PHYs, we try the list of possible addresses until
509	 * we find one that works.  For non-SGMII PHYs
510	 * (e.g. integrated copper PHYs), an address of 1 should
511	 * work.  The result of this function should mean phy->phy_addr
512	 * and phy->id are set correctly.
513	 */
514	if (!(e1000_sgmii_active_82575(hw))) {
515		phy->addr = 1;
516		ret_val = e1000_get_phy_id(hw);
517		goto out;
518	}
519
520	/*
521	 * The address field in the I2CCMD register is 3 bits and 0 is invalid.
522	 * Therefore, we need to test 1-7
523	 */
524	for (phy->addr = 1; phy->addr < 8; phy->addr++) {
525		ret_val = e1000_read_phy_reg_sgmii_82575(hw, PHY_ID1, &phy_id);
526		if (ret_val == E1000_SUCCESS) {
527			DEBUGOUT2("Vendor ID 0x%08X read at address %u\n",
528			          phy_id,
529			          phy->addr);
530			/*
531			 * At the time of this writing, The M88 part is
532			 * the only supported SGMII PHY product.
533			 */
534			if (phy_id == M88_VENDOR)
535				break;
536		} else {
537			DEBUGOUT1("PHY address %u was unreadable\n",
538			          phy->addr);
539		}
540	}
541
542	/* A valid PHY type couldn't be found. */
543	if (phy->addr == 8) {
544		phy->addr = 0;
545		ret_val = -E1000_ERR_PHY;
546		goto out;
547	}
548
549	ret_val = e1000_get_phy_id(hw);
550
551out:
552	return ret_val;
553}
554
555/**
556 *  e1000_phy_hw_reset_sgmii_82575 - Performs a PHY reset
557 *  @hw: pointer to the HW structure
558 *
559 *  Resets the PHY using the serial gigabit media independent interface.
560 **/
561static s32 e1000_phy_hw_reset_sgmii_82575(struct e1000_hw *hw)
562{
563	s32 ret_val = E1000_SUCCESS;
564
565	DEBUGFUNC("e1000_phy_hw_reset_sgmii_82575");
566
567	/*
568	 * This isn't a TRUE "hard" reset, but is the only reset
569	 * available to us at this time.
570	 */
571
572	DEBUGOUT("Soft resetting SGMII attached PHY...\n");
573
574	if (!(hw->phy.ops.write_reg))
575		goto out;
576
577	/*
578	 * SFP documentation requires the following to configure the SPF module
579	 * to work on SGMII.  No further documentation is given.
580	 */
581	ret_val = hw->phy.ops.write_reg(hw, 0x1B, 0x8084);
582	if (ret_val)
583		goto out;
584
585	ret_val = hw->phy.ops.commit(hw);
586
587out:
588	return ret_val;
589}
590
591/**
592 *  e1000_set_d0_lplu_state_82575 - Set Low Power Linkup D0 state
593 *  @hw: pointer to the HW structure
594 *  @active: TRUE to enable LPLU, FALSE to disable
595 *
596 *  Sets the LPLU D0 state according to the active flag.  When
597 *  activating LPLU this function also disables smart speed
598 *  and vice versa.  LPLU will not be activated unless the
599 *  device autonegotiation advertisement meets standards of
600 *  either 10 or 10/100 or 10/100/1000 at all duplexes.
601 *  This is a function pointer entry point only called by
602 *  PHY setup routines.
603 **/
604static s32 e1000_set_d0_lplu_state_82575(struct e1000_hw *hw, bool active)
605{
606	struct e1000_phy_info *phy = &hw->phy;
607	s32 ret_val = E1000_SUCCESS;
608	u16 data;
609
610	DEBUGFUNC("e1000_set_d0_lplu_state_82575");
611
612	if (!(hw->phy.ops.read_reg))
613		goto out;
614
615	ret_val = phy->ops.read_reg(hw, IGP02E1000_PHY_POWER_MGMT, &data);
616	if (ret_val)
617		goto out;
618
619	if (active) {
620		data |= IGP02E1000_PM_D0_LPLU;
621		ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT,
622		                             data);
623		if (ret_val)
624			goto out;
625
626		/* When LPLU is enabled, we should disable SmartSpeed */
627		ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
628		                            &data);
629		data &= ~IGP01E1000_PSCFR_SMART_SPEED;
630		ret_val = phy->ops.write_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
631		                             data);
632		if (ret_val)
633			goto out;
634	} else {
635		data &= ~IGP02E1000_PM_D0_LPLU;
636		ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT,
637		                             data);
638		/*
639		 * LPLU and SmartSpeed are mutually exclusive.  LPLU is used
640		 * during Dx states where the power conservation is most
641		 * important.  During driver activity we should enable
642		 * SmartSpeed, so performance is maintained.
643		 */
644		if (phy->smart_speed == e1000_smart_speed_on) {
645			ret_val = phy->ops.read_reg(hw,
646			                            IGP01E1000_PHY_PORT_CONFIG,
647			                            &data);
648			if (ret_val)
649				goto out;
650
651			data |= IGP01E1000_PSCFR_SMART_SPEED;
652			ret_val = phy->ops.write_reg(hw,
653			                             IGP01E1000_PHY_PORT_CONFIG,
654			                             data);
655			if (ret_val)
656				goto out;
657		} else if (phy->smart_speed == e1000_smart_speed_off) {
658			ret_val = phy->ops.read_reg(hw,
659			                            IGP01E1000_PHY_PORT_CONFIG,
660			                            &data);
661			if (ret_val)
662				goto out;
663
664			data &= ~IGP01E1000_PSCFR_SMART_SPEED;
665			ret_val = phy->ops.write_reg(hw,
666			                             IGP01E1000_PHY_PORT_CONFIG,
667			                             data);
668			if (ret_val)
669				goto out;
670		}
671	}
672
673out:
674	return ret_val;
675}
676
677/**
678 *  e1000_acquire_nvm_82575 - Request for access to EEPROM
679 *  @hw: pointer to the HW structure
680 *
681 *  Acquire the necessary semaphores for exclusive access to the EEPROM.
682 *  Set the EEPROM access request bit and wait for EEPROM access grant bit.
683 *  Return successful if access grant bit set, else clear the request for
684 *  EEPROM access and return -E1000_ERR_NVM (-1).
685 **/
686static s32 e1000_acquire_nvm_82575(struct e1000_hw *hw)
687{
688	s32 ret_val;
689
690	DEBUGFUNC("e1000_acquire_nvm_82575");
691
692	ret_val = e1000_acquire_swfw_sync_82575(hw, E1000_SWFW_EEP_SM);
693	if (ret_val)
694		goto out;
695
696	ret_val = e1000_acquire_nvm_generic(hw);
697
698	if (ret_val)
699		e1000_release_swfw_sync_82575(hw, E1000_SWFW_EEP_SM);
700
701out:
702	return ret_val;
703}
704
705/**
706 *  e1000_release_nvm_82575 - Release exclusive access to EEPROM
707 *  @hw: pointer to the HW structure
708 *
709 *  Stop any current commands to the EEPROM and clear the EEPROM request bit,
710 *  then release the semaphores acquired.
711 **/
712static void e1000_release_nvm_82575(struct e1000_hw *hw)
713{
714	DEBUGFUNC("e1000_release_nvm_82575");
715
716	e1000_release_nvm_generic(hw);
717	e1000_release_swfw_sync_82575(hw, E1000_SWFW_EEP_SM);
718}
719
720/**
721 *  e1000_acquire_swfw_sync_82575 - Acquire SW/FW semaphore
722 *  @hw: pointer to the HW structure
723 *  @mask: specifies which semaphore to acquire
724 *
725 *  Acquire the SW/FW semaphore to access the PHY or NVM.  The mask
726 *  will also specify which port we're acquiring the lock for.
727 **/
728static s32 e1000_acquire_swfw_sync_82575(struct e1000_hw *hw, u16 mask)
729{
730	u32 swfw_sync;
731	u32 swmask = mask;
732	u32 fwmask = mask << 16;
733	s32 ret_val = E1000_SUCCESS;
734	s32 i = 0, timeout = 200; /* FIXME: find real value to use here */
735
736	DEBUGFUNC("e1000_acquire_swfw_sync_82575");
737
738	while (i < timeout) {
739		if (e1000_get_hw_semaphore_generic(hw)) {
740			ret_val = -E1000_ERR_SWFW_SYNC;
741			goto out;
742		}
743
744		swfw_sync = E1000_READ_REG(hw, E1000_SW_FW_SYNC);
745		if (!(swfw_sync & (fwmask | swmask)))
746			break;
747
748		/*
749		 * Firmware currently using resource (fwmask)
750		 * or other software thread using resource (swmask)
751		 */
752		e1000_put_hw_semaphore_generic(hw);
753		msec_delay_irq(5);
754		i++;
755	}
756
757	if (i == timeout) {
758		DEBUGOUT("Driver can't access resource, SW_FW_SYNC timeout.\n");
759		ret_val = -E1000_ERR_SWFW_SYNC;
760		goto out;
761	}
762
763	swfw_sync |= swmask;
764	E1000_WRITE_REG(hw, E1000_SW_FW_SYNC, swfw_sync);
765
766	e1000_put_hw_semaphore_generic(hw);
767
768out:
769	return ret_val;
770}
771
772/**
773 *  e1000_release_swfw_sync_82575 - Release SW/FW semaphore
774 *  @hw: pointer to the HW structure
775 *  @mask: specifies which semaphore to acquire
776 *
777 *  Release the SW/FW semaphore used to access the PHY or NVM.  The mask
778 *  will also specify which port we're releasing the lock for.
779 **/
780static void e1000_release_swfw_sync_82575(struct e1000_hw *hw, u16 mask)
781{
782	u32 swfw_sync;
783
784	DEBUGFUNC("e1000_release_swfw_sync_82575");
785
786	while (e1000_get_hw_semaphore_generic(hw) != E1000_SUCCESS);
787	/* Empty */
788
789	swfw_sync = E1000_READ_REG(hw, E1000_SW_FW_SYNC);
790	swfw_sync &= ~mask;
791	E1000_WRITE_REG(hw, E1000_SW_FW_SYNC, swfw_sync);
792
793	e1000_put_hw_semaphore_generic(hw);
794}
795
796/**
797 *  e1000_get_cfg_done_82575 - Read config done bit
798 *  @hw: pointer to the HW structure
799 *
800 *  Read the management control register for the config done bit for
801 *  completion status.  NOTE: silicon which is EEPROM-less will fail trying
802 *  to read the config done bit, so an error is *ONLY* logged and returns
803 *  E1000_SUCCESS.  If we were to return with error, EEPROM-less silicon
804 *  would not be able to be reset or change link.
805 **/
806static s32 e1000_get_cfg_done_82575(struct e1000_hw *hw)
807{
808	s32 timeout = PHY_CFG_TIMEOUT;
809	s32 ret_val = E1000_SUCCESS;
810	u32 mask = E1000_NVM_CFG_DONE_PORT_0;
811
812	DEBUGFUNC("e1000_get_cfg_done_82575");
813
814	if (hw->bus.func == 1)
815		mask = E1000_NVM_CFG_DONE_PORT_1;
816
817	while (timeout) {
818		if (E1000_READ_REG(hw, E1000_EEMNGCTL) & mask)
819			break;
820		msec_delay(1);
821		timeout--;
822	}
823	if (!timeout) {
824		DEBUGOUT("MNG configuration cycle has not completed.\n");
825	}
826
827	/* If EEPROM is not marked present, init the PHY manually */
828	if (((E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_PRES) == 0) &&
829	    (hw->phy.type == e1000_phy_igp_3)) {
830		e1000_phy_init_script_igp3(hw);
831	}
832
833	return ret_val;
834}
835
836/**
837 *  e1000_get_link_up_info_82575 - Get link speed/duplex info
838 *  @hw: pointer to the HW structure
839 *  @speed: stores the current speed
840 *  @duplex: stores the current duplex
841 *
842 *  This is a wrapper function, if using the serial gigabit media independent
843 *  interface, use PCS to retrieve the link speed and duplex information.
844 *  Otherwise, use the generic function to get the link speed and duplex info.
845 **/
846static s32 e1000_get_link_up_info_82575(struct e1000_hw *hw, u16 *speed,
847                                        u16 *duplex)
848{
849	s32 ret_val;
850
851	DEBUGFUNC("e1000_get_link_up_info_82575");
852
853	if (hw->phy.media_type != e1000_media_type_copper ||
854	    e1000_sgmii_active_82575(hw)) {
855		ret_val = e1000_get_pcs_speed_and_duplex_82575(hw, speed,
856		                                               duplex);
857	} else {
858		ret_val = e1000_get_speed_and_duplex_copper_generic(hw, speed,
859		                                                    duplex);
860	}
861
862	return ret_val;
863}
864
865/**
866 *  e1000_check_for_link_82575 - Check for link
867 *  @hw: pointer to the HW structure
868 *
869 *  If sgmii is enabled, then use the pcs register to determine link, otherwise
870 *  use the generic interface for determining link.
871 **/
872static s32 e1000_check_for_link_82575(struct e1000_hw *hw)
873{
874	s32 ret_val;
875	u16 speed, duplex;
876
877	DEBUGFUNC("e1000_check_for_link_82575");
878
879	/* SGMII link check is done through the PCS register. */
880	if ((hw->phy.media_type != e1000_media_type_copper) ||
881	    (e1000_sgmii_active_82575(hw)))
882		ret_val = e1000_get_pcs_speed_and_duplex_82575(hw, &speed,
883		                                               &duplex);
884	else
885		ret_val = e1000_check_for_copper_link_generic(hw);
886
887	return ret_val;
888}
889
890/**
891 *  e1000_get_pcs_speed_and_duplex_82575 - Retrieve current speed/duplex
892 *  @hw: pointer to the HW structure
893 *  @speed: stores the current speed
894 *  @duplex: stores the current duplex
895 *
896 *  Using the physical coding sub-layer (PCS), retrieve the current speed and
897 *  duplex, then store the values in the pointers provided.
898 **/
899static s32 e1000_get_pcs_speed_and_duplex_82575(struct e1000_hw *hw,
900                                                u16 *speed, u16 *duplex)
901{
902	struct e1000_mac_info *mac = &hw->mac;
903	u32 pcs;
904
905	DEBUGFUNC("e1000_get_pcs_speed_and_duplex_82575");
906
907	/* Set up defaults for the return values of this function */
908	mac->serdes_has_link = FALSE;
909	*speed = 0;
910	*duplex = 0;
911
912	/*
913	 * Read the PCS Status register for link state. For non-copper mode,
914	 * the status register is not accurate. The PCS status register is
915	 * used instead.
916	 */
917	pcs = E1000_READ_REG(hw, E1000_PCS_LSTAT);
918
919	/*
920	 * The link up bit determines when link is up on autoneg. The sync ok
921	 * gets set once both sides sync up and agree upon link. Stable link
922	 * can be determined by checking for both link up and link sync ok
923	 */
924	if ((pcs & E1000_PCS_LSTS_LINK_OK) && (pcs & E1000_PCS_LSTS_SYNK_OK)) {
925		mac->serdes_has_link = TRUE;
926
927		/* Detect and store PCS speed */
928		if (pcs & E1000_PCS_LSTS_SPEED_1000) {
929			*speed = SPEED_1000;
930		} else if (pcs & E1000_PCS_LSTS_SPEED_100) {
931			*speed = SPEED_100;
932		} else {
933			*speed = SPEED_10;
934		}
935
936		/* Detect and store PCS duplex */
937		if (pcs & E1000_PCS_LSTS_DUPLEX_FULL) {
938			*duplex = FULL_DUPLEX;
939		} else {
940			*duplex = HALF_DUPLEX;
941		}
942	}
943
944	return E1000_SUCCESS;
945}
946
947/**
948 *  e1000_init_rx_addrs_82575 - Initialize receive address's
949 *  @hw: pointer to the HW structure
950 *  @rar_count: receive address registers
951 *
952 *  Setups the receive address registers by setting the base receive address
953 *  register to the devices MAC address and clearing all the other receive
954 *  address registers to 0.
955 **/
956static void e1000_init_rx_addrs_82575(struct e1000_hw *hw, u16 rar_count)
957{
958	u32 i;
959	u8 addr[6] = {0,0,0,0,0,0};
960	/*
961	 * This function is essentially the same as that of
962	 * e1000_init_rx_addrs_generic. However it also takes care
963	 * of the special case where the register offset of the
964	 * second set of RARs begins elsewhere. This is implicitly taken care by
965	 * function e1000_rar_set_generic.
966	 */
967
968	DEBUGFUNC("e1000_init_rx_addrs_82575");
969
970	/* Setup the receive address */
971	DEBUGOUT("Programming MAC Address into RAR[0]\n");
972	hw->mac.ops.rar_set(hw, hw->mac.addr, 0);
973
974	/* Zero out the other (rar_entry_count - 1) receive addresses */
975	DEBUGOUT1("Clearing RAR[1-%u]\n", rar_count-1);
976	for (i = 1; i < rar_count; i++) {
977	    hw->mac.ops.rar_set(hw, addr, i);
978	}
979}
980
981/**
982 *  e1000_update_mc_addr_list_82575 - Update Multicast addresses
983 *  @hw: pointer to the HW structure
984 *  @mc_addr_list: array of multicast addresses to program
985 *  @mc_addr_count: number of multicast addresses to program
986 *  @rar_used_count: the first RAR register free to program
987 *  @rar_count: total number of supported Receive Address Registers
988 *
989 *  Updates the Receive Address Registers and Multicast Table Array.
990 *  The caller must have a packed mc_addr_list of multicast addresses.
991 *  The parameter rar_count will usually be hw->mac.rar_entry_count
992 *  unless there are workarounds that change this.
993 **/
994static void e1000_update_mc_addr_list_82575(struct e1000_hw *hw,
995                                     u8 *mc_addr_list, u32 mc_addr_count,
996                                     u32 rar_used_count, u32 rar_count)
997{
998	u32 hash_value;
999	u32 i;
1000	u8 addr[6] = {0,0,0,0,0,0};
1001	/*
1002	 * This function is essentially the same as that of
1003	 * e1000_update_mc_addr_list_generic. However it also takes care
1004	 * of the special case where the register offset of the
1005	 * second set of RARs begins elsewhere. This is implicitly taken care by
1006	 * function e1000_rar_set_generic.
1007	 */
1008
1009	DEBUGFUNC("e1000_update_mc_addr_list_82575");
1010
1011	/*
1012	 * Load the first set of multicast addresses into the exact
1013	 * filters (RAR).  If there are not enough to fill the RAR
1014	 * array, clear the filters.
1015	 */
1016	for (i = rar_used_count; i < rar_count; i++) {
1017		if (mc_addr_count) {
1018			e1000_rar_set_generic(hw, mc_addr_list, i);
1019			mc_addr_count--;
1020			mc_addr_list += ETH_ADDR_LEN;
1021		} else {
1022			e1000_rar_set_generic(hw, addr, i);
1023		}
1024	}
1025
1026	/* Clear the old settings from the MTA */
1027	DEBUGOUT("Clearing MTA\n");
1028	for (i = 0; i < hw->mac.mta_reg_count; i++) {
1029		E1000_WRITE_REG_ARRAY(hw, E1000_MTA, i, 0);
1030		E1000_WRITE_FLUSH(hw);
1031	}
1032
1033	/* Load any remaining multicast addresses into the hash table. */
1034	for (; mc_addr_count > 0; mc_addr_count--) {
1035		hash_value = e1000_hash_mc_addr_generic(hw, mc_addr_list);
1036		DEBUGOUT1("Hash value = 0x%03X\n", hash_value);
1037		hw->mac.ops.mta_set(hw, hash_value);
1038		mc_addr_list += ETH_ADDR_LEN;
1039	}
1040}
1041
1042/**
1043 *  e1000_shutdown_fiber_serdes_link_82575 - Remove link during power down
1044 *  @hw: pointer to the HW structure
1045 *
1046 *  In the case of fiber serdes shut down optics and PCS on driver unload
1047 *  when management pass thru is not enabled.
1048 **/
1049void e1000_shutdown_fiber_serdes_link_82575(struct e1000_hw *hw)
1050{
1051	u32 reg;
1052
1053	if (hw->mac.type != e1000_82576 ||
1054	   (hw->phy.media_type != e1000_media_type_fiber &&
1055	    hw->phy.media_type != e1000_media_type_internal_serdes))
1056		return;
1057
1058	/* if the management interface is not enabled, then power down */
1059	if (!e1000_enable_mng_pass_thru(hw)) {
1060		/* Disable PCS to turn off link */
1061		reg = E1000_READ_REG(hw, E1000_PCS_CFG0);
1062		reg &= ~E1000_PCS_CFG_PCS_EN;
1063		E1000_WRITE_REG(hw, E1000_PCS_CFG0, reg);
1064
1065		/* shutdown the laser */
1066		reg = E1000_READ_REG(hw, E1000_CTRL_EXT);
1067		reg |= E1000_CTRL_EXT_SDP7_DATA;
1068		E1000_WRITE_REG(hw, E1000_CTRL_EXT, reg);
1069
1070		/* flush the write to verfiy completion */
1071		E1000_WRITE_FLUSH(hw);
1072		msec_delay(1);
1073	}
1074
1075	return;
1076}
1077
1078/**
1079 *  e1000_reset_hw_82575 - Reset hardware
1080 *  @hw: pointer to the HW structure
1081 *
1082 *  This resets the hardware into a known state.  This is a
1083 *  function pointer entry point called by the api module.
1084 **/
1085static s32 e1000_reset_hw_82575(struct e1000_hw *hw)
1086{
1087	u32 ctrl, icr;
1088	s32 ret_val;
1089
1090	DEBUGFUNC("e1000_reset_hw_82575");
1091
1092	/*
1093	 * Prevent the PCI-E bus from sticking if there is no TLP connection
1094	 * on the last TLP read/write transaction when MAC is reset.
1095	 */
1096	ret_val = e1000_disable_pcie_master_generic(hw);
1097	if (ret_val) {
1098		DEBUGOUT("PCI-E Master disable polling has failed.\n");
1099	}
1100
1101	DEBUGOUT("Masking off all interrupts\n");
1102	E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
1103
1104	E1000_WRITE_REG(hw, E1000_RCTL, 0);
1105	E1000_WRITE_REG(hw, E1000_TCTL, E1000_TCTL_PSP);
1106	E1000_WRITE_FLUSH(hw);
1107
1108	msec_delay(10);
1109
1110	ctrl = E1000_READ_REG(hw, E1000_CTRL);
1111
1112	DEBUGOUT("Issuing a global reset to MAC\n");
1113	E1000_WRITE_REG(hw, E1000_CTRL, ctrl | E1000_CTRL_RST);
1114
1115	ret_val = e1000_get_auto_rd_done_generic(hw);
1116	if (ret_val) {
1117		/*
1118		 * When auto config read does not complete, do not
1119		 * return with an error. This can happen in situations
1120		 * where there is no eeprom and prevents getting link.
1121		 */
1122		DEBUGOUT("Auto Read Done did not complete\n");
1123	}
1124
1125	/* If EEPROM is not present, run manual init scripts */
1126	if ((E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_PRES) == 0)
1127		e1000_reset_init_script_82575(hw);
1128
1129	/* Clear any pending interrupt events. */
1130	E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
1131	icr = E1000_READ_REG(hw, E1000_ICR);
1132
1133	e1000_check_alt_mac_addr_generic(hw);
1134
1135	return ret_val;
1136}
1137
1138/**
1139 *  e1000_init_hw_82575 - Initialize hardware
1140 *  @hw: pointer to the HW structure
1141 *
1142 *  This inits the hardware readying it for operation.
1143 **/
1144static s32 e1000_init_hw_82575(struct e1000_hw *hw)
1145{
1146	struct e1000_mac_info *mac = &hw->mac;
1147	s32 ret_val;
1148	u16 i, rar_count = mac->rar_entry_count;
1149
1150	DEBUGFUNC("e1000_init_hw_82575");
1151
1152	/* Initialize identification LED */
1153	ret_val = e1000_id_led_init_generic(hw);
1154	if (ret_val) {
1155		DEBUGOUT("Error initializing identification LED\n");
1156		/* This is not fatal and we should not stop init due to this */
1157	}
1158
1159	/* Disabling VLAN filtering */
1160	DEBUGOUT("Initializing the IEEE VLAN\n");
1161	mac->ops.clear_vfta(hw);
1162
1163	/* Setup the receive address */
1164	e1000_init_rx_addrs_82575(hw, rar_count);
1165	/* Zero out the Multicast HASH table */
1166	DEBUGOUT("Zeroing the MTA\n");
1167	for (i = 0; i < mac->mta_reg_count; i++)
1168		E1000_WRITE_REG_ARRAY(hw, E1000_MTA, i, 0);
1169
1170	/* Setup link and flow control */
1171	ret_val = mac->ops.setup_link(hw);
1172
1173	/*
1174	 * Clear all of the statistics registers (clear on read).  It is
1175	 * important that we do this after we have tried to establish link
1176	 * because the symbol error count will increment wildly if there
1177	 * is no link.
1178	 */
1179	e1000_clear_hw_cntrs_82575(hw);
1180
1181	return ret_val;
1182}
1183
1184/**
1185 *  e1000_setup_copper_link_82575 - Configure copper link settings
1186 *  @hw: pointer to the HW structure
1187 *
1188 *  Configures the link for auto-neg or forced speed and duplex.  Then we check
1189 *  for link, once link is established calls to configure collision distance
1190 *  and flow control are called.
1191 **/
1192static s32 e1000_setup_copper_link_82575(struct e1000_hw *hw)
1193{
1194	u32 ctrl, led_ctrl;
1195	s32  ret_val;
1196	bool link;
1197
1198	DEBUGFUNC("e1000_setup_copper_link_82575");
1199
1200	ctrl = E1000_READ_REG(hw, E1000_CTRL);
1201	ctrl |= E1000_CTRL_SLU;
1202	ctrl &= ~(E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
1203	E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
1204
1205	switch (hw->phy.type) {
1206	case e1000_phy_m88:
1207		ret_val = e1000_copper_link_setup_m88(hw);
1208		break;
1209	case e1000_phy_igp_3:
1210		ret_val = e1000_copper_link_setup_igp(hw);
1211		/* Setup activity LED */
1212		led_ctrl = E1000_READ_REG(hw, E1000_LEDCTL);
1213		led_ctrl &= IGP_ACTIVITY_LED_MASK;
1214		led_ctrl |= (IGP_ACTIVITY_LED_ENABLE | IGP_LED3_MODE);
1215		E1000_WRITE_REG(hw, E1000_LEDCTL, led_ctrl);
1216		break;
1217	default:
1218		ret_val = -E1000_ERR_PHY;
1219		break;
1220	}
1221
1222	if (ret_val)
1223		goto out;
1224
1225	if (hw->mac.autoneg) {
1226		/*
1227		 * Setup autoneg and flow control advertisement
1228		 * and perform autonegotiation.
1229		 */
1230		ret_val = e1000_copper_link_autoneg(hw);
1231		if (ret_val)
1232			goto out;
1233	} else {
1234		/*
1235		 * PHY will be set to 10H, 10F, 100H or 100F
1236		 * depending on user settings.
1237		 */
1238		DEBUGOUT("Forcing Speed and Duplex\n");
1239		ret_val = hw->phy.ops.force_speed_duplex(hw);
1240		if (ret_val) {
1241			DEBUGOUT("Error Forcing Speed and Duplex\n");
1242			goto out;
1243		}
1244	}
1245
1246	ret_val = e1000_configure_pcs_link_82575(hw);
1247	if (ret_val)
1248		goto out;
1249
1250	/*
1251	 * Check link status. Wait up to 100 microseconds for link to become
1252	 * valid.
1253	 */
1254	ret_val = e1000_phy_has_link_generic(hw,
1255	                                     COPPER_LINK_UP_LIMIT,
1256	                                     10,
1257	                                     &link);
1258	if (ret_val)
1259		goto out;
1260
1261	if (link) {
1262		DEBUGOUT("Valid link established!!!\n");
1263		/* Config the MAC and PHY after link is up */
1264		e1000_config_collision_dist_generic(hw);
1265		ret_val = e1000_config_fc_after_link_up_generic(hw);
1266	} else {
1267		DEBUGOUT("Unable to establish link!!!\n");
1268	}
1269
1270out:
1271	return ret_val;
1272}
1273
1274/**
1275 *  e1000_setup_fiber_serdes_link_82575 - Setup link for fiber/serdes
1276 *  @hw: pointer to the HW structure
1277 *
1278 *  Configures speed and duplex for fiber and serdes links.
1279 **/
1280static s32 e1000_setup_fiber_serdes_link_82575(struct e1000_hw *hw)
1281{
1282	u32 reg;
1283
1284	DEBUGFUNC("e1000_setup_fiber_serdes_link_82575");
1285
1286	/*
1287	 * On the 82575, SerDes loopback mode persists until it is
1288	 * explicitly turned off or a power cycle is performed.  A read to
1289	 * the register does not indicate its status.  Therefore, we ensure
1290	 * loopback mode is disabled during initialization.
1291	 */
1292	E1000_WRITE_REG(hw, E1000_SCTL, E1000_SCTL_DISABLE_SERDES_LOOPBACK);
1293
1294	/* Force link up, set 1gb, set both sw defined pins */
1295	reg = E1000_READ_REG(hw, E1000_CTRL);
1296	reg |= E1000_CTRL_SLU |
1297	       E1000_CTRL_SPD_1000 |
1298	       E1000_CTRL_FRCSPD |
1299	       E1000_CTRL_SWDPIN0 |
1300	       E1000_CTRL_SWDPIN1;
1301	E1000_WRITE_REG(hw, E1000_CTRL, reg);
1302
1303	/* Power on phy for 82576 fiber adapters */
1304	if (hw->mac.type == e1000_82576) {
1305		reg = E1000_READ_REG(hw, E1000_CTRL_EXT);
1306		reg &= ~E1000_CTRL_EXT_SDP7_DATA;
1307		E1000_WRITE_REG(hw, E1000_CTRL_EXT, reg);
1308	}
1309
1310	/* Set switch control to serdes energy detect */
1311	reg = E1000_READ_REG(hw, E1000_CONNSW);
1312	reg |= E1000_CONNSW_ENRGSRC;
1313	E1000_WRITE_REG(hw, E1000_CONNSW, reg);
1314
1315	/*
1316	 * New SerDes mode allows for forcing speed or autonegotiating speed
1317	 * at 1gb. Autoneg should be default set by most drivers. This is the
1318	 * mode that will be compatible with older link partners and switches.
1319	 * However, both are supported by the hardware and some drivers/tools.
1320	 */
1321	reg = E1000_READ_REG(hw, E1000_PCS_LCTL);
1322
1323	reg &= ~(E1000_PCS_LCTL_AN_ENABLE | E1000_PCS_LCTL_FLV_LINK_UP |
1324		E1000_PCS_LCTL_FSD | E1000_PCS_LCTL_FORCE_LINK);
1325
1326	if (hw->mac.autoneg) {
1327		/* Set PCS register for autoneg */
1328		reg |= E1000_PCS_LCTL_FSV_1000 |      /* Force 1000    */
1329		       E1000_PCS_LCTL_FDV_FULL |      /* SerDes Full duplex */
1330		       E1000_PCS_LCTL_AN_ENABLE |     /* Enable Autoneg */
1331		       E1000_PCS_LCTL_AN_RESTART;     /* Restart autoneg */
1332		DEBUGOUT1("Configuring Autoneg; PCS_LCTL = 0x%08X\n", reg);
1333	} else {
1334		/* Set PCS register for forced speed */
1335		reg |= E1000_PCS_LCTL_FLV_LINK_UP |   /* Force link up */
1336		       E1000_PCS_LCTL_FSV_1000 |      /* Force 1000    */
1337		       E1000_PCS_LCTL_FDV_FULL |      /* SerDes Full duplex */
1338		       E1000_PCS_LCTL_FSD |           /* Force Speed */
1339		       E1000_PCS_LCTL_FORCE_LINK;     /* Force Link */
1340		DEBUGOUT1("Configuring Forced Link; PCS_LCTL = 0x%08X\n", reg);
1341	}
1342
1343	if (hw->mac.type == e1000_82576) {
1344		reg |= E1000_PCS_LCTL_FORCE_FCTRL;
1345		e1000_force_mac_fc_generic(hw);
1346	}
1347
1348	E1000_WRITE_REG(hw, E1000_PCS_LCTL, reg);
1349
1350	return E1000_SUCCESS;
1351}
1352
1353/**
1354 *  e1000_valid_led_default_82575 - Verify a valid default LED config
1355 *  @hw: pointer to the HW structure
1356 *  @data: pointer to the NVM (EEPROM)
1357 *
1358 *  Read the EEPROM for the current default LED configuration.  If the
1359 *  LED configuration is not valid, set to a valid LED configuration.
1360 **/
1361static s32 e1000_valid_led_default_82575(struct e1000_hw *hw, u16 *data)
1362{
1363	s32 ret_val;
1364
1365	DEBUGFUNC("e1000_valid_led_default_82575");
1366
1367	ret_val = hw->nvm.ops.read(hw, NVM_ID_LED_SETTINGS, 1, data);
1368	if (ret_val) {
1369		DEBUGOUT("NVM Read Error\n");
1370		goto out;
1371	}
1372
1373	if (*data == ID_LED_RESERVED_0000 || *data == ID_LED_RESERVED_FFFF) {
1374		switch(hw->phy.media_type) {
1375		case e1000_media_type_fiber:
1376		case e1000_media_type_internal_serdes:
1377			*data = ID_LED_DEFAULT_82575_SERDES;
1378			break;
1379		case e1000_media_type_copper:
1380		default:
1381			*data = ID_LED_DEFAULT;
1382			break;
1383		}
1384	}
1385out:
1386	return ret_val;
1387}
1388
1389/**
1390 *  e1000_configure_pcs_link_82575 - Configure PCS link
1391 *  @hw: pointer to the HW structure
1392 *
1393 *  Configure the physical coding sub-layer (PCS) link.  The PCS link is
1394 *  only used on copper connections where the serialized gigabit media
1395 *  independent interface (sgmii) is being used.  Configures the link
1396 *  for auto-negotiation or forces speed/duplex.
1397 **/
1398static s32 e1000_configure_pcs_link_82575(struct e1000_hw *hw)
1399{
1400	struct e1000_mac_info *mac = &hw->mac;
1401	u32 reg = 0;
1402
1403	DEBUGFUNC("e1000_configure_pcs_link_82575");
1404
1405	if (hw->phy.media_type != e1000_media_type_copper ||
1406	    !(e1000_sgmii_active_82575(hw)))
1407		goto out;
1408
1409	/* For SGMII, we need to issue a PCS autoneg restart */
1410	reg = E1000_READ_REG(hw, E1000_PCS_LCTL);
1411
1412	/* AN time out should be disabled for SGMII mode */
1413	reg &= ~(E1000_PCS_LCTL_AN_TIMEOUT);
1414
1415	if (mac->autoneg) {
1416		/* Make sure forced speed and force link are not set */
1417		reg &= ~(E1000_PCS_LCTL_FSD | E1000_PCS_LCTL_FORCE_LINK);
1418
1419		/*
1420		 * The PHY should be setup prior to calling this function.
1421		 * All we need to do is restart autoneg and enable autoneg.
1422		 */
1423		reg |= E1000_PCS_LCTL_AN_RESTART | E1000_PCS_LCTL_AN_ENABLE;
1424	} else {
1425		/* Set PCS register for forced speed */
1426
1427		/* Turn off bits for full duplex, speed, and autoneg */
1428		reg &= ~(E1000_PCS_LCTL_FSV_1000 |
1429		         E1000_PCS_LCTL_FSV_100 |
1430		         E1000_PCS_LCTL_FDV_FULL |
1431		         E1000_PCS_LCTL_AN_ENABLE);
1432
1433		/* Check for duplex first */
1434		if (mac->forced_speed_duplex & E1000_ALL_FULL_DUPLEX)
1435			reg |= E1000_PCS_LCTL_FDV_FULL;
1436
1437		/* Now set speed */
1438		if (mac->forced_speed_duplex & E1000_ALL_100_SPEED)
1439			reg |= E1000_PCS_LCTL_FSV_100;
1440
1441		/* Force speed and force link */
1442		reg |= E1000_PCS_LCTL_FSD |
1443		       E1000_PCS_LCTL_FORCE_LINK |
1444		       E1000_PCS_LCTL_FLV_LINK_UP;
1445
1446		DEBUGOUT1("Wrote 0x%08X to PCS_LCTL to configure forced link\n",
1447		          reg);
1448	}
1449	E1000_WRITE_REG(hw, E1000_PCS_LCTL, reg);
1450
1451out:
1452	return E1000_SUCCESS;
1453}
1454
1455/**
1456 *  e1000_sgmii_active_82575 - Return sgmii state
1457 *  @hw: pointer to the HW structure
1458 *
1459 *  82575 silicon has a serialized gigabit media independent interface (sgmii)
1460 *  which can be enabled for use in the embedded applications.  Simply
1461 *  return the current state of the sgmii interface.
1462 **/
1463static bool e1000_sgmii_active_82575(struct e1000_hw *hw)
1464{
1465	struct e1000_dev_spec_82575 *dev_spec;
1466	bool ret_val;
1467
1468	DEBUGFUNC("e1000_sgmii_active_82575");
1469
1470	if (hw->mac.type != e1000_82575 && hw->mac.type != e1000_82576) {
1471		ret_val = FALSE;
1472		goto out;
1473	}
1474
1475	dev_spec = (struct e1000_dev_spec_82575 *)hw->dev_spec;
1476
1477	ret_val = dev_spec->sgmii_active;
1478
1479out:
1480	return ret_val;
1481}
1482
1483/**
1484 *  e1000_translate_register_82576 - Translate the proper register offset
1485 *  @reg: e1000 register to be read
1486 *
1487 *  Registers in 82576 are located in different offsets than other adapters
1488 *  even though they function in the same manner.  This function takes in
1489 *  the name of the register to read and returns the correct offset for
1490 *  82576 silicon.
1491 **/
1492u32 e1000_translate_register_82576(u32 reg)
1493{
1494	/*
1495	 * Some of the 82576 registers are located at different
1496	 * offsets than they are in older adapters.
1497	 * Despite the difference in location, the registers
1498	 * function in the same manner.
1499	 */
1500	switch (reg) {
1501	case E1000_TDBAL(0):
1502		reg = 0x0E000;
1503		break;
1504	case E1000_TDBAH(0):
1505		reg = 0x0E004;
1506		break;
1507	case E1000_TDLEN(0):
1508		reg = 0x0E008;
1509		break;
1510	case E1000_TDH(0):
1511		reg = 0x0E010;
1512		break;
1513	case E1000_TDT(0):
1514		reg = 0x0E018;
1515		break;
1516	case E1000_TXDCTL(0):
1517		reg = 0x0E028;
1518		break;
1519	case E1000_RDBAL(0):
1520		reg = 0x0C000;
1521		break;
1522	case E1000_RDBAH(0):
1523		reg = 0x0C004;
1524		break;
1525	case E1000_RDLEN(0):
1526		reg = 0x0C008;
1527		break;
1528	case E1000_RDH(0):
1529		reg = 0x0C010;
1530		break;
1531	case E1000_RDT(0):
1532		reg = 0x0C018;
1533		break;
1534	case E1000_RXDCTL(0):
1535		reg = 0x0C028;
1536		break;
1537	case E1000_SRRCTL(0):
1538		reg = 0x0C00C;
1539		break;
1540	default:
1541		break;
1542	}
1543
1544	return reg;
1545}
1546
1547/**
1548 *  e1000_reset_init_script_82575 - Inits HW defaults after reset
1549 *  @hw: pointer to the HW structure
1550 *
1551 *  Inits recommended HW defaults after a reset when there is no EEPROM
1552 *  detected. This is only for the 82575.
1553 **/
1554static s32 e1000_reset_init_script_82575(struct e1000_hw* hw)
1555{
1556	DEBUGFUNC("e1000_reset_init_script_82575");
1557
1558	if (hw->mac.type == e1000_82575) {
1559		DEBUGOUT("Running reset init script for 82575\n");
1560		/* SerDes configuration via SERDESCTRL */
1561		e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCTL, 0x00, 0x0C);
1562		e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCTL, 0x01, 0x78);
1563		e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCTL, 0x1B, 0x23);
1564		e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCTL, 0x23, 0x15);
1565
1566		/* CCM configuration via CCMCTL register */
1567		e1000_write_8bit_ctrl_reg_generic(hw, E1000_CCMCTL, 0x14, 0x00);
1568		e1000_write_8bit_ctrl_reg_generic(hw, E1000_CCMCTL, 0x10, 0x00);
1569
1570		/* PCIe lanes configuration */
1571		e1000_write_8bit_ctrl_reg_generic(hw, E1000_GIOCTL, 0x00, 0xEC);
1572		e1000_write_8bit_ctrl_reg_generic(hw, E1000_GIOCTL, 0x61, 0xDF);
1573		e1000_write_8bit_ctrl_reg_generic(hw, E1000_GIOCTL, 0x34, 0x05);
1574		e1000_write_8bit_ctrl_reg_generic(hw, E1000_GIOCTL, 0x2F, 0x81);
1575
1576		/* PCIe PLL Configuration */
1577		e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCCTL, 0x02, 0x47);
1578		e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCCTL, 0x14, 0x00);
1579		e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCCTL, 0x10, 0x00);
1580	}
1581
1582	return E1000_SUCCESS;
1583}
1584
1585/**
1586 *  e1000_read_mac_addr_82575 - Read device MAC address
1587 *  @hw: pointer to the HW structure
1588 **/
1589static s32 e1000_read_mac_addr_82575(struct e1000_hw *hw)
1590{
1591	s32 ret_val = E1000_SUCCESS;
1592
1593	DEBUGFUNC("e1000_read_mac_addr_82575");
1594	if (e1000_check_alt_mac_addr_generic(hw))
1595		ret_val = e1000_read_mac_addr_generic(hw);
1596
1597	return ret_val;
1598}
1599
1600/**
1601 * e1000_power_down_phy_copper_82575 - Remove link during PHY power down
1602 * @hw: pointer to the HW structure
1603 *
1604 * In the case of a PHY power down to save power, or to turn off link during a
1605 * driver unload, or wake on lan is not enabled, remove the link.
1606 **/
1607static void e1000_power_down_phy_copper_82575(struct e1000_hw *hw)
1608{
1609	struct e1000_phy_info *phy = &hw->phy;
1610	struct e1000_mac_info *mac = &hw->mac;
1611
1612	if (!(phy->ops.check_reset_block))
1613		return;
1614
1615	/* If the management interface is not enabled, then power down */
1616	if (!(mac->ops.check_mng_mode(hw) || phy->ops.check_reset_block(hw)))
1617		e1000_power_down_phy_copper(hw);
1618
1619	return;
1620}
1621
1622/**
1623 *  e1000_remove_device_82575 - Free device specific structure
1624 *  @hw: pointer to the HW structure
1625 *
1626 *  If a device specific structure was allocated, this function will
1627 *  free it after shutting down the serdes interface if available.
1628 **/
1629void e1000_remove_device_82575(struct e1000_hw *hw)
1630{
1631	u16 eeprom_data = 0;
1632
1633	/*
1634	 * If APM is enabled in the EEPROM then leave the port on for fiber
1635	 * serdes adapters.
1636	 */
1637	if (hw->bus.func == 0)
1638		hw->nvm.ops.read(hw, NVM_INIT_CONTROL3_PORT_A, 1, &eeprom_data);
1639
1640	if (!(eeprom_data & E1000_NVM_APME_82575))
1641		e1000_shutdown_fiber_serdes_link_82575(hw);
1642
1643	e1000_remove_device_generic(hw);
1644}
1645
1646/**
1647 *  e1000_clear_hw_cntrs_82575 - Clear device specific hardware counters
1648 *  @hw: pointer to the HW structure
1649 *
1650 *  Clears the hardware counters by reading the counter registers.
1651 **/
1652static void e1000_clear_hw_cntrs_82575(struct e1000_hw *hw)
1653{
1654	volatile u32 temp;
1655
1656	DEBUGFUNC("e1000_clear_hw_cntrs_82575");
1657
1658	e1000_clear_hw_cntrs_base_generic(hw);
1659
1660	temp = E1000_READ_REG(hw, E1000_PRC64);
1661	temp = E1000_READ_REG(hw, E1000_PRC127);
1662	temp = E1000_READ_REG(hw, E1000_PRC255);
1663	temp = E1000_READ_REG(hw, E1000_PRC511);
1664	temp = E1000_READ_REG(hw, E1000_PRC1023);
1665	temp = E1000_READ_REG(hw, E1000_PRC1522);
1666	temp = E1000_READ_REG(hw, E1000_PTC64);
1667	temp = E1000_READ_REG(hw, E1000_PTC127);
1668	temp = E1000_READ_REG(hw, E1000_PTC255);
1669	temp = E1000_READ_REG(hw, E1000_PTC511);
1670	temp = E1000_READ_REG(hw, E1000_PTC1023);
1671	temp = E1000_READ_REG(hw, E1000_PTC1522);
1672
1673	temp = E1000_READ_REG(hw, E1000_ALGNERRC);
1674	temp = E1000_READ_REG(hw, E1000_RXERRC);
1675	temp = E1000_READ_REG(hw, E1000_TNCRS);
1676	temp = E1000_READ_REG(hw, E1000_CEXTERR);
1677	temp = E1000_READ_REG(hw, E1000_TSCTC);
1678	temp = E1000_READ_REG(hw, E1000_TSCTFC);
1679
1680	temp = E1000_READ_REG(hw, E1000_MGTPRC);
1681	temp = E1000_READ_REG(hw, E1000_MGTPDC);
1682	temp = E1000_READ_REG(hw, E1000_MGTPTC);
1683
1684	temp = E1000_READ_REG(hw, E1000_IAC);
1685	temp = E1000_READ_REG(hw, E1000_ICRXOC);
1686
1687	temp = E1000_READ_REG(hw, E1000_ICRXPTC);
1688	temp = E1000_READ_REG(hw, E1000_ICRXATC);
1689	temp = E1000_READ_REG(hw, E1000_ICTXPTC);
1690	temp = E1000_READ_REG(hw, E1000_ICTXATC);
1691	temp = E1000_READ_REG(hw, E1000_ICTXQEC);
1692	temp = E1000_READ_REG(hw, E1000_ICTXQMTC);
1693	temp = E1000_READ_REG(hw, E1000_ICRXDMTC);
1694
1695	temp = E1000_READ_REG(hw, E1000_CBTMPC);
1696	temp = E1000_READ_REG(hw, E1000_HTDPMC);
1697	temp = E1000_READ_REG(hw, E1000_CBRMPC);
1698	temp = E1000_READ_REG(hw, E1000_RPTHC);
1699	temp = E1000_READ_REG(hw, E1000_HGPTC);
1700	temp = E1000_READ_REG(hw, E1000_HTCBDPC);
1701	temp = E1000_READ_REG(hw, E1000_HGORCL);
1702	temp = E1000_READ_REG(hw, E1000_HGORCH);
1703	temp = E1000_READ_REG(hw, E1000_HGOTCL);
1704	temp = E1000_READ_REG(hw, E1000_HGOTCH);
1705	temp = E1000_READ_REG(hw, E1000_LENERRS);
1706
1707	/* This register should not be read in copper configurations */
1708	if (hw->phy.media_type == e1000_media_type_internal_serdes)
1709		temp = E1000_READ_REG(hw, E1000_SCVPC);
1710}
1711/**
1712 *  e1000_rx_fifo_flush_82575 - Clean rx fifo after RX enable
1713 *  @hw: pointer to the HW structure
1714 *
1715 *  After rx enable if managability is enabled then there is likely some
1716 *  bad data at the start of the fifo and possibly in the DMA fifo.  This
1717 *  function clears the fifos and flushes any packets that came in as rx was
1718 *  being enabled.
1719 **/
1720void e1000_rx_fifo_flush_82575(struct e1000_hw *hw)
1721{
1722	u32 rctl, rlpml, rxdctl[4], rfctl, temp_rctl, rx_enabled;
1723	int i, ms_wait;
1724
1725	DEBUGFUNC("e1000_rx_fifo_workaround_82575");
1726	if (hw->mac.type != e1000_82575 ||
1727	    !(E1000_READ_REG(hw, E1000_MANC) & E1000_MANC_RCV_TCO_EN))
1728		return;
1729
1730	/* Disable all RX queues */
1731	for (i = 0; i < 4; i++) {
1732		rxdctl[i] = E1000_READ_REG(hw, E1000_RXDCTL(i));
1733		E1000_WRITE_REG(hw, E1000_RXDCTL(i),
1734		                rxdctl[i] & ~E1000_RXDCTL_QUEUE_ENABLE);
1735	}
1736	/* Poll all queues to verify they have shut down */
1737	for (ms_wait = 0; ms_wait < 10; ms_wait++) {
1738		msec_delay(1);
1739		rx_enabled = 0;
1740		for (i = 0; i < 4; i++)
1741			rx_enabled |= E1000_READ_REG(hw, E1000_RXDCTL(i));
1742		if (!(rx_enabled & E1000_RXDCTL_QUEUE_ENABLE))
1743			break;
1744	}
1745
1746	if (ms_wait == 10)
1747		DEBUGOUT("Queue disable timed out after 10ms\n");
1748
1749	/* Clear RLPML, RCTL.SBP, RFCTL.LEF, and set RCTL.LPE so that all
1750	 * incoming packets are rejected.  Set enable and wait 2ms so that
1751	 * any packet that was coming in as RCTL.EN was set is flushed
1752	 */
1753	rfctl = E1000_READ_REG(hw, E1000_RFCTL);
1754	E1000_WRITE_REG(hw, E1000_RFCTL, rfctl & ~E1000_RFCTL_LEF);
1755
1756	rlpml = E1000_READ_REG(hw, E1000_RLPML);
1757	E1000_WRITE_REG(hw, E1000_RLPML, 0);
1758
1759	rctl = E1000_READ_REG(hw, E1000_RCTL);
1760	temp_rctl = rctl & ~(E1000_RCTL_EN | E1000_RCTL_SBP);
1761	temp_rctl |= E1000_RCTL_LPE;
1762
1763	E1000_WRITE_REG(hw, E1000_RCTL, temp_rctl);
1764	E1000_WRITE_REG(hw, E1000_RCTL, temp_rctl | E1000_RCTL_EN);
1765	E1000_WRITE_FLUSH(hw);
1766	msec_delay(2);
1767
1768	/* Enable RX queues that were previously enabled and restore our
1769	 * previous state
1770	 */
1771	for (i = 0; i < 4; i++)
1772		E1000_WRITE_REG(hw, E1000_RXDCTL(i), rxdctl[i]);
1773	E1000_WRITE_REG(hw, E1000_RCTL, rctl);
1774	E1000_WRITE_FLUSH(hw);
1775
1776	E1000_WRITE_REG(hw, E1000_RLPML, rlpml);
1777	E1000_WRITE_REG(hw, E1000_RFCTL, rfctl);
1778
1779	/* Flush receive errors generated by workaround */
1780	E1000_READ_REG(hw, E1000_ROC);
1781	E1000_READ_REG(hw, E1000_RNBC);
1782	E1000_READ_REG(hw, E1000_MPC);
1783}
1784