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