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