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