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