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