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