1 /******************************************************************************
3 Copyright (c) 2001-2013, Intel Corporation
6 Redistribution and use in source and binary forms, with or without
7 modification, are permitted provided that the following conditions are met:
9 1. Redistributions of source code must retain the above copyright notice,
10 this list of conditions and the following disclaimer.
12 2. Redistributions in binary form must reproduce the above copyright
13 notice, this list of conditions and the following disclaimer in the
14 documentation and/or other materials provided with the distribution.
16 3. Neither the name of the Intel Corporation nor the names of its
17 contributors may be used to endorse or promote products derived from
18 this software without specific prior written permission.
20 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 POSSIBILITY OF SUCH DAMAGE.
32 ******************************************************************************/
36 * 82575EB Gigabit Network Connection
37 * 82575EB Gigabit Backplane Connection
38 * 82575GB Gigabit Network Connection
39 * 82576 Gigabit Network Connection
40 * 82576 Quad Port Gigabit Mezzanine Adapter
41 * 82580 Gigabit Network Connection
42 * I350 Gigabit Network Connection
45 #include "e1000_api.h"
46 #include "e1000_i210.h"
48 static s32 e1000_init_phy_params_82575(struct e1000_hw *hw);
49 static s32 e1000_init_mac_params_82575(struct e1000_hw *hw);
50 static s32 e1000_acquire_phy_82575(struct e1000_hw *hw);
51 static void e1000_release_phy_82575(struct e1000_hw *hw);
52 static s32 e1000_acquire_nvm_82575(struct e1000_hw *hw);
53 static void e1000_release_nvm_82575(struct e1000_hw *hw);
54 static s32 e1000_check_for_link_82575(struct e1000_hw *hw);
55 static s32 e1000_check_for_link_media_swap(struct e1000_hw *hw);
56 static s32 e1000_get_cfg_done_82575(struct e1000_hw *hw);
57 static s32 e1000_get_link_up_info_82575(struct e1000_hw *hw, u16 *speed,
59 static s32 e1000_phy_hw_reset_sgmii_82575(struct e1000_hw *hw);
60 static s32 e1000_read_phy_reg_sgmii_82575(struct e1000_hw *hw, u32 offset,
62 static s32 e1000_reset_hw_82575(struct e1000_hw *hw);
63 static s32 e1000_reset_hw_82580(struct e1000_hw *hw);
64 static s32 e1000_read_phy_reg_82580(struct e1000_hw *hw,
65 u32 offset, u16 *data);
66 static s32 e1000_write_phy_reg_82580(struct e1000_hw *hw,
67 u32 offset, u16 data);
68 static s32 e1000_set_d0_lplu_state_82580(struct e1000_hw *hw,
70 static s32 e1000_set_d3_lplu_state_82580(struct e1000_hw *hw,
72 static s32 e1000_set_d0_lplu_state_82575(struct e1000_hw *hw,
74 static s32 e1000_setup_copper_link_82575(struct e1000_hw *hw);
75 static s32 e1000_setup_serdes_link_82575(struct e1000_hw *hw);
76 static s32 e1000_get_media_type_82575(struct e1000_hw *hw);
77 static s32 e1000_set_sfp_media_type_82575(struct e1000_hw *hw);
78 static s32 e1000_valid_led_default_82575(struct e1000_hw *hw, u16 *data);
79 static s32 e1000_write_phy_reg_sgmii_82575(struct e1000_hw *hw,
80 u32 offset, u16 data);
81 static void e1000_clear_hw_cntrs_82575(struct e1000_hw *hw);
82 static s32 e1000_acquire_swfw_sync_82575(struct e1000_hw *hw, u16 mask);
83 static s32 e1000_get_pcs_speed_and_duplex_82575(struct e1000_hw *hw,
84 u16 *speed, u16 *duplex);
85 static s32 e1000_get_phy_id_82575(struct e1000_hw *hw);
86 static void e1000_release_swfw_sync_82575(struct e1000_hw *hw, u16 mask);
87 static bool e1000_sgmii_active_82575(struct e1000_hw *hw);
88 static s32 e1000_reset_init_script_82575(struct e1000_hw *hw);
89 static s32 e1000_read_mac_addr_82575(struct e1000_hw *hw);
90 static void e1000_config_collision_dist_82575(struct e1000_hw *hw);
91 static void e1000_power_down_phy_copper_82575(struct e1000_hw *hw);
92 static void e1000_shutdown_serdes_link_82575(struct e1000_hw *hw);
93 static void e1000_power_up_serdes_link_82575(struct e1000_hw *hw);
94 static s32 e1000_set_pcie_completion_timeout(struct e1000_hw *hw);
95 static s32 e1000_reset_mdicnfg_82580(struct e1000_hw *hw);
96 static s32 e1000_validate_nvm_checksum_82580(struct e1000_hw *hw);
97 static s32 e1000_update_nvm_checksum_82580(struct e1000_hw *hw);
98 static s32 e1000_update_nvm_checksum_with_offset(struct e1000_hw *hw,
100 static s32 e1000_validate_nvm_checksum_with_offset(struct e1000_hw *hw,
102 static s32 e1000_validate_nvm_checksum_i350(struct e1000_hw *hw);
103 static s32 e1000_update_nvm_checksum_i350(struct e1000_hw *hw);
104 static void e1000_write_vfta_i350(struct e1000_hw *hw, u32 offset, u32 value);
105 static void e1000_clear_vfta_i350(struct e1000_hw *hw);
107 static void e1000_i2c_start(struct e1000_hw *hw);
108 static void e1000_i2c_stop(struct e1000_hw *hw);
109 static s32 e1000_clock_in_i2c_byte(struct e1000_hw *hw, u8 *data);
110 static s32 e1000_clock_out_i2c_byte(struct e1000_hw *hw, u8 data);
111 static s32 e1000_get_i2c_ack(struct e1000_hw *hw);
112 static s32 e1000_clock_in_i2c_bit(struct e1000_hw *hw, bool *data);
113 static s32 e1000_clock_out_i2c_bit(struct e1000_hw *hw, bool data);
114 static void e1000_raise_i2c_clk(struct e1000_hw *hw, u32 *i2cctl);
115 static void e1000_lower_i2c_clk(struct e1000_hw *hw, u32 *i2cctl);
116 static s32 e1000_set_i2c_data(struct e1000_hw *hw, u32 *i2cctl, bool data);
117 static bool e1000_get_i2c_data(u32 *i2cctl);
119 static const u16 e1000_82580_rxpbs_table[] = {
120 36, 72, 144, 1, 2, 4, 8, 16, 35, 70, 140 };
121 #define E1000_82580_RXPBS_TABLE_SIZE \
122 (sizeof(e1000_82580_rxpbs_table) / \
123 sizeof(e1000_82580_rxpbs_table[0]))
127 * e1000_sgmii_uses_mdio_82575 - Determine if I2C pins are for external MDIO
128 * @hw: pointer to the HW structure
130 * Called to determine if the I2C pins are being used for I2C or as an
131 * external MDIO interface since the two options are mutually exclusive.
133 static bool e1000_sgmii_uses_mdio_82575(struct e1000_hw *hw)
136 bool ext_mdio = FALSE;
138 DEBUGFUNC("e1000_sgmii_uses_mdio_82575");
140 switch (hw->mac.type) {
143 reg = E1000_READ_REG(hw, E1000_MDIC);
144 ext_mdio = !!(reg & E1000_MDIC_DEST);
151 reg = E1000_READ_REG(hw, E1000_MDICNFG);
152 ext_mdio = !!(reg & E1000_MDICNFG_EXT_MDIO);
161 * e1000_init_phy_params_82575 - Init PHY func ptrs.
162 * @hw: pointer to the HW structure
164 static s32 e1000_init_phy_params_82575(struct e1000_hw *hw)
166 struct e1000_phy_info *phy = &hw->phy;
167 s32 ret_val = E1000_SUCCESS;
170 DEBUGFUNC("e1000_init_phy_params_82575");
172 phy->ops.read_i2c_byte = e1000_read_i2c_byte_generic;
173 phy->ops.write_i2c_byte = e1000_write_i2c_byte_generic;
175 if (hw->phy.media_type != e1000_media_type_copper) {
176 phy->type = e1000_phy_none;
180 phy->ops.power_up = e1000_power_up_phy_copper;
181 phy->ops.power_down = e1000_power_down_phy_copper_82575;
183 phy->autoneg_mask = AUTONEG_ADVERTISE_SPEED_DEFAULT;
184 phy->reset_delay_us = 100;
186 phy->ops.acquire = e1000_acquire_phy_82575;
187 phy->ops.check_reset_block = e1000_check_reset_block_generic;
188 phy->ops.commit = e1000_phy_sw_reset_generic;
189 phy->ops.get_cfg_done = e1000_get_cfg_done_82575;
190 phy->ops.release = e1000_release_phy_82575;
192 ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
194 if (e1000_sgmii_active_82575(hw)) {
195 phy->ops.reset = e1000_phy_hw_reset_sgmii_82575;
196 ctrl_ext |= E1000_CTRL_I2C_ENA;
198 phy->ops.reset = e1000_phy_hw_reset_generic;
199 ctrl_ext &= ~E1000_CTRL_I2C_ENA;
202 E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext);
203 e1000_reset_mdicnfg_82580(hw);
205 if (e1000_sgmii_active_82575(hw) && !e1000_sgmii_uses_mdio_82575(hw)) {
206 phy->ops.read_reg = e1000_read_phy_reg_sgmii_82575;
207 phy->ops.write_reg = e1000_write_phy_reg_sgmii_82575;
209 switch (hw->mac.type) {
213 phy->ops.read_reg = e1000_read_phy_reg_82580;
214 phy->ops.write_reg = e1000_write_phy_reg_82580;
218 phy->ops.read_reg = e1000_read_phy_reg_gs40g;
219 phy->ops.write_reg = e1000_write_phy_reg_gs40g;
222 phy->ops.read_reg = e1000_read_phy_reg_igp;
223 phy->ops.write_reg = e1000_write_phy_reg_igp;
227 /* Set phy->phy_addr and phy->id. */
228 ret_val = e1000_get_phy_id_82575(hw);
230 /* Verify phy id and set remaining function pointers */
232 case M88E1543_E_PHY_ID:
233 case M88E1512_E_PHY_ID:
234 case I347AT4_E_PHY_ID:
235 case M88E1112_E_PHY_ID:
236 case M88E1340M_E_PHY_ID:
237 case M88E1111_I_PHY_ID:
238 phy->type = e1000_phy_m88;
239 phy->ops.check_polarity = e1000_check_polarity_m88;
240 phy->ops.get_info = e1000_get_phy_info_m88;
241 if (phy->id == I347AT4_E_PHY_ID ||
242 phy->id == M88E1112_E_PHY_ID ||
243 phy->id == M88E1340M_E_PHY_ID)
244 phy->ops.get_cable_length =
245 e1000_get_cable_length_m88_gen2;
246 else if (phy->id == M88E1543_E_PHY_ID ||
247 phy->id == M88E1512_E_PHY_ID)
248 phy->ops.get_cable_length =
249 e1000_get_cable_length_m88_gen2;
251 phy->ops.get_cable_length = e1000_get_cable_length_m88;
252 phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_m88;
253 /* Check if this PHY is confgured for media swap. */
254 if (phy->id == M88E1112_E_PHY_ID) {
257 ret_val = phy->ops.write_reg(hw,
258 E1000_M88E1112_PAGE_ADDR,
263 ret_val = phy->ops.read_reg(hw,
264 E1000_M88E1112_MAC_CTRL_1,
269 data = (data & E1000_M88E1112_MAC_CTRL_1_MODE_MASK) >>
270 E1000_M88E1112_MAC_CTRL_1_MODE_SHIFT;
271 if (data == E1000_M88E1112_AUTO_COPPER_SGMII ||
272 data == E1000_M88E1112_AUTO_COPPER_BASEX)
273 hw->mac.ops.check_for_link =
274 e1000_check_for_link_media_swap;
276 if (phy->id == M88E1512_E_PHY_ID) {
277 ret_val = e1000_initialize_M88E1512_phy(hw);
282 case IGP03E1000_E_PHY_ID:
283 case IGP04E1000_E_PHY_ID:
284 phy->type = e1000_phy_igp_3;
285 phy->ops.check_polarity = e1000_check_polarity_igp;
286 phy->ops.get_info = e1000_get_phy_info_igp;
287 phy->ops.get_cable_length = e1000_get_cable_length_igp_2;
288 phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_igp;
289 phy->ops.set_d0_lplu_state = e1000_set_d0_lplu_state_82575;
290 phy->ops.set_d3_lplu_state = e1000_set_d3_lplu_state_generic;
292 case I82580_I_PHY_ID:
294 phy->type = e1000_phy_82580;
295 phy->ops.check_polarity = e1000_check_polarity_82577;
296 phy->ops.force_speed_duplex =
297 e1000_phy_force_speed_duplex_82577;
298 phy->ops.get_cable_length = e1000_get_cable_length_82577;
299 phy->ops.get_info = e1000_get_phy_info_82577;
300 phy->ops.set_d0_lplu_state = e1000_set_d0_lplu_state_82580;
301 phy->ops.set_d3_lplu_state = e1000_set_d3_lplu_state_82580;
304 phy->type = e1000_phy_i210;
305 phy->ops.check_polarity = e1000_check_polarity_m88;
306 phy->ops.get_info = e1000_get_phy_info_m88;
307 phy->ops.get_cable_length = e1000_get_cable_length_m88_gen2;
308 phy->ops.set_d0_lplu_state = e1000_set_d0_lplu_state_82580;
309 phy->ops.set_d3_lplu_state = e1000_set_d3_lplu_state_82580;
310 phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_m88;
313 ret_val = -E1000_ERR_PHY;
322 * e1000_init_nvm_params_82575 - Init NVM func ptrs.
323 * @hw: pointer to the HW structure
325 s32 e1000_init_nvm_params_82575(struct e1000_hw *hw)
327 struct e1000_nvm_info *nvm = &hw->nvm;
328 u32 eecd = E1000_READ_REG(hw, E1000_EECD);
331 DEBUGFUNC("e1000_init_nvm_params_82575");
333 size = (u16)((eecd & E1000_EECD_SIZE_EX_MASK) >>
334 E1000_EECD_SIZE_EX_SHIFT);
336 * Added to a constant, "size" becomes the left-shift value
337 * for setting word_size.
339 size += NVM_WORD_SIZE_BASE_SHIFT;
341 /* Just in case size is out of range, cap it to the largest
342 * EEPROM size supported
347 nvm->word_size = 1 << size;
348 if (hw->mac.type < e1000_i210) {
349 nvm->opcode_bits = 8;
352 switch (nvm->override) {
353 case e1000_nvm_override_spi_large:
355 nvm->address_bits = 16;
357 case e1000_nvm_override_spi_small:
359 nvm->address_bits = 8;
362 nvm->page_size = eecd & E1000_EECD_ADDR_BITS ? 32 : 8;
363 nvm->address_bits = eecd & E1000_EECD_ADDR_BITS ?
367 if (nvm->word_size == (1 << 15))
368 nvm->page_size = 128;
370 nvm->type = e1000_nvm_eeprom_spi;
372 nvm->type = e1000_nvm_flash_hw;
375 /* Function Pointers */
376 nvm->ops.acquire = e1000_acquire_nvm_82575;
377 nvm->ops.release = e1000_release_nvm_82575;
378 if (nvm->word_size < (1 << 15))
379 nvm->ops.read = e1000_read_nvm_eerd;
381 nvm->ops.read = e1000_read_nvm_spi;
383 nvm->ops.write = e1000_write_nvm_spi;
384 nvm->ops.validate = e1000_validate_nvm_checksum_generic;
385 nvm->ops.update = e1000_update_nvm_checksum_generic;
386 nvm->ops.valid_led_default = e1000_valid_led_default_82575;
388 /* override generic family function pointers for specific descendants */
389 switch (hw->mac.type) {
391 nvm->ops.validate = e1000_validate_nvm_checksum_82580;
392 nvm->ops.update = e1000_update_nvm_checksum_82580;
396 nvm->ops.validate = e1000_validate_nvm_checksum_i350;
397 nvm->ops.update = e1000_update_nvm_checksum_i350;
403 return E1000_SUCCESS;
407 * e1000_init_mac_params_82575 - Init MAC func ptrs.
408 * @hw: pointer to the HW structure
410 static s32 e1000_init_mac_params_82575(struct e1000_hw *hw)
412 struct e1000_mac_info *mac = &hw->mac;
413 struct e1000_dev_spec_82575 *dev_spec = &hw->dev_spec._82575;
415 DEBUGFUNC("e1000_init_mac_params_82575");
417 /* Derives media type */
418 e1000_get_media_type_82575(hw);
419 /* Set mta register count */
420 mac->mta_reg_count = 128;
421 /* Set uta register count */
422 mac->uta_reg_count = (hw->mac.type == e1000_82575) ? 0 : 128;
423 /* Set rar entry count */
424 mac->rar_entry_count = E1000_RAR_ENTRIES_82575;
425 if (mac->type == e1000_82576)
426 mac->rar_entry_count = E1000_RAR_ENTRIES_82576;
427 if (mac->type == e1000_82580)
428 mac->rar_entry_count = E1000_RAR_ENTRIES_82580;
429 if (mac->type == e1000_i350 || mac->type == e1000_i354)
430 mac->rar_entry_count = E1000_RAR_ENTRIES_I350;
432 /* Enable EEE default settings for EEE supported devices */
433 if (mac->type >= e1000_i350)
434 dev_spec->eee_disable = FALSE;
436 /* Allow a single clear of the SW semaphore on I210 and newer */
437 if (mac->type >= e1000_i210)
438 dev_spec->clear_semaphore_once = TRUE;
440 /* Set if part includes ASF firmware */
441 mac->asf_firmware_present = TRUE;
443 mac->has_fwsm = TRUE;
444 /* ARC supported; valid only if manageability features are enabled. */
445 mac->arc_subsystem_valid =
446 !!(E1000_READ_REG(hw, E1000_FWSM) & E1000_FWSM_MODE_MASK);
448 /* Function pointers */
450 /* bus type/speed/width */
451 mac->ops.get_bus_info = e1000_get_bus_info_pcie_generic;
453 if (mac->type >= e1000_82580)
454 mac->ops.reset_hw = e1000_reset_hw_82580;
456 mac->ops.reset_hw = e1000_reset_hw_82575;
457 /* hw initialization */
458 if ((mac->type == e1000_i210) || (mac->type == e1000_i211))
459 mac->ops.init_hw = e1000_init_hw_i210;
461 mac->ops.init_hw = e1000_init_hw_82575;
463 mac->ops.setup_link = e1000_setup_link_generic;
464 /* physical interface link setup */
465 mac->ops.setup_physical_interface =
466 (hw->phy.media_type == e1000_media_type_copper)
467 ? e1000_setup_copper_link_82575 : e1000_setup_serdes_link_82575;
468 /* physical interface shutdown */
469 mac->ops.shutdown_serdes = e1000_shutdown_serdes_link_82575;
470 /* physical interface power up */
471 mac->ops.power_up_serdes = e1000_power_up_serdes_link_82575;
473 mac->ops.check_for_link = e1000_check_for_link_82575;
474 /* read mac address */
475 mac->ops.read_mac_addr = e1000_read_mac_addr_82575;
476 /* configure collision distance */
477 mac->ops.config_collision_dist = e1000_config_collision_dist_82575;
478 /* multicast address update */
479 mac->ops.update_mc_addr_list = e1000_update_mc_addr_list_generic;
480 if (hw->mac.type == e1000_i350 || mac->type == e1000_i354) {
482 mac->ops.write_vfta = e1000_write_vfta_i350;
484 mac->ops.clear_vfta = e1000_clear_vfta_i350;
487 mac->ops.write_vfta = e1000_write_vfta_generic;
489 mac->ops.clear_vfta = e1000_clear_vfta_generic;
491 if (hw->mac.type >= e1000_82580)
492 mac->ops.validate_mdi_setting =
493 e1000_validate_mdi_setting_crossover_generic;
495 mac->ops.id_led_init = e1000_id_led_init_generic;
497 mac->ops.blink_led = e1000_blink_led_generic;
499 mac->ops.setup_led = e1000_setup_led_generic;
501 mac->ops.cleanup_led = e1000_cleanup_led_generic;
502 /* turn on/off LED */
503 mac->ops.led_on = e1000_led_on_generic;
504 mac->ops.led_off = e1000_led_off_generic;
505 /* clear hardware counters */
506 mac->ops.clear_hw_cntrs = e1000_clear_hw_cntrs_82575;
508 mac->ops.get_link_up_info = e1000_get_link_up_info_82575;
509 /* acquire SW_FW sync */
510 mac->ops.acquire_swfw_sync = e1000_acquire_swfw_sync_82575;
511 mac->ops.release_swfw_sync = e1000_release_swfw_sync_82575;
512 if (mac->type >= e1000_i210) {
513 mac->ops.acquire_swfw_sync = e1000_acquire_swfw_sync_i210;
514 mac->ops.release_swfw_sync = e1000_release_swfw_sync_i210;
517 /* set lan id for port to determine which phy lock to use */
518 hw->mac.ops.set_lan_id(hw);
520 return E1000_SUCCESS;
524 * e1000_init_function_pointers_82575 - Init func ptrs.
525 * @hw: pointer to the HW structure
527 * Called to initialize all function pointers and parameters.
529 void e1000_init_function_pointers_82575(struct e1000_hw *hw)
531 DEBUGFUNC("e1000_init_function_pointers_82575");
533 hw->mac.ops.init_params = e1000_init_mac_params_82575;
534 hw->nvm.ops.init_params = e1000_init_nvm_params_82575;
535 hw->phy.ops.init_params = e1000_init_phy_params_82575;
536 hw->mbx.ops.init_params = e1000_init_mbx_params_pf;
540 * e1000_acquire_phy_82575 - Acquire rights to access PHY
541 * @hw: pointer to the HW structure
543 * Acquire access rights to the correct PHY.
545 static s32 e1000_acquire_phy_82575(struct e1000_hw *hw)
547 u16 mask = E1000_SWFW_PHY0_SM;
549 DEBUGFUNC("e1000_acquire_phy_82575");
551 if (hw->bus.func == E1000_FUNC_1)
552 mask = E1000_SWFW_PHY1_SM;
553 else if (hw->bus.func == E1000_FUNC_2)
554 mask = E1000_SWFW_PHY2_SM;
555 else if (hw->bus.func == E1000_FUNC_3)
556 mask = E1000_SWFW_PHY3_SM;
558 return hw->mac.ops.acquire_swfw_sync(hw, mask);
562 * e1000_release_phy_82575 - Release rights to access PHY
563 * @hw: pointer to the HW structure
565 * A wrapper to release access rights to the correct PHY.
567 static void e1000_release_phy_82575(struct e1000_hw *hw)
569 u16 mask = E1000_SWFW_PHY0_SM;
571 DEBUGFUNC("e1000_release_phy_82575");
573 if (hw->bus.func == E1000_FUNC_1)
574 mask = E1000_SWFW_PHY1_SM;
575 else if (hw->bus.func == E1000_FUNC_2)
576 mask = E1000_SWFW_PHY2_SM;
577 else if (hw->bus.func == E1000_FUNC_3)
578 mask = E1000_SWFW_PHY3_SM;
580 hw->mac.ops.release_swfw_sync(hw, mask);
584 * e1000_read_phy_reg_sgmii_82575 - Read PHY register using sgmii
585 * @hw: pointer to the HW structure
586 * @offset: register offset to be read
587 * @data: pointer to the read data
589 * Reads the PHY register at offset using the serial gigabit media independent
590 * interface and stores the retrieved information in data.
592 static s32 e1000_read_phy_reg_sgmii_82575(struct e1000_hw *hw, u32 offset,
595 s32 ret_val = -E1000_ERR_PARAM;
597 DEBUGFUNC("e1000_read_phy_reg_sgmii_82575");
599 if (offset > E1000_MAX_SGMII_PHY_REG_ADDR) {
600 DEBUGOUT1("PHY Address %u is out of range\n", offset);
604 ret_val = hw->phy.ops.acquire(hw);
608 ret_val = e1000_read_phy_reg_i2c(hw, offset, data);
610 hw->phy.ops.release(hw);
617 * e1000_write_phy_reg_sgmii_82575 - Write PHY register using sgmii
618 * @hw: pointer to the HW structure
619 * @offset: register offset to write to
620 * @data: data to write at register offset
622 * Writes the data to PHY register at the offset using the serial gigabit
623 * media independent interface.
625 static s32 e1000_write_phy_reg_sgmii_82575(struct e1000_hw *hw, u32 offset,
628 s32 ret_val = -E1000_ERR_PARAM;
630 DEBUGFUNC("e1000_write_phy_reg_sgmii_82575");
632 if (offset > E1000_MAX_SGMII_PHY_REG_ADDR) {
633 DEBUGOUT1("PHY Address %d is out of range\n", offset);
637 ret_val = hw->phy.ops.acquire(hw);
641 ret_val = e1000_write_phy_reg_i2c(hw, offset, data);
643 hw->phy.ops.release(hw);
650 * e1000_get_phy_id_82575 - Retrieve PHY addr and id
651 * @hw: pointer to the HW structure
653 * Retrieves the PHY address and ID for both PHY's which do and do not use
656 static s32 e1000_get_phy_id_82575(struct e1000_hw *hw)
658 struct e1000_phy_info *phy = &hw->phy;
659 s32 ret_val = E1000_SUCCESS;
664 DEBUGFUNC("e1000_get_phy_id_82575");
666 /* some i354 devices need an extra read for phy id */
667 if (hw->mac.type == e1000_i354)
668 e1000_get_phy_id(hw);
671 * For SGMII PHYs, we try the list of possible addresses until
672 * we find one that works. For non-SGMII PHYs
673 * (e.g. integrated copper PHYs), an address of 1 should
674 * work. The result of this function should mean phy->phy_addr
675 * and phy->id are set correctly.
677 if (!e1000_sgmii_active_82575(hw)) {
679 ret_val = e1000_get_phy_id(hw);
683 if (e1000_sgmii_uses_mdio_82575(hw)) {
684 switch (hw->mac.type) {
687 mdic = E1000_READ_REG(hw, E1000_MDIC);
688 mdic &= E1000_MDIC_PHY_MASK;
689 phy->addr = mdic >> E1000_MDIC_PHY_SHIFT;
696 mdic = E1000_READ_REG(hw, E1000_MDICNFG);
697 mdic &= E1000_MDICNFG_PHY_MASK;
698 phy->addr = mdic >> E1000_MDICNFG_PHY_SHIFT;
701 ret_val = -E1000_ERR_PHY;
705 ret_val = e1000_get_phy_id(hw);
709 /* Power on sgmii phy if it is disabled */
710 ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
711 E1000_WRITE_REG(hw, E1000_CTRL_EXT,
712 ctrl_ext & ~E1000_CTRL_EXT_SDP3_DATA);
713 E1000_WRITE_FLUSH(hw);
717 * The address field in the I2CCMD register is 3 bits and 0 is invalid.
718 * Therefore, we need to test 1-7
720 for (phy->addr = 1; phy->addr < 8; phy->addr++) {
721 ret_val = e1000_read_phy_reg_sgmii_82575(hw, PHY_ID1, &phy_id);
722 if (ret_val == E1000_SUCCESS) {
723 DEBUGOUT2("Vendor ID 0x%08X read at address %u\n",
726 * At the time of this writing, The M88 part is
727 * the only supported SGMII PHY product.
729 if (phy_id == M88_VENDOR)
732 DEBUGOUT1("PHY address %u was unreadable\n",
737 /* A valid PHY type couldn't be found. */
738 if (phy->addr == 8) {
740 ret_val = -E1000_ERR_PHY;
742 ret_val = e1000_get_phy_id(hw);
745 /* restore previous sfp cage power state */
746 E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext);
753 * e1000_phy_hw_reset_sgmii_82575 - Performs a PHY reset
754 * @hw: pointer to the HW structure
756 * Resets the PHY using the serial gigabit media independent interface.
758 static s32 e1000_phy_hw_reset_sgmii_82575(struct e1000_hw *hw)
760 s32 ret_val = E1000_SUCCESS;
761 struct e1000_phy_info *phy = &hw->phy;
763 DEBUGFUNC("e1000_phy_hw_reset_sgmii_82575");
766 * This isn't a TRUE "hard" reset, but is the only reset
767 * available to us at this time.
770 DEBUGOUT("Soft resetting SGMII attached PHY...\n");
772 if (!(hw->phy.ops.write_reg))
776 * SFP documentation requires the following to configure the SPF module
777 * to work on SGMII. No further documentation is given.
779 ret_val = hw->phy.ops.write_reg(hw, 0x1B, 0x8084);
783 ret_val = hw->phy.ops.commit(hw);
787 if (phy->id == M88E1512_E_PHY_ID)
788 ret_val = e1000_initialize_M88E1512_phy(hw);
794 * e1000_set_d0_lplu_state_82575 - Set Low Power Linkup D0 state
795 * @hw: pointer to the HW structure
796 * @active: TRUE to enable LPLU, FALSE to disable
798 * Sets the LPLU D0 state according to the active flag. When
799 * activating LPLU this function also disables smart speed
800 * and vice versa. LPLU will not be activated unless the
801 * device autonegotiation advertisement meets standards of
802 * either 10 or 10/100 or 10/100/1000 at all duplexes.
803 * This is a function pointer entry point only called by
804 * PHY setup routines.
806 static s32 e1000_set_d0_lplu_state_82575(struct e1000_hw *hw, bool active)
808 struct e1000_phy_info *phy = &hw->phy;
809 s32 ret_val = E1000_SUCCESS;
812 DEBUGFUNC("e1000_set_d0_lplu_state_82575");
814 if (!(hw->phy.ops.read_reg))
817 ret_val = phy->ops.read_reg(hw, IGP02E1000_PHY_POWER_MGMT, &data);
822 data |= IGP02E1000_PM_D0_LPLU;
823 ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT,
828 /* When LPLU is enabled, we should disable SmartSpeed */
829 ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
831 data &= ~IGP01E1000_PSCFR_SMART_SPEED;
832 ret_val = phy->ops.write_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
837 data &= ~IGP02E1000_PM_D0_LPLU;
838 ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT,
841 * LPLU and SmartSpeed are mutually exclusive. LPLU is used
842 * during Dx states where the power conservation is most
843 * important. During driver activity we should enable
844 * SmartSpeed, so performance is maintained.
846 if (phy->smart_speed == e1000_smart_speed_on) {
847 ret_val = phy->ops.read_reg(hw,
848 IGP01E1000_PHY_PORT_CONFIG,
853 data |= IGP01E1000_PSCFR_SMART_SPEED;
854 ret_val = phy->ops.write_reg(hw,
855 IGP01E1000_PHY_PORT_CONFIG,
859 } else if (phy->smart_speed == e1000_smart_speed_off) {
860 ret_val = phy->ops.read_reg(hw,
861 IGP01E1000_PHY_PORT_CONFIG,
866 data &= ~IGP01E1000_PSCFR_SMART_SPEED;
867 ret_val = phy->ops.write_reg(hw,
868 IGP01E1000_PHY_PORT_CONFIG,
880 * e1000_set_d0_lplu_state_82580 - Set Low Power Linkup D0 state
881 * @hw: pointer to the HW structure
882 * @active: TRUE to enable LPLU, FALSE to disable
884 * Sets the LPLU D0 state according to the active flag. When
885 * activating LPLU this function also disables smart speed
886 * and vice versa. LPLU will not be activated unless the
887 * device autonegotiation advertisement meets standards of
888 * either 10 or 10/100 or 10/100/1000 at all duplexes.
889 * This is a function pointer entry point only called by
890 * PHY setup routines.
892 static s32 e1000_set_d0_lplu_state_82580(struct e1000_hw *hw, bool active)
894 struct e1000_phy_info *phy = &hw->phy;
897 DEBUGFUNC("e1000_set_d0_lplu_state_82580");
899 data = E1000_READ_REG(hw, E1000_82580_PHY_POWER_MGMT);
902 data |= E1000_82580_PM_D0_LPLU;
904 /* When LPLU is enabled, we should disable SmartSpeed */
905 data &= ~E1000_82580_PM_SPD;
907 data &= ~E1000_82580_PM_D0_LPLU;
910 * LPLU and SmartSpeed are mutually exclusive. LPLU is used
911 * during Dx states where the power conservation is most
912 * important. During driver activity we should enable
913 * SmartSpeed, so performance is maintained.
915 if (phy->smart_speed == e1000_smart_speed_on)
916 data |= E1000_82580_PM_SPD;
917 else if (phy->smart_speed == e1000_smart_speed_off)
918 data &= ~E1000_82580_PM_SPD;
921 E1000_WRITE_REG(hw, E1000_82580_PHY_POWER_MGMT, data);
922 return E1000_SUCCESS;
926 * e1000_set_d3_lplu_state_82580 - Sets low power link up state for D3
927 * @hw: pointer to the HW structure
928 * @active: boolean used to enable/disable lplu
930 * Success returns 0, Failure returns 1
932 * The low power link up (lplu) state is set to the power management level D3
933 * and SmartSpeed is disabled when active is TRUE, else clear lplu for D3
934 * and enable Smartspeed. LPLU and Smartspeed are mutually exclusive. LPLU
935 * is used during Dx states where the power conservation is most important.
936 * During driver activity, SmartSpeed should be enabled so performance is
939 s32 e1000_set_d3_lplu_state_82580(struct e1000_hw *hw, bool active)
941 struct e1000_phy_info *phy = &hw->phy;
944 DEBUGFUNC("e1000_set_d3_lplu_state_82580");
946 data = E1000_READ_REG(hw, E1000_82580_PHY_POWER_MGMT);
949 data &= ~E1000_82580_PM_D3_LPLU;
951 * LPLU and SmartSpeed are mutually exclusive. LPLU is used
952 * during Dx states where the power conservation is most
953 * important. During driver activity we should enable
954 * SmartSpeed, so performance is maintained.
956 if (phy->smart_speed == e1000_smart_speed_on)
957 data |= E1000_82580_PM_SPD;
958 else if (phy->smart_speed == e1000_smart_speed_off)
959 data &= ~E1000_82580_PM_SPD;
960 } else if ((phy->autoneg_advertised == E1000_ALL_SPEED_DUPLEX) ||
961 (phy->autoneg_advertised == E1000_ALL_NOT_GIG) ||
962 (phy->autoneg_advertised == E1000_ALL_10_SPEED)) {
963 data |= E1000_82580_PM_D3_LPLU;
964 /* When LPLU is enabled, we should disable SmartSpeed */
965 data &= ~E1000_82580_PM_SPD;
968 E1000_WRITE_REG(hw, E1000_82580_PHY_POWER_MGMT, data);
969 return E1000_SUCCESS;
973 * e1000_acquire_nvm_82575 - Request for access to EEPROM
974 * @hw: pointer to the HW structure
976 * Acquire the necessary semaphores for exclusive access to the EEPROM.
977 * Set the EEPROM access request bit and wait for EEPROM access grant bit.
978 * Return successful if access grant bit set, else clear the request for
979 * EEPROM access and return -E1000_ERR_NVM (-1).
981 static s32 e1000_acquire_nvm_82575(struct e1000_hw *hw)
983 s32 ret_val = E1000_SUCCESS;
985 DEBUGFUNC("e1000_acquire_nvm_82575");
987 ret_val = e1000_acquire_swfw_sync_82575(hw, E1000_SWFW_EEP_SM);
992 * Check if there is some access
993 * error this access may hook on
995 if (hw->mac.type == e1000_i350) {
996 u32 eecd = E1000_READ_REG(hw, E1000_EECD);
997 if (eecd & (E1000_EECD_BLOCKED | E1000_EECD_ABORT |
998 E1000_EECD_TIMEOUT)) {
999 /* Clear all access error flags */
1000 E1000_WRITE_REG(hw, E1000_EECD, eecd |
1001 E1000_EECD_ERROR_CLR);
1002 DEBUGOUT("Nvm bit banging access error detected and cleared.\n");
1006 if (hw->mac.type == e1000_82580) {
1007 u32 eecd = E1000_READ_REG(hw, E1000_EECD);
1008 if (eecd & E1000_EECD_BLOCKED) {
1009 /* Clear access error flag */
1010 E1000_WRITE_REG(hw, E1000_EECD, eecd |
1011 E1000_EECD_BLOCKED);
1012 DEBUGOUT("Nvm bit banging access error detected and cleared.\n");
1016 ret_val = e1000_acquire_nvm_generic(hw);
1018 e1000_release_swfw_sync_82575(hw, E1000_SWFW_EEP_SM);
1025 * e1000_release_nvm_82575 - Release exclusive access to EEPROM
1026 * @hw: pointer to the HW structure
1028 * Stop any current commands to the EEPROM and clear the EEPROM request bit,
1029 * then release the semaphores acquired.
1031 static void e1000_release_nvm_82575(struct e1000_hw *hw)
1033 DEBUGFUNC("e1000_release_nvm_82575");
1035 e1000_release_nvm_generic(hw);
1037 e1000_release_swfw_sync_82575(hw, E1000_SWFW_EEP_SM);
1041 * e1000_acquire_swfw_sync_82575 - Acquire SW/FW semaphore
1042 * @hw: pointer to the HW structure
1043 * @mask: specifies which semaphore to acquire
1045 * Acquire the SW/FW semaphore to access the PHY or NVM. The mask
1046 * will also specify which port we're acquiring the lock for.
1048 static s32 e1000_acquire_swfw_sync_82575(struct e1000_hw *hw, u16 mask)
1052 u32 fwmask = mask << 16;
1053 s32 ret_val = E1000_SUCCESS;
1054 s32 i = 0, timeout = 200;
1056 DEBUGFUNC("e1000_acquire_swfw_sync_82575");
1058 while (i < timeout) {
1059 if (e1000_get_hw_semaphore_generic(hw)) {
1060 ret_val = -E1000_ERR_SWFW_SYNC;
1064 swfw_sync = E1000_READ_REG(hw, E1000_SW_FW_SYNC);
1065 if (!(swfw_sync & (fwmask | swmask)))
1069 * Firmware currently using resource (fwmask)
1070 * or other software thread using resource (swmask)
1072 e1000_put_hw_semaphore_generic(hw);
1078 DEBUGOUT("Driver can't access resource, SW_FW_SYNC timeout.\n");
1079 ret_val = -E1000_ERR_SWFW_SYNC;
1083 swfw_sync |= swmask;
1084 E1000_WRITE_REG(hw, E1000_SW_FW_SYNC, swfw_sync);
1086 e1000_put_hw_semaphore_generic(hw);
1093 * e1000_release_swfw_sync_82575 - Release SW/FW semaphore
1094 * @hw: pointer to the HW structure
1095 * @mask: specifies which semaphore to acquire
1097 * Release the SW/FW semaphore used to access the PHY or NVM. The mask
1098 * will also specify which port we're releasing the lock for.
1100 static void e1000_release_swfw_sync_82575(struct e1000_hw *hw, u16 mask)
1104 DEBUGFUNC("e1000_release_swfw_sync_82575");
1106 while (e1000_get_hw_semaphore_generic(hw) != E1000_SUCCESS)
1109 swfw_sync = E1000_READ_REG(hw, E1000_SW_FW_SYNC);
1111 E1000_WRITE_REG(hw, E1000_SW_FW_SYNC, swfw_sync);
1113 e1000_put_hw_semaphore_generic(hw);
1117 * e1000_get_cfg_done_82575 - Read config done bit
1118 * @hw: pointer to the HW structure
1120 * Read the management control register for the config done bit for
1121 * completion status. NOTE: silicon which is EEPROM-less will fail trying
1122 * to read the config done bit, so an error is *ONLY* logged and returns
1123 * E1000_SUCCESS. If we were to return with error, EEPROM-less silicon
1124 * would not be able to be reset or change link.
1126 static s32 e1000_get_cfg_done_82575(struct e1000_hw *hw)
1128 s32 timeout = PHY_CFG_TIMEOUT;
1129 u32 mask = E1000_NVM_CFG_DONE_PORT_0;
1131 DEBUGFUNC("e1000_get_cfg_done_82575");
1133 if (hw->bus.func == E1000_FUNC_1)
1134 mask = E1000_NVM_CFG_DONE_PORT_1;
1135 else if (hw->bus.func == E1000_FUNC_2)
1136 mask = E1000_NVM_CFG_DONE_PORT_2;
1137 else if (hw->bus.func == E1000_FUNC_3)
1138 mask = E1000_NVM_CFG_DONE_PORT_3;
1140 if (E1000_READ_REG(hw, E1000_EEMNGCTL) & mask)
1146 DEBUGOUT("MNG configuration cycle has not completed.\n");
1148 /* If EEPROM is not marked present, init the PHY manually */
1149 if (!(E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_PRES) &&
1150 (hw->phy.type == e1000_phy_igp_3))
1151 e1000_phy_init_script_igp3(hw);
1153 return E1000_SUCCESS;
1157 * e1000_get_link_up_info_82575 - Get link speed/duplex info
1158 * @hw: pointer to the HW structure
1159 * @speed: stores the current speed
1160 * @duplex: stores the current duplex
1162 * This is a wrapper function, if using the serial gigabit media independent
1163 * interface, use PCS to retrieve the link speed and duplex information.
1164 * Otherwise, use the generic function to get the link speed and duplex info.
1166 static s32 e1000_get_link_up_info_82575(struct e1000_hw *hw, u16 *speed,
1171 DEBUGFUNC("e1000_get_link_up_info_82575");
1173 if (hw->phy.media_type != e1000_media_type_copper)
1174 ret_val = e1000_get_pcs_speed_and_duplex_82575(hw, speed,
1177 ret_val = e1000_get_speed_and_duplex_copper_generic(hw, speed,
1184 * e1000_check_for_link_82575 - Check for link
1185 * @hw: pointer to the HW structure
1187 * If sgmii is enabled, then use the pcs register to determine link, otherwise
1188 * use the generic interface for determining link.
1190 static s32 e1000_check_for_link_82575(struct e1000_hw *hw)
1195 DEBUGFUNC("e1000_check_for_link_82575");
1197 if (hw->phy.media_type != e1000_media_type_copper) {
1198 ret_val = e1000_get_pcs_speed_and_duplex_82575(hw, &speed,
1201 * Use this flag to determine if link needs to be checked or
1202 * not. If we have link clear the flag so that we do not
1203 * continue to check for link.
1205 hw->mac.get_link_status = !hw->mac.serdes_has_link;
1208 * Configure Flow Control now that Auto-Neg has completed.
1209 * First, we need to restore the desired flow control
1210 * settings because we may have had to re-autoneg with a
1211 * different link partner.
1213 ret_val = e1000_config_fc_after_link_up_generic(hw);
1215 DEBUGOUT("Error configuring flow control\n");
1217 ret_val = e1000_check_for_copper_link_generic(hw);
1224 * e1000_check_for_link_media_swap - Check which M88E1112 interface linked
1225 * @hw: pointer to the HW structure
1227 * Poll the M88E1112 interfaces to see which interface achieved link.
1229 static s32 e1000_check_for_link_media_swap(struct e1000_hw *hw)
1231 struct e1000_phy_info *phy = &hw->phy;
1236 DEBUGFUNC("e1000_check_for_link_media_swap");
1238 /* Check for copper. */
1239 ret_val = phy->ops.write_reg(hw, E1000_M88E1112_PAGE_ADDR, 0);
1243 ret_val = phy->ops.read_reg(hw, E1000_M88E1112_STATUS, &data);
1247 if (data & E1000_M88E1112_STATUS_LINK)
1248 port = E1000_MEDIA_PORT_COPPER;
1250 /* Check for other. */
1251 ret_val = phy->ops.write_reg(hw, E1000_M88E1112_PAGE_ADDR, 1);
1255 ret_val = phy->ops.read_reg(hw, E1000_M88E1112_STATUS, &data);
1259 if (data & E1000_M88E1112_STATUS_LINK)
1260 port = E1000_MEDIA_PORT_OTHER;
1262 /* Determine if a swap needs to happen. */
1263 if (port && (hw->dev_spec._82575.media_port != port)) {
1264 hw->dev_spec._82575.media_port = port;
1265 hw->dev_spec._82575.media_changed = TRUE;
1268 if (port == E1000_MEDIA_PORT_COPPER) {
1269 /* reset page to 0 */
1270 ret_val = phy->ops.write_reg(hw, E1000_M88E1112_PAGE_ADDR, 0);
1273 e1000_check_for_link_82575(hw);
1275 e1000_check_for_link_82575(hw);
1276 /* reset page to 0 */
1277 ret_val = phy->ops.write_reg(hw, E1000_M88E1112_PAGE_ADDR, 0);
1282 return E1000_SUCCESS;
1286 * e1000_power_up_serdes_link_82575 - Power up the serdes link after shutdown
1287 * @hw: pointer to the HW structure
1289 static void e1000_power_up_serdes_link_82575(struct e1000_hw *hw)
1293 DEBUGFUNC("e1000_power_up_serdes_link_82575");
1295 if ((hw->phy.media_type != e1000_media_type_internal_serdes) &&
1296 !e1000_sgmii_active_82575(hw))
1299 /* Enable PCS to turn on link */
1300 reg = E1000_READ_REG(hw, E1000_PCS_CFG0);
1301 reg |= E1000_PCS_CFG_PCS_EN;
1302 E1000_WRITE_REG(hw, E1000_PCS_CFG0, reg);
1304 /* Power up the laser */
1305 reg = E1000_READ_REG(hw, E1000_CTRL_EXT);
1306 reg &= ~E1000_CTRL_EXT_SDP3_DATA;
1307 E1000_WRITE_REG(hw, E1000_CTRL_EXT, reg);
1309 /* flush the write to verify completion */
1310 E1000_WRITE_FLUSH(hw);
1315 * e1000_get_pcs_speed_and_duplex_82575 - Retrieve current speed/duplex
1316 * @hw: pointer to the HW structure
1317 * @speed: stores the current speed
1318 * @duplex: stores the current duplex
1320 * Using the physical coding sub-layer (PCS), retrieve the current speed and
1321 * duplex, then store the values in the pointers provided.
1323 static s32 e1000_get_pcs_speed_and_duplex_82575(struct e1000_hw *hw,
1324 u16 *speed, u16 *duplex)
1326 struct e1000_mac_info *mac = &hw->mac;
1330 DEBUGFUNC("e1000_get_pcs_speed_and_duplex_82575");
1333 * Read the PCS Status register for link state. For non-copper mode,
1334 * the status register is not accurate. The PCS status register is
1337 pcs = E1000_READ_REG(hw, E1000_PCS_LSTAT);
1340 * The link up bit determines when link is up on autoneg.
1342 if (pcs & E1000_PCS_LSTS_LINK_OK) {
1343 mac->serdes_has_link = TRUE;
1345 /* Detect and store PCS speed */
1346 if (pcs & E1000_PCS_LSTS_SPEED_1000)
1347 *speed = SPEED_1000;
1348 else if (pcs & E1000_PCS_LSTS_SPEED_100)
1353 /* Detect and store PCS duplex */
1354 if (pcs & E1000_PCS_LSTS_DUPLEX_FULL)
1355 *duplex = FULL_DUPLEX;
1357 *duplex = HALF_DUPLEX;
1359 /* Check if it is an I354 2.5Gb backplane connection. */
1360 if (mac->type == e1000_i354) {
1361 status = E1000_READ_REG(hw, E1000_STATUS);
1362 if ((status & E1000_STATUS_2P5_SKU) &&
1363 !(status & E1000_STATUS_2P5_SKU_OVER)) {
1364 *speed = SPEED_2500;
1365 *duplex = FULL_DUPLEX;
1366 DEBUGOUT("2500 Mbs, ");
1367 DEBUGOUT("Full Duplex\n");
1372 mac->serdes_has_link = FALSE;
1377 return E1000_SUCCESS;
1381 * e1000_shutdown_serdes_link_82575 - Remove link during power down
1382 * @hw: pointer to the HW structure
1384 * In the case of serdes shut down sfp and PCS on driver unload
1385 * when management pass thru is not enabled.
1387 void e1000_shutdown_serdes_link_82575(struct e1000_hw *hw)
1391 DEBUGFUNC("e1000_shutdown_serdes_link_82575");
1393 if ((hw->phy.media_type != e1000_media_type_internal_serdes) &&
1394 !e1000_sgmii_active_82575(hw))
1397 if (!e1000_enable_mng_pass_thru(hw)) {
1398 /* Disable PCS to turn off link */
1399 reg = E1000_READ_REG(hw, E1000_PCS_CFG0);
1400 reg &= ~E1000_PCS_CFG_PCS_EN;
1401 E1000_WRITE_REG(hw, E1000_PCS_CFG0, reg);
1403 /* shutdown the laser */
1404 reg = E1000_READ_REG(hw, E1000_CTRL_EXT);
1405 reg |= E1000_CTRL_EXT_SDP3_DATA;
1406 E1000_WRITE_REG(hw, E1000_CTRL_EXT, reg);
1408 /* flush the write to verify completion */
1409 E1000_WRITE_FLUSH(hw);
1417 * e1000_reset_hw_82575 - Reset hardware
1418 * @hw: pointer to the HW structure
1420 * This resets the hardware into a known state.
1422 static s32 e1000_reset_hw_82575(struct e1000_hw *hw)
1427 DEBUGFUNC("e1000_reset_hw_82575");
1430 * Prevent the PCI-E bus from sticking if there is no TLP connection
1431 * on the last TLP read/write transaction when MAC is reset.
1433 ret_val = e1000_disable_pcie_master_generic(hw);
1435 DEBUGOUT("PCI-E Master disable polling has failed.\n");
1437 /* set the completion timeout for interface */
1438 ret_val = e1000_set_pcie_completion_timeout(hw);
1440 DEBUGOUT("PCI-E Set completion timeout has failed.\n");
1442 DEBUGOUT("Masking off all interrupts\n");
1443 E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
1445 E1000_WRITE_REG(hw, E1000_RCTL, 0);
1446 E1000_WRITE_REG(hw, E1000_TCTL, E1000_TCTL_PSP);
1447 E1000_WRITE_FLUSH(hw);
1451 ctrl = E1000_READ_REG(hw, E1000_CTRL);
1453 DEBUGOUT("Issuing a global reset to MAC\n");
1454 E1000_WRITE_REG(hw, E1000_CTRL, ctrl | E1000_CTRL_RST);
1456 ret_val = e1000_get_auto_rd_done_generic(hw);
1459 * When auto config read does not complete, do not
1460 * return with an error. This can happen in situations
1461 * where there is no eeprom and prevents getting link.
1463 DEBUGOUT("Auto Read Done did not complete\n");
1466 /* If EEPROM is not present, run manual init scripts */
1467 if (!(E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_PRES))
1468 e1000_reset_init_script_82575(hw);
1470 /* Clear any pending interrupt events. */
1471 E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
1472 E1000_READ_REG(hw, E1000_ICR);
1474 /* Install any alternate MAC address into RAR0 */
1475 ret_val = e1000_check_alt_mac_addr_generic(hw);
1481 * e1000_init_hw_82575 - Initialize hardware
1482 * @hw: pointer to the HW structure
1484 * This inits the hardware readying it for operation.
1486 s32 e1000_init_hw_82575(struct e1000_hw *hw)
1488 struct e1000_mac_info *mac = &hw->mac;
1490 u16 i, rar_count = mac->rar_entry_count;
1492 DEBUGFUNC("e1000_init_hw_82575");
1494 /* Initialize identification LED */
1495 ret_val = mac->ops.id_led_init(hw);
1497 DEBUGOUT("Error initializing identification LED\n");
1498 /* This is not fatal and we should not stop init due to this */
1501 /* Disabling VLAN filtering */
1502 DEBUGOUT("Initializing the IEEE VLAN\n");
1503 mac->ops.clear_vfta(hw);
1505 /* Setup the receive address */
1506 e1000_init_rx_addrs_generic(hw, rar_count);
1508 /* Zero out the Multicast HASH table */
1509 DEBUGOUT("Zeroing the MTA\n");
1510 for (i = 0; i < mac->mta_reg_count; i++)
1511 E1000_WRITE_REG_ARRAY(hw, E1000_MTA, i, 0);
1513 /* Zero out the Unicast HASH table */
1514 DEBUGOUT("Zeroing the UTA\n");
1515 for (i = 0; i < mac->uta_reg_count; i++)
1516 E1000_WRITE_REG_ARRAY(hw, E1000_UTA, i, 0);
1518 /* Setup link and flow control */
1519 ret_val = mac->ops.setup_link(hw);
1521 /* Set the default MTU size */
1522 hw->dev_spec._82575.mtu = 1500;
1525 * Clear all of the statistics registers (clear on read). It is
1526 * important that we do this after we have tried to establish link
1527 * because the symbol error count will increment wildly if there
1530 e1000_clear_hw_cntrs_82575(hw);
1536 * e1000_setup_copper_link_82575 - Configure copper link settings
1537 * @hw: pointer to the HW structure
1539 * Configures the link for auto-neg or forced speed and duplex. Then we check
1540 * for link, once link is established calls to configure collision distance
1541 * and flow control are called.
1543 static s32 e1000_setup_copper_link_82575(struct e1000_hw *hw)
1549 DEBUGFUNC("e1000_setup_copper_link_82575");
1551 ctrl = E1000_READ_REG(hw, E1000_CTRL);
1552 ctrl |= E1000_CTRL_SLU;
1553 ctrl &= ~(E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
1554 E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
1556 /* Clear Go Link Disconnect bit on supported devices */
1557 switch (hw->mac.type) {
1562 phpm_reg = E1000_READ_REG(hw, E1000_82580_PHY_POWER_MGMT);
1563 phpm_reg &= ~E1000_82580_PM_GO_LINKD;
1564 E1000_WRITE_REG(hw, E1000_82580_PHY_POWER_MGMT, phpm_reg);
1570 ret_val = e1000_setup_serdes_link_82575(hw);
1574 if (e1000_sgmii_active_82575(hw)) {
1575 /* allow time for SFP cage time to power up phy */
1578 ret_val = hw->phy.ops.reset(hw);
1580 DEBUGOUT("Error resetting the PHY.\n");
1584 switch (hw->phy.type) {
1585 case e1000_phy_i210:
1587 switch (hw->phy.id) {
1588 case I347AT4_E_PHY_ID:
1589 case M88E1112_E_PHY_ID:
1590 case M88E1340M_E_PHY_ID:
1591 case M88E1543_E_PHY_ID:
1592 case M88E1512_E_PHY_ID:
1594 ret_val = e1000_copper_link_setup_m88_gen2(hw);
1597 ret_val = e1000_copper_link_setup_m88(hw);
1601 case e1000_phy_igp_3:
1602 ret_val = e1000_copper_link_setup_igp(hw);
1604 case e1000_phy_82580:
1605 ret_val = e1000_copper_link_setup_82577(hw);
1608 ret_val = -E1000_ERR_PHY;
1615 ret_val = e1000_setup_copper_link_generic(hw);
1621 * e1000_setup_serdes_link_82575 - Setup link for serdes
1622 * @hw: pointer to the HW structure
1624 * Configure the physical coding sub-layer (PCS) link. The PCS link is
1625 * used on copper connections where the serialized gigabit media independent
1626 * interface (sgmii), or serdes fiber is being used. Configures the link
1627 * for auto-negotiation or forces speed/duplex.
1629 static s32 e1000_setup_serdes_link_82575(struct e1000_hw *hw)
1631 u32 ctrl_ext, ctrl_reg, reg, anadv_reg;
1633 s32 ret_val = E1000_SUCCESS;
1636 DEBUGFUNC("e1000_setup_serdes_link_82575");
1638 if ((hw->phy.media_type != e1000_media_type_internal_serdes) &&
1639 !e1000_sgmii_active_82575(hw))
1643 * On the 82575, SerDes loopback mode persists until it is
1644 * explicitly turned off or a power cycle is performed. A read to
1645 * the register does not indicate its status. Therefore, we ensure
1646 * loopback mode is disabled during initialization.
1648 E1000_WRITE_REG(hw, E1000_SCTL, E1000_SCTL_DISABLE_SERDES_LOOPBACK);
1650 /* power on the sfp cage if present */
1651 ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
1652 ctrl_ext &= ~E1000_CTRL_EXT_SDP3_DATA;
1653 E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext);
1655 ctrl_reg = E1000_READ_REG(hw, E1000_CTRL);
1656 ctrl_reg |= E1000_CTRL_SLU;
1658 /* set both sw defined pins on 82575/82576*/
1659 if (hw->mac.type == e1000_82575 || hw->mac.type == e1000_82576)
1660 ctrl_reg |= E1000_CTRL_SWDPIN0 | E1000_CTRL_SWDPIN1;
1662 reg = E1000_READ_REG(hw, E1000_PCS_LCTL);
1664 /* default pcs_autoneg to the same setting as mac autoneg */
1665 pcs_autoneg = hw->mac.autoneg;
1667 switch (ctrl_ext & E1000_CTRL_EXT_LINK_MODE_MASK) {
1668 case E1000_CTRL_EXT_LINK_MODE_SGMII:
1669 /* sgmii mode lets the phy handle forcing speed/duplex */
1671 /* autoneg time out should be disabled for SGMII mode */
1672 reg &= ~(E1000_PCS_LCTL_AN_TIMEOUT);
1674 case E1000_CTRL_EXT_LINK_MODE_1000BASE_KX:
1675 /* disable PCS autoneg and support parallel detect only */
1676 pcs_autoneg = FALSE;
1677 /* fall through to default case */
1679 if (hw->mac.type == e1000_82575 ||
1680 hw->mac.type == e1000_82576) {
1681 ret_val = hw->nvm.ops.read(hw, NVM_COMPAT, 1, &data);
1683 DEBUGOUT("NVM Read Error\n");
1687 if (data & E1000_EEPROM_PCS_AUTONEG_DISABLE_BIT)
1688 pcs_autoneg = FALSE;
1692 * non-SGMII modes only supports a speed of 1000/Full for the
1693 * link so it is best to just force the MAC and let the pcs
1694 * link either autoneg or be forced to 1000/Full
1696 ctrl_reg |= E1000_CTRL_SPD_1000 | E1000_CTRL_FRCSPD |
1697 E1000_CTRL_FD | E1000_CTRL_FRCDPX;
1699 /* set speed of 1000/Full if speed/duplex is forced */
1700 reg |= E1000_PCS_LCTL_FSV_1000 | E1000_PCS_LCTL_FDV_FULL;
1704 E1000_WRITE_REG(hw, E1000_CTRL, ctrl_reg);
1707 * New SerDes mode allows for forcing speed or autonegotiating speed
1708 * at 1gb. Autoneg should be default set by most drivers. This is the
1709 * mode that will be compatible with older link partners and switches.
1710 * However, both are supported by the hardware and some drivers/tools.
1712 reg &= ~(E1000_PCS_LCTL_AN_ENABLE | E1000_PCS_LCTL_FLV_LINK_UP |
1713 E1000_PCS_LCTL_FSD | E1000_PCS_LCTL_FORCE_LINK);
1716 /* Set PCS register for autoneg */
1717 reg |= E1000_PCS_LCTL_AN_ENABLE | /* Enable Autoneg */
1718 E1000_PCS_LCTL_AN_RESTART; /* Restart autoneg */
1720 /* Disable force flow control for autoneg */
1721 reg &= ~E1000_PCS_LCTL_FORCE_FCTRL;
1723 /* Configure flow control advertisement for autoneg */
1724 anadv_reg = E1000_READ_REG(hw, E1000_PCS_ANADV);
1725 anadv_reg &= ~(E1000_TXCW_ASM_DIR | E1000_TXCW_PAUSE);
1727 switch (hw->fc.requested_mode) {
1729 case e1000_fc_rx_pause:
1730 anadv_reg |= E1000_TXCW_ASM_DIR;
1731 anadv_reg |= E1000_TXCW_PAUSE;
1733 case e1000_fc_tx_pause:
1734 anadv_reg |= E1000_TXCW_ASM_DIR;
1740 E1000_WRITE_REG(hw, E1000_PCS_ANADV, anadv_reg);
1742 DEBUGOUT1("Configuring Autoneg:PCS_LCTL=0x%08X\n", reg);
1744 /* Set PCS register for forced link */
1745 reg |= E1000_PCS_LCTL_FSD; /* Force Speed */
1747 /* Force flow control for forced link */
1748 reg |= E1000_PCS_LCTL_FORCE_FCTRL;
1750 DEBUGOUT1("Configuring Forced Link:PCS_LCTL=0x%08X\n", reg);
1753 E1000_WRITE_REG(hw, E1000_PCS_LCTL, reg);
1755 if (!pcs_autoneg && !e1000_sgmii_active_82575(hw))
1756 e1000_force_mac_fc_generic(hw);
1762 * e1000_get_media_type_82575 - derives current media type.
1763 * @hw: pointer to the HW structure
1765 * The media type is chosen reflecting few settings.
1766 * The following are taken into account:
1767 * - link mode set in the current port Init Control Word #3
1768 * - current link mode settings in CSR register
1769 * - MDIO vs. I2C PHY control interface chosen
1770 * - SFP module media type
1772 static s32 e1000_get_media_type_82575(struct e1000_hw *hw)
1774 struct e1000_dev_spec_82575 *dev_spec = &hw->dev_spec._82575;
1775 s32 ret_val = E1000_SUCCESS;
1779 /* Set internal phy as default */
1780 dev_spec->sgmii_active = FALSE;
1781 dev_spec->module_plugged = FALSE;
1783 /* Get CSR setting */
1784 ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
1786 /* extract link mode setting */
1787 link_mode = ctrl_ext & E1000_CTRL_EXT_LINK_MODE_MASK;
1789 switch (link_mode) {
1790 case E1000_CTRL_EXT_LINK_MODE_1000BASE_KX:
1791 hw->phy.media_type = e1000_media_type_internal_serdes;
1793 case E1000_CTRL_EXT_LINK_MODE_GMII:
1794 hw->phy.media_type = e1000_media_type_copper;
1796 case E1000_CTRL_EXT_LINK_MODE_SGMII:
1797 /* Get phy control interface type set (MDIO vs. I2C)*/
1798 if (e1000_sgmii_uses_mdio_82575(hw)) {
1799 hw->phy.media_type = e1000_media_type_copper;
1800 dev_spec->sgmii_active = TRUE;
1803 /* fall through for I2C based SGMII */
1804 case E1000_CTRL_EXT_LINK_MODE_PCIE_SERDES:
1805 /* read media type from SFP EEPROM */
1806 ret_val = e1000_set_sfp_media_type_82575(hw);
1807 if ((ret_val != E1000_SUCCESS) ||
1808 (hw->phy.media_type == e1000_media_type_unknown)) {
1810 * If media type was not identified then return media
1811 * type defined by the CTRL_EXT settings.
1813 hw->phy.media_type = e1000_media_type_internal_serdes;
1815 if (link_mode == E1000_CTRL_EXT_LINK_MODE_SGMII) {
1816 hw->phy.media_type = e1000_media_type_copper;
1817 dev_spec->sgmii_active = TRUE;
1823 /* do not change link mode for 100BaseFX */
1824 if (dev_spec->eth_flags.e100_base_fx)
1827 /* change current link mode setting */
1828 ctrl_ext &= ~E1000_CTRL_EXT_LINK_MODE_MASK;
1830 if (hw->phy.media_type == e1000_media_type_copper)
1831 ctrl_ext |= E1000_CTRL_EXT_LINK_MODE_SGMII;
1833 ctrl_ext |= E1000_CTRL_EXT_LINK_MODE_PCIE_SERDES;
1835 E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext);
1844 * e1000_set_sfp_media_type_82575 - derives SFP module media type.
1845 * @hw: pointer to the HW structure
1847 * The media type is chosen based on SFP module.
1848 * compatibility flags retrieved from SFP ID EEPROM.
1850 static s32 e1000_set_sfp_media_type_82575(struct e1000_hw *hw)
1852 s32 ret_val = E1000_ERR_CONFIG;
1854 struct e1000_dev_spec_82575 *dev_spec = &hw->dev_spec._82575;
1855 struct sfp_e1000_flags *eth_flags = &dev_spec->eth_flags;
1856 u8 tranceiver_type = 0;
1859 /* Turn I2C interface ON and power on sfp cage */
1860 ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
1861 ctrl_ext &= ~E1000_CTRL_EXT_SDP3_DATA;
1862 E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext | E1000_CTRL_I2C_ENA);
1864 E1000_WRITE_FLUSH(hw);
1866 /* Read SFP module data */
1868 ret_val = e1000_read_sfp_data_byte(hw,
1869 E1000_I2CCMD_SFP_DATA_ADDR(E1000_SFF_IDENTIFIER_OFFSET),
1871 if (ret_val == E1000_SUCCESS)
1876 if (ret_val != E1000_SUCCESS)
1879 ret_val = e1000_read_sfp_data_byte(hw,
1880 E1000_I2CCMD_SFP_DATA_ADDR(E1000_SFF_ETH_FLAGS_OFFSET),
1882 if (ret_val != E1000_SUCCESS)
1885 /* Check if there is some SFP module plugged and powered */
1886 if ((tranceiver_type == E1000_SFF_IDENTIFIER_SFP) ||
1887 (tranceiver_type == E1000_SFF_IDENTIFIER_SFF)) {
1888 dev_spec->module_plugged = TRUE;
1889 if (eth_flags->e1000_base_lx || eth_flags->e1000_base_sx) {
1890 hw->phy.media_type = e1000_media_type_internal_serdes;
1891 } else if (eth_flags->e100_base_fx) {
1892 dev_spec->sgmii_active = TRUE;
1893 hw->phy.media_type = e1000_media_type_internal_serdes;
1894 } else if (eth_flags->e1000_base_t) {
1895 dev_spec->sgmii_active = TRUE;
1896 hw->phy.media_type = e1000_media_type_copper;
1898 hw->phy.media_type = e1000_media_type_unknown;
1899 DEBUGOUT("PHY module has not been recognized\n");
1903 hw->phy.media_type = e1000_media_type_unknown;
1905 ret_val = E1000_SUCCESS;
1907 /* Restore I2C interface setting */
1908 E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext);
1913 * e1000_valid_led_default_82575 - Verify a valid default LED config
1914 * @hw: pointer to the HW structure
1915 * @data: pointer to the NVM (EEPROM)
1917 * Read the EEPROM for the current default LED configuration. If the
1918 * LED configuration is not valid, set to a valid LED configuration.
1920 static s32 e1000_valid_led_default_82575(struct e1000_hw *hw, u16 *data)
1924 DEBUGFUNC("e1000_valid_led_default_82575");
1926 ret_val = hw->nvm.ops.read(hw, NVM_ID_LED_SETTINGS, 1, data);
1928 DEBUGOUT("NVM Read Error\n");
1932 if (*data == ID_LED_RESERVED_0000 || *data == ID_LED_RESERVED_FFFF) {
1933 switch (hw->phy.media_type) {
1934 case e1000_media_type_internal_serdes:
1935 *data = ID_LED_DEFAULT_82575_SERDES;
1937 case e1000_media_type_copper:
1939 *data = ID_LED_DEFAULT;
1948 * e1000_sgmii_active_82575 - Return sgmii state
1949 * @hw: pointer to the HW structure
1951 * 82575 silicon has a serialized gigabit media independent interface (sgmii)
1952 * which can be enabled for use in the embedded applications. Simply
1953 * return the current state of the sgmii interface.
1955 static bool e1000_sgmii_active_82575(struct e1000_hw *hw)
1957 struct e1000_dev_spec_82575 *dev_spec = &hw->dev_spec._82575;
1958 return dev_spec->sgmii_active;
1962 * e1000_reset_init_script_82575 - Inits HW defaults after reset
1963 * @hw: pointer to the HW structure
1965 * Inits recommended HW defaults after a reset when there is no EEPROM
1966 * detected. This is only for the 82575.
1968 static s32 e1000_reset_init_script_82575(struct e1000_hw *hw)
1970 DEBUGFUNC("e1000_reset_init_script_82575");
1972 if (hw->mac.type == e1000_82575) {
1973 DEBUGOUT("Running reset init script for 82575\n");
1974 /* SerDes configuration via SERDESCTRL */
1975 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCTL, 0x00, 0x0C);
1976 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCTL, 0x01, 0x78);
1977 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCTL, 0x1B, 0x23);
1978 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCTL, 0x23, 0x15);
1980 /* CCM configuration via CCMCTL register */
1981 e1000_write_8bit_ctrl_reg_generic(hw, E1000_CCMCTL, 0x14, 0x00);
1982 e1000_write_8bit_ctrl_reg_generic(hw, E1000_CCMCTL, 0x10, 0x00);
1984 /* PCIe lanes configuration */
1985 e1000_write_8bit_ctrl_reg_generic(hw, E1000_GIOCTL, 0x00, 0xEC);
1986 e1000_write_8bit_ctrl_reg_generic(hw, E1000_GIOCTL, 0x61, 0xDF);
1987 e1000_write_8bit_ctrl_reg_generic(hw, E1000_GIOCTL, 0x34, 0x05);
1988 e1000_write_8bit_ctrl_reg_generic(hw, E1000_GIOCTL, 0x2F, 0x81);
1990 /* PCIe PLL Configuration */
1991 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCCTL, 0x02, 0x47);
1992 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCCTL, 0x14, 0x00);
1993 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCCTL, 0x10, 0x00);
1996 return E1000_SUCCESS;
2000 * e1000_read_mac_addr_82575 - Read device MAC address
2001 * @hw: pointer to the HW structure
2003 static s32 e1000_read_mac_addr_82575(struct e1000_hw *hw)
2007 DEBUGFUNC("e1000_read_mac_addr_82575");
2010 * If there's an alternate MAC address place it in RAR0
2011 * so that it will override the Si installed default perm
2014 ret_val = e1000_check_alt_mac_addr_generic(hw);
2018 ret_val = e1000_read_mac_addr_generic(hw);
2025 * e1000_config_collision_dist_82575 - Configure collision distance
2026 * @hw: pointer to the HW structure
2028 * Configures the collision distance to the default value and is used
2029 * during link setup.
2031 static void e1000_config_collision_dist_82575(struct e1000_hw *hw)
2035 DEBUGFUNC("e1000_config_collision_dist_82575");
2037 tctl_ext = E1000_READ_REG(hw, E1000_TCTL_EXT);
2039 tctl_ext &= ~E1000_TCTL_EXT_COLD;
2040 tctl_ext |= E1000_COLLISION_DISTANCE << E1000_TCTL_EXT_COLD_SHIFT;
2042 E1000_WRITE_REG(hw, E1000_TCTL_EXT, tctl_ext);
2043 E1000_WRITE_FLUSH(hw);
2047 * e1000_power_down_phy_copper_82575 - Remove link during PHY power down
2048 * @hw: pointer to the HW structure
2050 * In the case of a PHY power down to save power, or to turn off link during a
2051 * driver unload, or wake on lan is not enabled, remove the link.
2053 static void e1000_power_down_phy_copper_82575(struct e1000_hw *hw)
2055 struct e1000_phy_info *phy = &hw->phy;
2057 if (!(phy->ops.check_reset_block))
2060 /* If the management interface is not enabled, then power down */
2061 if (!(e1000_enable_mng_pass_thru(hw) || phy->ops.check_reset_block(hw)))
2062 e1000_power_down_phy_copper(hw);
2068 * e1000_clear_hw_cntrs_82575 - Clear device specific hardware counters
2069 * @hw: pointer to the HW structure
2071 * Clears the hardware counters by reading the counter registers.
2073 static void e1000_clear_hw_cntrs_82575(struct e1000_hw *hw)
2075 DEBUGFUNC("e1000_clear_hw_cntrs_82575");
2077 e1000_clear_hw_cntrs_base_generic(hw);
2079 E1000_READ_REG(hw, E1000_PRC64);
2080 E1000_READ_REG(hw, E1000_PRC127);
2081 E1000_READ_REG(hw, E1000_PRC255);
2082 E1000_READ_REG(hw, E1000_PRC511);
2083 E1000_READ_REG(hw, E1000_PRC1023);
2084 E1000_READ_REG(hw, E1000_PRC1522);
2085 E1000_READ_REG(hw, E1000_PTC64);
2086 E1000_READ_REG(hw, E1000_PTC127);
2087 E1000_READ_REG(hw, E1000_PTC255);
2088 E1000_READ_REG(hw, E1000_PTC511);
2089 E1000_READ_REG(hw, E1000_PTC1023);
2090 E1000_READ_REG(hw, E1000_PTC1522);
2092 E1000_READ_REG(hw, E1000_ALGNERRC);
2093 E1000_READ_REG(hw, E1000_RXERRC);
2094 E1000_READ_REG(hw, E1000_TNCRS);
2095 E1000_READ_REG(hw, E1000_CEXTERR);
2096 E1000_READ_REG(hw, E1000_TSCTC);
2097 E1000_READ_REG(hw, E1000_TSCTFC);
2099 E1000_READ_REG(hw, E1000_MGTPRC);
2100 E1000_READ_REG(hw, E1000_MGTPDC);
2101 E1000_READ_REG(hw, E1000_MGTPTC);
2103 E1000_READ_REG(hw, E1000_IAC);
2104 E1000_READ_REG(hw, E1000_ICRXOC);
2106 E1000_READ_REG(hw, E1000_ICRXPTC);
2107 E1000_READ_REG(hw, E1000_ICRXATC);
2108 E1000_READ_REG(hw, E1000_ICTXPTC);
2109 E1000_READ_REG(hw, E1000_ICTXATC);
2110 E1000_READ_REG(hw, E1000_ICTXQEC);
2111 E1000_READ_REG(hw, E1000_ICTXQMTC);
2112 E1000_READ_REG(hw, E1000_ICRXDMTC);
2114 E1000_READ_REG(hw, E1000_CBTMPC);
2115 E1000_READ_REG(hw, E1000_HTDPMC);
2116 E1000_READ_REG(hw, E1000_CBRMPC);
2117 E1000_READ_REG(hw, E1000_RPTHC);
2118 E1000_READ_REG(hw, E1000_HGPTC);
2119 E1000_READ_REG(hw, E1000_HTCBDPC);
2120 E1000_READ_REG(hw, E1000_HGORCL);
2121 E1000_READ_REG(hw, E1000_HGORCH);
2122 E1000_READ_REG(hw, E1000_HGOTCL);
2123 E1000_READ_REG(hw, E1000_HGOTCH);
2124 E1000_READ_REG(hw, E1000_LENERRS);
2126 /* This register should not be read in copper configurations */
2127 if ((hw->phy.media_type == e1000_media_type_internal_serdes) ||
2128 e1000_sgmii_active_82575(hw))
2129 E1000_READ_REG(hw, E1000_SCVPC);
2133 * e1000_rx_fifo_flush_82575 - Clean rx fifo after Rx enable
2134 * @hw: pointer to the HW structure
2136 * After Rx enable, if manageability is enabled then there is likely some
2137 * bad data at the start of the fifo and possibly in the DMA fifo. This
2138 * function clears the fifos and flushes any packets that came in as rx was
2141 void e1000_rx_fifo_flush_82575(struct e1000_hw *hw)
2143 u32 rctl, rlpml, rxdctl[4], rfctl, temp_rctl, rx_enabled;
2146 DEBUGFUNC("e1000_rx_fifo_flush_82575");
2148 /* disable IPv6 options as per hardware errata */
2149 rfctl = E1000_READ_REG(hw, E1000_RFCTL);
2150 rfctl |= E1000_RFCTL_IPV6_EX_DIS;
2151 E1000_WRITE_REG(hw, E1000_RFCTL, rfctl);
2153 if (hw->mac.type != e1000_82575 ||
2154 !(E1000_READ_REG(hw, E1000_MANC) & E1000_MANC_RCV_TCO_EN))
2157 /* Disable all Rx queues */
2158 for (i = 0; i < 4; i++) {
2159 rxdctl[i] = E1000_READ_REG(hw, E1000_RXDCTL(i));
2160 E1000_WRITE_REG(hw, E1000_RXDCTL(i),
2161 rxdctl[i] & ~E1000_RXDCTL_QUEUE_ENABLE);
2163 /* Poll all queues to verify they have shut down */
2164 for (ms_wait = 0; ms_wait < 10; ms_wait++) {
2167 for (i = 0; i < 4; i++)
2168 rx_enabled |= E1000_READ_REG(hw, E1000_RXDCTL(i));
2169 if (!(rx_enabled & E1000_RXDCTL_QUEUE_ENABLE))
2174 DEBUGOUT("Queue disable timed out after 10ms\n");
2176 /* Clear RLPML, RCTL.SBP, RFCTL.LEF, and set RCTL.LPE so that all
2177 * incoming packets are rejected. Set enable and wait 2ms so that
2178 * any packet that was coming in as RCTL.EN was set is flushed
2180 E1000_WRITE_REG(hw, E1000_RFCTL, rfctl & ~E1000_RFCTL_LEF);
2182 rlpml = E1000_READ_REG(hw, E1000_RLPML);
2183 E1000_WRITE_REG(hw, E1000_RLPML, 0);
2185 rctl = E1000_READ_REG(hw, E1000_RCTL);
2186 temp_rctl = rctl & ~(E1000_RCTL_EN | E1000_RCTL_SBP);
2187 temp_rctl |= E1000_RCTL_LPE;
2189 E1000_WRITE_REG(hw, E1000_RCTL, temp_rctl);
2190 E1000_WRITE_REG(hw, E1000_RCTL, temp_rctl | E1000_RCTL_EN);
2191 E1000_WRITE_FLUSH(hw);
2194 /* Enable Rx queues that were previously enabled and restore our
2197 for (i = 0; i < 4; i++)
2198 E1000_WRITE_REG(hw, E1000_RXDCTL(i), rxdctl[i]);
2199 E1000_WRITE_REG(hw, E1000_RCTL, rctl);
2200 E1000_WRITE_FLUSH(hw);
2202 E1000_WRITE_REG(hw, E1000_RLPML, rlpml);
2203 E1000_WRITE_REG(hw, E1000_RFCTL, rfctl);
2205 /* Flush receive errors generated by workaround */
2206 E1000_READ_REG(hw, E1000_ROC);
2207 E1000_READ_REG(hw, E1000_RNBC);
2208 E1000_READ_REG(hw, E1000_MPC);
2212 * e1000_set_pcie_completion_timeout - set pci-e completion timeout
2213 * @hw: pointer to the HW structure
2215 * The defaults for 82575 and 82576 should be in the range of 50us to 50ms,
2216 * however the hardware default for these parts is 500us to 1ms which is less
2217 * than the 10ms recommended by the pci-e spec. To address this we need to
2218 * increase the value to either 10ms to 200ms for capability version 1 config,
2219 * or 16ms to 55ms for version 2.
2221 static s32 e1000_set_pcie_completion_timeout(struct e1000_hw *hw)
2223 u32 gcr = E1000_READ_REG(hw, E1000_GCR);
2224 s32 ret_val = E1000_SUCCESS;
2227 /* only take action if timeout value is defaulted to 0 */
2228 if (gcr & E1000_GCR_CMPL_TMOUT_MASK)
2232 * if capababilities version is type 1 we can write the
2233 * timeout of 10ms to 200ms through the GCR register
2235 if (!(gcr & E1000_GCR_CAP_VER2)) {
2236 gcr |= E1000_GCR_CMPL_TMOUT_10ms;
2241 * for version 2 capabilities we need to write the config space
2242 * directly in order to set the completion timeout value for
2245 ret_val = e1000_read_pcie_cap_reg(hw, PCIE_DEVICE_CONTROL2,
2250 pcie_devctl2 |= PCIE_DEVICE_CONTROL2_16ms;
2252 ret_val = e1000_write_pcie_cap_reg(hw, PCIE_DEVICE_CONTROL2,
2255 /* disable completion timeout resend */
2256 gcr &= ~E1000_GCR_CMPL_TMOUT_RESEND;
2258 E1000_WRITE_REG(hw, E1000_GCR, gcr);
2263 * e1000_vmdq_set_anti_spoofing_pf - enable or disable anti-spoofing
2264 * @hw: pointer to the hardware struct
2265 * @enable: state to enter, either enabled or disabled
2266 * @pf: Physical Function pool - do not set anti-spoofing for the PF
2268 * enables/disables L2 switch anti-spoofing functionality.
2270 void e1000_vmdq_set_anti_spoofing_pf(struct e1000_hw *hw, bool enable, int pf)
2272 u32 reg_val, reg_offset;
2274 switch (hw->mac.type) {
2276 reg_offset = E1000_DTXSWC;
2280 reg_offset = E1000_TXSWC;
2286 reg_val = E1000_READ_REG(hw, reg_offset);
2288 reg_val |= (E1000_DTXSWC_MAC_SPOOF_MASK |
2289 E1000_DTXSWC_VLAN_SPOOF_MASK);
2290 /* The PF can spoof - it has to in order to
2291 * support emulation mode NICs
2293 reg_val ^= (1 << pf | 1 << (pf + MAX_NUM_VFS));
2295 reg_val &= ~(E1000_DTXSWC_MAC_SPOOF_MASK |
2296 E1000_DTXSWC_VLAN_SPOOF_MASK);
2298 E1000_WRITE_REG(hw, reg_offset, reg_val);
2302 * e1000_vmdq_set_loopback_pf - enable or disable vmdq loopback
2303 * @hw: pointer to the hardware struct
2304 * @enable: state to enter, either enabled or disabled
2306 * enables/disables L2 switch loopback functionality.
2308 void e1000_vmdq_set_loopback_pf(struct e1000_hw *hw, bool enable)
2312 switch (hw->mac.type) {
2314 dtxswc = E1000_READ_REG(hw, E1000_DTXSWC);
2316 dtxswc |= E1000_DTXSWC_VMDQ_LOOPBACK_EN;
2318 dtxswc &= ~E1000_DTXSWC_VMDQ_LOOPBACK_EN;
2319 E1000_WRITE_REG(hw, E1000_DTXSWC, dtxswc);
2323 dtxswc = E1000_READ_REG(hw, E1000_TXSWC);
2325 dtxswc |= E1000_DTXSWC_VMDQ_LOOPBACK_EN;
2327 dtxswc &= ~E1000_DTXSWC_VMDQ_LOOPBACK_EN;
2328 E1000_WRITE_REG(hw, E1000_TXSWC, dtxswc);
2331 /* Currently no other hardware supports loopback */
2339 * e1000_vmdq_set_replication_pf - enable or disable vmdq replication
2340 * @hw: pointer to the hardware struct
2341 * @enable: state to enter, either enabled or disabled
2343 * enables/disables replication of packets across multiple pools.
2345 void e1000_vmdq_set_replication_pf(struct e1000_hw *hw, bool enable)
2347 u32 vt_ctl = E1000_READ_REG(hw, E1000_VT_CTL);
2350 vt_ctl |= E1000_VT_CTL_VM_REPL_EN;
2352 vt_ctl &= ~E1000_VT_CTL_VM_REPL_EN;
2354 E1000_WRITE_REG(hw, E1000_VT_CTL, vt_ctl);
2358 * e1000_read_phy_reg_82580 - Read 82580 MDI control register
2359 * @hw: pointer to the HW structure
2360 * @offset: register offset to be read
2361 * @data: pointer to the read data
2363 * Reads the MDI control register in the PHY at offset and stores the
2364 * information read to data.
2366 static s32 e1000_read_phy_reg_82580(struct e1000_hw *hw, u32 offset, u16 *data)
2370 DEBUGFUNC("e1000_read_phy_reg_82580");
2372 ret_val = hw->phy.ops.acquire(hw);
2376 ret_val = e1000_read_phy_reg_mdic(hw, offset, data);
2378 hw->phy.ops.release(hw);
2385 * e1000_write_phy_reg_82580 - Write 82580 MDI control register
2386 * @hw: pointer to the HW structure
2387 * @offset: register offset to write to
2388 * @data: data to write to register at offset
2390 * Writes data to MDI control register in the PHY at offset.
2392 static s32 e1000_write_phy_reg_82580(struct e1000_hw *hw, u32 offset, u16 data)
2396 DEBUGFUNC("e1000_write_phy_reg_82580");
2398 ret_val = hw->phy.ops.acquire(hw);
2402 ret_val = e1000_write_phy_reg_mdic(hw, offset, data);
2404 hw->phy.ops.release(hw);
2411 * e1000_reset_mdicnfg_82580 - Reset MDICNFG destination and com_mdio bits
2412 * @hw: pointer to the HW structure
2414 * This resets the the MDICNFG.Destination and MDICNFG.Com_MDIO bits based on
2415 * the values found in the EEPROM. This addresses an issue in which these
2416 * bits are not restored from EEPROM after reset.
2418 static s32 e1000_reset_mdicnfg_82580(struct e1000_hw *hw)
2420 s32 ret_val = E1000_SUCCESS;
2424 DEBUGFUNC("e1000_reset_mdicnfg_82580");
2426 if (hw->mac.type != e1000_82580)
2428 if (!e1000_sgmii_active_82575(hw))
2431 ret_val = hw->nvm.ops.read(hw, NVM_INIT_CONTROL3_PORT_A +
2432 NVM_82580_LAN_FUNC_OFFSET(hw->bus.func), 1,
2435 DEBUGOUT("NVM Read Error\n");
2439 mdicnfg = E1000_READ_REG(hw, E1000_MDICNFG);
2440 if (nvm_data & NVM_WORD24_EXT_MDIO)
2441 mdicnfg |= E1000_MDICNFG_EXT_MDIO;
2442 if (nvm_data & NVM_WORD24_COM_MDIO)
2443 mdicnfg |= E1000_MDICNFG_COM_MDIO;
2444 E1000_WRITE_REG(hw, E1000_MDICNFG, mdicnfg);
2450 * e1000_reset_hw_82580 - Reset hardware
2451 * @hw: pointer to the HW structure
2453 * This resets function or entire device (all ports, etc.)
2456 static s32 e1000_reset_hw_82580(struct e1000_hw *hw)
2458 s32 ret_val = E1000_SUCCESS;
2459 /* BH SW mailbox bit in SW_FW_SYNC */
2460 u16 swmbsw_mask = E1000_SW_SYNCH_MB;
2462 bool global_device_reset = hw->dev_spec._82575.global_device_reset;
2464 DEBUGFUNC("e1000_reset_hw_82580");
2466 hw->dev_spec._82575.global_device_reset = FALSE;
2468 /* 82580 does not reliably do global_device_reset due to hw errata */
2469 if (hw->mac.type == e1000_82580)
2470 global_device_reset = FALSE;
2472 /* Get current control state. */
2473 ctrl = E1000_READ_REG(hw, E1000_CTRL);
2476 * Prevent the PCI-E bus from sticking if there is no TLP connection
2477 * on the last TLP read/write transaction when MAC is reset.
2479 ret_val = e1000_disable_pcie_master_generic(hw);
2481 DEBUGOUT("PCI-E Master disable polling has failed.\n");
2483 DEBUGOUT("Masking off all interrupts\n");
2484 E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
2485 E1000_WRITE_REG(hw, E1000_RCTL, 0);
2486 E1000_WRITE_REG(hw, E1000_TCTL, E1000_TCTL_PSP);
2487 E1000_WRITE_FLUSH(hw);
2491 /* Determine whether or not a global dev reset is requested */
2492 if (global_device_reset && hw->mac.ops.acquire_swfw_sync(hw,
2494 global_device_reset = FALSE;
2496 if (global_device_reset && !(E1000_READ_REG(hw, E1000_STATUS) &
2497 E1000_STAT_DEV_RST_SET))
2498 ctrl |= E1000_CTRL_DEV_RST;
2500 ctrl |= E1000_CTRL_RST;
2502 E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
2504 switch (hw->device_id) {
2505 case E1000_DEV_ID_DH89XXCC_SGMII:
2508 E1000_WRITE_FLUSH(hw);
2512 /* Add delay to insure DEV_RST or RST has time to complete */
2515 ret_val = e1000_get_auto_rd_done_generic(hw);
2518 * When auto config read does not complete, do not
2519 * return with an error. This can happen in situations
2520 * where there is no eeprom and prevents getting link.
2522 DEBUGOUT("Auto Read Done did not complete\n");
2525 /* clear global device reset status bit */
2526 E1000_WRITE_REG(hw, E1000_STATUS, E1000_STAT_DEV_RST_SET);
2528 /* Clear any pending interrupt events. */
2529 E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
2530 E1000_READ_REG(hw, E1000_ICR);
2532 ret_val = e1000_reset_mdicnfg_82580(hw);
2534 DEBUGOUT("Could not reset MDICNFG based on EEPROM\n");
2536 /* Install any alternate MAC address into RAR0 */
2537 ret_val = e1000_check_alt_mac_addr_generic(hw);
2539 /* Release semaphore */
2540 if (global_device_reset)
2541 hw->mac.ops.release_swfw_sync(hw, swmbsw_mask);
2547 * e1000_rxpbs_adjust_82580 - adjust RXPBS value to reflect actual Rx PBA size
2548 * @data: data received by reading RXPBS register
2550 * The 82580 uses a table based approach for packet buffer allocation sizes.
2551 * This function converts the retrieved value into the correct table value
2552 * 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7
2553 * 0x0 36 72 144 1 2 4 8 16
2554 * 0x8 35 70 140 rsv rsv rsv rsv rsv
2556 u16 e1000_rxpbs_adjust_82580(u32 data)
2560 if (data < E1000_82580_RXPBS_TABLE_SIZE)
2561 ret_val = e1000_82580_rxpbs_table[data];
2567 * e1000_validate_nvm_checksum_with_offset - Validate EEPROM
2569 * @hw: pointer to the HW structure
2570 * @offset: offset in words of the checksum protected region
2572 * Calculates the EEPROM checksum by reading/adding each word of the EEPROM
2573 * and then verifies that the sum of the EEPROM is equal to 0xBABA.
2575 s32 e1000_validate_nvm_checksum_with_offset(struct e1000_hw *hw, u16 offset)
2577 s32 ret_val = E1000_SUCCESS;
2581 DEBUGFUNC("e1000_validate_nvm_checksum_with_offset");
2583 for (i = offset; i < ((NVM_CHECKSUM_REG + offset) + 1); i++) {
2584 ret_val = hw->nvm.ops.read(hw, i, 1, &nvm_data);
2586 DEBUGOUT("NVM Read Error\n");
2589 checksum += nvm_data;
2592 if (checksum != (u16) NVM_SUM) {
2593 DEBUGOUT("NVM Checksum Invalid\n");
2594 ret_val = -E1000_ERR_NVM;
2603 * e1000_update_nvm_checksum_with_offset - Update EEPROM
2605 * @hw: pointer to the HW structure
2606 * @offset: offset in words of the checksum protected region
2608 * Updates the EEPROM checksum by reading/adding each word of the EEPROM
2609 * up to the checksum. Then calculates the EEPROM checksum and writes the
2610 * value to the EEPROM.
2612 s32 e1000_update_nvm_checksum_with_offset(struct e1000_hw *hw, u16 offset)
2618 DEBUGFUNC("e1000_update_nvm_checksum_with_offset");
2620 for (i = offset; i < (NVM_CHECKSUM_REG + offset); i++) {
2621 ret_val = hw->nvm.ops.read(hw, i, 1, &nvm_data);
2623 DEBUGOUT("NVM Read Error while updating checksum.\n");
2626 checksum += nvm_data;
2628 checksum = (u16) NVM_SUM - checksum;
2629 ret_val = hw->nvm.ops.write(hw, (NVM_CHECKSUM_REG + offset), 1,
2632 DEBUGOUT("NVM Write Error while updating checksum.\n");
2639 * e1000_validate_nvm_checksum_82580 - Validate EEPROM checksum
2640 * @hw: pointer to the HW structure
2642 * Calculates the EEPROM section checksum by reading/adding each word of
2643 * the EEPROM and then verifies that the sum of the EEPROM is
2646 static s32 e1000_validate_nvm_checksum_82580(struct e1000_hw *hw)
2649 u16 eeprom_regions_count = 1;
2653 DEBUGFUNC("e1000_validate_nvm_checksum_82580");
2655 ret_val = hw->nvm.ops.read(hw, NVM_COMPATIBILITY_REG_3, 1, &nvm_data);
2657 DEBUGOUT("NVM Read Error\n");
2661 if (nvm_data & NVM_COMPATIBILITY_BIT_MASK) {
2662 /* if chekcsums compatibility bit is set validate checksums
2663 * for all 4 ports. */
2664 eeprom_regions_count = 4;
2667 for (j = 0; j < eeprom_regions_count; j++) {
2668 nvm_offset = NVM_82580_LAN_FUNC_OFFSET(j);
2669 ret_val = e1000_validate_nvm_checksum_with_offset(hw,
2671 if (ret_val != E1000_SUCCESS)
2680 * e1000_update_nvm_checksum_82580 - Update EEPROM checksum
2681 * @hw: pointer to the HW structure
2683 * Updates the EEPROM section checksums for all 4 ports by reading/adding
2684 * each word of the EEPROM up to the checksum. Then calculates the EEPROM
2685 * checksum and writes the value to the EEPROM.
2687 static s32 e1000_update_nvm_checksum_82580(struct e1000_hw *hw)
2693 DEBUGFUNC("e1000_update_nvm_checksum_82580");
2695 ret_val = hw->nvm.ops.read(hw, NVM_COMPATIBILITY_REG_3, 1, &nvm_data);
2697 DEBUGOUT("NVM Read Error while updating checksum compatibility bit.\n");
2701 if (!(nvm_data & NVM_COMPATIBILITY_BIT_MASK)) {
2702 /* set compatibility bit to validate checksums appropriately */
2703 nvm_data = nvm_data | NVM_COMPATIBILITY_BIT_MASK;
2704 ret_val = hw->nvm.ops.write(hw, NVM_COMPATIBILITY_REG_3, 1,
2707 DEBUGOUT("NVM Write Error while updating checksum compatibility bit.\n");
2712 for (j = 0; j < 4; j++) {
2713 nvm_offset = NVM_82580_LAN_FUNC_OFFSET(j);
2714 ret_val = e1000_update_nvm_checksum_with_offset(hw, nvm_offset);
2724 * e1000_validate_nvm_checksum_i350 - Validate EEPROM checksum
2725 * @hw: pointer to the HW structure
2727 * Calculates the EEPROM section checksum by reading/adding each word of
2728 * the EEPROM and then verifies that the sum of the EEPROM is
2731 static s32 e1000_validate_nvm_checksum_i350(struct e1000_hw *hw)
2733 s32 ret_val = E1000_SUCCESS;
2737 DEBUGFUNC("e1000_validate_nvm_checksum_i350");
2739 for (j = 0; j < 4; j++) {
2740 nvm_offset = NVM_82580_LAN_FUNC_OFFSET(j);
2741 ret_val = e1000_validate_nvm_checksum_with_offset(hw,
2743 if (ret_val != E1000_SUCCESS)
2752 * e1000_update_nvm_checksum_i350 - Update EEPROM checksum
2753 * @hw: pointer to the HW structure
2755 * Updates the EEPROM section checksums for all 4 ports by reading/adding
2756 * each word of the EEPROM up to the checksum. Then calculates the EEPROM
2757 * checksum and writes the value to the EEPROM.
2759 static s32 e1000_update_nvm_checksum_i350(struct e1000_hw *hw)
2761 s32 ret_val = E1000_SUCCESS;
2765 DEBUGFUNC("e1000_update_nvm_checksum_i350");
2767 for (j = 0; j < 4; j++) {
2768 nvm_offset = NVM_82580_LAN_FUNC_OFFSET(j);
2769 ret_val = e1000_update_nvm_checksum_with_offset(hw, nvm_offset);
2770 if (ret_val != E1000_SUCCESS)
2779 * __e1000_access_emi_reg - Read/write EMI register
2780 * @hw: pointer to the HW structure
2781 * @addr: EMI address to program
2782 * @data: pointer to value to read/write from/to the EMI address
2783 * @read: boolean flag to indicate read or write
2785 static s32 __e1000_access_emi_reg(struct e1000_hw *hw, u16 address,
2786 u16 *data, bool read)
2790 DEBUGFUNC("__e1000_access_emi_reg");
2792 ret_val = hw->phy.ops.write_reg(hw, E1000_EMIADD, address);
2797 ret_val = hw->phy.ops.read_reg(hw, E1000_EMIDATA, data);
2799 ret_val = hw->phy.ops.write_reg(hw, E1000_EMIDATA, *data);
2805 * e1000_read_emi_reg - Read Extended Management Interface register
2806 * @hw: pointer to the HW structure
2807 * @addr: EMI address to program
2808 * @data: value to be read from the EMI address
2810 s32 e1000_read_emi_reg(struct e1000_hw *hw, u16 addr, u16 *data)
2812 DEBUGFUNC("e1000_read_emi_reg");
2814 return __e1000_access_emi_reg(hw, addr, data, TRUE);
2818 * e1000_initialize_M88E1512_phy - Initialize M88E1512 PHY
2819 * @hw: pointer to the HW structure
2821 * Initialize Marverl 1512 to work correctly with Avoton.
2823 s32 e1000_initialize_M88E1512_phy(struct e1000_hw *hw)
2825 struct e1000_phy_info *phy = &hw->phy;
2826 s32 ret_val = E1000_SUCCESS;
2828 DEBUGFUNC("e1000_initialize_M88E1512_phy");
2830 /* Check if this is correct PHY. */
2831 if (phy->id != M88E1512_E_PHY_ID)
2834 /* Switch to PHY page 0xFF. */
2835 ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0x00FF);
2839 ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_2, 0x214B);
2843 ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_1, 0x2144);
2847 ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_2, 0x0C28);
2851 ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_1, 0x2146);
2855 ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_2, 0xB233);
2859 ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_1, 0x214D);
2863 ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_2, 0xCC0C);
2867 ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_1, 0x2159);
2871 /* Switch to PHY page 0xFB. */
2872 ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0x00FB);
2876 ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_3, 0x000D);
2880 /* Switch to PHY page 0x12. */
2881 ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0x12);
2885 /* Change mode to SGMII-to-Copper */
2886 ret_val = phy->ops.write_reg(hw, E1000_M88E1512_MODE, 0x8001);
2890 /* Return the PHY to page 0. */
2891 ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0);
2895 ret_val = phy->ops.commit(hw);
2897 DEBUGOUT("Error committing the PHY changes\n");
2907 * e1000_set_eee_i350 - Enable/disable EEE support
2908 * @hw: pointer to the HW structure
2909 * @adv1g: boolean flag enabling 1G EEE advertisement
2910 * @adv100m: boolean flag enabling 100M EEE advertisement
2912 * Enable/disable EEE based on setting in dev_spec structure.
2915 s32 e1000_set_eee_i350(struct e1000_hw *hw, bool adv1G, bool adv100M)
2919 DEBUGFUNC("e1000_set_eee_i350");
2921 if ((hw->mac.type < e1000_i350) ||
2922 (hw->phy.media_type != e1000_media_type_copper))
2924 ipcnfg = E1000_READ_REG(hw, E1000_IPCNFG);
2925 eeer = E1000_READ_REG(hw, E1000_EEER);
2927 /* enable or disable per user setting */
2928 if (!(hw->dev_spec._82575.eee_disable)) {
2929 u32 eee_su = E1000_READ_REG(hw, E1000_EEE_SU);
2932 ipcnfg |= E1000_IPCNFG_EEE_100M_AN;
2934 ipcnfg &= ~E1000_IPCNFG_EEE_100M_AN;
2937 ipcnfg |= E1000_IPCNFG_EEE_1G_AN;
2939 ipcnfg &= ~E1000_IPCNFG_EEE_1G_AN;
2941 eeer |= (E1000_EEER_TX_LPI_EN | E1000_EEER_RX_LPI_EN |
2944 /* This bit should not be set in normal operation. */
2945 if (eee_su & E1000_EEE_SU_LPI_CLK_STP)
2946 DEBUGOUT("LPI Clock Stop Bit should not be set!\n");
2948 ipcnfg &= ~(E1000_IPCNFG_EEE_1G_AN | E1000_IPCNFG_EEE_100M_AN);
2949 eeer &= ~(E1000_EEER_TX_LPI_EN | E1000_EEER_RX_LPI_EN |
2952 E1000_WRITE_REG(hw, E1000_IPCNFG, ipcnfg);
2953 E1000_WRITE_REG(hw, E1000_EEER, eeer);
2954 E1000_READ_REG(hw, E1000_IPCNFG);
2955 E1000_READ_REG(hw, E1000_EEER);
2958 return E1000_SUCCESS;
2962 * e1000_set_eee_i354 - Enable/disable EEE support
2963 * @hw: pointer to the HW structure
2964 * @adv1g: boolean flag enabling 1G EEE advertisement
2965 * @adv100m: boolean flag enabling 100M EEE advertisement
2967 * Enable/disable EEE legacy mode based on setting in dev_spec structure.
2970 s32 e1000_set_eee_i354(struct e1000_hw *hw, bool adv1G, bool adv100M)
2972 struct e1000_phy_info *phy = &hw->phy;
2973 s32 ret_val = E1000_SUCCESS;
2976 DEBUGFUNC("e1000_set_eee_i354");
2978 if ((hw->phy.media_type != e1000_media_type_copper) ||
2979 ((phy->id != M88E1543_E_PHY_ID) &&
2980 (phy->id != M88E1512_E_PHY_ID)))
2983 if (!hw->dev_spec._82575.eee_disable) {
2984 /* Switch to PHY page 18. */
2985 ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 18);
2989 ret_val = phy->ops.read_reg(hw, E1000_M88E1543_EEE_CTRL_1,
2994 phy_data |= E1000_M88E1543_EEE_CTRL_1_MS;
2995 ret_val = phy->ops.write_reg(hw, E1000_M88E1543_EEE_CTRL_1,
3000 /* Return the PHY to page 0. */
3001 ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0);
3005 /* Turn on EEE advertisement. */
3006 ret_val = e1000_read_xmdio_reg(hw, E1000_EEE_ADV_ADDR_I354,
3007 E1000_EEE_ADV_DEV_I354,
3013 phy_data |= E1000_EEE_ADV_100_SUPPORTED;
3015 phy_data &= ~E1000_EEE_ADV_100_SUPPORTED;
3018 phy_data |= E1000_EEE_ADV_1000_SUPPORTED;
3020 phy_data &= ~E1000_EEE_ADV_1000_SUPPORTED;
3022 ret_val = e1000_write_xmdio_reg(hw, E1000_EEE_ADV_ADDR_I354,
3023 E1000_EEE_ADV_DEV_I354,
3026 /* Turn off EEE advertisement. */
3027 ret_val = e1000_read_xmdio_reg(hw, E1000_EEE_ADV_ADDR_I354,
3028 E1000_EEE_ADV_DEV_I354,
3033 phy_data &= ~(E1000_EEE_ADV_100_SUPPORTED |
3034 E1000_EEE_ADV_1000_SUPPORTED);
3035 ret_val = e1000_write_xmdio_reg(hw, E1000_EEE_ADV_ADDR_I354,
3036 E1000_EEE_ADV_DEV_I354,
3045 * e1000_get_eee_status_i354 - Get EEE status
3046 * @hw: pointer to the HW structure
3047 * @status: EEE status
3049 * Get EEE status by guessing based on whether Tx or Rx LPI indications have
3052 s32 e1000_get_eee_status_i354(struct e1000_hw *hw, bool *status)
3054 struct e1000_phy_info *phy = &hw->phy;
3055 s32 ret_val = E1000_SUCCESS;
3058 DEBUGFUNC("e1000_get_eee_status_i354");
3060 /* Check if EEE is supported on this device. */
3061 if ((hw->phy.media_type != e1000_media_type_copper) ||
3062 ((phy->id != M88E1543_E_PHY_ID) &&
3063 (phy->id != M88E1512_E_PHY_ID)))
3066 ret_val = e1000_read_xmdio_reg(hw, E1000_PCS_STATUS_ADDR_I354,
3067 E1000_PCS_STATUS_DEV_I354,
3072 *status = phy_data & (E1000_PCS_STATUS_TX_LPI_RCVD |
3073 E1000_PCS_STATUS_RX_LPI_RCVD) ? TRUE : FALSE;
3079 /* Due to a hw errata, if the host tries to configure the VFTA register
3080 * while performing queries from the BMC or DMA, then the VFTA in some
3081 * cases won't be written.
3085 * e1000_clear_vfta_i350 - Clear VLAN filter table
3086 * @hw: pointer to the HW structure
3088 * Clears the register array which contains the VLAN filter table by
3089 * setting all the values to 0.
3091 void e1000_clear_vfta_i350(struct e1000_hw *hw)
3096 DEBUGFUNC("e1000_clear_vfta_350");
3098 for (offset = 0; offset < E1000_VLAN_FILTER_TBL_SIZE; offset++) {
3099 for (i = 0; i < 10; i++)
3100 E1000_WRITE_REG_ARRAY(hw, E1000_VFTA, offset, 0);
3102 E1000_WRITE_FLUSH(hw);
3107 * e1000_write_vfta_i350 - Write value to VLAN filter table
3108 * @hw: pointer to the HW structure
3109 * @offset: register offset in VLAN filter table
3110 * @value: register value written to VLAN filter table
3112 * Writes value at the given offset in the register array which stores
3113 * the VLAN filter table.
3115 void e1000_write_vfta_i350(struct e1000_hw *hw, u32 offset, u32 value)
3119 DEBUGFUNC("e1000_write_vfta_350");
3121 for (i = 0; i < 10; i++)
3122 E1000_WRITE_REG_ARRAY(hw, E1000_VFTA, offset, value);
3124 E1000_WRITE_FLUSH(hw);
3129 * e1000_set_i2c_bb - Enable I2C bit-bang
3130 * @hw: pointer to the HW structure
3132 * Enable I2C bit-bang interface
3135 s32 e1000_set_i2c_bb(struct e1000_hw *hw)
3137 s32 ret_val = E1000_SUCCESS;
3138 u32 ctrl_ext, i2cparams;
3140 DEBUGFUNC("e1000_set_i2c_bb");
3142 ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
3143 ctrl_ext |= E1000_CTRL_I2C_ENA;
3144 E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext);
3145 E1000_WRITE_FLUSH(hw);
3147 i2cparams = E1000_READ_REG(hw, E1000_I2CPARAMS);
3148 i2cparams |= E1000_I2CBB_EN;
3149 i2cparams |= E1000_I2C_DATA_OE_N;
3150 i2cparams |= E1000_I2C_CLK_OE_N;
3151 E1000_WRITE_REG(hw, E1000_I2CPARAMS, i2cparams);
3152 E1000_WRITE_FLUSH(hw);
3158 * e1000_read_i2c_byte_generic - Reads 8 bit word over I2C
3159 * @hw: pointer to hardware structure
3160 * @byte_offset: byte offset to read
3161 * @dev_addr: device address
3164 * Performs byte read operation over I2C interface at
3165 * a specified device address.
3167 s32 e1000_read_i2c_byte_generic(struct e1000_hw *hw, u8 byte_offset,
3168 u8 dev_addr, u8 *data)
3170 s32 status = E1000_SUCCESS;
3177 DEBUGFUNC("e1000_read_i2c_byte_generic");
3179 swfw_mask = E1000_SWFW_PHY0_SM;
3182 if (hw->mac.ops.acquire_swfw_sync(hw, swfw_mask)
3184 status = E1000_ERR_SWFW_SYNC;
3188 e1000_i2c_start(hw);
3190 /* Device Address and write indication */
3191 status = e1000_clock_out_i2c_byte(hw, dev_addr);
3192 if (status != E1000_SUCCESS)
3195 status = e1000_get_i2c_ack(hw);
3196 if (status != E1000_SUCCESS)
3199 status = e1000_clock_out_i2c_byte(hw, byte_offset);
3200 if (status != E1000_SUCCESS)
3203 status = e1000_get_i2c_ack(hw);
3204 if (status != E1000_SUCCESS)
3207 e1000_i2c_start(hw);
3209 /* Device Address and read indication */
3210 status = e1000_clock_out_i2c_byte(hw, (dev_addr | 0x1));
3211 if (status != E1000_SUCCESS)
3214 status = e1000_get_i2c_ack(hw);
3215 if (status != E1000_SUCCESS)
3218 status = e1000_clock_in_i2c_byte(hw, data);
3219 if (status != E1000_SUCCESS)
3222 status = e1000_clock_out_i2c_bit(hw, nack);
3223 if (status != E1000_SUCCESS)
3230 hw->mac.ops.release_swfw_sync(hw, swfw_mask);
3232 e1000_i2c_bus_clear(hw);
3234 if (retry < max_retry)
3235 DEBUGOUT("I2C byte read error - Retrying.\n");
3237 DEBUGOUT("I2C byte read error.\n");
3239 } while (retry < max_retry);
3241 hw->mac.ops.release_swfw_sync(hw, swfw_mask);
3249 * e1000_write_i2c_byte_generic - Writes 8 bit word over I2C
3250 * @hw: pointer to hardware structure
3251 * @byte_offset: byte offset to write
3252 * @dev_addr: device address
3253 * @data: value to write
3255 * Performs byte write operation over I2C interface at
3256 * a specified device address.
3258 s32 e1000_write_i2c_byte_generic(struct e1000_hw *hw, u8 byte_offset,
3259 u8 dev_addr, u8 data)
3261 s32 status = E1000_SUCCESS;
3266 DEBUGFUNC("e1000_write_i2c_byte_generic");
3268 swfw_mask = E1000_SWFW_PHY0_SM;
3270 if (hw->mac.ops.acquire_swfw_sync(hw, swfw_mask) != E1000_SUCCESS) {
3271 status = E1000_ERR_SWFW_SYNC;
3272 goto write_byte_out;
3276 e1000_i2c_start(hw);
3278 status = e1000_clock_out_i2c_byte(hw, dev_addr);
3279 if (status != E1000_SUCCESS)
3282 status = e1000_get_i2c_ack(hw);
3283 if (status != E1000_SUCCESS)
3286 status = e1000_clock_out_i2c_byte(hw, byte_offset);
3287 if (status != E1000_SUCCESS)
3290 status = e1000_get_i2c_ack(hw);
3291 if (status != E1000_SUCCESS)
3294 status = e1000_clock_out_i2c_byte(hw, data);
3295 if (status != E1000_SUCCESS)
3298 status = e1000_get_i2c_ack(hw);
3299 if (status != E1000_SUCCESS)
3306 e1000_i2c_bus_clear(hw);
3308 if (retry < max_retry)
3309 DEBUGOUT("I2C byte write error - Retrying.\n");
3311 DEBUGOUT("I2C byte write error.\n");
3312 } while (retry < max_retry);
3314 hw->mac.ops.release_swfw_sync(hw, swfw_mask);
3322 * e1000_i2c_start - Sets I2C start condition
3323 * @hw: pointer to hardware structure
3325 * Sets I2C start condition (High -> Low on SDA while SCL is High)
3327 static void e1000_i2c_start(struct e1000_hw *hw)
3329 u32 i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS);
3331 DEBUGFUNC("e1000_i2c_start");
3333 /* Start condition must begin with data and clock high */
3334 e1000_set_i2c_data(hw, &i2cctl, 1);
3335 e1000_raise_i2c_clk(hw, &i2cctl);
3337 /* Setup time for start condition (4.7us) */
3338 usec_delay(E1000_I2C_T_SU_STA);
3340 e1000_set_i2c_data(hw, &i2cctl, 0);
3342 /* Hold time for start condition (4us) */
3343 usec_delay(E1000_I2C_T_HD_STA);
3345 e1000_lower_i2c_clk(hw, &i2cctl);
3347 /* Minimum low period of clock is 4.7 us */
3348 usec_delay(E1000_I2C_T_LOW);
3353 * e1000_i2c_stop - Sets I2C stop condition
3354 * @hw: pointer to hardware structure
3356 * Sets I2C stop condition (Low -> High on SDA while SCL is High)
3358 static void e1000_i2c_stop(struct e1000_hw *hw)
3360 u32 i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS);
3362 DEBUGFUNC("e1000_i2c_stop");
3364 /* Stop condition must begin with data low and clock high */
3365 e1000_set_i2c_data(hw, &i2cctl, 0);
3366 e1000_raise_i2c_clk(hw, &i2cctl);
3368 /* Setup time for stop condition (4us) */
3369 usec_delay(E1000_I2C_T_SU_STO);
3371 e1000_set_i2c_data(hw, &i2cctl, 1);
3373 /* bus free time between stop and start (4.7us)*/
3374 usec_delay(E1000_I2C_T_BUF);
3378 * e1000_clock_in_i2c_byte - Clocks in one byte via I2C
3379 * @hw: pointer to hardware structure
3380 * @data: data byte to clock in
3382 * Clocks in one byte data via I2C data/clock
3384 static s32 e1000_clock_in_i2c_byte(struct e1000_hw *hw, u8 *data)
3389 DEBUGFUNC("e1000_clock_in_i2c_byte");
3392 for (i = 7; i >= 0; i--) {
3393 e1000_clock_in_i2c_bit(hw, &bit);
3397 return E1000_SUCCESS;
3401 * e1000_clock_out_i2c_byte - Clocks out one byte via I2C
3402 * @hw: pointer to hardware structure
3403 * @data: data byte clocked out
3405 * Clocks out one byte data via I2C data/clock
3407 static s32 e1000_clock_out_i2c_byte(struct e1000_hw *hw, u8 data)
3409 s32 status = E1000_SUCCESS;
3414 DEBUGFUNC("e1000_clock_out_i2c_byte");
3416 for (i = 7; i >= 0; i--) {
3417 bit = (data >> i) & 0x1;
3418 status = e1000_clock_out_i2c_bit(hw, bit);
3420 if (status != E1000_SUCCESS)
3424 /* Release SDA line (set high) */
3425 i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS);
3427 i2cctl |= E1000_I2C_DATA_OE_N;
3428 E1000_WRITE_REG(hw, E1000_I2CPARAMS, i2cctl);
3429 E1000_WRITE_FLUSH(hw);
3435 * e1000_get_i2c_ack - Polls for I2C ACK
3436 * @hw: pointer to hardware structure
3438 * Clocks in/out one bit via I2C data/clock
3440 static s32 e1000_get_i2c_ack(struct e1000_hw *hw)
3442 s32 status = E1000_SUCCESS;
3444 u32 i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS);
3448 DEBUGFUNC("e1000_get_i2c_ack");
3450 e1000_raise_i2c_clk(hw, &i2cctl);
3452 /* Minimum high period of clock is 4us */
3453 usec_delay(E1000_I2C_T_HIGH);
3455 /* Wait until SCL returns high */
3456 for (i = 0; i < timeout; i++) {
3458 i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS);
3459 if (i2cctl & E1000_I2C_CLK_IN)
3462 if (!(i2cctl & E1000_I2C_CLK_IN))
3463 return E1000_ERR_I2C;
3465 ack = e1000_get_i2c_data(&i2cctl);
3467 DEBUGOUT("I2C ack was not received.\n");
3468 status = E1000_ERR_I2C;
3471 e1000_lower_i2c_clk(hw, &i2cctl);
3473 /* Minimum low period of clock is 4.7 us */
3474 usec_delay(E1000_I2C_T_LOW);
3480 * e1000_clock_in_i2c_bit - Clocks in one bit via I2C data/clock
3481 * @hw: pointer to hardware structure
3482 * @data: read data value
3484 * Clocks in one bit via I2C data/clock
3486 static s32 e1000_clock_in_i2c_bit(struct e1000_hw *hw, bool *data)
3488 u32 i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS);
3490 DEBUGFUNC("e1000_clock_in_i2c_bit");
3492 e1000_raise_i2c_clk(hw, &i2cctl);
3494 /* Minimum high period of clock is 4us */
3495 usec_delay(E1000_I2C_T_HIGH);
3497 i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS);
3498 *data = e1000_get_i2c_data(&i2cctl);
3500 e1000_lower_i2c_clk(hw, &i2cctl);
3502 /* Minimum low period of clock is 4.7 us */
3503 usec_delay(E1000_I2C_T_LOW);
3505 return E1000_SUCCESS;
3509 * e1000_clock_out_i2c_bit - Clocks in/out one bit via I2C data/clock
3510 * @hw: pointer to hardware structure
3511 * @data: data value to write
3513 * Clocks out one bit via I2C data/clock
3515 static s32 e1000_clock_out_i2c_bit(struct e1000_hw *hw, bool data)
3518 u32 i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS);
3520 DEBUGFUNC("e1000_clock_out_i2c_bit");
3522 status = e1000_set_i2c_data(hw, &i2cctl, data);
3523 if (status == E1000_SUCCESS) {
3524 e1000_raise_i2c_clk(hw, &i2cctl);
3526 /* Minimum high period of clock is 4us */
3527 usec_delay(E1000_I2C_T_HIGH);
3529 e1000_lower_i2c_clk(hw, &i2cctl);
3531 /* Minimum low period of clock is 4.7 us.
3532 * This also takes care of the data hold time.
3534 usec_delay(E1000_I2C_T_LOW);
3536 status = E1000_ERR_I2C;
3537 DEBUGOUT1("I2C data was not set to %X\n", data);
3543 * e1000_raise_i2c_clk - Raises the I2C SCL clock
3544 * @hw: pointer to hardware structure
3545 * @i2cctl: Current value of I2CCTL register
3547 * Raises the I2C clock line '0'->'1'
3549 static void e1000_raise_i2c_clk(struct e1000_hw *hw, u32 *i2cctl)
3551 DEBUGFUNC("e1000_raise_i2c_clk");
3553 *i2cctl |= E1000_I2C_CLK_OUT;
3554 *i2cctl &= ~E1000_I2C_CLK_OE_N;
3555 E1000_WRITE_REG(hw, E1000_I2CPARAMS, *i2cctl);
3556 E1000_WRITE_FLUSH(hw);
3558 /* SCL rise time (1000ns) */
3559 usec_delay(E1000_I2C_T_RISE);
3563 * e1000_lower_i2c_clk - Lowers the I2C SCL clock
3564 * @hw: pointer to hardware structure
3565 * @i2cctl: Current value of I2CCTL register
3567 * Lowers the I2C clock line '1'->'0'
3569 static void e1000_lower_i2c_clk(struct e1000_hw *hw, u32 *i2cctl)
3572 DEBUGFUNC("e1000_lower_i2c_clk");
3574 *i2cctl &= ~E1000_I2C_CLK_OUT;
3575 *i2cctl &= ~E1000_I2C_CLK_OE_N;
3576 E1000_WRITE_REG(hw, E1000_I2CPARAMS, *i2cctl);
3577 E1000_WRITE_FLUSH(hw);
3579 /* SCL fall time (300ns) */
3580 usec_delay(E1000_I2C_T_FALL);
3584 * e1000_set_i2c_data - Sets the I2C data bit
3585 * @hw: pointer to hardware structure
3586 * @i2cctl: Current value of I2CCTL register
3587 * @data: I2C data value (0 or 1) to set
3589 * Sets the I2C data bit
3591 static s32 e1000_set_i2c_data(struct e1000_hw *hw, u32 *i2cctl, bool data)
3593 s32 status = E1000_SUCCESS;
3595 DEBUGFUNC("e1000_set_i2c_data");
3598 *i2cctl |= E1000_I2C_DATA_OUT;
3600 *i2cctl &= ~E1000_I2C_DATA_OUT;
3602 *i2cctl &= ~E1000_I2C_DATA_OE_N;
3603 *i2cctl |= E1000_I2C_CLK_OE_N;
3604 E1000_WRITE_REG(hw, E1000_I2CPARAMS, *i2cctl);
3605 E1000_WRITE_FLUSH(hw);
3607 /* Data rise/fall (1000ns/300ns) and set-up time (250ns) */
3608 usec_delay(E1000_I2C_T_RISE + E1000_I2C_T_FALL + E1000_I2C_T_SU_DATA);
3610 *i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS);
3611 if (data != e1000_get_i2c_data(i2cctl)) {
3612 status = E1000_ERR_I2C;
3613 DEBUGOUT1("Error - I2C data was not set to %X.\n", data);
3620 * e1000_get_i2c_data - Reads the I2C SDA data bit
3621 * @hw: pointer to hardware structure
3622 * @i2cctl: Current value of I2CCTL register
3624 * Returns the I2C data bit value
3626 static bool e1000_get_i2c_data(u32 *i2cctl)
3630 DEBUGFUNC("e1000_get_i2c_data");
3632 if (*i2cctl & E1000_I2C_DATA_IN)
3641 * e1000_i2c_bus_clear - Clears the I2C bus
3642 * @hw: pointer to hardware structure
3644 * Clears the I2C bus by sending nine clock pulses.
3645 * Used when data line is stuck low.
3647 void e1000_i2c_bus_clear(struct e1000_hw *hw)
3649 u32 i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS);
3652 DEBUGFUNC("e1000_i2c_bus_clear");
3654 e1000_i2c_start(hw);
3656 e1000_set_i2c_data(hw, &i2cctl, 1);
3658 for (i = 0; i < 9; i++) {
3659 e1000_raise_i2c_clk(hw, &i2cctl);
3661 /* Min high period of clock is 4us */
3662 usec_delay(E1000_I2C_T_HIGH);
3664 e1000_lower_i2c_clk(hw, &i2cctl);
3666 /* Min low period of clock is 4.7us*/
3667 usec_delay(E1000_I2C_T_LOW);
3670 e1000_i2c_start(hw);
3672 /* Put the i2c bus back to default state */