xref: /freebsd/sys/dev/e1000/e1000_82575.c (revision e8643b01e6312a56d1e44a760fb4e95f0b10b54c)
1 /******************************************************************************
2   SPDX-License-Identifier: BSD-3-Clause
3 
4   Copyright (c) 2001-2015, 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 /*
37  * 82575EB Gigabit Network Connection
38  * 82575EB Gigabit Backplane Connection
39  * 82575GB Gigabit Network Connection
40  * 82576 Gigabit Network Connection
41  * 82576 Quad Port Gigabit Mezzanine Adapter
42  * 82580 Gigabit Network Connection
43  * I350 Gigabit Network Connection
44  */
45 
46 #include "e1000_api.h"
47 #include "e1000_i210.h"
48 
49 static s32  e1000_init_phy_params_82575(struct e1000_hw *hw);
50 static s32  e1000_init_mac_params_82575(struct e1000_hw *hw);
51 static s32  e1000_acquire_phy_82575(struct e1000_hw *hw);
52 static void e1000_release_phy_82575(struct e1000_hw *hw);
53 static s32  e1000_acquire_nvm_82575(struct e1000_hw *hw);
54 static void e1000_release_nvm_82575(struct e1000_hw *hw);
55 static s32  e1000_check_for_link_82575(struct e1000_hw *hw);
56 static s32  e1000_check_for_link_media_swap(struct e1000_hw *hw);
57 static s32  e1000_get_cfg_done_82575(struct e1000_hw *hw);
58 static s32  e1000_get_link_up_info_82575(struct e1000_hw *hw, u16 *speed,
59 					 u16 *duplex);
60 static s32  e1000_phy_hw_reset_sgmii_82575(struct e1000_hw *hw);
61 static s32  e1000_read_phy_reg_sgmii_82575(struct e1000_hw *hw, u32 offset,
62 					   u16 *data);
63 static s32  e1000_reset_hw_82575(struct e1000_hw *hw);
64 static s32  e1000_reset_hw_82580(struct e1000_hw *hw);
65 static s32  e1000_read_phy_reg_82580(struct e1000_hw *hw,
66 				     u32 offset, u16 *data);
67 static s32  e1000_write_phy_reg_82580(struct e1000_hw *hw,
68 				      u32 offset, u16 data);
69 static s32  e1000_set_d0_lplu_state_82580(struct e1000_hw *hw,
70 					  bool active);
71 static s32  e1000_set_d3_lplu_state_82580(struct e1000_hw *hw,
72 					  bool active);
73 static s32  e1000_set_d0_lplu_state_82575(struct e1000_hw *hw,
74 					  bool active);
75 static s32  e1000_setup_copper_link_82575(struct e1000_hw *hw);
76 static s32  e1000_setup_serdes_link_82575(struct e1000_hw *hw);
77 static s32  e1000_get_media_type_82575(struct e1000_hw *hw);
78 static s32  e1000_set_sfp_media_type_82575(struct e1000_hw *hw);
79 static s32  e1000_valid_led_default_82575(struct e1000_hw *hw, u16 *data);
80 static s32  e1000_write_phy_reg_sgmii_82575(struct e1000_hw *hw,
81 					    u32 offset, u16 data);
82 static void e1000_clear_hw_cntrs_82575(struct e1000_hw *hw);
83 static s32  e1000_get_pcs_speed_and_duplex_82575(struct e1000_hw *hw,
84 						 u16 *speed, u16 *duplex);
85 static s32  e1000_get_phy_id_82575(struct e1000_hw *hw);
86 static bool e1000_sgmii_active_82575(struct e1000_hw *hw);
87 static s32  e1000_reset_init_script_82575(struct e1000_hw *hw);
88 static s32  e1000_read_mac_addr_82575(struct e1000_hw *hw);
89 static void e1000_config_collision_dist_82575(struct e1000_hw *hw);
90 static void e1000_power_down_phy_copper_82575(struct e1000_hw *hw);
91 static void e1000_shutdown_serdes_link_82575(struct e1000_hw *hw);
92 static void e1000_power_up_serdes_link_82575(struct e1000_hw *hw);
93 static s32 e1000_set_pcie_completion_timeout(struct e1000_hw *hw);
94 static s32 e1000_reset_mdicnfg_82580(struct e1000_hw *hw);
95 static s32 e1000_validate_nvm_checksum_82580(struct e1000_hw *hw);
96 static s32 e1000_update_nvm_checksum_82580(struct e1000_hw *hw);
97 static s32 e1000_update_nvm_checksum_with_offset(struct e1000_hw *hw,
98 						 u16 offset);
99 static s32 e1000_validate_nvm_checksum_with_offset(struct e1000_hw *hw,
100 						   u16 offset);
101 static s32 e1000_validate_nvm_checksum_i350(struct e1000_hw *hw);
102 static s32 e1000_update_nvm_checksum_i350(struct e1000_hw *hw);
103 static void e1000_clear_vfta_i350(struct e1000_hw *hw);
104 
105 static void e1000_i2c_start(struct e1000_hw *hw);
106 static void e1000_i2c_stop(struct e1000_hw *hw);
107 static s32 e1000_clock_in_i2c_byte(struct e1000_hw *hw, u8 *data);
108 static s32 e1000_clock_out_i2c_byte(struct e1000_hw *hw, u8 data);
109 static s32 e1000_get_i2c_ack(struct e1000_hw *hw);
110 static s32 e1000_clock_in_i2c_bit(struct e1000_hw *hw, bool *data);
111 static s32 e1000_clock_out_i2c_bit(struct e1000_hw *hw, bool data);
112 static void e1000_raise_i2c_clk(struct e1000_hw *hw, u32 *i2cctl);
113 static void e1000_lower_i2c_clk(struct e1000_hw *hw, u32 *i2cctl);
114 static s32 e1000_set_i2c_data(struct e1000_hw *hw, u32 *i2cctl, bool data);
115 static bool e1000_get_i2c_data(u32 *i2cctl);
116 
117 static const u16 e1000_82580_rxpbs_table[] = {
118 	36, 72, 144, 1, 2, 4, 8, 16, 35, 70, 140 };
119 #define E1000_82580_RXPBS_TABLE_SIZE \
120 	(sizeof(e1000_82580_rxpbs_table) / \
121 	 sizeof(e1000_82580_rxpbs_table[0]))
122 
123 
124 /**
125  *  e1000_sgmii_uses_mdio_82575 - Determine if I2C pins are for external MDIO
126  *  @hw: pointer to the HW structure
127  *
128  *  Called to determine if the I2C pins are being used for I2C or as an
129  *  external MDIO interface since the two options are mutually exclusive.
130  **/
131 static bool e1000_sgmii_uses_mdio_82575(struct e1000_hw *hw)
132 {
133 	u32 reg = 0;
134 	bool ext_mdio = FALSE;
135 
136 	DEBUGFUNC("e1000_sgmii_uses_mdio_82575");
137 
138 	switch (hw->mac.type) {
139 	case e1000_82575:
140 	case e1000_82576:
141 		reg = E1000_READ_REG(hw, E1000_MDIC);
142 		ext_mdio = !!(reg & E1000_MDIC_DEST);
143 		break;
144 	case e1000_82580:
145 	case e1000_i350:
146 	case e1000_i354:
147 	case e1000_i210:
148 	case e1000_i211:
149 		reg = E1000_READ_REG(hw, E1000_MDICNFG);
150 		ext_mdio = !!(reg & E1000_MDICNFG_EXT_MDIO);
151 		break;
152 	default:
153 		break;
154 	}
155 	return ext_mdio;
156 }
157 
158 /**
159  *  e1000_init_phy_params_82575 - Init PHY func ptrs.
160  *  @hw: pointer to the HW structure
161  **/
162 static s32 e1000_init_phy_params_82575(struct e1000_hw *hw)
163 {
164 	struct e1000_phy_info *phy = &hw->phy;
165 	s32 ret_val = E1000_SUCCESS;
166 	u32 ctrl_ext;
167 
168 	DEBUGFUNC("e1000_init_phy_params_82575");
169 
170 	phy->ops.read_i2c_byte = e1000_read_i2c_byte_generic;
171 	phy->ops.write_i2c_byte = e1000_write_i2c_byte_generic;
172 
173 	if (hw->phy.media_type != e1000_media_type_copper) {
174 		phy->type = e1000_phy_none;
175 		goto out;
176 	}
177 
178 	phy->ops.power_up   = e1000_power_up_phy_copper;
179 	phy->ops.power_down = e1000_power_down_phy_copper_82575;
180 
181 	phy->autoneg_mask	= AUTONEG_ADVERTISE_SPEED_DEFAULT;
182 	phy->reset_delay_us	= 100;
183 
184 	phy->ops.acquire	= e1000_acquire_phy_82575;
185 	phy->ops.check_reset_block = e1000_check_reset_block_generic;
186 	phy->ops.commit		= e1000_phy_sw_reset_generic;
187 	phy->ops.get_cfg_done	= e1000_get_cfg_done_82575;
188 	phy->ops.release	= e1000_release_phy_82575;
189 
190 	ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
191 
192 	if (e1000_sgmii_active_82575(hw)) {
193 		phy->ops.reset = e1000_phy_hw_reset_sgmii_82575;
194 		ctrl_ext |= E1000_CTRL_I2C_ENA;
195 	} else {
196 		phy->ops.reset = e1000_phy_hw_reset_generic;
197 		ctrl_ext &= ~E1000_CTRL_I2C_ENA;
198 	}
199 
200 	E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext);
201 	e1000_reset_mdicnfg_82580(hw);
202 
203 	if (e1000_sgmii_active_82575(hw) && !e1000_sgmii_uses_mdio_82575(hw)) {
204 		phy->ops.read_reg = e1000_read_phy_reg_sgmii_82575;
205 		phy->ops.write_reg = e1000_write_phy_reg_sgmii_82575;
206 	} else {
207 		switch (hw->mac.type) {
208 		case e1000_82580:
209 		case e1000_i350:
210 		case e1000_i354:
211 			phy->ops.read_reg = e1000_read_phy_reg_82580;
212 			phy->ops.write_reg = e1000_write_phy_reg_82580;
213 			break;
214 		case e1000_i210:
215 		case e1000_i211:
216 			phy->ops.read_reg = e1000_read_phy_reg_gs40g;
217 			phy->ops.write_reg = e1000_write_phy_reg_gs40g;
218 			break;
219 		default:
220 			phy->ops.read_reg = e1000_read_phy_reg_igp;
221 			phy->ops.write_reg = e1000_write_phy_reg_igp;
222 		}
223 	}
224 
225 	/* Set phy->phy_addr and phy->id. */
226 	ret_val = e1000_get_phy_id_82575(hw);
227 
228 	/* Verify phy id and set remaining function pointers */
229 	switch (phy->id) {
230 	case M88E1543_E_PHY_ID:
231 	case M88E1512_E_PHY_ID:
232 	case I347AT4_E_PHY_ID:
233 	case M88E1112_E_PHY_ID:
234 	case M88E1340M_E_PHY_ID:
235 	case M88E1111_I_PHY_ID:
236 		phy->type		= e1000_phy_m88;
237 		phy->ops.check_polarity	= e1000_check_polarity_m88;
238 		phy->ops.get_info	= e1000_get_phy_info_m88;
239 		if (phy->id == I347AT4_E_PHY_ID ||
240 		    phy->id == M88E1112_E_PHY_ID ||
241 		    phy->id == M88E1340M_E_PHY_ID)
242 			phy->ops.get_cable_length =
243 					 e1000_get_cable_length_m88_gen2;
244 		else if (phy->id == M88E1543_E_PHY_ID ||
245 			 phy->id == M88E1512_E_PHY_ID)
246 			phy->ops.get_cable_length =
247 					 e1000_get_cable_length_m88_gen2;
248 		else
249 			phy->ops.get_cable_length = e1000_get_cable_length_m88;
250 		phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_m88;
251 		/* Check if this PHY is confgured for media swap. */
252 		if (phy->id == M88E1112_E_PHY_ID) {
253 			u16 data;
254 
255 			ret_val = phy->ops.write_reg(hw,
256 						     E1000_M88E1112_PAGE_ADDR,
257 						     2);
258 			if (ret_val)
259 				goto out;
260 
261 			ret_val = phy->ops.read_reg(hw,
262 						    E1000_M88E1112_MAC_CTRL_1,
263 						    &data);
264 			if (ret_val)
265 				goto out;
266 
267 			data = (data & E1000_M88E1112_MAC_CTRL_1_MODE_MASK) >>
268 			       E1000_M88E1112_MAC_CTRL_1_MODE_SHIFT;
269 			if (data == E1000_M88E1112_AUTO_COPPER_SGMII ||
270 			    data == E1000_M88E1112_AUTO_COPPER_BASEX)
271 				hw->mac.ops.check_for_link =
272 						e1000_check_for_link_media_swap;
273 		}
274 		if (phy->id == M88E1512_E_PHY_ID) {
275 			ret_val = e1000_initialize_M88E1512_phy(hw);
276 			if (ret_val)
277 				goto out;
278 		}
279 		if (phy->id == M88E1543_E_PHY_ID) {
280 			ret_val = e1000_initialize_M88E1543_phy(hw);
281 			if (ret_val)
282 				goto out;
283 		}
284 		break;
285 	case IGP03E1000_E_PHY_ID:
286 	case IGP04E1000_E_PHY_ID:
287 		phy->type = e1000_phy_igp_3;
288 		phy->ops.check_polarity = e1000_check_polarity_igp;
289 		phy->ops.get_info = e1000_get_phy_info_igp;
290 		phy->ops.get_cable_length = e1000_get_cable_length_igp_2;
291 		phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_igp;
292 		phy->ops.set_d0_lplu_state = e1000_set_d0_lplu_state_82575;
293 		phy->ops.set_d3_lplu_state = e1000_set_d3_lplu_state_generic;
294 		break;
295 	case I82580_I_PHY_ID:
296 	case I350_I_PHY_ID:
297 		phy->type = e1000_phy_82580;
298 		phy->ops.check_polarity = e1000_check_polarity_82577;
299 		phy->ops.force_speed_duplex =
300 					 e1000_phy_force_speed_duplex_82577;
301 		phy->ops.get_cable_length = e1000_get_cable_length_82577;
302 		phy->ops.get_info = e1000_get_phy_info_82577;
303 		phy->ops.set_d0_lplu_state = e1000_set_d0_lplu_state_82580;
304 		phy->ops.set_d3_lplu_state = e1000_set_d3_lplu_state_82580;
305 		break;
306 	case I210_I_PHY_ID:
307 		phy->type		= e1000_phy_i210;
308 		phy->ops.check_polarity	= e1000_check_polarity_m88;
309 		phy->ops.get_info	= e1000_get_phy_info_m88;
310 		phy->ops.get_cable_length = e1000_get_cable_length_m88_gen2;
311 		phy->ops.set_d0_lplu_state = e1000_set_d0_lplu_state_82580;
312 		phy->ops.set_d3_lplu_state = e1000_set_d3_lplu_state_82580;
313 		phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_m88;
314 		break;
315 	default:
316 		ret_val = -E1000_ERR_PHY;
317 		goto out;
318 	}
319 
320 out:
321 	return ret_val;
322 }
323 
324 /**
325  *  e1000_init_nvm_params_82575 - Init NVM func ptrs.
326  *  @hw: pointer to the HW structure
327  **/
328 s32 e1000_init_nvm_params_82575(struct e1000_hw *hw)
329 {
330 	struct e1000_nvm_info *nvm = &hw->nvm;
331 	u32 eecd = E1000_READ_REG(hw, E1000_EECD);
332 	u16 size;
333 
334 	DEBUGFUNC("e1000_init_nvm_params_82575");
335 
336 	size = (u16)((eecd & E1000_EECD_SIZE_EX_MASK) >>
337 		     E1000_EECD_SIZE_EX_SHIFT);
338 	/*
339 	 * Added to a constant, "size" becomes the left-shift value
340 	 * for setting word_size.
341 	 */
342 	size += NVM_WORD_SIZE_BASE_SHIFT;
343 
344 	/* Just in case size is out of range, cap it to the largest
345 	 * EEPROM size supported
346 	 */
347 	if (size > 15)
348 		size = 15;
349 
350 	nvm->word_size = 1 << size;
351 	if (hw->mac.type < e1000_i210) {
352 		nvm->opcode_bits = 8;
353 		nvm->delay_usec = 1;
354 
355 		switch (nvm->override) {
356 		case e1000_nvm_override_spi_large:
357 			nvm->page_size = 32;
358 			nvm->address_bits = 16;
359 			break;
360 		case e1000_nvm_override_spi_small:
361 			nvm->page_size = 8;
362 			nvm->address_bits = 8;
363 			break;
364 		default:
365 			nvm->page_size = eecd & E1000_EECD_ADDR_BITS ? 32 : 8;
366 			nvm->address_bits = eecd & E1000_EECD_ADDR_BITS ?
367 					    16 : 8;
368 			break;
369 		}
370 		if (nvm->word_size == (1 << 15))
371 			nvm->page_size = 128;
372 
373 		nvm->type = e1000_nvm_eeprom_spi;
374 	} else {
375 		nvm->type = e1000_nvm_flash_hw;
376 	}
377 
378 	/* Function Pointers */
379 	nvm->ops.acquire = e1000_acquire_nvm_82575;
380 	nvm->ops.release = e1000_release_nvm_82575;
381 	if (nvm->word_size < (1 << 15))
382 		nvm->ops.read = e1000_read_nvm_eerd;
383 	else
384 		nvm->ops.read = e1000_read_nvm_spi;
385 
386 	nvm->ops.write = e1000_write_nvm_spi;
387 	nvm->ops.validate = e1000_validate_nvm_checksum_generic;
388 	nvm->ops.update = e1000_update_nvm_checksum_generic;
389 	nvm->ops.valid_led_default = e1000_valid_led_default_82575;
390 
391 	/* override generic family function pointers for specific descendants */
392 	switch (hw->mac.type) {
393 	case e1000_82580:
394 		nvm->ops.validate = e1000_validate_nvm_checksum_82580;
395 		nvm->ops.update = e1000_update_nvm_checksum_82580;
396 		break;
397 	case e1000_i350:
398 	case e1000_i354:
399 		nvm->ops.validate = e1000_validate_nvm_checksum_i350;
400 		nvm->ops.update = e1000_update_nvm_checksum_i350;
401 		break;
402 	default:
403 		break;
404 	}
405 
406 	return E1000_SUCCESS;
407 }
408 
409 /**
410  *  e1000_init_mac_params_82575 - Init MAC func ptrs.
411  *  @hw: pointer to the HW structure
412  **/
413 static s32 e1000_init_mac_params_82575(struct e1000_hw *hw)
414 {
415 	struct e1000_mac_info *mac = &hw->mac;
416 	struct e1000_dev_spec_82575 *dev_spec = &hw->dev_spec._82575;
417 
418 	DEBUGFUNC("e1000_init_mac_params_82575");
419 
420 	/* Derives media type */
421 	e1000_get_media_type_82575(hw);
422 	/* Set mta register count */
423 	mac->mta_reg_count = 128;
424 	/* Set uta register count */
425 	mac->uta_reg_count = (hw->mac.type == e1000_82575) ? 0 : 128;
426 	/* Set rar entry count */
427 	mac->rar_entry_count = E1000_RAR_ENTRIES_82575;
428 	if (mac->type == e1000_82576)
429 		mac->rar_entry_count = E1000_RAR_ENTRIES_82576;
430 	if (mac->type == e1000_82580)
431 		mac->rar_entry_count = E1000_RAR_ENTRIES_82580;
432 	if (mac->type == e1000_i350 || mac->type == e1000_i354)
433 		mac->rar_entry_count = E1000_RAR_ENTRIES_I350;
434 
435 	/* Enable EEE default settings for EEE supported devices */
436 	if (mac->type >= e1000_i350)
437 		dev_spec->eee_disable = FALSE;
438 
439 	/* Allow a single clear of the SW semaphore on I210 and newer */
440 	if (mac->type >= e1000_i210)
441 		dev_spec->clear_semaphore_once = TRUE;
442 
443 	/* Set if part includes ASF firmware */
444 	mac->asf_firmware_present = TRUE;
445 	/* FWSM register */
446 	mac->has_fwsm = TRUE;
447 	/* ARC supported; valid only if manageability features are enabled. */
448 	mac->arc_subsystem_valid =
449 		!!(E1000_READ_REG(hw, E1000_FWSM) & E1000_FWSM_MODE_MASK);
450 
451 	/* Function pointers */
452 
453 	/* bus type/speed/width */
454 	mac->ops.get_bus_info = e1000_get_bus_info_pcie_generic;
455 	/* reset */
456 	if (mac->type >= e1000_82580)
457 		mac->ops.reset_hw = e1000_reset_hw_82580;
458 	else
459 	mac->ops.reset_hw = e1000_reset_hw_82575;
460 	/* hw initialization */
461 	if ((mac->type == e1000_i210) || (mac->type == e1000_i211))
462 		mac->ops.init_hw = e1000_init_hw_i210;
463 	else
464 	mac->ops.init_hw = e1000_init_hw_82575;
465 	/* link setup */
466 	mac->ops.setup_link = e1000_setup_link_generic;
467 	/* physical interface link setup */
468 	mac->ops.setup_physical_interface =
469 		(hw->phy.media_type == e1000_media_type_copper)
470 		? e1000_setup_copper_link_82575 : e1000_setup_serdes_link_82575;
471 	/* physical interface shutdown */
472 	mac->ops.shutdown_serdes = e1000_shutdown_serdes_link_82575;
473 	/* physical interface power up */
474 	mac->ops.power_up_serdes = e1000_power_up_serdes_link_82575;
475 	/* check for link */
476 	mac->ops.check_for_link = e1000_check_for_link_82575;
477 	/* read mac address */
478 	mac->ops.read_mac_addr = e1000_read_mac_addr_82575;
479 	/* configure collision distance */
480 	mac->ops.config_collision_dist = e1000_config_collision_dist_82575;
481 	/* multicast address update */
482 	mac->ops.update_mc_addr_list = e1000_update_mc_addr_list_generic;
483 	if (hw->mac.type == e1000_i350 || mac->type == e1000_i354) {
484 		/* writing VFTA */
485 		mac->ops.write_vfta = e1000_write_vfta_i350;
486 		/* clearing VFTA */
487 		mac->ops.clear_vfta = e1000_clear_vfta_i350;
488 	} else {
489 		/* writing VFTA */
490 		mac->ops.write_vfta = e1000_write_vfta_generic;
491 		/* clearing VFTA */
492 		mac->ops.clear_vfta = e1000_clear_vfta_generic;
493 	}
494 	if (hw->mac.type >= e1000_82580)
495 		mac->ops.validate_mdi_setting =
496 				e1000_validate_mdi_setting_crossover_generic;
497 	/* ID LED init */
498 	mac->ops.id_led_init = e1000_id_led_init_generic;
499 	/* blink LED */
500 	mac->ops.blink_led = e1000_blink_led_generic;
501 	/* setup LED */
502 	mac->ops.setup_led = e1000_setup_led_generic;
503 	/* cleanup LED */
504 	mac->ops.cleanup_led = e1000_cleanup_led_generic;
505 	/* turn on/off LED */
506 	mac->ops.led_on = e1000_led_on_generic;
507 	mac->ops.led_off = e1000_led_off_generic;
508 	/* clear hardware counters */
509 	mac->ops.clear_hw_cntrs = e1000_clear_hw_cntrs_82575;
510 	/* link info */
511 	mac->ops.get_link_up_info = e1000_get_link_up_info_82575;
512 	/* acquire SW_FW sync */
513 	mac->ops.acquire_swfw_sync = e1000_acquire_swfw_sync;
514 	mac->ops.release_swfw_sync = e1000_release_swfw_sync;
515 
516 	/* set lan id for port to determine which phy lock to use */
517 	hw->mac.ops.set_lan_id(hw);
518 
519 	return E1000_SUCCESS;
520 }
521 
522 /**
523  *  e1000_init_function_pointers_82575 - Init func ptrs.
524  *  @hw: pointer to the HW structure
525  *
526  *  Called to initialize all function pointers and parameters.
527  **/
528 void e1000_init_function_pointers_82575(struct e1000_hw *hw)
529 {
530 	DEBUGFUNC("e1000_init_function_pointers_82575");
531 
532 	hw->mac.ops.init_params = e1000_init_mac_params_82575;
533 	hw->nvm.ops.init_params = e1000_init_nvm_params_82575;
534 	hw->phy.ops.init_params = e1000_init_phy_params_82575;
535 	hw->mbx.ops.init_params = e1000_init_mbx_params_pf;
536 }
537 
538 /**
539  *  e1000_acquire_phy_82575 - Acquire rights to access PHY
540  *  @hw: pointer to the HW structure
541  *
542  *  Acquire access rights to the correct PHY.
543  **/
544 static s32 e1000_acquire_phy_82575(struct e1000_hw *hw)
545 {
546 	u16 mask = E1000_SWFW_PHY0_SM;
547 
548 	DEBUGFUNC("e1000_acquire_phy_82575");
549 
550 	if (hw->bus.func == E1000_FUNC_1)
551 		mask = E1000_SWFW_PHY1_SM;
552 	else if (hw->bus.func == E1000_FUNC_2)
553 		mask = E1000_SWFW_PHY2_SM;
554 	else if (hw->bus.func == E1000_FUNC_3)
555 		mask = E1000_SWFW_PHY3_SM;
556 
557 	return hw->mac.ops.acquire_swfw_sync(hw, mask);
558 }
559 
560 /**
561  *  e1000_release_phy_82575 - Release rights to access PHY
562  *  @hw: pointer to the HW structure
563  *
564  *  A wrapper to release access rights to the correct PHY.
565  **/
566 static void e1000_release_phy_82575(struct e1000_hw *hw)
567 {
568 	u16 mask = E1000_SWFW_PHY0_SM;
569 
570 	DEBUGFUNC("e1000_release_phy_82575");
571 
572 	if (hw->bus.func == E1000_FUNC_1)
573 		mask = E1000_SWFW_PHY1_SM;
574 	else if (hw->bus.func == E1000_FUNC_2)
575 		mask = E1000_SWFW_PHY2_SM;
576 	else if (hw->bus.func == E1000_FUNC_3)
577 		mask = E1000_SWFW_PHY3_SM;
578 
579 	hw->mac.ops.release_swfw_sync(hw, mask);
580 }
581 
582 /**
583  *  e1000_read_phy_reg_sgmii_82575 - Read PHY register using sgmii
584  *  @hw: pointer to the HW structure
585  *  @offset: register offset to be read
586  *  @data: pointer to the read data
587  *
588  *  Reads the PHY register at offset using the serial gigabit media independent
589  *  interface and stores the retrieved information in data.
590  **/
591 static s32 e1000_read_phy_reg_sgmii_82575(struct e1000_hw *hw, u32 offset,
592 					  u16 *data)
593 {
594 	s32 ret_val = -E1000_ERR_PARAM;
595 
596 	DEBUGFUNC("e1000_read_phy_reg_sgmii_82575");
597 
598 	if (offset > E1000_MAX_SGMII_PHY_REG_ADDR) {
599 		DEBUGOUT1("PHY Address %u is out of range\n", offset);
600 		goto out;
601 	}
602 
603 	ret_val = hw->phy.ops.acquire(hw);
604 	if (ret_val)
605 		goto out;
606 
607 	ret_val = e1000_read_phy_reg_i2c(hw, offset, data);
608 
609 	hw->phy.ops.release(hw);
610 
611 out:
612 	return ret_val;
613 }
614 
615 /**
616  *  e1000_write_phy_reg_sgmii_82575 - Write PHY register using sgmii
617  *  @hw: pointer to the HW structure
618  *  @offset: register offset to write to
619  *  @data: data to write at register offset
620  *
621  *  Writes the data to PHY register at the offset using the serial gigabit
622  *  media independent interface.
623  **/
624 static s32 e1000_write_phy_reg_sgmii_82575(struct e1000_hw *hw, u32 offset,
625 					   u16 data)
626 {
627 	s32 ret_val = -E1000_ERR_PARAM;
628 
629 	DEBUGFUNC("e1000_write_phy_reg_sgmii_82575");
630 
631 	if (offset > E1000_MAX_SGMII_PHY_REG_ADDR) {
632 		DEBUGOUT1("PHY Address %d is out of range\n", offset);
633 		goto out;
634 	}
635 
636 	ret_val = hw->phy.ops.acquire(hw);
637 	if (ret_val)
638 		goto out;
639 
640 	ret_val = e1000_write_phy_reg_i2c(hw, offset, data);
641 
642 	hw->phy.ops.release(hw);
643 
644 out:
645 	return ret_val;
646 }
647 
648 /**
649  *  e1000_get_phy_id_82575 - Retrieve PHY addr and id
650  *  @hw: pointer to the HW structure
651  *
652  *  Retrieves the PHY address and ID for both PHY's which do and do not use
653  *  sgmi interface.
654  **/
655 static s32 e1000_get_phy_id_82575(struct e1000_hw *hw)
656 {
657 	struct e1000_phy_info *phy = &hw->phy;
658 	s32  ret_val = E1000_SUCCESS;
659 	u16 phy_id;
660 	u32 ctrl_ext;
661 	u32 mdic;
662 
663 	DEBUGFUNC("e1000_get_phy_id_82575");
664 
665 	/* some i354 devices need an extra read for phy id */
666 	if (hw->mac.type == e1000_i354)
667 		e1000_get_phy_id(hw);
668 
669 	/*
670 	 * For SGMII PHYs, we try the list of possible addresses until
671 	 * we find one that works.  For non-SGMII PHYs
672 	 * (e.g. integrated copper PHYs), an address of 1 should
673 	 * work.  The result of this function should mean phy->phy_addr
674 	 * and phy->id are set correctly.
675 	 */
676 	if (!e1000_sgmii_active_82575(hw)) {
677 		phy->addr = 1;
678 		ret_val = e1000_get_phy_id(hw);
679 		goto out;
680 	}
681 
682 	if (e1000_sgmii_uses_mdio_82575(hw)) {
683 		switch (hw->mac.type) {
684 		case e1000_82575:
685 		case e1000_82576:
686 			mdic = E1000_READ_REG(hw, E1000_MDIC);
687 			mdic &= E1000_MDIC_PHY_MASK;
688 			phy->addr = mdic >> E1000_MDIC_PHY_SHIFT;
689 			break;
690 		case e1000_82580:
691 		case e1000_i350:
692 		case e1000_i354:
693 		case e1000_i210:
694 		case e1000_i211:
695 			mdic = E1000_READ_REG(hw, E1000_MDICNFG);
696 			mdic &= E1000_MDICNFG_PHY_MASK;
697 			phy->addr = mdic >> E1000_MDICNFG_PHY_SHIFT;
698 			break;
699 		default:
700 			ret_val = -E1000_ERR_PHY;
701 			goto out;
702 			break;
703 		}
704 		ret_val = e1000_get_phy_id(hw);
705 		goto out;
706 	}
707 
708 	/* Power on sgmii phy if it is disabled */
709 	ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
710 	E1000_WRITE_REG(hw, E1000_CTRL_EXT,
711 			ctrl_ext & ~E1000_CTRL_EXT_SDP3_DATA);
712 	E1000_WRITE_FLUSH(hw);
713 	msec_delay(300);
714 
715 	/*
716 	 * The address field in the I2CCMD register is 3 bits and 0 is invalid.
717 	 * Therefore, we need to test 1-7
718 	 */
719 	for (phy->addr = 1; phy->addr < 8; phy->addr++) {
720 		ret_val = e1000_read_phy_reg_sgmii_82575(hw, PHY_ID1, &phy_id);
721 		if (ret_val == E1000_SUCCESS) {
722 			DEBUGOUT2("Vendor ID 0x%08X read at address %u\n",
723 				  phy_id, phy->addr);
724 			/*
725 			 * At the time of this writing, The M88 part is
726 			 * the only supported SGMII PHY product.
727 			 */
728 			if (phy_id == M88_VENDOR)
729 				break;
730 		} else {
731 			DEBUGOUT1("PHY address %u was unreadable\n",
732 				  phy->addr);
733 		}
734 	}
735 
736 	/* A valid PHY type couldn't be found. */
737 	if (phy->addr == 8) {
738 		phy->addr = 0;
739 		ret_val = -E1000_ERR_PHY;
740 	} else {
741 		ret_val = e1000_get_phy_id(hw);
742 	}
743 
744 	/* restore previous sfp cage power state */
745 	E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext);
746 
747 out:
748 	return ret_val;
749 }
750 
751 /**
752  *  e1000_phy_hw_reset_sgmii_82575 - Performs a PHY reset
753  *  @hw: pointer to the HW structure
754  *
755  *  Resets the PHY using the serial gigabit media independent interface.
756  **/
757 static s32 e1000_phy_hw_reset_sgmii_82575(struct e1000_hw *hw)
758 {
759 	s32 ret_val = E1000_SUCCESS;
760 	struct e1000_phy_info *phy = &hw->phy;
761 
762 	DEBUGFUNC("e1000_phy_hw_reset_sgmii_82575");
763 
764 	/*
765 	 * This isn't a TRUE "hard" reset, but is the only reset
766 	 * available to us at this time.
767 	 */
768 
769 	DEBUGOUT("Soft resetting SGMII attached PHY...\n");
770 
771 	if (!(hw->phy.ops.write_reg))
772 		goto out;
773 
774 	/*
775 	 * SFP documentation requires the following to configure the SPF module
776 	 * to work on SGMII.  No further documentation is given.
777 	 */
778 	ret_val = hw->phy.ops.write_reg(hw, 0x1B, 0x8084);
779 	if (ret_val)
780 		goto out;
781 
782 	ret_val = hw->phy.ops.commit(hw);
783 	if (ret_val)
784 		goto out;
785 
786 	if (phy->id == M88E1512_E_PHY_ID)
787 		ret_val = e1000_initialize_M88E1512_phy(hw);
788 out:
789 	return ret_val;
790 }
791 
792 /**
793  *  e1000_set_d0_lplu_state_82575 - Set Low Power Linkup D0 state
794  *  @hw: pointer to the HW structure
795  *  @active: TRUE to enable LPLU, FALSE to disable
796  *
797  *  Sets the LPLU D0 state according to the active flag.  When
798  *  activating LPLU this function also disables smart speed
799  *  and vice versa.  LPLU will not be activated unless the
800  *  device autonegotiation advertisement meets standards of
801  *  either 10 or 10/100 or 10/100/1000 at all duplexes.
802  *  This is a function pointer entry point only called by
803  *  PHY setup routines.
804  **/
805 static s32 e1000_set_d0_lplu_state_82575(struct e1000_hw *hw, bool active)
806 {
807 	struct e1000_phy_info *phy = &hw->phy;
808 	s32 ret_val = E1000_SUCCESS;
809 	u16 data;
810 
811 	DEBUGFUNC("e1000_set_d0_lplu_state_82575");
812 
813 	if (!(hw->phy.ops.read_reg))
814 		goto out;
815 
816 	ret_val = phy->ops.read_reg(hw, IGP02E1000_PHY_POWER_MGMT, &data);
817 	if (ret_val)
818 		goto out;
819 
820 	if (active) {
821 		data |= IGP02E1000_PM_D0_LPLU;
822 		ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT,
823 					     data);
824 		if (ret_val)
825 			goto out;
826 
827 		/* When LPLU is enabled, we should disable SmartSpeed */
828 		ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
829 					    &data);
830 		data &= ~IGP01E1000_PSCFR_SMART_SPEED;
831 		ret_val = phy->ops.write_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
832 					     data);
833 		if (ret_val)
834 			goto out;
835 	} else {
836 		data &= ~IGP02E1000_PM_D0_LPLU;
837 		ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT,
838 					     data);
839 		/*
840 		 * LPLU and SmartSpeed are mutually exclusive.  LPLU is used
841 		 * during Dx states where the power conservation is most
842 		 * important.  During driver activity we should enable
843 		 * SmartSpeed, so performance is maintained.
844 		 */
845 		if (phy->smart_speed == e1000_smart_speed_on) {
846 			ret_val = phy->ops.read_reg(hw,
847 						    IGP01E1000_PHY_PORT_CONFIG,
848 						    &data);
849 			if (ret_val)
850 				goto out;
851 
852 			data |= IGP01E1000_PSCFR_SMART_SPEED;
853 			ret_val = phy->ops.write_reg(hw,
854 						     IGP01E1000_PHY_PORT_CONFIG,
855 						     data);
856 			if (ret_val)
857 				goto out;
858 		} else if (phy->smart_speed == e1000_smart_speed_off) {
859 			ret_val = phy->ops.read_reg(hw,
860 						    IGP01E1000_PHY_PORT_CONFIG,
861 						    &data);
862 			if (ret_val)
863 				goto out;
864 
865 			data &= ~IGP01E1000_PSCFR_SMART_SPEED;
866 			ret_val = phy->ops.write_reg(hw,
867 						     IGP01E1000_PHY_PORT_CONFIG,
868 						     data);
869 			if (ret_val)
870 				goto out;
871 		}
872 	}
873 
874 out:
875 	return ret_val;
876 }
877 
878 /**
879  *  e1000_set_d0_lplu_state_82580 - Set Low Power Linkup D0 state
880  *  @hw: pointer to the HW structure
881  *  @active: TRUE to enable LPLU, FALSE to disable
882  *
883  *  Sets the LPLU D0 state according to the active flag.  When
884  *  activating LPLU this function also disables smart speed
885  *  and vice versa.  LPLU will not be activated unless the
886  *  device autonegotiation advertisement meets standards of
887  *  either 10 or 10/100 or 10/100/1000 at all duplexes.
888  *  This is a function pointer entry point only called by
889  *  PHY setup routines.
890  **/
891 static s32 e1000_set_d0_lplu_state_82580(struct e1000_hw *hw, bool active)
892 {
893 	struct e1000_phy_info *phy = &hw->phy;
894 	u32 data;
895 
896 	DEBUGFUNC("e1000_set_d0_lplu_state_82580");
897 
898 	data = E1000_READ_REG(hw, E1000_82580_PHY_POWER_MGMT);
899 
900 	if (active) {
901 		data |= E1000_82580_PM_D0_LPLU;
902 
903 		/* When LPLU is enabled, we should disable SmartSpeed */
904 		data &= ~E1000_82580_PM_SPD;
905 	} else {
906 		data &= ~E1000_82580_PM_D0_LPLU;
907 
908 		/*
909 		 * LPLU and SmartSpeed are mutually exclusive.  LPLU is used
910 		 * during Dx states where the power conservation is most
911 		 * important.  During driver activity we should enable
912 		 * SmartSpeed, so performance is maintained.
913 		 */
914 		if (phy->smart_speed == e1000_smart_speed_on)
915 			data |= E1000_82580_PM_SPD;
916 		else if (phy->smart_speed == e1000_smart_speed_off)
917 			data &= ~E1000_82580_PM_SPD;
918 	}
919 
920 	E1000_WRITE_REG(hw, E1000_82580_PHY_POWER_MGMT, data);
921 	return E1000_SUCCESS;
922 }
923 
924 /**
925  *  e1000_set_d3_lplu_state_82580 - Sets low power link up state for D3
926  *  @hw: pointer to the HW structure
927  *  @active: boolean used to enable/disable lplu
928  *
929  *  Success returns 0, Failure returns 1
930  *
931  *  The low power link up (lplu) state is set to the power management level D3
932  *  and SmartSpeed is disabled when active is TRUE, else clear lplu for D3
933  *  and enable Smartspeed.  LPLU and Smartspeed are mutually exclusive.  LPLU
934  *  is used during Dx states where the power conservation is most important.
935  *  During driver activity, SmartSpeed should be enabled so performance is
936  *  maintained.
937  **/
938 s32 e1000_set_d3_lplu_state_82580(struct e1000_hw *hw, bool active)
939 {
940 	struct e1000_phy_info *phy = &hw->phy;
941 	u32 data;
942 
943 	DEBUGFUNC("e1000_set_d3_lplu_state_82580");
944 
945 	data = E1000_READ_REG(hw, E1000_82580_PHY_POWER_MGMT);
946 
947 	if (!active) {
948 		data &= ~E1000_82580_PM_D3_LPLU;
949 		/*
950 		 * LPLU and SmartSpeed are mutually exclusive.  LPLU is used
951 		 * during Dx states where the power conservation is most
952 		 * important.  During driver activity we should enable
953 		 * SmartSpeed, so performance is maintained.
954 		 */
955 		if (phy->smart_speed == e1000_smart_speed_on)
956 			data |= E1000_82580_PM_SPD;
957 		else if (phy->smart_speed == e1000_smart_speed_off)
958 			data &= ~E1000_82580_PM_SPD;
959 	} else if ((phy->autoneg_advertised == E1000_ALL_SPEED_DUPLEX) ||
960 		   (phy->autoneg_advertised == E1000_ALL_NOT_GIG) ||
961 		   (phy->autoneg_advertised == E1000_ALL_10_SPEED)) {
962 		data |= E1000_82580_PM_D3_LPLU;
963 		/* When LPLU is enabled, we should disable SmartSpeed */
964 		data &= ~E1000_82580_PM_SPD;
965 	}
966 
967 	E1000_WRITE_REG(hw, E1000_82580_PHY_POWER_MGMT, data);
968 	return E1000_SUCCESS;
969 }
970 
971 /**
972  *  e1000_acquire_nvm_82575 - Request for access to EEPROM
973  *  @hw: pointer to the HW structure
974  *
975  *  Acquire the necessary semaphores for exclusive access to the EEPROM.
976  *  Set the EEPROM access request bit and wait for EEPROM access grant bit.
977  *  Return successful if access grant bit set, else clear the request for
978  *  EEPROM access and return -E1000_ERR_NVM (-1).
979  **/
980 static s32 e1000_acquire_nvm_82575(struct e1000_hw *hw)
981 {
982 	s32 ret_val = E1000_SUCCESS;
983 
984 	DEBUGFUNC("e1000_acquire_nvm_82575");
985 
986 	ret_val = e1000_acquire_swfw_sync(hw, E1000_SWFW_EEP_SM);
987 	if (ret_val)
988 		goto out;
989 
990 	/*
991 	 * Check if there is some access
992 	 * error this access may hook on
993 	 */
994 	if (hw->mac.type == e1000_i350) {
995 		u32 eecd = E1000_READ_REG(hw, E1000_EECD);
996 		if (eecd & (E1000_EECD_BLOCKED | E1000_EECD_ABORT |
997 		    E1000_EECD_TIMEOUT)) {
998 			/* Clear all access error flags */
999 			E1000_WRITE_REG(hw, E1000_EECD, eecd |
1000 					E1000_EECD_ERROR_CLR);
1001 			DEBUGOUT("Nvm bit banging access error detected and cleared.\n");
1002 		}
1003 	}
1004 
1005 	if (hw->mac.type == e1000_82580) {
1006 		u32 eecd = E1000_READ_REG(hw, E1000_EECD);
1007 		if (eecd & E1000_EECD_BLOCKED) {
1008 			/* Clear access error flag */
1009 			E1000_WRITE_REG(hw, E1000_EECD, eecd |
1010 					E1000_EECD_BLOCKED);
1011 			DEBUGOUT("Nvm bit banging access error detected and cleared.\n");
1012 		}
1013 	}
1014 
1015 	ret_val = e1000_acquire_nvm_generic(hw);
1016 	if (ret_val)
1017 		e1000_release_swfw_sync(hw, E1000_SWFW_EEP_SM);
1018 
1019 out:
1020 	return ret_val;
1021 }
1022 
1023 /**
1024  *  e1000_release_nvm_82575 - Release exclusive access to EEPROM
1025  *  @hw: pointer to the HW structure
1026  *
1027  *  Stop any current commands to the EEPROM and clear the EEPROM request bit,
1028  *  then release the semaphores acquired.
1029  **/
1030 static void e1000_release_nvm_82575(struct e1000_hw *hw)
1031 {
1032 	DEBUGFUNC("e1000_release_nvm_82575");
1033 
1034 	e1000_release_nvm_generic(hw);
1035 
1036 	e1000_release_swfw_sync(hw, E1000_SWFW_EEP_SM);
1037 }
1038 
1039 /**
1040  *  e1000_get_cfg_done_82575 - Read config done bit
1041  *  @hw: pointer to the HW structure
1042  *
1043  *  Read the management control register for the config done bit for
1044  *  completion status.  NOTE: silicon which is EEPROM-less will fail trying
1045  *  to read the config done bit, so an error is *ONLY* logged and returns
1046  *  E1000_SUCCESS.  If we were to return with error, EEPROM-less silicon
1047  *  would not be able to be reset or change link.
1048  **/
1049 static s32 e1000_get_cfg_done_82575(struct e1000_hw *hw)
1050 {
1051 	s32 timeout = PHY_CFG_TIMEOUT;
1052 	u32 mask = E1000_NVM_CFG_DONE_PORT_0;
1053 
1054 	DEBUGFUNC("e1000_get_cfg_done_82575");
1055 
1056 	if (hw->bus.func == E1000_FUNC_1)
1057 		mask = E1000_NVM_CFG_DONE_PORT_1;
1058 	else if (hw->bus.func == E1000_FUNC_2)
1059 		mask = E1000_NVM_CFG_DONE_PORT_2;
1060 	else if (hw->bus.func == E1000_FUNC_3)
1061 		mask = E1000_NVM_CFG_DONE_PORT_3;
1062 	while (timeout) {
1063 		if (E1000_READ_REG(hw, E1000_EEMNGCTL) & mask)
1064 			break;
1065 		msec_delay(1);
1066 		timeout--;
1067 	}
1068 	if (!timeout)
1069 		DEBUGOUT("MNG configuration cycle has not completed.\n");
1070 
1071 	/* If EEPROM is not marked present, init the PHY manually */
1072 	if (!(E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_PRES) &&
1073 	    (hw->phy.type == e1000_phy_igp_3))
1074 		e1000_phy_init_script_igp3(hw);
1075 
1076 	return E1000_SUCCESS;
1077 }
1078 
1079 /**
1080  *  e1000_get_link_up_info_82575 - Get link speed/duplex info
1081  *  @hw: pointer to the HW structure
1082  *  @speed: stores the current speed
1083  *  @duplex: stores the current duplex
1084  *
1085  *  This is a wrapper function, if using the serial gigabit media independent
1086  *  interface, use PCS to retrieve the link speed and duplex information.
1087  *  Otherwise, use the generic function to get the link speed and duplex info.
1088  **/
1089 static s32 e1000_get_link_up_info_82575(struct e1000_hw *hw, u16 *speed,
1090 					u16 *duplex)
1091 {
1092 	s32 ret_val;
1093 
1094 	DEBUGFUNC("e1000_get_link_up_info_82575");
1095 
1096 	if (hw->phy.media_type != e1000_media_type_copper)
1097 		ret_val = e1000_get_pcs_speed_and_duplex_82575(hw, speed,
1098 							       duplex);
1099 	else
1100 		ret_val = e1000_get_speed_and_duplex_copper_generic(hw, speed,
1101 								    duplex);
1102 
1103 	return ret_val;
1104 }
1105 
1106 /**
1107  *  e1000_check_for_link_82575 - Check for link
1108  *  @hw: pointer to the HW structure
1109  *
1110  *  If sgmii is enabled, then use the pcs register to determine link, otherwise
1111  *  use the generic interface for determining link.
1112  **/
1113 static s32 e1000_check_for_link_82575(struct e1000_hw *hw)
1114 {
1115 	s32 ret_val;
1116 	u16 speed, duplex;
1117 
1118 	DEBUGFUNC("e1000_check_for_link_82575");
1119 
1120 	if (hw->phy.media_type != e1000_media_type_copper) {
1121 		ret_val = e1000_get_pcs_speed_and_duplex_82575(hw, &speed,
1122 							       &duplex);
1123 		/*
1124 		 * Use this flag to determine if link needs to be checked or
1125 		 * not.  If we have link clear the flag so that we do not
1126 		 * continue to check for link.
1127 		 */
1128 		hw->mac.get_link_status = !hw->mac.serdes_has_link;
1129 
1130 		/*
1131 		 * Configure Flow Control now that Auto-Neg has completed.
1132 		 * First, we need to restore the desired flow control
1133 		 * settings because we may have had to re-autoneg with a
1134 		 * different link partner.
1135 		 */
1136 		ret_val = e1000_config_fc_after_link_up_generic(hw);
1137 		if (ret_val)
1138 			DEBUGOUT("Error configuring flow control\n");
1139 	} else {
1140 		ret_val = e1000_check_for_copper_link_generic(hw);
1141 	}
1142 
1143 	return ret_val;
1144 }
1145 
1146 /**
1147  *  e1000_check_for_link_media_swap - Check which M88E1112 interface linked
1148  *  @hw: pointer to the HW structure
1149  *
1150  *  Poll the M88E1112 interfaces to see which interface achieved link.
1151  */
1152 static s32 e1000_check_for_link_media_swap(struct e1000_hw *hw)
1153 {
1154 	struct e1000_phy_info *phy = &hw->phy;
1155 	s32 ret_val;
1156 	u16 data;
1157 	u8 port = 0;
1158 
1159 	DEBUGFUNC("e1000_check_for_link_media_swap");
1160 
1161 	/* Check for copper. */
1162 	ret_val = phy->ops.write_reg(hw, E1000_M88E1112_PAGE_ADDR, 0);
1163 	if (ret_val)
1164 		return ret_val;
1165 
1166 	ret_val = phy->ops.read_reg(hw, E1000_M88E1112_STATUS, &data);
1167 	if (ret_val)
1168 		return ret_val;
1169 
1170 	if (data & E1000_M88E1112_STATUS_LINK)
1171 		port = E1000_MEDIA_PORT_COPPER;
1172 
1173 	/* Check for other. */
1174 	ret_val = phy->ops.write_reg(hw, E1000_M88E1112_PAGE_ADDR, 1);
1175 	if (ret_val)
1176 		return ret_val;
1177 
1178 	ret_val = phy->ops.read_reg(hw, E1000_M88E1112_STATUS, &data);
1179 	if (ret_val)
1180 		return ret_val;
1181 
1182 	if (data & E1000_M88E1112_STATUS_LINK)
1183 		port = E1000_MEDIA_PORT_OTHER;
1184 
1185 	/* Determine if a swap needs to happen. */
1186 	if (port && (hw->dev_spec._82575.media_port != port)) {
1187 		hw->dev_spec._82575.media_port = port;
1188 		hw->dev_spec._82575.media_changed = TRUE;
1189 	}
1190 
1191 	if (port == E1000_MEDIA_PORT_COPPER) {
1192 		/* reset page to 0 */
1193 		ret_val = phy->ops.write_reg(hw, E1000_M88E1112_PAGE_ADDR, 0);
1194 		if (ret_val)
1195 			return ret_val;
1196 		e1000_check_for_link_82575(hw);
1197 	} else {
1198 		e1000_check_for_link_82575(hw);
1199 		/* reset page to 0 */
1200 		ret_val = phy->ops.write_reg(hw, E1000_M88E1112_PAGE_ADDR, 0);
1201 		if (ret_val)
1202 			return ret_val;
1203 	}
1204 
1205 	return E1000_SUCCESS;
1206 }
1207 
1208 /**
1209  *  e1000_power_up_serdes_link_82575 - Power up the serdes link after shutdown
1210  *  @hw: pointer to the HW structure
1211  **/
1212 static void e1000_power_up_serdes_link_82575(struct e1000_hw *hw)
1213 {
1214 	u32 reg;
1215 
1216 	DEBUGFUNC("e1000_power_up_serdes_link_82575");
1217 
1218 	if ((hw->phy.media_type != e1000_media_type_internal_serdes) &&
1219 	    !e1000_sgmii_active_82575(hw))
1220 		return;
1221 
1222 	/* Enable PCS to turn on link */
1223 	reg = E1000_READ_REG(hw, E1000_PCS_CFG0);
1224 	reg |= E1000_PCS_CFG_PCS_EN;
1225 	E1000_WRITE_REG(hw, E1000_PCS_CFG0, reg);
1226 
1227 	/* Power up the laser */
1228 	reg = E1000_READ_REG(hw, E1000_CTRL_EXT);
1229 	reg &= ~E1000_CTRL_EXT_SDP3_DATA;
1230 	E1000_WRITE_REG(hw, E1000_CTRL_EXT, reg);
1231 
1232 	/* flush the write to verify completion */
1233 	E1000_WRITE_FLUSH(hw);
1234 	msec_delay(1);
1235 }
1236 
1237 /**
1238  *  e1000_get_pcs_speed_and_duplex_82575 - Retrieve current speed/duplex
1239  *  @hw: pointer to the HW structure
1240  *  @speed: stores the current speed
1241  *  @duplex: stores the current duplex
1242  *
1243  *  Using the physical coding sub-layer (PCS), retrieve the current speed and
1244  *  duplex, then store the values in the pointers provided.
1245  **/
1246 static s32 e1000_get_pcs_speed_and_duplex_82575(struct e1000_hw *hw,
1247 						u16 *speed, u16 *duplex)
1248 {
1249 	struct e1000_mac_info *mac = &hw->mac;
1250 	u32 pcs;
1251 	u32 status;
1252 
1253 	DEBUGFUNC("e1000_get_pcs_speed_and_duplex_82575");
1254 
1255 	/*
1256 	 * Read the PCS Status register for link state. For non-copper mode,
1257 	 * the status register is not accurate. The PCS status register is
1258 	 * used instead.
1259 	 */
1260 	pcs = E1000_READ_REG(hw, E1000_PCS_LSTAT);
1261 
1262 	/*
1263 	 * The link up bit determines when link is up on autoneg.
1264 	 */
1265 	if (pcs & E1000_PCS_LSTS_LINK_OK) {
1266 		mac->serdes_has_link = TRUE;
1267 
1268 		/* Detect and store PCS speed */
1269 		if (pcs & E1000_PCS_LSTS_SPEED_1000)
1270 			*speed = SPEED_1000;
1271 		else if (pcs & E1000_PCS_LSTS_SPEED_100)
1272 			*speed = SPEED_100;
1273 		else
1274 			*speed = SPEED_10;
1275 
1276 		/* Detect and store PCS duplex */
1277 		if (pcs & E1000_PCS_LSTS_DUPLEX_FULL)
1278 			*duplex = FULL_DUPLEX;
1279 		else
1280 			*duplex = HALF_DUPLEX;
1281 
1282 		/* Check if it is an I354 2.5Gb backplane connection. */
1283 		if (mac->type == e1000_i354) {
1284 			status = E1000_READ_REG(hw, E1000_STATUS);
1285 			if ((status & E1000_STATUS_2P5_SKU) &&
1286 			    !(status & E1000_STATUS_2P5_SKU_OVER)) {
1287 				*speed = SPEED_2500;
1288 				*duplex = FULL_DUPLEX;
1289 				DEBUGOUT("2500 Mbs, ");
1290 				DEBUGOUT("Full Duplex\n");
1291 			}
1292 		}
1293 
1294 	} else {
1295 		mac->serdes_has_link = FALSE;
1296 		*speed = 0;
1297 		*duplex = 0;
1298 	}
1299 
1300 	return E1000_SUCCESS;
1301 }
1302 
1303 /**
1304  *  e1000_shutdown_serdes_link_82575 - Remove link during power down
1305  *  @hw: pointer to the HW structure
1306  *
1307  *  In the case of serdes shut down sfp and PCS on driver unload
1308  *  when management pass thru is not enabled.
1309  **/
1310 void e1000_shutdown_serdes_link_82575(struct e1000_hw *hw)
1311 {
1312 	u32 reg;
1313 
1314 	DEBUGFUNC("e1000_shutdown_serdes_link_82575");
1315 
1316 	if ((hw->phy.media_type != e1000_media_type_internal_serdes) &&
1317 	    !e1000_sgmii_active_82575(hw))
1318 		return;
1319 
1320 	if (!e1000_enable_mng_pass_thru(hw)) {
1321 		/* Disable PCS to turn off link */
1322 		reg = E1000_READ_REG(hw, E1000_PCS_CFG0);
1323 		reg &= ~E1000_PCS_CFG_PCS_EN;
1324 		E1000_WRITE_REG(hw, E1000_PCS_CFG0, reg);
1325 
1326 		/* shutdown the laser */
1327 		reg = E1000_READ_REG(hw, E1000_CTRL_EXT);
1328 		reg |= E1000_CTRL_EXT_SDP3_DATA;
1329 		E1000_WRITE_REG(hw, E1000_CTRL_EXT, reg);
1330 
1331 		/* flush the write to verify completion */
1332 		E1000_WRITE_FLUSH(hw);
1333 		msec_delay(1);
1334 	}
1335 
1336 	return;
1337 }
1338 
1339 /**
1340  *  e1000_reset_hw_82575 - Reset hardware
1341  *  @hw: pointer to the HW structure
1342  *
1343  *  This resets the hardware into a known state.
1344  **/
1345 static s32 e1000_reset_hw_82575(struct e1000_hw *hw)
1346 {
1347 	u32 ctrl;
1348 	s32 ret_val;
1349 
1350 	DEBUGFUNC("e1000_reset_hw_82575");
1351 
1352 	/*
1353 	 * Prevent the PCI-E bus from sticking if there is no TLP connection
1354 	 * on the last TLP read/write transaction when MAC is reset.
1355 	 */
1356 	ret_val = e1000_disable_pcie_master_generic(hw);
1357 	if (ret_val)
1358 		DEBUGOUT("PCI-E Master disable polling has failed.\n");
1359 
1360 	/* set the completion timeout for interface */
1361 	ret_val = e1000_set_pcie_completion_timeout(hw);
1362 	if (ret_val)
1363 		DEBUGOUT("PCI-E Set completion timeout has failed.\n");
1364 
1365 	DEBUGOUT("Masking off all interrupts\n");
1366 	E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
1367 
1368 	E1000_WRITE_REG(hw, E1000_RCTL, 0);
1369 	E1000_WRITE_REG(hw, E1000_TCTL, E1000_TCTL_PSP);
1370 	E1000_WRITE_FLUSH(hw);
1371 
1372 	msec_delay(10);
1373 
1374 	ctrl = E1000_READ_REG(hw, E1000_CTRL);
1375 
1376 	DEBUGOUT("Issuing a global reset to MAC\n");
1377 	E1000_WRITE_REG(hw, E1000_CTRL, ctrl | E1000_CTRL_RST);
1378 
1379 	ret_val = e1000_get_auto_rd_done_generic(hw);
1380 	if (ret_val) {
1381 		/*
1382 		 * When auto config read does not complete, do not
1383 		 * return with an error. This can happen in situations
1384 		 * where there is no eeprom and prevents getting link.
1385 		 */
1386 		DEBUGOUT("Auto Read Done did not complete\n");
1387 	}
1388 
1389 	/* If EEPROM is not present, run manual init scripts */
1390 	if (!(E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_PRES))
1391 		e1000_reset_init_script_82575(hw);
1392 
1393 	/* Clear any pending interrupt events. */
1394 	E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
1395 	E1000_READ_REG(hw, E1000_ICR);
1396 
1397 	/* Install any alternate MAC address into RAR0 */
1398 	ret_val = e1000_check_alt_mac_addr_generic(hw);
1399 
1400 	return ret_val;
1401 }
1402 
1403 /**
1404  *  e1000_init_hw_82575 - Initialize hardware
1405  *  @hw: pointer to the HW structure
1406  *
1407  *  This inits the hardware readying it for operation.
1408  **/
1409 s32 e1000_init_hw_82575(struct e1000_hw *hw)
1410 {
1411 	struct e1000_mac_info *mac = &hw->mac;
1412 	s32 ret_val;
1413 	u16 i, rar_count = mac->rar_entry_count;
1414 
1415 	DEBUGFUNC("e1000_init_hw_82575");
1416 
1417 	/* Initialize identification LED */
1418 	ret_val = mac->ops.id_led_init(hw);
1419 	if (ret_val) {
1420 		DEBUGOUT("Error initializing identification LED\n");
1421 		/* This is not fatal and we should not stop init due to this */
1422 	}
1423 
1424 	/* Disabling VLAN filtering */
1425 	DEBUGOUT("Initializing the IEEE VLAN\n");
1426 	mac->ops.clear_vfta(hw);
1427 
1428 	/* Setup the receive address */
1429 	e1000_init_rx_addrs_generic(hw, rar_count);
1430 
1431 	/* Zero out the Multicast HASH table */
1432 	DEBUGOUT("Zeroing the MTA\n");
1433 	for (i = 0; i < mac->mta_reg_count; i++)
1434 		E1000_WRITE_REG_ARRAY(hw, E1000_MTA, i, 0);
1435 
1436 	/* Zero out the Unicast HASH table */
1437 	DEBUGOUT("Zeroing the UTA\n");
1438 	for (i = 0; i < mac->uta_reg_count; i++)
1439 		E1000_WRITE_REG_ARRAY(hw, E1000_UTA, i, 0);
1440 
1441 	/* Setup link and flow control */
1442 	ret_val = mac->ops.setup_link(hw);
1443 
1444 	/* Set the default MTU size */
1445 	hw->dev_spec._82575.mtu = 1500;
1446 
1447 	/*
1448 	 * Clear all of the statistics registers (clear on read).  It is
1449 	 * important that we do this after we have tried to establish link
1450 	 * because the symbol error count will increment wildly if there
1451 	 * is no link.
1452 	 */
1453 	e1000_clear_hw_cntrs_82575(hw);
1454 
1455 	return ret_val;
1456 }
1457 
1458 /**
1459  *  e1000_setup_copper_link_82575 - Configure copper link settings
1460  *  @hw: pointer to the HW structure
1461  *
1462  *  Configures the link for auto-neg or forced speed and duplex.  Then we check
1463  *  for link, once link is established calls to configure collision distance
1464  *  and flow control are called.
1465  **/
1466 static s32 e1000_setup_copper_link_82575(struct e1000_hw *hw)
1467 {
1468 	u32 ctrl;
1469 	s32 ret_val;
1470 	u32 phpm_reg;
1471 
1472 	DEBUGFUNC("e1000_setup_copper_link_82575");
1473 
1474 	ctrl = E1000_READ_REG(hw, E1000_CTRL);
1475 	ctrl |= E1000_CTRL_SLU;
1476 	ctrl &= ~(E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
1477 	E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
1478 
1479 	/* Clear Go Link Disconnect bit on supported devices */
1480 	switch (hw->mac.type) {
1481 	case e1000_82580:
1482 	case e1000_i350:
1483 	case e1000_i210:
1484 	case e1000_i211:
1485 		phpm_reg = E1000_READ_REG(hw, E1000_82580_PHY_POWER_MGMT);
1486 		phpm_reg &= ~E1000_82580_PM_GO_LINKD;
1487 		E1000_WRITE_REG(hw, E1000_82580_PHY_POWER_MGMT, phpm_reg);
1488 		break;
1489 	default:
1490 		break;
1491 	}
1492 
1493 	ret_val = e1000_setup_serdes_link_82575(hw);
1494 	if (ret_val)
1495 		goto out;
1496 
1497 	if (e1000_sgmii_active_82575(hw)) {
1498 		/* allow time for SFP cage time to power up phy */
1499 		msec_delay(300);
1500 
1501 		ret_val = hw->phy.ops.reset(hw);
1502 		if (ret_val) {
1503 			DEBUGOUT("Error resetting the PHY.\n");
1504 			goto out;
1505 		}
1506 	}
1507 	switch (hw->phy.type) {
1508 	case e1000_phy_i210:
1509 	case e1000_phy_m88:
1510 		switch (hw->phy.id) {
1511 		case I347AT4_E_PHY_ID:
1512 		case M88E1112_E_PHY_ID:
1513 		case M88E1340M_E_PHY_ID:
1514 		case M88E1543_E_PHY_ID:
1515 		case M88E1512_E_PHY_ID:
1516 		case I210_I_PHY_ID:
1517 			ret_val = e1000_copper_link_setup_m88_gen2(hw);
1518 			break;
1519 		default:
1520 			ret_val = e1000_copper_link_setup_m88(hw);
1521 			break;
1522 		}
1523 		break;
1524 	case e1000_phy_igp_3:
1525 		ret_val = e1000_copper_link_setup_igp(hw);
1526 		break;
1527 	case e1000_phy_82580:
1528 		ret_val = e1000_copper_link_setup_82577(hw);
1529 		break;
1530 	default:
1531 		ret_val = -E1000_ERR_PHY;
1532 		break;
1533 	}
1534 
1535 	if (ret_val)
1536 		goto out;
1537 
1538 	ret_val = e1000_setup_copper_link_generic(hw);
1539 out:
1540 	return ret_val;
1541 }
1542 
1543 /**
1544  *  e1000_setup_serdes_link_82575 - Setup link for serdes
1545  *  @hw: pointer to the HW structure
1546  *
1547  *  Configure the physical coding sub-layer (PCS) link.  The PCS link is
1548  *  used on copper connections where the serialized gigabit media independent
1549  *  interface (sgmii), or serdes fiber is being used.  Configures the link
1550  *  for auto-negotiation or forces speed/duplex.
1551  **/
1552 static s32 e1000_setup_serdes_link_82575(struct e1000_hw *hw)
1553 {
1554 	u32 ctrl_ext, ctrl_reg, reg, anadv_reg;
1555 	bool pcs_autoneg;
1556 	s32 ret_val = E1000_SUCCESS;
1557 	u16 data;
1558 
1559 	DEBUGFUNC("e1000_setup_serdes_link_82575");
1560 
1561 	if ((hw->phy.media_type != e1000_media_type_internal_serdes) &&
1562 	    !e1000_sgmii_active_82575(hw))
1563 		return ret_val;
1564 
1565 	/*
1566 	 * On the 82575, SerDes loopback mode persists until it is
1567 	 * explicitly turned off or a power cycle is performed.  A read to
1568 	 * the register does not indicate its status.  Therefore, we ensure
1569 	 * loopback mode is disabled during initialization.
1570 	 */
1571 	E1000_WRITE_REG(hw, E1000_SCTL, E1000_SCTL_DISABLE_SERDES_LOOPBACK);
1572 
1573 	/* power on the sfp cage if present */
1574 	ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
1575 	ctrl_ext &= ~E1000_CTRL_EXT_SDP3_DATA;
1576 	E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext);
1577 
1578 	ctrl_reg = E1000_READ_REG(hw, E1000_CTRL);
1579 	ctrl_reg |= E1000_CTRL_SLU;
1580 
1581 	/* set both sw defined pins on 82575/82576*/
1582 	if (hw->mac.type == e1000_82575 || hw->mac.type == e1000_82576)
1583 		ctrl_reg |= E1000_CTRL_SWDPIN0 | E1000_CTRL_SWDPIN1;
1584 
1585 	reg = E1000_READ_REG(hw, E1000_PCS_LCTL);
1586 
1587 	/* default pcs_autoneg to the same setting as mac autoneg */
1588 	pcs_autoneg = hw->mac.autoneg;
1589 
1590 	switch (ctrl_ext & E1000_CTRL_EXT_LINK_MODE_MASK) {
1591 	case E1000_CTRL_EXT_LINK_MODE_SGMII:
1592 		/* sgmii mode lets the phy handle forcing speed/duplex */
1593 		pcs_autoneg = TRUE;
1594 		/* autoneg time out should be disabled for SGMII mode */
1595 		reg &= ~(E1000_PCS_LCTL_AN_TIMEOUT);
1596 		break;
1597 	case E1000_CTRL_EXT_LINK_MODE_1000BASE_KX:
1598 		/* disable PCS autoneg and support parallel detect only */
1599 		pcs_autoneg = FALSE;
1600 		/* FALLTHROUGH */
1601 	default:
1602 		if (hw->mac.type == e1000_82575 ||
1603 		    hw->mac.type == e1000_82576) {
1604 			ret_val = hw->nvm.ops.read(hw, NVM_COMPAT, 1, &data);
1605 			if (ret_val) {
1606 				DEBUGOUT("NVM Read Error\n");
1607 				return ret_val;
1608 			}
1609 
1610 			if (data & E1000_EEPROM_PCS_AUTONEG_DISABLE_BIT)
1611 				pcs_autoneg = FALSE;
1612 		}
1613 
1614 		/*
1615 		 * non-SGMII modes only supports a speed of 1000/Full for the
1616 		 * link so it is best to just force the MAC and let the pcs
1617 		 * link either autoneg or be forced to 1000/Full
1618 		 */
1619 		ctrl_reg |= E1000_CTRL_SPD_1000 | E1000_CTRL_FRCSPD |
1620 			    E1000_CTRL_FD | E1000_CTRL_FRCDPX;
1621 
1622 		/* set speed of 1000/Full if speed/duplex is forced */
1623 		reg |= E1000_PCS_LCTL_FSV_1000 | E1000_PCS_LCTL_FDV_FULL;
1624 		break;
1625 	}
1626 
1627 	E1000_WRITE_REG(hw, E1000_CTRL, ctrl_reg);
1628 
1629 	/*
1630 	 * New SerDes mode allows for forcing speed or autonegotiating speed
1631 	 * at 1gb. Autoneg should be default set by most drivers. This is the
1632 	 * mode that will be compatible with older link partners and switches.
1633 	 * However, both are supported by the hardware and some drivers/tools.
1634 	 */
1635 	reg &= ~(E1000_PCS_LCTL_AN_ENABLE | E1000_PCS_LCTL_FLV_LINK_UP |
1636 		 E1000_PCS_LCTL_FSD | E1000_PCS_LCTL_FORCE_LINK);
1637 
1638 	if (pcs_autoneg) {
1639 		/* Set PCS register for autoneg */
1640 		reg |= E1000_PCS_LCTL_AN_ENABLE | /* Enable Autoneg */
1641 		       E1000_PCS_LCTL_AN_RESTART; /* Restart autoneg */
1642 
1643 		/* Disable force flow control for autoneg */
1644 		reg &= ~E1000_PCS_LCTL_FORCE_FCTRL;
1645 
1646 		/* Configure flow control advertisement for autoneg */
1647 		anadv_reg = E1000_READ_REG(hw, E1000_PCS_ANADV);
1648 		anadv_reg &= ~(E1000_TXCW_ASM_DIR | E1000_TXCW_PAUSE);
1649 
1650 		switch (hw->fc.requested_mode) {
1651 		case e1000_fc_full:
1652 		case e1000_fc_rx_pause:
1653 			anadv_reg |= E1000_TXCW_ASM_DIR;
1654 			anadv_reg |= E1000_TXCW_PAUSE;
1655 			break;
1656 		case e1000_fc_tx_pause:
1657 			anadv_reg |= E1000_TXCW_ASM_DIR;
1658 			break;
1659 		default:
1660 			break;
1661 		}
1662 
1663 		E1000_WRITE_REG(hw, E1000_PCS_ANADV, anadv_reg);
1664 
1665 		DEBUGOUT1("Configuring Autoneg:PCS_LCTL=0x%08X\n", reg);
1666 	} else {
1667 		/* Set PCS register for forced link */
1668 		reg |= E1000_PCS_LCTL_FSD;	/* Force Speed */
1669 
1670 		/* Force flow control for forced link */
1671 		reg |= E1000_PCS_LCTL_FORCE_FCTRL;
1672 
1673 		DEBUGOUT1("Configuring Forced Link:PCS_LCTL=0x%08X\n", reg);
1674 	}
1675 
1676 	E1000_WRITE_REG(hw, E1000_PCS_LCTL, reg);
1677 
1678 	if (!pcs_autoneg && !e1000_sgmii_active_82575(hw))
1679 		e1000_force_mac_fc_generic(hw);
1680 
1681 	return ret_val;
1682 }
1683 
1684 /**
1685  *  e1000_get_media_type_82575 - derives current media type.
1686  *  @hw: pointer to the HW structure
1687  *
1688  *  The media type is chosen reflecting few settings.
1689  *  The following are taken into account:
1690  *  - link mode set in the current port Init Control Word #3
1691  *  - current link mode settings in CSR register
1692  *  - MDIO vs. I2C PHY control interface chosen
1693  *  - SFP module media type
1694  **/
1695 static s32 e1000_get_media_type_82575(struct e1000_hw *hw)
1696 {
1697 	struct e1000_dev_spec_82575 *dev_spec = &hw->dev_spec._82575;
1698 	s32 ret_val = E1000_SUCCESS;
1699 	u32 ctrl_ext = 0;
1700 	u32 link_mode = 0;
1701 
1702 	/* Set internal phy as default */
1703 	dev_spec->sgmii_active = FALSE;
1704 	dev_spec->module_plugged = FALSE;
1705 
1706 	/* Get CSR setting */
1707 	ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
1708 
1709 	/* extract link mode setting */
1710 	link_mode = ctrl_ext & E1000_CTRL_EXT_LINK_MODE_MASK;
1711 
1712 	switch (link_mode) {
1713 	case E1000_CTRL_EXT_LINK_MODE_1000BASE_KX:
1714 		hw->phy.media_type = e1000_media_type_internal_serdes;
1715 		break;
1716 	case E1000_CTRL_EXT_LINK_MODE_GMII:
1717 		hw->phy.media_type = e1000_media_type_copper;
1718 		break;
1719 	case E1000_CTRL_EXT_LINK_MODE_SGMII:
1720 		/* Get phy control interface type set (MDIO vs. I2C)*/
1721 		if (e1000_sgmii_uses_mdio_82575(hw)) {
1722 			hw->phy.media_type = e1000_media_type_copper;
1723 			dev_spec->sgmii_active = TRUE;
1724 			break;
1725 		}
1726 		/* fall through for I2C based SGMII */
1727 		/* FALLTHROUGH */
1728 	case E1000_CTRL_EXT_LINK_MODE_PCIE_SERDES:
1729 		/* read media type from SFP EEPROM */
1730 		ret_val = e1000_set_sfp_media_type_82575(hw);
1731 		if ((ret_val != E1000_SUCCESS) ||
1732 		    (hw->phy.media_type == e1000_media_type_unknown)) {
1733 			/*
1734 			 * If media type was not identified then return media
1735 			 * type defined by the CTRL_EXT settings.
1736 			 */
1737 			hw->phy.media_type = e1000_media_type_internal_serdes;
1738 
1739 			if (link_mode == E1000_CTRL_EXT_LINK_MODE_SGMII) {
1740 				hw->phy.media_type = e1000_media_type_copper;
1741 				dev_spec->sgmii_active = TRUE;
1742 			}
1743 
1744 			break;
1745 		}
1746 
1747 		/* do not change link mode for 100BaseFX */
1748 		if (dev_spec->eth_flags.e100_base_fx)
1749 			break;
1750 
1751 		/* change current link mode setting */
1752 		ctrl_ext &= ~E1000_CTRL_EXT_LINK_MODE_MASK;
1753 
1754 		if (hw->phy.media_type == e1000_media_type_copper)
1755 			ctrl_ext |= E1000_CTRL_EXT_LINK_MODE_SGMII;
1756 		else
1757 			ctrl_ext |= E1000_CTRL_EXT_LINK_MODE_PCIE_SERDES;
1758 
1759 		E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext);
1760 
1761 		break;
1762 	}
1763 
1764 	return ret_val;
1765 }
1766 
1767 /**
1768  *  e1000_set_sfp_media_type_82575 - derives SFP module media type.
1769  *  @hw: pointer to the HW structure
1770  *
1771  *  The media type is chosen based on SFP module.
1772  *  compatibility flags retrieved from SFP ID EEPROM.
1773  **/
1774 static s32 e1000_set_sfp_media_type_82575(struct e1000_hw *hw)
1775 {
1776 	s32 ret_val = E1000_ERR_CONFIG;
1777 	u32 ctrl_ext = 0;
1778 	struct e1000_dev_spec_82575 *dev_spec = &hw->dev_spec._82575;
1779 	struct sfp_e1000_flags *eth_flags = &dev_spec->eth_flags;
1780 	u8 tranceiver_type = 0;
1781 	s32 timeout = 3;
1782 
1783 	/* Turn I2C interface ON and power on sfp cage */
1784 	ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
1785 	ctrl_ext &= ~E1000_CTRL_EXT_SDP3_DATA;
1786 	E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext | E1000_CTRL_I2C_ENA);
1787 
1788 	E1000_WRITE_FLUSH(hw);
1789 
1790 	/* Read SFP module data */
1791 	while (timeout) {
1792 		ret_val = e1000_read_sfp_data_byte(hw,
1793 			E1000_I2CCMD_SFP_DATA_ADDR(E1000_SFF_IDENTIFIER_OFFSET),
1794 			&tranceiver_type);
1795 		if (ret_val == E1000_SUCCESS)
1796 			break;
1797 		msec_delay(100);
1798 		timeout--;
1799 	}
1800 	if (ret_val != E1000_SUCCESS)
1801 		goto out;
1802 
1803 	ret_val = e1000_read_sfp_data_byte(hw,
1804 			E1000_I2CCMD_SFP_DATA_ADDR(E1000_SFF_ETH_FLAGS_OFFSET),
1805 			(u8 *)eth_flags);
1806 	if (ret_val != E1000_SUCCESS)
1807 		goto out;
1808 
1809 	/* Check if there is some SFP module plugged and powered */
1810 	if ((tranceiver_type == E1000_SFF_IDENTIFIER_SFP) ||
1811 	    (tranceiver_type == E1000_SFF_IDENTIFIER_SFF)) {
1812 		dev_spec->module_plugged = TRUE;
1813 		if (eth_flags->e1000_base_lx || eth_flags->e1000_base_sx) {
1814 			hw->phy.media_type = e1000_media_type_internal_serdes;
1815 		} else if (eth_flags->e100_base_fx) {
1816 			dev_spec->sgmii_active = TRUE;
1817 			hw->phy.media_type = e1000_media_type_internal_serdes;
1818 		} else if (eth_flags->e1000_base_t) {
1819 			dev_spec->sgmii_active = TRUE;
1820 			hw->phy.media_type = e1000_media_type_copper;
1821 		} else {
1822 			hw->phy.media_type = e1000_media_type_unknown;
1823 			DEBUGOUT("PHY module has not been recognized\n");
1824 			goto out;
1825 		}
1826 	} else {
1827 		hw->phy.media_type = e1000_media_type_unknown;
1828 	}
1829 	ret_val = E1000_SUCCESS;
1830 out:
1831 	/* Restore I2C interface setting */
1832 	E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext);
1833 	return ret_val;
1834 }
1835 
1836 /**
1837  *  e1000_valid_led_default_82575 - Verify a valid default LED config
1838  *  @hw: pointer to the HW structure
1839  *  @data: pointer to the NVM (EEPROM)
1840  *
1841  *  Read the EEPROM for the current default LED configuration.  If the
1842  *  LED configuration is not valid, set to a valid LED configuration.
1843  **/
1844 static s32 e1000_valid_led_default_82575(struct e1000_hw *hw, u16 *data)
1845 {
1846 	s32 ret_val;
1847 
1848 	DEBUGFUNC("e1000_valid_led_default_82575");
1849 
1850 	ret_val = hw->nvm.ops.read(hw, NVM_ID_LED_SETTINGS, 1, data);
1851 	if (ret_val) {
1852 		DEBUGOUT("NVM Read Error\n");
1853 		goto out;
1854 	}
1855 
1856 	if (*data == ID_LED_RESERVED_0000 || *data == ID_LED_RESERVED_FFFF) {
1857 		switch (hw->phy.media_type) {
1858 		case e1000_media_type_internal_serdes:
1859 			*data = ID_LED_DEFAULT_82575_SERDES;
1860 			break;
1861 		case e1000_media_type_copper:
1862 		default:
1863 			*data = ID_LED_DEFAULT;
1864 			break;
1865 		}
1866 	}
1867 out:
1868 	return ret_val;
1869 }
1870 
1871 /**
1872  *  e1000_sgmii_active_82575 - Return sgmii state
1873  *  @hw: pointer to the HW structure
1874  *
1875  *  82575 silicon has a serialized gigabit media independent interface (sgmii)
1876  *  which can be enabled for use in the embedded applications.  Simply
1877  *  return the current state of the sgmii interface.
1878  **/
1879 static bool e1000_sgmii_active_82575(struct e1000_hw *hw)
1880 {
1881 	struct e1000_dev_spec_82575 *dev_spec = &hw->dev_spec._82575;
1882 	return dev_spec->sgmii_active;
1883 }
1884 
1885 /**
1886  *  e1000_reset_init_script_82575 - Inits HW defaults after reset
1887  *  @hw: pointer to the HW structure
1888  *
1889  *  Inits recommended HW defaults after a reset when there is no EEPROM
1890  *  detected. This is only for the 82575.
1891  **/
1892 static s32 e1000_reset_init_script_82575(struct e1000_hw *hw)
1893 {
1894 	DEBUGFUNC("e1000_reset_init_script_82575");
1895 
1896 	if (hw->mac.type == e1000_82575) {
1897 		DEBUGOUT("Running reset init script for 82575\n");
1898 		/* SerDes configuration via SERDESCTRL */
1899 		e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCTL, 0x00, 0x0C);
1900 		e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCTL, 0x01, 0x78);
1901 		e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCTL, 0x1B, 0x23);
1902 		e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCTL, 0x23, 0x15);
1903 
1904 		/* CCM configuration via CCMCTL register */
1905 		e1000_write_8bit_ctrl_reg_generic(hw, E1000_CCMCTL, 0x14, 0x00);
1906 		e1000_write_8bit_ctrl_reg_generic(hw, E1000_CCMCTL, 0x10, 0x00);
1907 
1908 		/* PCIe lanes configuration */
1909 		e1000_write_8bit_ctrl_reg_generic(hw, E1000_GIOCTL, 0x00, 0xEC);
1910 		e1000_write_8bit_ctrl_reg_generic(hw, E1000_GIOCTL, 0x61, 0xDF);
1911 		e1000_write_8bit_ctrl_reg_generic(hw, E1000_GIOCTL, 0x34, 0x05);
1912 		e1000_write_8bit_ctrl_reg_generic(hw, E1000_GIOCTL, 0x2F, 0x81);
1913 
1914 		/* PCIe PLL Configuration */
1915 		e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCCTL, 0x02, 0x47);
1916 		e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCCTL, 0x14, 0x00);
1917 		e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCCTL, 0x10, 0x00);
1918 	}
1919 
1920 	return E1000_SUCCESS;
1921 }
1922 
1923 /**
1924  *  e1000_read_mac_addr_82575 - Read device MAC address
1925  *  @hw: pointer to the HW structure
1926  **/
1927 static s32 e1000_read_mac_addr_82575(struct e1000_hw *hw)
1928 {
1929 	s32 ret_val;
1930 
1931 	DEBUGFUNC("e1000_read_mac_addr_82575");
1932 
1933 	/*
1934 	 * If there's an alternate MAC address place it in RAR0
1935 	 * so that it will override the Si installed default perm
1936 	 * address.
1937 	 */
1938 	ret_val = e1000_check_alt_mac_addr_generic(hw);
1939 	if (ret_val)
1940 		goto out;
1941 
1942 	ret_val = e1000_read_mac_addr_generic(hw);
1943 
1944 out:
1945 	return ret_val;
1946 }
1947 
1948 /**
1949  *  e1000_config_collision_dist_82575 - Configure collision distance
1950  *  @hw: pointer to the HW structure
1951  *
1952  *  Configures the collision distance to the default value and is used
1953  *  during link setup.
1954  **/
1955 static void e1000_config_collision_dist_82575(struct e1000_hw *hw)
1956 {
1957 	u32 tctl_ext;
1958 
1959 	DEBUGFUNC("e1000_config_collision_dist_82575");
1960 
1961 	tctl_ext = E1000_READ_REG(hw, E1000_TCTL_EXT);
1962 
1963 	tctl_ext &= ~E1000_TCTL_EXT_COLD;
1964 	tctl_ext |= E1000_COLLISION_DISTANCE << E1000_TCTL_EXT_COLD_SHIFT;
1965 
1966 	E1000_WRITE_REG(hw, E1000_TCTL_EXT, tctl_ext);
1967 	E1000_WRITE_FLUSH(hw);
1968 }
1969 
1970 /**
1971  * e1000_power_down_phy_copper_82575 - Remove link during PHY power down
1972  * @hw: pointer to the HW structure
1973  *
1974  * In the case of a PHY power down to save power, or to turn off link during a
1975  * driver unload, or wake on lan is not enabled, remove the link.
1976  **/
1977 static void e1000_power_down_phy_copper_82575(struct e1000_hw *hw)
1978 {
1979 	struct e1000_phy_info *phy = &hw->phy;
1980 
1981 	if (!(phy->ops.check_reset_block))
1982 		return;
1983 
1984 	/* If the management interface is not enabled, then power down */
1985 	if (!(e1000_enable_mng_pass_thru(hw) || phy->ops.check_reset_block(hw)))
1986 		e1000_power_down_phy_copper(hw);
1987 
1988 	return;
1989 }
1990 
1991 /**
1992  *  e1000_clear_hw_cntrs_82575 - Clear device specific hardware counters
1993  *  @hw: pointer to the HW structure
1994  *
1995  *  Clears the hardware counters by reading the counter registers.
1996  **/
1997 static void e1000_clear_hw_cntrs_82575(struct e1000_hw *hw)
1998 {
1999 	DEBUGFUNC("e1000_clear_hw_cntrs_82575");
2000 
2001 	e1000_clear_hw_cntrs_base_generic(hw);
2002 
2003 	E1000_READ_REG(hw, E1000_PRC64);
2004 	E1000_READ_REG(hw, E1000_PRC127);
2005 	E1000_READ_REG(hw, E1000_PRC255);
2006 	E1000_READ_REG(hw, E1000_PRC511);
2007 	E1000_READ_REG(hw, E1000_PRC1023);
2008 	E1000_READ_REG(hw, E1000_PRC1522);
2009 	E1000_READ_REG(hw, E1000_PTC64);
2010 	E1000_READ_REG(hw, E1000_PTC127);
2011 	E1000_READ_REG(hw, E1000_PTC255);
2012 	E1000_READ_REG(hw, E1000_PTC511);
2013 	E1000_READ_REG(hw, E1000_PTC1023);
2014 	E1000_READ_REG(hw, E1000_PTC1522);
2015 
2016 	E1000_READ_REG(hw, E1000_ALGNERRC);
2017 	E1000_READ_REG(hw, E1000_RXERRC);
2018 	E1000_READ_REG(hw, E1000_TNCRS);
2019 	E1000_READ_REG(hw, E1000_CEXTERR);
2020 	E1000_READ_REG(hw, E1000_TSCTC);
2021 	E1000_READ_REG(hw, E1000_TSCTFC);
2022 
2023 	E1000_READ_REG(hw, E1000_MGTPRC);
2024 	E1000_READ_REG(hw, E1000_MGTPDC);
2025 	E1000_READ_REG(hw, E1000_MGTPTC);
2026 
2027 	E1000_READ_REG(hw, E1000_IAC);
2028 	E1000_READ_REG(hw, E1000_ICRXOC);
2029 
2030 	E1000_READ_REG(hw, E1000_ICRXPTC);
2031 	E1000_READ_REG(hw, E1000_ICRXATC);
2032 	E1000_READ_REG(hw, E1000_ICTXPTC);
2033 	E1000_READ_REG(hw, E1000_ICTXATC);
2034 	E1000_READ_REG(hw, E1000_ICTXQEC);
2035 	E1000_READ_REG(hw, E1000_ICTXQMTC);
2036 	E1000_READ_REG(hw, E1000_ICRXDMTC);
2037 
2038 	E1000_READ_REG(hw, E1000_CBTMPC);
2039 	E1000_READ_REG(hw, E1000_HTDPMC);
2040 	E1000_READ_REG(hw, E1000_CBRMPC);
2041 	E1000_READ_REG(hw, E1000_RPTHC);
2042 	E1000_READ_REG(hw, E1000_HGPTC);
2043 	E1000_READ_REG(hw, E1000_HTCBDPC);
2044 	E1000_READ_REG(hw, E1000_HGORCL);
2045 	E1000_READ_REG(hw, E1000_HGORCH);
2046 	E1000_READ_REG(hw, E1000_HGOTCL);
2047 	E1000_READ_REG(hw, E1000_HGOTCH);
2048 	E1000_READ_REG(hw, E1000_LENERRS);
2049 
2050 	/* This register should not be read in copper configurations */
2051 	if ((hw->phy.media_type == e1000_media_type_internal_serdes) ||
2052 	    e1000_sgmii_active_82575(hw))
2053 		E1000_READ_REG(hw, E1000_SCVPC);
2054 }
2055 
2056 /**
2057  *  e1000_rx_fifo_flush_82575 - Clean rx fifo after Rx enable
2058  *  @hw: pointer to the HW structure
2059  *
2060  *  After Rx enable, if manageability is enabled then there is likely some
2061  *  bad data at the start of the fifo and possibly in the DMA fifo.  This
2062  *  function clears the fifos and flushes any packets that came in as rx was
2063  *  being enabled.
2064  **/
2065 void e1000_rx_fifo_flush_82575(struct e1000_hw *hw)
2066 {
2067 	u32 rctl, rlpml, rxdctl[4], rfctl, temp_rctl, rx_enabled;
2068 	int i, ms_wait;
2069 
2070 	DEBUGFUNC("e1000_rx_fifo_flush_82575");
2071 
2072 	/* disable IPv6 options as per hardware errata */
2073 	rfctl = E1000_READ_REG(hw, E1000_RFCTL);
2074 	rfctl |= E1000_RFCTL_IPV6_EX_DIS;
2075 	E1000_WRITE_REG(hw, E1000_RFCTL, rfctl);
2076 
2077 	if (hw->mac.type != e1000_82575 ||
2078 	    !(E1000_READ_REG(hw, E1000_MANC) & E1000_MANC_RCV_TCO_EN))
2079 		return;
2080 
2081 	/* Disable all Rx queues */
2082 	for (i = 0; i < 4; i++) {
2083 		rxdctl[i] = E1000_READ_REG(hw, E1000_RXDCTL(i));
2084 		E1000_WRITE_REG(hw, E1000_RXDCTL(i),
2085 				rxdctl[i] & ~E1000_RXDCTL_QUEUE_ENABLE);
2086 	}
2087 	/* Poll all queues to verify they have shut down */
2088 	for (ms_wait = 0; ms_wait < 10; ms_wait++) {
2089 		msec_delay(1);
2090 		rx_enabled = 0;
2091 		for (i = 0; i < 4; i++)
2092 			rx_enabled |= E1000_READ_REG(hw, E1000_RXDCTL(i));
2093 		if (!(rx_enabled & E1000_RXDCTL_QUEUE_ENABLE))
2094 			break;
2095 	}
2096 
2097 	if (ms_wait == 10)
2098 		DEBUGOUT("Queue disable timed out after 10ms\n");
2099 
2100 	/* Clear RLPML, RCTL.SBP, RFCTL.LEF, and set RCTL.LPE so that all
2101 	 * incoming packets are rejected.  Set enable and wait 2ms so that
2102 	 * any packet that was coming in as RCTL.EN was set is flushed
2103 	 */
2104 	E1000_WRITE_REG(hw, E1000_RFCTL, rfctl & ~E1000_RFCTL_LEF);
2105 
2106 	rlpml = E1000_READ_REG(hw, E1000_RLPML);
2107 	E1000_WRITE_REG(hw, E1000_RLPML, 0);
2108 
2109 	rctl = E1000_READ_REG(hw, E1000_RCTL);
2110 	temp_rctl = rctl & ~(E1000_RCTL_EN | E1000_RCTL_SBP);
2111 	temp_rctl |= E1000_RCTL_LPE;
2112 
2113 	E1000_WRITE_REG(hw, E1000_RCTL, temp_rctl);
2114 	E1000_WRITE_REG(hw, E1000_RCTL, temp_rctl | E1000_RCTL_EN);
2115 	E1000_WRITE_FLUSH(hw);
2116 	msec_delay(2);
2117 
2118 	/* Enable Rx queues that were previously enabled and restore our
2119 	 * previous state
2120 	 */
2121 	for (i = 0; i < 4; i++)
2122 		E1000_WRITE_REG(hw, E1000_RXDCTL(i), rxdctl[i]);
2123 	E1000_WRITE_REG(hw, E1000_RCTL, rctl);
2124 	E1000_WRITE_FLUSH(hw);
2125 
2126 	E1000_WRITE_REG(hw, E1000_RLPML, rlpml);
2127 	E1000_WRITE_REG(hw, E1000_RFCTL, rfctl);
2128 
2129 	/* Flush receive errors generated by workaround */
2130 	E1000_READ_REG(hw, E1000_ROC);
2131 	E1000_READ_REG(hw, E1000_RNBC);
2132 	E1000_READ_REG(hw, E1000_MPC);
2133 }
2134 
2135 /**
2136  *  e1000_set_pcie_completion_timeout - set pci-e completion timeout
2137  *  @hw: pointer to the HW structure
2138  *
2139  *  The defaults for 82575 and 82576 should be in the range of 50us to 50ms,
2140  *  however the hardware default for these parts is 500us to 1ms which is less
2141  *  than the 10ms recommended by the pci-e spec.  To address this we need to
2142  *  increase the value to either 10ms to 200ms for capability version 1 config,
2143  *  or 16ms to 55ms for version 2.
2144  **/
2145 static s32 e1000_set_pcie_completion_timeout(struct e1000_hw *hw)
2146 {
2147 	u32 gcr = E1000_READ_REG(hw, E1000_GCR);
2148 	s32 ret_val = E1000_SUCCESS;
2149 	u16 pcie_devctl2;
2150 
2151 	/* only take action if timeout value is defaulted to 0 */
2152 	if (gcr & E1000_GCR_CMPL_TMOUT_MASK)
2153 		goto out;
2154 
2155 	/*
2156 	 * if capababilities version is type 1 we can write the
2157 	 * timeout of 10ms to 200ms through the GCR register
2158 	 */
2159 	if (!(gcr & E1000_GCR_CAP_VER2)) {
2160 		gcr |= E1000_GCR_CMPL_TMOUT_10ms;
2161 		goto out;
2162 	}
2163 
2164 	/*
2165 	 * for version 2 capabilities we need to write the config space
2166 	 * directly in order to set the completion timeout value for
2167 	 * 16ms to 55ms
2168 	 */
2169 	ret_val = e1000_read_pcie_cap_reg(hw, PCIE_DEVICE_CONTROL2,
2170 					  &pcie_devctl2);
2171 	if (ret_val)
2172 		goto out;
2173 
2174 	pcie_devctl2 |= PCIE_DEVICE_CONTROL2_16ms;
2175 
2176 	ret_val = e1000_write_pcie_cap_reg(hw, PCIE_DEVICE_CONTROL2,
2177 					   &pcie_devctl2);
2178 out:
2179 	/* disable completion timeout resend */
2180 	gcr &= ~E1000_GCR_CMPL_TMOUT_RESEND;
2181 
2182 	E1000_WRITE_REG(hw, E1000_GCR, gcr);
2183 	return ret_val;
2184 }
2185 
2186 /**
2187  *  e1000_vmdq_set_anti_spoofing_pf - enable or disable anti-spoofing
2188  *  @hw: pointer to the hardware struct
2189  *  @enable: state to enter, either enabled or disabled
2190  *  @pf: Physical Function pool - do not set anti-spoofing for the PF
2191  *
2192  *  enables/disables L2 switch anti-spoofing functionality.
2193  **/
2194 void e1000_vmdq_set_anti_spoofing_pf(struct e1000_hw *hw, bool enable, int pf)
2195 {
2196 	u32 reg_val, reg_offset;
2197 
2198 	switch (hw->mac.type) {
2199 	case e1000_82576:
2200 		reg_offset = E1000_DTXSWC;
2201 		break;
2202 	case e1000_i350:
2203 	case e1000_i354:
2204 		reg_offset = E1000_TXSWC;
2205 		break;
2206 	default:
2207 		return;
2208 	}
2209 
2210 	reg_val = E1000_READ_REG(hw, reg_offset);
2211 	if (enable) {
2212 		reg_val |= (E1000_DTXSWC_MAC_SPOOF_MASK |
2213 			     E1000_DTXSWC_VLAN_SPOOF_MASK);
2214 		/* The PF can spoof - it has to in order to
2215 		 * support emulation mode NICs
2216 		 */
2217 		reg_val ^= (1 << pf | 1 << (pf + MAX_NUM_VFS));
2218 	} else {
2219 		reg_val &= ~(E1000_DTXSWC_MAC_SPOOF_MASK |
2220 			     E1000_DTXSWC_VLAN_SPOOF_MASK);
2221 	}
2222 	E1000_WRITE_REG(hw, reg_offset, reg_val);
2223 }
2224 
2225 /**
2226  *  e1000_vmdq_set_loopback_pf - enable or disable vmdq loopback
2227  *  @hw: pointer to the hardware struct
2228  *  @enable: state to enter, either enabled or disabled
2229  *
2230  *  enables/disables L2 switch loopback functionality.
2231  **/
2232 void e1000_vmdq_set_loopback_pf(struct e1000_hw *hw, bool enable)
2233 {
2234 	u32 dtxswc;
2235 
2236 	switch (hw->mac.type) {
2237 	case e1000_82576:
2238 		dtxswc = E1000_READ_REG(hw, E1000_DTXSWC);
2239 		if (enable)
2240 			dtxswc |= E1000_DTXSWC_VMDQ_LOOPBACK_EN;
2241 		else
2242 			dtxswc &= ~E1000_DTXSWC_VMDQ_LOOPBACK_EN;
2243 		E1000_WRITE_REG(hw, E1000_DTXSWC, dtxswc);
2244 		break;
2245 	case e1000_i350:
2246 	case e1000_i354:
2247 		dtxswc = E1000_READ_REG(hw, E1000_TXSWC);
2248 		if (enable)
2249 			dtxswc |= E1000_DTXSWC_VMDQ_LOOPBACK_EN;
2250 		else
2251 			dtxswc &= ~E1000_DTXSWC_VMDQ_LOOPBACK_EN;
2252 		E1000_WRITE_REG(hw, E1000_TXSWC, dtxswc);
2253 		break;
2254 	default:
2255 		/* Currently no other hardware supports loopback */
2256 		break;
2257 	}
2258 
2259 
2260 }
2261 
2262 /**
2263  *  e1000_vmdq_set_replication_pf - enable or disable vmdq replication
2264  *  @hw: pointer to the hardware struct
2265  *  @enable: state to enter, either enabled or disabled
2266  *
2267  *  enables/disables replication of packets across multiple pools.
2268  **/
2269 void e1000_vmdq_set_replication_pf(struct e1000_hw *hw, bool enable)
2270 {
2271 	u32 vt_ctl = E1000_READ_REG(hw, E1000_VT_CTL);
2272 
2273 	if (enable)
2274 		vt_ctl |= E1000_VT_CTL_VM_REPL_EN;
2275 	else
2276 		vt_ctl &= ~E1000_VT_CTL_VM_REPL_EN;
2277 
2278 	E1000_WRITE_REG(hw, E1000_VT_CTL, vt_ctl);
2279 }
2280 
2281 /**
2282  *  e1000_read_phy_reg_82580 - Read 82580 MDI control register
2283  *  @hw: pointer to the HW structure
2284  *  @offset: register offset to be read
2285  *  @data: pointer to the read data
2286  *
2287  *  Reads the MDI control register in the PHY at offset and stores the
2288  *  information read to data.
2289  **/
2290 static s32 e1000_read_phy_reg_82580(struct e1000_hw *hw, u32 offset, u16 *data)
2291 {
2292 	s32 ret_val;
2293 
2294 	DEBUGFUNC("e1000_read_phy_reg_82580");
2295 
2296 	ret_val = hw->phy.ops.acquire(hw);
2297 	if (ret_val)
2298 		goto out;
2299 
2300 	ret_val = e1000_read_phy_reg_mdic(hw, offset, data);
2301 
2302 	hw->phy.ops.release(hw);
2303 
2304 out:
2305 	return ret_val;
2306 }
2307 
2308 /**
2309  *  e1000_write_phy_reg_82580 - Write 82580 MDI control register
2310  *  @hw: pointer to the HW structure
2311  *  @offset: register offset to write to
2312  *  @data: data to write to register at offset
2313  *
2314  *  Writes data to MDI control register in the PHY at offset.
2315  **/
2316 static s32 e1000_write_phy_reg_82580(struct e1000_hw *hw, u32 offset, u16 data)
2317 {
2318 	s32 ret_val;
2319 
2320 	DEBUGFUNC("e1000_write_phy_reg_82580");
2321 
2322 	ret_val = hw->phy.ops.acquire(hw);
2323 	if (ret_val)
2324 		goto out;
2325 
2326 	ret_val = e1000_write_phy_reg_mdic(hw, offset, data);
2327 
2328 	hw->phy.ops.release(hw);
2329 
2330 out:
2331 	return ret_val;
2332 }
2333 
2334 /**
2335  *  e1000_reset_mdicnfg_82580 - Reset MDICNFG destination and com_mdio bits
2336  *  @hw: pointer to the HW structure
2337  *
2338  *  This resets the MDICNFG.Destination and MDICNFG.Com_MDIO bits based on
2339  *  the values found in the EEPROM.  This addresses an issue in which these
2340  *  bits are not restored from EEPROM after reset.
2341  **/
2342 static s32 e1000_reset_mdicnfg_82580(struct e1000_hw *hw)
2343 {
2344 	s32 ret_val = E1000_SUCCESS;
2345 	u32 mdicnfg;
2346 	u16 nvm_data = 0;
2347 
2348 	DEBUGFUNC("e1000_reset_mdicnfg_82580");
2349 
2350 	if (hw->mac.type != e1000_82580)
2351 		goto out;
2352 	if (!e1000_sgmii_active_82575(hw))
2353 		goto out;
2354 
2355 	ret_val = hw->nvm.ops.read(hw, NVM_INIT_CONTROL3_PORT_A +
2356 				   NVM_82580_LAN_FUNC_OFFSET(hw->bus.func), 1,
2357 				   &nvm_data);
2358 	if (ret_val) {
2359 		DEBUGOUT("NVM Read Error\n");
2360 		goto out;
2361 	}
2362 
2363 	mdicnfg = E1000_READ_REG(hw, E1000_MDICNFG);
2364 	if (nvm_data & NVM_WORD24_EXT_MDIO)
2365 		mdicnfg |= E1000_MDICNFG_EXT_MDIO;
2366 	if (nvm_data & NVM_WORD24_COM_MDIO)
2367 		mdicnfg |= E1000_MDICNFG_COM_MDIO;
2368 	E1000_WRITE_REG(hw, E1000_MDICNFG, mdicnfg);
2369 out:
2370 	return ret_val;
2371 }
2372 
2373 /**
2374  *  e1000_reset_hw_82580 - Reset hardware
2375  *  @hw: pointer to the HW structure
2376  *
2377  *  This resets function or entire device (all ports, etc.)
2378  *  to a known state.
2379  **/
2380 static s32 e1000_reset_hw_82580(struct e1000_hw *hw)
2381 {
2382 	s32 ret_val = E1000_SUCCESS;
2383 	/* BH SW mailbox bit in SW_FW_SYNC */
2384 	u16 swmbsw_mask = E1000_SW_SYNCH_MB;
2385 	u32 ctrl;
2386 	bool global_device_reset = hw->dev_spec._82575.global_device_reset;
2387 
2388 	DEBUGFUNC("e1000_reset_hw_82580");
2389 
2390 	hw->dev_spec._82575.global_device_reset = FALSE;
2391 
2392 	/* 82580 does not reliably do global_device_reset due to hw errata */
2393 	if (hw->mac.type == e1000_82580)
2394 		global_device_reset = FALSE;
2395 
2396 	/* Get current control state. */
2397 	ctrl = E1000_READ_REG(hw, E1000_CTRL);
2398 
2399 	/*
2400 	 * Prevent the PCI-E bus from sticking if there is no TLP connection
2401 	 * on the last TLP read/write transaction when MAC is reset.
2402 	 */
2403 	ret_val = e1000_disable_pcie_master_generic(hw);
2404 	if (ret_val)
2405 		DEBUGOUT("PCI-E Master disable polling has failed.\n");
2406 
2407 	DEBUGOUT("Masking off all interrupts\n");
2408 	E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
2409 	E1000_WRITE_REG(hw, E1000_RCTL, 0);
2410 	E1000_WRITE_REG(hw, E1000_TCTL, E1000_TCTL_PSP);
2411 	E1000_WRITE_FLUSH(hw);
2412 
2413 	msec_delay(10);
2414 
2415 	/* Determine whether or not a global dev reset is requested */
2416 	if (global_device_reset && hw->mac.ops.acquire_swfw_sync(hw,
2417 	    swmbsw_mask))
2418 			global_device_reset = FALSE;
2419 
2420 	if (global_device_reset && !(E1000_READ_REG(hw, E1000_STATUS) &
2421 	    E1000_STAT_DEV_RST_SET))
2422 		ctrl |= E1000_CTRL_DEV_RST;
2423 	else
2424 		ctrl |= E1000_CTRL_RST;
2425 
2426 	E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
2427 
2428 	switch (hw->device_id) {
2429 	case E1000_DEV_ID_DH89XXCC_SGMII:
2430 		break;
2431 	default:
2432 		E1000_WRITE_FLUSH(hw);
2433 		break;
2434 	}
2435 
2436 	/* Add delay to insure DEV_RST or RST has time to complete */
2437 	msec_delay(5);
2438 
2439 	ret_val = e1000_get_auto_rd_done_generic(hw);
2440 	if (ret_val) {
2441 		/*
2442 		 * When auto config read does not complete, do not
2443 		 * return with an error. This can happen in situations
2444 		 * where there is no eeprom and prevents getting link.
2445 		 */
2446 		DEBUGOUT("Auto Read Done did not complete\n");
2447 	}
2448 
2449 	/* clear global device reset status bit */
2450 	E1000_WRITE_REG(hw, E1000_STATUS, E1000_STAT_DEV_RST_SET);
2451 
2452 	/* Clear any pending interrupt events. */
2453 	E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
2454 	E1000_READ_REG(hw, E1000_ICR);
2455 
2456 	ret_val = e1000_reset_mdicnfg_82580(hw);
2457 	if (ret_val)
2458 		DEBUGOUT("Could not reset MDICNFG based on EEPROM\n");
2459 
2460 	/* Install any alternate MAC address into RAR0 */
2461 	ret_val = e1000_check_alt_mac_addr_generic(hw);
2462 
2463 	/* Release semaphore */
2464 	if (global_device_reset)
2465 		hw->mac.ops.release_swfw_sync(hw, swmbsw_mask);
2466 
2467 	return ret_val;
2468 }
2469 
2470 /**
2471  *  e1000_rxpbs_adjust_82580 - adjust RXPBS value to reflect actual Rx PBA size
2472  *  @data: data received by reading RXPBS register
2473  *
2474  *  The 82580 uses a table based approach for packet buffer allocation sizes.
2475  *  This function converts the retrieved value into the correct table value
2476  *     0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7
2477  *  0x0 36  72 144   1   2   4   8  16
2478  *  0x8 35  70 140 rsv rsv rsv rsv rsv
2479  */
2480 u16 e1000_rxpbs_adjust_82580(u32 data)
2481 {
2482 	u16 ret_val = 0;
2483 
2484 	if (data < E1000_82580_RXPBS_TABLE_SIZE)
2485 		ret_val = e1000_82580_rxpbs_table[data];
2486 
2487 	return ret_val;
2488 }
2489 
2490 /**
2491  *  e1000_validate_nvm_checksum_with_offset - Validate EEPROM
2492  *  checksum
2493  *  @hw: pointer to the HW structure
2494  *  @offset: offset in words of the checksum protected region
2495  *
2496  *  Calculates the EEPROM checksum by reading/adding each word of the EEPROM
2497  *  and then verifies that the sum of the EEPROM is equal to 0xBABA.
2498  **/
2499 s32 e1000_validate_nvm_checksum_with_offset(struct e1000_hw *hw, u16 offset)
2500 {
2501 	s32 ret_val = E1000_SUCCESS;
2502 	u16 checksum = 0;
2503 	u16 i, nvm_data;
2504 
2505 	DEBUGFUNC("e1000_validate_nvm_checksum_with_offset");
2506 
2507 	for (i = offset; i < ((NVM_CHECKSUM_REG + offset) + 1); i++) {
2508 		ret_val = hw->nvm.ops.read(hw, i, 1, &nvm_data);
2509 		if (ret_val) {
2510 			DEBUGOUT("NVM Read Error\n");
2511 			goto out;
2512 		}
2513 		checksum += nvm_data;
2514 	}
2515 
2516 	if (checksum != (u16) NVM_SUM) {
2517 		DEBUGOUT("NVM Checksum Invalid\n");
2518 		ret_val = -E1000_ERR_NVM;
2519 		goto out;
2520 	}
2521 
2522 out:
2523 	return ret_val;
2524 }
2525 
2526 /**
2527  *  e1000_update_nvm_checksum_with_offset - Update EEPROM
2528  *  checksum
2529  *  @hw: pointer to the HW structure
2530  *  @offset: offset in words of the checksum protected region
2531  *
2532  *  Updates the EEPROM checksum by reading/adding each word of the EEPROM
2533  *  up to the checksum.  Then calculates the EEPROM checksum and writes the
2534  *  value to the EEPROM.
2535  **/
2536 s32 e1000_update_nvm_checksum_with_offset(struct e1000_hw *hw, u16 offset)
2537 {
2538 	s32 ret_val;
2539 	u16 checksum = 0;
2540 	u16 i, nvm_data;
2541 
2542 	DEBUGFUNC("e1000_update_nvm_checksum_with_offset");
2543 
2544 	for (i = offset; i < (NVM_CHECKSUM_REG + offset); i++) {
2545 		ret_val = hw->nvm.ops.read(hw, i, 1, &nvm_data);
2546 		if (ret_val) {
2547 			DEBUGOUT("NVM Read Error while updating checksum.\n");
2548 			goto out;
2549 		}
2550 		checksum += nvm_data;
2551 	}
2552 	checksum = (u16) NVM_SUM - checksum;
2553 	ret_val = hw->nvm.ops.write(hw, (NVM_CHECKSUM_REG + offset), 1,
2554 				    &checksum);
2555 	if (ret_val)
2556 		DEBUGOUT("NVM Write Error while updating checksum.\n");
2557 
2558 out:
2559 	return ret_val;
2560 }
2561 
2562 /**
2563  *  e1000_validate_nvm_checksum_82580 - Validate EEPROM checksum
2564  *  @hw: pointer to the HW structure
2565  *
2566  *  Calculates the EEPROM section checksum by reading/adding each word of
2567  *  the EEPROM and then verifies that the sum of the EEPROM is
2568  *  equal to 0xBABA.
2569  **/
2570 static s32 e1000_validate_nvm_checksum_82580(struct e1000_hw *hw)
2571 {
2572 	s32 ret_val;
2573 	u16 eeprom_regions_count = 1;
2574 	u16 j, nvm_data;
2575 	u16 nvm_offset;
2576 
2577 	DEBUGFUNC("e1000_validate_nvm_checksum_82580");
2578 
2579 	ret_val = hw->nvm.ops.read(hw, NVM_COMPATIBILITY_REG_3, 1, &nvm_data);
2580 	if (ret_val) {
2581 		DEBUGOUT("NVM Read Error\n");
2582 		goto out;
2583 	}
2584 
2585 	if (nvm_data & NVM_COMPATIBILITY_BIT_MASK) {
2586 		/* if chekcsums compatibility bit is set validate checksums
2587 		 * for all 4 ports. */
2588 		eeprom_regions_count = 4;
2589 	}
2590 
2591 	for (j = 0; j < eeprom_regions_count; j++) {
2592 		nvm_offset = NVM_82580_LAN_FUNC_OFFSET(j);
2593 		ret_val = e1000_validate_nvm_checksum_with_offset(hw,
2594 								  nvm_offset);
2595 		if (ret_val != E1000_SUCCESS)
2596 			goto out;
2597 	}
2598 
2599 out:
2600 	return ret_val;
2601 }
2602 
2603 /**
2604  *  e1000_update_nvm_checksum_82580 - Update EEPROM checksum
2605  *  @hw: pointer to the HW structure
2606  *
2607  *  Updates the EEPROM section checksums for all 4 ports by reading/adding
2608  *  each word of the EEPROM up to the checksum.  Then calculates the EEPROM
2609  *  checksum and writes the value to the EEPROM.
2610  **/
2611 static s32 e1000_update_nvm_checksum_82580(struct e1000_hw *hw)
2612 {
2613 	s32 ret_val;
2614 	u16 j, nvm_data;
2615 	u16 nvm_offset;
2616 
2617 	DEBUGFUNC("e1000_update_nvm_checksum_82580");
2618 
2619 	ret_val = hw->nvm.ops.read(hw, NVM_COMPATIBILITY_REG_3, 1, &nvm_data);
2620 	if (ret_val) {
2621 		DEBUGOUT("NVM Read Error while updating checksum compatibility bit.\n");
2622 		goto out;
2623 	}
2624 
2625 	if (!(nvm_data & NVM_COMPATIBILITY_BIT_MASK)) {
2626 		/* set compatibility bit to validate checksums appropriately */
2627 		nvm_data = nvm_data | NVM_COMPATIBILITY_BIT_MASK;
2628 		ret_val = hw->nvm.ops.write(hw, NVM_COMPATIBILITY_REG_3, 1,
2629 					    &nvm_data);
2630 		if (ret_val) {
2631 			DEBUGOUT("NVM Write Error while updating checksum compatibility bit.\n");
2632 			goto out;
2633 		}
2634 	}
2635 
2636 	for (j = 0; j < 4; j++) {
2637 		nvm_offset = NVM_82580_LAN_FUNC_OFFSET(j);
2638 		ret_val = e1000_update_nvm_checksum_with_offset(hw, nvm_offset);
2639 		if (ret_val)
2640 			goto out;
2641 	}
2642 
2643 out:
2644 	return ret_val;
2645 }
2646 
2647 /**
2648  *  e1000_validate_nvm_checksum_i350 - Validate EEPROM checksum
2649  *  @hw: pointer to the HW structure
2650  *
2651  *  Calculates the EEPROM section checksum by reading/adding each word of
2652  *  the EEPROM and then verifies that the sum of the EEPROM is
2653  *  equal to 0xBABA.
2654  **/
2655 static s32 e1000_validate_nvm_checksum_i350(struct e1000_hw *hw)
2656 {
2657 	s32 ret_val = E1000_SUCCESS;
2658 	u16 j;
2659 	u16 nvm_offset;
2660 
2661 	DEBUGFUNC("e1000_validate_nvm_checksum_i350");
2662 
2663 	for (j = 0; j < 4; j++) {
2664 		nvm_offset = NVM_82580_LAN_FUNC_OFFSET(j);
2665 		ret_val = e1000_validate_nvm_checksum_with_offset(hw,
2666 								  nvm_offset);
2667 		if (ret_val != E1000_SUCCESS)
2668 			goto out;
2669 	}
2670 
2671 out:
2672 	return ret_val;
2673 }
2674 
2675 /**
2676  *  e1000_update_nvm_checksum_i350 - Update EEPROM checksum
2677  *  @hw: pointer to the HW structure
2678  *
2679  *  Updates the EEPROM section checksums for all 4 ports by reading/adding
2680  *  each word of the EEPROM up to the checksum.  Then calculates the EEPROM
2681  *  checksum and writes the value to the EEPROM.
2682  **/
2683 static s32 e1000_update_nvm_checksum_i350(struct e1000_hw *hw)
2684 {
2685 	s32 ret_val = E1000_SUCCESS;
2686 	u16 j;
2687 	u16 nvm_offset;
2688 
2689 	DEBUGFUNC("e1000_update_nvm_checksum_i350");
2690 
2691 	for (j = 0; j < 4; j++) {
2692 		nvm_offset = NVM_82580_LAN_FUNC_OFFSET(j);
2693 		ret_val = e1000_update_nvm_checksum_with_offset(hw, nvm_offset);
2694 		if (ret_val != E1000_SUCCESS)
2695 			goto out;
2696 	}
2697 
2698 out:
2699 	return ret_val;
2700 }
2701 
2702 /**
2703  *  __e1000_access_emi_reg - Read/write EMI register
2704  *  @hw: pointer to the HW structure
2705  *  @addr: EMI address to program
2706  *  @data: pointer to value to read/write from/to the EMI address
2707  *  @read: boolean flag to indicate read or write
2708  **/
2709 static s32 __e1000_access_emi_reg(struct e1000_hw *hw, u16 address,
2710 				  u16 *data, bool read)
2711 {
2712 	s32 ret_val;
2713 
2714 	DEBUGFUNC("__e1000_access_emi_reg");
2715 
2716 	ret_val = hw->phy.ops.write_reg(hw, E1000_EMIADD, address);
2717 	if (ret_val)
2718 		return ret_val;
2719 
2720 	if (read)
2721 		ret_val = hw->phy.ops.read_reg(hw, E1000_EMIDATA, data);
2722 	else
2723 		ret_val = hw->phy.ops.write_reg(hw, E1000_EMIDATA, *data);
2724 
2725 	return ret_val;
2726 }
2727 
2728 /**
2729  *  e1000_read_emi_reg - Read Extended Management Interface register
2730  *  @hw: pointer to the HW structure
2731  *  @addr: EMI address to program
2732  *  @data: value to be read from the EMI address
2733  **/
2734 s32 e1000_read_emi_reg(struct e1000_hw *hw, u16 addr, u16 *data)
2735 {
2736 	DEBUGFUNC("e1000_read_emi_reg");
2737 
2738 	return __e1000_access_emi_reg(hw, addr, data, TRUE);
2739 }
2740 
2741 /**
2742  *  e1000_initialize_M88E1512_phy - Initialize M88E1512 PHY
2743  *  @hw: pointer to the HW structure
2744  *
2745  *  Initialize Marvell 1512 to work correctly with Avoton.
2746  **/
2747 s32 e1000_initialize_M88E1512_phy(struct e1000_hw *hw)
2748 {
2749 	struct e1000_phy_info *phy = &hw->phy;
2750 	s32 ret_val = E1000_SUCCESS;
2751 
2752 	DEBUGFUNC("e1000_initialize_M88E1512_phy");
2753 
2754 	/* Check if this is correct PHY. */
2755 	if (phy->id != M88E1512_E_PHY_ID)
2756 		goto out;
2757 
2758 	/* Switch to PHY page 0xFF. */
2759 	ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0x00FF);
2760 	if (ret_val)
2761 		goto out;
2762 
2763 	ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_2, 0x214B);
2764 	if (ret_val)
2765 		goto out;
2766 
2767 	ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_1, 0x2144);
2768 	if (ret_val)
2769 		goto out;
2770 
2771 	ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_2, 0x0C28);
2772 	if (ret_val)
2773 		goto out;
2774 
2775 	ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_1, 0x2146);
2776 	if (ret_val)
2777 		goto out;
2778 
2779 	ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_2, 0xB233);
2780 	if (ret_val)
2781 		goto out;
2782 
2783 	ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_1, 0x214D);
2784 	if (ret_val)
2785 		goto out;
2786 
2787 	ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_2, 0xCC0C);
2788 	if (ret_val)
2789 		goto out;
2790 
2791 	ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_1, 0x2159);
2792 	if (ret_val)
2793 		goto out;
2794 
2795 	/* Switch to PHY page 0xFB. */
2796 	ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0x00FB);
2797 	if (ret_val)
2798 		goto out;
2799 
2800 	ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_3, 0x000D);
2801 	if (ret_val)
2802 		goto out;
2803 
2804 	/* Switch to PHY page 0x12. */
2805 	ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0x12);
2806 	if (ret_val)
2807 		goto out;
2808 
2809 	/* Change mode to SGMII-to-Copper */
2810 	ret_val = phy->ops.write_reg(hw, E1000_M88E1512_MODE, 0x8001);
2811 	if (ret_val)
2812 		goto out;
2813 
2814 	/* Return the PHY to page 0. */
2815 	ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0);
2816 	if (ret_val)
2817 		goto out;
2818 
2819 	ret_val = phy->ops.commit(hw);
2820 	if (ret_val) {
2821 		DEBUGOUT("Error committing the PHY changes\n");
2822 		return ret_val;
2823 	}
2824 
2825 	msec_delay(1000);
2826 out:
2827 	return ret_val;
2828 }
2829 
2830 /**
2831  *  e1000_initialize_M88E1543_phy - Initialize M88E1543 PHY
2832  *  @hw: pointer to the HW structure
2833  *
2834  *  Initialize Marvell 1543 to work correctly with Avoton.
2835  **/
2836 s32 e1000_initialize_M88E1543_phy(struct e1000_hw *hw)
2837 {
2838 	struct e1000_phy_info *phy = &hw->phy;
2839 	s32 ret_val = E1000_SUCCESS;
2840 
2841 	DEBUGFUNC("e1000_initialize_M88E1543_phy");
2842 
2843 	/* Check if this is correct PHY. */
2844 	if (phy->id != M88E1543_E_PHY_ID)
2845 		goto out;
2846 
2847 	/* Switch to PHY page 0xFF. */
2848 	ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0x00FF);
2849 	if (ret_val)
2850 		goto out;
2851 
2852 	ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_2, 0x214B);
2853 	if (ret_val)
2854 		goto out;
2855 
2856 	ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_1, 0x2144);
2857 	if (ret_val)
2858 		goto out;
2859 
2860 	ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_2, 0x0C28);
2861 	if (ret_val)
2862 		goto out;
2863 
2864 	ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_1, 0x2146);
2865 	if (ret_val)
2866 		goto out;
2867 
2868 	ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_2, 0xB233);
2869 	if (ret_val)
2870 		goto out;
2871 
2872 	ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_1, 0x214D);
2873 	if (ret_val)
2874 		goto out;
2875 
2876 	ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_2, 0xDC0C);
2877 	if (ret_val)
2878 		goto out;
2879 
2880 	ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_1, 0x2159);
2881 	if (ret_val)
2882 		goto out;
2883 
2884 	/* Switch to PHY page 0xFB. */
2885 	ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0x00FB);
2886 	if (ret_val)
2887 		goto out;
2888 
2889 	ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_3, 0xC00D);
2890 	if (ret_val)
2891 		goto out;
2892 
2893 	/* Switch to PHY page 0x12. */
2894 	ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0x12);
2895 	if (ret_val)
2896 		goto out;
2897 
2898 	/* Change mode to SGMII-to-Copper */
2899 	ret_val = phy->ops.write_reg(hw, E1000_M88E1512_MODE, 0x8001);
2900 	if (ret_val)
2901 		goto out;
2902 
2903 	/* Switch to PHY page 1. */
2904 	ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0x1);
2905 	if (ret_val)
2906 		goto out;
2907 
2908 	/* Change mode to 1000BASE-X/SGMII and autoneg enable; reset */
2909 	ret_val = phy->ops.write_reg(hw, E1000_M88E1543_FIBER_CTRL, 0x9140);
2910 	if (ret_val)
2911 		goto out;
2912 
2913 	/* Return the PHY to page 0. */
2914 	ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0);
2915 	if (ret_val)
2916 		goto out;
2917 
2918 	ret_val = phy->ops.commit(hw);
2919 	if (ret_val) {
2920 		DEBUGOUT("Error committing the PHY changes\n");
2921 		return ret_val;
2922 	}
2923 
2924 	msec_delay(1000);
2925 out:
2926 	return ret_val;
2927 }
2928 
2929 /**
2930  *  e1000_set_eee_i350 - Enable/disable EEE support
2931  *  @hw: pointer to the HW structure
2932  *  @adv1g: boolean flag enabling 1G EEE advertisement
2933  *  @adv100m: boolean flag enabling 100M EEE advertisement
2934  *
2935  *  Enable/disable EEE based on setting in dev_spec structure.
2936  *
2937  **/
2938 s32 e1000_set_eee_i350(struct e1000_hw *hw, bool adv1G, bool adv100M)
2939 {
2940 	u32 ipcnfg, eeer;
2941 
2942 	DEBUGFUNC("e1000_set_eee_i350");
2943 
2944 	if ((hw->mac.type < e1000_i350) ||
2945 	    (hw->phy.media_type != e1000_media_type_copper))
2946 		goto out;
2947 	ipcnfg = E1000_READ_REG(hw, E1000_IPCNFG);
2948 	eeer = E1000_READ_REG(hw, E1000_EEER);
2949 
2950 	/* enable or disable per user setting */
2951 	if (!(hw->dev_spec._82575.eee_disable)) {
2952 		u32 eee_su = E1000_READ_REG(hw, E1000_EEE_SU);
2953 
2954 		if (adv100M)
2955 			ipcnfg |= E1000_IPCNFG_EEE_100M_AN;
2956 		else
2957 			ipcnfg &= ~E1000_IPCNFG_EEE_100M_AN;
2958 
2959 		if (adv1G)
2960 			ipcnfg |= E1000_IPCNFG_EEE_1G_AN;
2961 		else
2962 			ipcnfg &= ~E1000_IPCNFG_EEE_1G_AN;
2963 
2964 		eeer |= (E1000_EEER_TX_LPI_EN | E1000_EEER_RX_LPI_EN |
2965 			 E1000_EEER_LPI_FC);
2966 
2967 		/* This bit should not be set in normal operation. */
2968 		if (eee_su & E1000_EEE_SU_LPI_CLK_STP)
2969 			DEBUGOUT("LPI Clock Stop Bit should not be set!\n");
2970 	} else {
2971 		ipcnfg &= ~(E1000_IPCNFG_EEE_1G_AN | E1000_IPCNFG_EEE_100M_AN);
2972 		eeer &= ~(E1000_EEER_TX_LPI_EN | E1000_EEER_RX_LPI_EN |
2973 			  E1000_EEER_LPI_FC);
2974 	}
2975 	E1000_WRITE_REG(hw, E1000_IPCNFG, ipcnfg);
2976 	E1000_WRITE_REG(hw, E1000_EEER, eeer);
2977 	E1000_READ_REG(hw, E1000_IPCNFG);
2978 	E1000_READ_REG(hw, E1000_EEER);
2979 out:
2980 
2981 	return E1000_SUCCESS;
2982 }
2983 
2984 /**
2985  *  e1000_set_eee_i354 - Enable/disable EEE support
2986  *  @hw: pointer to the HW structure
2987  *  @adv1g: boolean flag enabling 1G EEE advertisement
2988  *  @adv100m: boolean flag enabling 100M EEE advertisement
2989  *
2990  *  Enable/disable EEE legacy mode based on setting in dev_spec structure.
2991  *
2992  **/
2993 s32 e1000_set_eee_i354(struct e1000_hw *hw, bool adv1G, bool adv100M)
2994 {
2995 	struct e1000_phy_info *phy = &hw->phy;
2996 	s32 ret_val = E1000_SUCCESS;
2997 	u16 phy_data;
2998 
2999 	DEBUGFUNC("e1000_set_eee_i354");
3000 
3001 	if ((hw->phy.media_type != e1000_media_type_copper) ||
3002 	    ((phy->id != M88E1543_E_PHY_ID) &&
3003 	    (phy->id != M88E1512_E_PHY_ID)))
3004 		goto out;
3005 
3006 	if (!hw->dev_spec._82575.eee_disable) {
3007 		/* Switch to PHY page 18. */
3008 		ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 18);
3009 		if (ret_val)
3010 			goto out;
3011 
3012 		ret_val = phy->ops.read_reg(hw, E1000_M88E1543_EEE_CTRL_1,
3013 					    &phy_data);
3014 		if (ret_val)
3015 			goto out;
3016 
3017 		phy_data |= E1000_M88E1543_EEE_CTRL_1_MS;
3018 		ret_val = phy->ops.write_reg(hw, E1000_M88E1543_EEE_CTRL_1,
3019 					     phy_data);
3020 		if (ret_val)
3021 			goto out;
3022 
3023 		/* Return the PHY to page 0. */
3024 		ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0);
3025 		if (ret_val)
3026 			goto out;
3027 
3028 		/* Turn on EEE advertisement. */
3029 		ret_val = e1000_read_xmdio_reg(hw, E1000_EEE_ADV_ADDR_I354,
3030 					       E1000_EEE_ADV_DEV_I354,
3031 					       &phy_data);
3032 		if (ret_val)
3033 			goto out;
3034 
3035 		if (adv100M)
3036 			phy_data |= E1000_EEE_ADV_100_SUPPORTED;
3037 		else
3038 			phy_data &= ~E1000_EEE_ADV_100_SUPPORTED;
3039 
3040 		if (adv1G)
3041 			phy_data |= E1000_EEE_ADV_1000_SUPPORTED;
3042 		else
3043 			phy_data &= ~E1000_EEE_ADV_1000_SUPPORTED;
3044 
3045 		ret_val = e1000_write_xmdio_reg(hw, E1000_EEE_ADV_ADDR_I354,
3046 						E1000_EEE_ADV_DEV_I354,
3047 						phy_data);
3048 	} else {
3049 		/* Turn off EEE advertisement. */
3050 		ret_val = e1000_read_xmdio_reg(hw, E1000_EEE_ADV_ADDR_I354,
3051 					       E1000_EEE_ADV_DEV_I354,
3052 					       &phy_data);
3053 		if (ret_val)
3054 			goto out;
3055 
3056 		phy_data &= ~(E1000_EEE_ADV_100_SUPPORTED |
3057 			      E1000_EEE_ADV_1000_SUPPORTED);
3058 		ret_val = e1000_write_xmdio_reg(hw, E1000_EEE_ADV_ADDR_I354,
3059 						E1000_EEE_ADV_DEV_I354,
3060 						phy_data);
3061 	}
3062 
3063 out:
3064 	return ret_val;
3065 }
3066 
3067 /**
3068  *  e1000_get_eee_status_i354 - Get EEE status
3069  *  @hw: pointer to the HW structure
3070  *  @status: EEE status
3071  *
3072  *  Get EEE status by guessing based on whether Tx or Rx LPI indications have
3073  *  been received.
3074  **/
3075 s32 e1000_get_eee_status_i354(struct e1000_hw *hw, bool *status)
3076 {
3077 	struct e1000_phy_info *phy = &hw->phy;
3078 	s32 ret_val = E1000_SUCCESS;
3079 	u16 phy_data;
3080 
3081 	DEBUGFUNC("e1000_get_eee_status_i354");
3082 
3083 	/* Check if EEE is supported on this device. */
3084 	if ((hw->phy.media_type != e1000_media_type_copper) ||
3085 	    ((phy->id != M88E1543_E_PHY_ID) &&
3086 	    (phy->id != M88E1512_E_PHY_ID)))
3087 		goto out;
3088 
3089 	ret_val = e1000_read_xmdio_reg(hw, E1000_PCS_STATUS_ADDR_I354,
3090 				       E1000_PCS_STATUS_DEV_I354,
3091 				       &phy_data);
3092 	if (ret_val)
3093 		goto out;
3094 
3095 	*status = phy_data & (E1000_PCS_STATUS_TX_LPI_RCVD |
3096 			      E1000_PCS_STATUS_RX_LPI_RCVD) ? TRUE : FALSE;
3097 
3098 out:
3099 	return ret_val;
3100 }
3101 
3102 /* Due to a hw errata, if the host tries to  configure the VFTA register
3103  * while performing queries from the BMC or DMA, then the VFTA in some
3104  * cases won't be written.
3105  */
3106 
3107 /**
3108  *  e1000_clear_vfta_i350 - Clear VLAN filter table
3109  *  @hw: pointer to the HW structure
3110  *
3111  *  Clears the register array which contains the VLAN filter table by
3112  *  setting all the values to 0.
3113  **/
3114 void e1000_clear_vfta_i350(struct e1000_hw *hw)
3115 {
3116 	u32 offset;
3117 	int i;
3118 
3119 	DEBUGFUNC("e1000_clear_vfta_350");
3120 
3121 	for (offset = 0; offset < E1000_VLAN_FILTER_TBL_SIZE; offset++) {
3122 		for (i = 0; i < 10; i++)
3123 			E1000_WRITE_REG_ARRAY(hw, E1000_VFTA, offset, 0);
3124 
3125 		E1000_WRITE_FLUSH(hw);
3126 	}
3127 }
3128 
3129 /**
3130  *  e1000_write_vfta_i350 - Write value to VLAN filter table
3131  *  @hw: pointer to the HW structure
3132  *  @offset: register offset in VLAN filter table
3133  *  @value: register value written to VLAN filter table
3134  *
3135  *  Writes value at the given offset in the register array which stores
3136  *  the VLAN filter table.
3137  **/
3138 void e1000_write_vfta_i350(struct e1000_hw *hw, u32 offset, u32 value)
3139 {
3140 	int i;
3141 
3142 	DEBUGFUNC("e1000_write_vfta_350");
3143 
3144 	for (i = 0; i < 10; i++)
3145 		E1000_WRITE_REG_ARRAY(hw, E1000_VFTA, offset, value);
3146 
3147 	E1000_WRITE_FLUSH(hw);
3148 }
3149 
3150 
3151 /**
3152  *  e1000_set_i2c_bb - Enable I2C bit-bang
3153  *  @hw: pointer to the HW structure
3154  *
3155  *  Enable I2C bit-bang interface
3156  *
3157  **/
3158 s32 e1000_set_i2c_bb(struct e1000_hw *hw)
3159 {
3160 	s32 ret_val = E1000_SUCCESS;
3161 	u32 ctrl_ext, i2cparams;
3162 
3163 	DEBUGFUNC("e1000_set_i2c_bb");
3164 
3165 	ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
3166 	ctrl_ext |= E1000_CTRL_I2C_ENA;
3167 	E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext);
3168 	E1000_WRITE_FLUSH(hw);
3169 
3170 	i2cparams = E1000_READ_REG(hw, E1000_I2CPARAMS);
3171 	i2cparams |= E1000_I2CBB_EN;
3172 	i2cparams |= E1000_I2C_DATA_OE_N;
3173 	i2cparams |= E1000_I2C_CLK_OE_N;
3174 	E1000_WRITE_REG(hw, E1000_I2CPARAMS, i2cparams);
3175 	E1000_WRITE_FLUSH(hw);
3176 
3177 	return ret_val;
3178 }
3179 
3180 /**
3181  *  e1000_read_i2c_byte_generic - Reads 8 bit word over I2C
3182  *  @hw: pointer to hardware structure
3183  *  @byte_offset: byte offset to read
3184  *  @dev_addr: device address
3185  *  @data: value read
3186  *
3187  *  Performs byte read operation over I2C interface at
3188  *  a specified device address.
3189  **/
3190 s32 e1000_read_i2c_byte_generic(struct e1000_hw *hw, u8 byte_offset,
3191 				u8 dev_addr, u8 *data)
3192 {
3193 	s32 status = E1000_SUCCESS;
3194 	u32 max_retry = 10;
3195 	u32 retry = 1;
3196 	u16 swfw_mask = 0;
3197 
3198 	bool nack = TRUE;
3199 
3200 	DEBUGFUNC("e1000_read_i2c_byte_generic");
3201 
3202 	swfw_mask = E1000_SWFW_PHY0_SM;
3203 
3204 	do {
3205 		if (hw->mac.ops.acquire_swfw_sync(hw, swfw_mask)
3206 		    != E1000_SUCCESS) {
3207 			status = E1000_ERR_SWFW_SYNC;
3208 			goto read_byte_out;
3209 		}
3210 
3211 		e1000_i2c_start(hw);
3212 
3213 		/* Device Address and write indication */
3214 		status = e1000_clock_out_i2c_byte(hw, dev_addr);
3215 		if (status != E1000_SUCCESS)
3216 			goto fail;
3217 
3218 		status = e1000_get_i2c_ack(hw);
3219 		if (status != E1000_SUCCESS)
3220 			goto fail;
3221 
3222 		status = e1000_clock_out_i2c_byte(hw, byte_offset);
3223 		if (status != E1000_SUCCESS)
3224 			goto fail;
3225 
3226 		status = e1000_get_i2c_ack(hw);
3227 		if (status != E1000_SUCCESS)
3228 			goto fail;
3229 
3230 		e1000_i2c_start(hw);
3231 
3232 		/* Device Address and read indication */
3233 		status = e1000_clock_out_i2c_byte(hw, (dev_addr | 0x1));
3234 		if (status != E1000_SUCCESS)
3235 			goto fail;
3236 
3237 		status = e1000_get_i2c_ack(hw);
3238 		if (status != E1000_SUCCESS)
3239 			goto fail;
3240 
3241 		status = e1000_clock_in_i2c_byte(hw, data);
3242 		if (status != E1000_SUCCESS)
3243 			goto fail;
3244 
3245 		status = e1000_clock_out_i2c_bit(hw, nack);
3246 		if (status != E1000_SUCCESS)
3247 			goto fail;
3248 
3249 		e1000_i2c_stop(hw);
3250 		break;
3251 
3252 fail:
3253 		hw->mac.ops.release_swfw_sync(hw, swfw_mask);
3254 		msec_delay(100);
3255 		e1000_i2c_bus_clear(hw);
3256 		retry++;
3257 		if (retry < max_retry)
3258 			DEBUGOUT("I2C byte read error - Retrying.\n");
3259 		else
3260 			DEBUGOUT("I2C byte read error.\n");
3261 
3262 	} while (retry < max_retry);
3263 
3264 	hw->mac.ops.release_swfw_sync(hw, swfw_mask);
3265 
3266 read_byte_out:
3267 
3268 	return status;
3269 }
3270 
3271 /**
3272  *  e1000_write_i2c_byte_generic - Writes 8 bit word over I2C
3273  *  @hw: pointer to hardware structure
3274  *  @byte_offset: byte offset to write
3275  *  @dev_addr: device address
3276  *  @data: value to write
3277  *
3278  *  Performs byte write operation over I2C interface at
3279  *  a specified device address.
3280  **/
3281 s32 e1000_write_i2c_byte_generic(struct e1000_hw *hw, u8 byte_offset,
3282 				 u8 dev_addr, u8 data)
3283 {
3284 	s32 status = E1000_SUCCESS;
3285 	u32 max_retry = 1;
3286 	u32 retry = 0;
3287 	u16 swfw_mask = 0;
3288 
3289 	DEBUGFUNC("e1000_write_i2c_byte_generic");
3290 
3291 	swfw_mask = E1000_SWFW_PHY0_SM;
3292 
3293 	if (hw->mac.ops.acquire_swfw_sync(hw, swfw_mask) != E1000_SUCCESS) {
3294 		status = E1000_ERR_SWFW_SYNC;
3295 		goto write_byte_out;
3296 	}
3297 
3298 	do {
3299 		e1000_i2c_start(hw);
3300 
3301 		status = e1000_clock_out_i2c_byte(hw, dev_addr);
3302 		if (status != E1000_SUCCESS)
3303 			goto fail;
3304 
3305 		status = e1000_get_i2c_ack(hw);
3306 		if (status != E1000_SUCCESS)
3307 			goto fail;
3308 
3309 		status = e1000_clock_out_i2c_byte(hw, byte_offset);
3310 		if (status != E1000_SUCCESS)
3311 			goto fail;
3312 
3313 		status = e1000_get_i2c_ack(hw);
3314 		if (status != E1000_SUCCESS)
3315 			goto fail;
3316 
3317 		status = e1000_clock_out_i2c_byte(hw, data);
3318 		if (status != E1000_SUCCESS)
3319 			goto fail;
3320 
3321 		status = e1000_get_i2c_ack(hw);
3322 		if (status != E1000_SUCCESS)
3323 			goto fail;
3324 
3325 		e1000_i2c_stop(hw);
3326 		break;
3327 
3328 fail:
3329 		e1000_i2c_bus_clear(hw);
3330 		retry++;
3331 		if (retry < max_retry)
3332 			DEBUGOUT("I2C byte write error - Retrying.\n");
3333 		else
3334 			DEBUGOUT("I2C byte write error.\n");
3335 	} while (retry < max_retry);
3336 
3337 	hw->mac.ops.release_swfw_sync(hw, swfw_mask);
3338 
3339 write_byte_out:
3340 
3341 	return status;
3342 }
3343 
3344 /**
3345  *  e1000_i2c_start - Sets I2C start condition
3346  *  @hw: pointer to hardware structure
3347  *
3348  *  Sets I2C start condition (High -> Low on SDA while SCL is High)
3349  **/
3350 static void e1000_i2c_start(struct e1000_hw *hw)
3351 {
3352 	u32 i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS);
3353 
3354 	DEBUGFUNC("e1000_i2c_start");
3355 
3356 	/* Start condition must begin with data and clock high */
3357 	e1000_set_i2c_data(hw, &i2cctl, 1);
3358 	e1000_raise_i2c_clk(hw, &i2cctl);
3359 
3360 	/* Setup time for start condition (4.7us) */
3361 	usec_delay(E1000_I2C_T_SU_STA);
3362 
3363 	e1000_set_i2c_data(hw, &i2cctl, 0);
3364 
3365 	/* Hold time for start condition (4us) */
3366 	usec_delay(E1000_I2C_T_HD_STA);
3367 
3368 	e1000_lower_i2c_clk(hw, &i2cctl);
3369 
3370 	/* Minimum low period of clock is 4.7 us */
3371 	usec_delay(E1000_I2C_T_LOW);
3372 
3373 }
3374 
3375 /**
3376  *  e1000_i2c_stop - Sets I2C stop condition
3377  *  @hw: pointer to hardware structure
3378  *
3379  *  Sets I2C stop condition (Low -> High on SDA while SCL is High)
3380  **/
3381 static void e1000_i2c_stop(struct e1000_hw *hw)
3382 {
3383 	u32 i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS);
3384 
3385 	DEBUGFUNC("e1000_i2c_stop");
3386 
3387 	/* Stop condition must begin with data low and clock high */
3388 	e1000_set_i2c_data(hw, &i2cctl, 0);
3389 	e1000_raise_i2c_clk(hw, &i2cctl);
3390 
3391 	/* Setup time for stop condition (4us) */
3392 	usec_delay(E1000_I2C_T_SU_STO);
3393 
3394 	e1000_set_i2c_data(hw, &i2cctl, 1);
3395 
3396 	/* bus free time between stop and start (4.7us)*/
3397 	usec_delay(E1000_I2C_T_BUF);
3398 }
3399 
3400 /**
3401  *  e1000_clock_in_i2c_byte - Clocks in one byte via I2C
3402  *  @hw: pointer to hardware structure
3403  *  @data: data byte to clock in
3404  *
3405  *  Clocks in one byte data via I2C data/clock
3406  **/
3407 static s32 e1000_clock_in_i2c_byte(struct e1000_hw *hw, u8 *data)
3408 {
3409 	s32 i;
3410 	bool bit = 0;
3411 
3412 	DEBUGFUNC("e1000_clock_in_i2c_byte");
3413 
3414 	*data = 0;
3415 	for (i = 7; i >= 0; i--) {
3416 		e1000_clock_in_i2c_bit(hw, &bit);
3417 		*data |= bit << i;
3418 	}
3419 
3420 	return E1000_SUCCESS;
3421 }
3422 
3423 /**
3424  *  e1000_clock_out_i2c_byte - Clocks out one byte via I2C
3425  *  @hw: pointer to hardware structure
3426  *  @data: data byte clocked out
3427  *
3428  *  Clocks out one byte data via I2C data/clock
3429  **/
3430 static s32 e1000_clock_out_i2c_byte(struct e1000_hw *hw, u8 data)
3431 {
3432 	s32 status = E1000_SUCCESS;
3433 	s32 i;
3434 	u32 i2cctl;
3435 	bool bit = 0;
3436 
3437 	DEBUGFUNC("e1000_clock_out_i2c_byte");
3438 
3439 	for (i = 7; i >= 0; i--) {
3440 		bit = (data >> i) & 0x1;
3441 		status = e1000_clock_out_i2c_bit(hw, bit);
3442 
3443 		if (status != E1000_SUCCESS)
3444 			break;
3445 	}
3446 
3447 	/* Release SDA line (set high) */
3448 	i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS);
3449 
3450 	i2cctl |= E1000_I2C_DATA_OE_N;
3451 	E1000_WRITE_REG(hw, E1000_I2CPARAMS, i2cctl);
3452 	E1000_WRITE_FLUSH(hw);
3453 
3454 	return status;
3455 }
3456 
3457 /**
3458  *  e1000_get_i2c_ack - Polls for I2C ACK
3459  *  @hw: pointer to hardware structure
3460  *
3461  *  Clocks in/out one bit via I2C data/clock
3462  **/
3463 static s32 e1000_get_i2c_ack(struct e1000_hw *hw)
3464 {
3465 	s32 status = E1000_SUCCESS;
3466 	u32 i = 0;
3467 	u32 i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS);
3468 	u32 timeout = 10;
3469 	bool ack = TRUE;
3470 
3471 	DEBUGFUNC("e1000_get_i2c_ack");
3472 
3473 	e1000_raise_i2c_clk(hw, &i2cctl);
3474 
3475 	/* Minimum high period of clock is 4us */
3476 	usec_delay(E1000_I2C_T_HIGH);
3477 
3478 	/* Wait until SCL returns high */
3479 	for (i = 0; i < timeout; i++) {
3480 		usec_delay(1);
3481 		i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS);
3482 		if (i2cctl & E1000_I2C_CLK_IN)
3483 			break;
3484 	}
3485 	if (!(i2cctl & E1000_I2C_CLK_IN))
3486 		return E1000_ERR_I2C;
3487 
3488 	ack = e1000_get_i2c_data(&i2cctl);
3489 	if (ack) {
3490 		DEBUGOUT("I2C ack was not received.\n");
3491 		status = E1000_ERR_I2C;
3492 	}
3493 
3494 	e1000_lower_i2c_clk(hw, &i2cctl);
3495 
3496 	/* Minimum low period of clock is 4.7 us */
3497 	usec_delay(E1000_I2C_T_LOW);
3498 
3499 	return status;
3500 }
3501 
3502 /**
3503  *  e1000_clock_in_i2c_bit - Clocks in one bit via I2C data/clock
3504  *  @hw: pointer to hardware structure
3505  *  @data: read data value
3506  *
3507  *  Clocks in one bit via I2C data/clock
3508  **/
3509 static s32 e1000_clock_in_i2c_bit(struct e1000_hw *hw, bool *data)
3510 {
3511 	u32 i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS);
3512 
3513 	DEBUGFUNC("e1000_clock_in_i2c_bit");
3514 
3515 	e1000_raise_i2c_clk(hw, &i2cctl);
3516 
3517 	/* Minimum high period of clock is 4us */
3518 	usec_delay(E1000_I2C_T_HIGH);
3519 
3520 	i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS);
3521 	*data = e1000_get_i2c_data(&i2cctl);
3522 
3523 	e1000_lower_i2c_clk(hw, &i2cctl);
3524 
3525 	/* Minimum low period of clock is 4.7 us */
3526 	usec_delay(E1000_I2C_T_LOW);
3527 
3528 	return E1000_SUCCESS;
3529 }
3530 
3531 /**
3532  *  e1000_clock_out_i2c_bit - Clocks in/out one bit via I2C data/clock
3533  *  @hw: pointer to hardware structure
3534  *  @data: data value to write
3535  *
3536  *  Clocks out one bit via I2C data/clock
3537  **/
3538 static s32 e1000_clock_out_i2c_bit(struct e1000_hw *hw, bool data)
3539 {
3540 	s32 status;
3541 	u32 i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS);
3542 
3543 	DEBUGFUNC("e1000_clock_out_i2c_bit");
3544 
3545 	status = e1000_set_i2c_data(hw, &i2cctl, data);
3546 	if (status == E1000_SUCCESS) {
3547 		e1000_raise_i2c_clk(hw, &i2cctl);
3548 
3549 		/* Minimum high period of clock is 4us */
3550 		usec_delay(E1000_I2C_T_HIGH);
3551 
3552 		e1000_lower_i2c_clk(hw, &i2cctl);
3553 
3554 		/* Minimum low period of clock is 4.7 us.
3555 		 * This also takes care of the data hold time.
3556 		 */
3557 		usec_delay(E1000_I2C_T_LOW);
3558 	} else {
3559 		status = E1000_ERR_I2C;
3560 		DEBUGOUT1("I2C data was not set to %X\n", data);
3561 	}
3562 
3563 	return status;
3564 }
3565 /**
3566  *  e1000_raise_i2c_clk - Raises the I2C SCL clock
3567  *  @hw: pointer to hardware structure
3568  *  @i2cctl: Current value of I2CCTL register
3569  *
3570  *  Raises the I2C clock line '0'->'1'
3571  **/
3572 static void e1000_raise_i2c_clk(struct e1000_hw *hw, u32 *i2cctl)
3573 {
3574 	DEBUGFUNC("e1000_raise_i2c_clk");
3575 
3576 	*i2cctl |= E1000_I2C_CLK_OUT;
3577 	*i2cctl &= ~E1000_I2C_CLK_OE_N;
3578 	E1000_WRITE_REG(hw, E1000_I2CPARAMS, *i2cctl);
3579 	E1000_WRITE_FLUSH(hw);
3580 
3581 	/* SCL rise time (1000ns) */
3582 	usec_delay(E1000_I2C_T_RISE);
3583 }
3584 
3585 /**
3586  *  e1000_lower_i2c_clk - Lowers the I2C SCL clock
3587  *  @hw: pointer to hardware structure
3588  *  @i2cctl: Current value of I2CCTL register
3589  *
3590  *  Lowers the I2C clock line '1'->'0'
3591  **/
3592 static void e1000_lower_i2c_clk(struct e1000_hw *hw, u32 *i2cctl)
3593 {
3594 
3595 	DEBUGFUNC("e1000_lower_i2c_clk");
3596 
3597 	*i2cctl &= ~E1000_I2C_CLK_OUT;
3598 	*i2cctl &= ~E1000_I2C_CLK_OE_N;
3599 	E1000_WRITE_REG(hw, E1000_I2CPARAMS, *i2cctl);
3600 	E1000_WRITE_FLUSH(hw);
3601 
3602 	/* SCL fall time (300ns) */
3603 	usec_delay(E1000_I2C_T_FALL);
3604 }
3605 
3606 /**
3607  *  e1000_set_i2c_data - Sets the I2C data bit
3608  *  @hw: pointer to hardware structure
3609  *  @i2cctl: Current value of I2CCTL register
3610  *  @data: I2C data value (0 or 1) to set
3611  *
3612  *  Sets the I2C data bit
3613  **/
3614 static s32 e1000_set_i2c_data(struct e1000_hw *hw, u32 *i2cctl, bool data)
3615 {
3616 	s32 status = E1000_SUCCESS;
3617 
3618 	DEBUGFUNC("e1000_set_i2c_data");
3619 
3620 	if (data)
3621 		*i2cctl |= E1000_I2C_DATA_OUT;
3622 	else
3623 		*i2cctl &= ~E1000_I2C_DATA_OUT;
3624 
3625 	*i2cctl &= ~E1000_I2C_DATA_OE_N;
3626 	*i2cctl |= E1000_I2C_CLK_OE_N;
3627 	E1000_WRITE_REG(hw, E1000_I2CPARAMS, *i2cctl);
3628 	E1000_WRITE_FLUSH(hw);
3629 
3630 	/* Data rise/fall (1000ns/300ns) and set-up time (250ns) */
3631 	usec_delay(E1000_I2C_T_RISE + E1000_I2C_T_FALL + E1000_I2C_T_SU_DATA);
3632 
3633 	*i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS);
3634 	if (data != e1000_get_i2c_data(i2cctl)) {
3635 		status = E1000_ERR_I2C;
3636 		DEBUGOUT1("Error - I2C data was not set to %X.\n", data);
3637 	}
3638 
3639 	return status;
3640 }
3641 
3642 /**
3643  *  e1000_get_i2c_data - Reads the I2C SDA data bit
3644  *  @hw: pointer to hardware structure
3645  *  @i2cctl: Current value of I2CCTL register
3646  *
3647  *  Returns the I2C data bit value
3648  **/
3649 static bool e1000_get_i2c_data(u32 *i2cctl)
3650 {
3651 	bool data;
3652 
3653 	DEBUGFUNC("e1000_get_i2c_data");
3654 
3655 	if (*i2cctl & E1000_I2C_DATA_IN)
3656 		data = 1;
3657 	else
3658 		data = 0;
3659 
3660 	return data;
3661 }
3662 
3663 /**
3664  *  e1000_i2c_bus_clear - Clears the I2C bus
3665  *  @hw: pointer to hardware structure
3666  *
3667  *  Clears the I2C bus by sending nine clock pulses.
3668  *  Used when data line is stuck low.
3669  **/
3670 void e1000_i2c_bus_clear(struct e1000_hw *hw)
3671 {
3672 	u32 i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS);
3673 	u32 i;
3674 
3675 	DEBUGFUNC("e1000_i2c_bus_clear");
3676 
3677 	e1000_i2c_start(hw);
3678 
3679 	e1000_set_i2c_data(hw, &i2cctl, 1);
3680 
3681 	for (i = 0; i < 9; i++) {
3682 		e1000_raise_i2c_clk(hw, &i2cctl);
3683 
3684 		/* Min high period of clock is 4us */
3685 		usec_delay(E1000_I2C_T_HIGH);
3686 
3687 		e1000_lower_i2c_clk(hw, &i2cctl);
3688 
3689 		/* Min low period of clock is 4.7us*/
3690 		usec_delay(E1000_I2C_T_LOW);
3691 	}
3692 
3693 	e1000_i2c_start(hw);
3694 
3695 	/* Put the i2c bus back to default state */
3696 	e1000_i2c_stop(hw);
3697 }
3698 
3699