]> CyberLeo.Net >> Repos - FreeBSD/releng/9.0.git/blob - sys/dev/e1000/e1000_82575.c
Copy stable/9 to releng/9.0 as part of the FreeBSD 9.0-RELEASE release
[FreeBSD/releng/9.0.git] / sys / dev / e1000 / e1000_82575.c
1 /******************************************************************************
2
3   Copyright (c) 2001-2010, 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  */
42
43 #include "e1000_api.h"
44
45 static s32  e1000_init_phy_params_82575(struct e1000_hw *hw);
46 static s32  e1000_init_mac_params_82575(struct e1000_hw *hw);
47 static s32  e1000_acquire_phy_82575(struct e1000_hw *hw);
48 static void e1000_release_phy_82575(struct e1000_hw *hw);
49 static s32  e1000_acquire_nvm_82575(struct e1000_hw *hw);
50 static void e1000_release_nvm_82575(struct e1000_hw *hw);
51 static s32  e1000_check_for_link_82575(struct e1000_hw *hw);
52 static s32  e1000_get_cfg_done_82575(struct e1000_hw *hw);
53 static s32  e1000_get_link_up_info_82575(struct e1000_hw *hw, u16 *speed,
54                                          u16 *duplex);
55 static s32  e1000_init_hw_82575(struct e1000_hw *hw);
56 static s32  e1000_phy_hw_reset_sgmii_82575(struct e1000_hw *hw);
57 static s32  e1000_read_phy_reg_sgmii_82575(struct e1000_hw *hw, u32 offset,
58                                            u16 *data);
59 static s32  e1000_reset_hw_82575(struct e1000_hw *hw);
60 static s32  e1000_reset_hw_82580(struct e1000_hw *hw);
61 static s32  e1000_read_phy_reg_82580(struct e1000_hw *hw,
62                                     u32 offset, u16 *data);
63 static s32  e1000_write_phy_reg_82580(struct e1000_hw *hw,
64                                      u32 offset, u16 data);
65 static s32  e1000_set_d0_lplu_state_82580(struct e1000_hw *hw,
66                                           bool active);
67 static s32  e1000_set_d3_lplu_state_82580(struct e1000_hw *hw,
68                                           bool active);
69 static s32  e1000_set_d0_lplu_state_82575(struct e1000_hw *hw,
70                                           bool active);
71 static s32  e1000_setup_copper_link_82575(struct e1000_hw *hw);
72 static s32  e1000_setup_serdes_link_82575(struct e1000_hw *hw);
73 static s32  e1000_valid_led_default_82575(struct e1000_hw *hw, u16 *data);
74 static s32  e1000_write_phy_reg_sgmii_82575(struct e1000_hw *hw,
75                                             u32 offset, u16 data);
76 static void e1000_clear_hw_cntrs_82575(struct e1000_hw *hw);
77 static s32  e1000_acquire_swfw_sync_82575(struct e1000_hw *hw, u16 mask);
78 static s32  e1000_get_pcs_speed_and_duplex_82575(struct e1000_hw *hw,
79                                                  u16 *speed, u16 *duplex);
80 static s32  e1000_get_phy_id_82575(struct e1000_hw *hw);
81 static void e1000_release_swfw_sync_82575(struct e1000_hw *hw, u16 mask);
82 static bool e1000_sgmii_active_82575(struct e1000_hw *hw);
83 static s32  e1000_reset_init_script_82575(struct e1000_hw *hw);
84 static s32  e1000_read_mac_addr_82575(struct e1000_hw *hw);
85 static void e1000_config_collision_dist_82575(struct e1000_hw *hw);
86 static void e1000_power_down_phy_copper_82575(struct e1000_hw *hw);
87 static void e1000_shutdown_serdes_link_82575(struct e1000_hw *hw);
88 static void e1000_power_up_serdes_link_82575(struct e1000_hw *hw);
89 static s32 e1000_set_pcie_completion_timeout(struct e1000_hw *hw);
90 static s32 e1000_reset_mdicnfg_82580(struct e1000_hw *hw);
91 static s32 e1000_validate_nvm_checksum_82580(struct e1000_hw *hw);
92 static s32 e1000_update_nvm_checksum_82580(struct e1000_hw *hw);
93 static s32 e1000_update_nvm_checksum_with_offset(struct e1000_hw *hw,
94                                                 u16 offset);
95 static s32 e1000_validate_nvm_checksum_with_offset(struct e1000_hw *hw,
96                                                 u16 offset);
97 static s32 e1000_validate_nvm_checksum_i350(struct e1000_hw *hw);
98 static s32 e1000_update_nvm_checksum_i350(struct e1000_hw *hw);
99
100 static const u16 e1000_82580_rxpbs_table[] =
101         { 36, 72, 144, 1, 2, 4, 8, 16,
102           35, 70, 140 };
103 #define E1000_82580_RXPBS_TABLE_SIZE \
104         (sizeof(e1000_82580_rxpbs_table)/sizeof(u16))
105
106
107 /**
108  *  e1000_sgmii_uses_mdio_82575 - Determine if I2C pins are for external MDIO
109  *  @hw: pointer to the HW structure
110  *
111  *  Called to determine if the I2C pins are being used for I2C or as an
112  *  external MDIO interface since the two options are mutually exclusive.
113  **/
114 static bool e1000_sgmii_uses_mdio_82575(struct e1000_hw *hw)
115 {
116         u32 reg = 0;
117         bool ext_mdio = FALSE;
118
119         DEBUGFUNC("e1000_sgmii_uses_mdio_82575");
120
121         switch (hw->mac.type) {
122         case e1000_82575:
123         case e1000_82576:
124                 reg = E1000_READ_REG(hw, E1000_MDIC);
125                 ext_mdio = !!(reg & E1000_MDIC_DEST);
126                 break;
127         case e1000_82580:
128         case e1000_i350:
129                 reg = E1000_READ_REG(hw, E1000_MDICNFG);
130                 ext_mdio = !!(reg & E1000_MDICNFG_EXT_MDIO);
131                 break;
132         default:
133                 break;
134         }
135         return ext_mdio;
136 }
137
138 /**
139  *  e1000_init_phy_params_82575 - Init PHY func ptrs.
140  *  @hw: pointer to the HW structure
141  **/
142 static s32 e1000_init_phy_params_82575(struct e1000_hw *hw)
143 {
144         struct e1000_phy_info *phy = &hw->phy;
145         s32 ret_val = E1000_SUCCESS;
146         u32 ctrl_ext;
147
148         DEBUGFUNC("e1000_init_phy_params_82575");
149
150         if (hw->phy.media_type != e1000_media_type_copper) {
151                 phy->type = e1000_phy_none;
152                 goto out;
153         }
154
155         phy->ops.power_up   = e1000_power_up_phy_copper;
156         phy->ops.power_down = e1000_power_down_phy_copper_82575;
157
158         phy->autoneg_mask           = AUTONEG_ADVERTISE_SPEED_DEFAULT;
159         phy->reset_delay_us         = 100;
160
161         phy->ops.acquire            = e1000_acquire_phy_82575;
162         phy->ops.check_reset_block  = e1000_check_reset_block_generic;
163         phy->ops.commit             = e1000_phy_sw_reset_generic;
164         phy->ops.get_cfg_done       = e1000_get_cfg_done_82575;
165         phy->ops.release            = e1000_release_phy_82575;
166
167         ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
168
169         if (e1000_sgmii_active_82575(hw)) {
170                 phy->ops.reset      = e1000_phy_hw_reset_sgmii_82575;
171                 ctrl_ext |= E1000_CTRL_I2C_ENA;
172         } else {
173                 phy->ops.reset      = e1000_phy_hw_reset_generic;
174                 ctrl_ext &= ~E1000_CTRL_I2C_ENA;
175         }
176
177         E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext);
178         e1000_reset_mdicnfg_82580(hw);
179
180         if (e1000_sgmii_active_82575(hw) && !e1000_sgmii_uses_mdio_82575(hw)) {
181                 phy->ops.read_reg   = e1000_read_phy_reg_sgmii_82575;
182                 phy->ops.write_reg  = e1000_write_phy_reg_sgmii_82575;
183         } else if (hw->mac.type >= e1000_82580) {
184                 phy->ops.read_reg   = e1000_read_phy_reg_82580;
185                 phy->ops.write_reg  = e1000_write_phy_reg_82580;
186         } else {
187                 phy->ops.read_reg   = e1000_read_phy_reg_igp;
188                 phy->ops.write_reg  = e1000_write_phy_reg_igp;
189         }
190
191         /* Set phy->phy_addr and phy->id. */
192         ret_val = e1000_get_phy_id_82575(hw);
193
194         /* Verify phy id and set remaining function pointers */
195         switch (phy->id) {
196         case I347AT4_E_PHY_ID:
197         case M88E1112_E_PHY_ID:
198         case M88E1340M_E_PHY_ID:
199         case M88E1111_I_PHY_ID:
200                 phy->type                   = e1000_phy_m88;
201                 phy->ops.check_polarity     = e1000_check_polarity_m88;
202                 phy->ops.get_info           = e1000_get_phy_info_m88;
203                 if (phy->id == I347AT4_E_PHY_ID ||
204                     phy->id == M88E1112_E_PHY_ID ||
205                     phy->id == M88E1340M_E_PHY_ID)
206                         phy->ops.get_cable_length = e1000_get_cable_length_m88_gen2;
207                 else
208                         phy->ops.get_cable_length = e1000_get_cable_length_m88;
209                 phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_m88;
210                 break;
211         case IGP03E1000_E_PHY_ID:
212         case IGP04E1000_E_PHY_ID:
213                 phy->type                   = e1000_phy_igp_3;
214                 phy->ops.check_polarity     = e1000_check_polarity_igp;
215                 phy->ops.get_info           = e1000_get_phy_info_igp;
216                 phy->ops.get_cable_length   = e1000_get_cable_length_igp_2;
217                 phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_igp;
218                 phy->ops.set_d0_lplu_state  = e1000_set_d0_lplu_state_82575;
219                 phy->ops.set_d3_lplu_state  = e1000_set_d3_lplu_state_generic;
220                 break;
221         case I82580_I_PHY_ID:
222         case I350_I_PHY_ID:
223                 phy->type                   = e1000_phy_82580;
224                 phy->ops.check_polarity     = e1000_check_polarity_82577;
225                 phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_82577;
226                 phy->ops.get_cable_length   = e1000_get_cable_length_82577;
227                 phy->ops.get_info           = e1000_get_phy_info_82577;
228                 phy->ops.set_d0_lplu_state  = e1000_set_d0_lplu_state_82580;
229                 phy->ops.set_d3_lplu_state  = e1000_set_d3_lplu_state_82580;
230                 break;
231         default:
232                 ret_val = -E1000_ERR_PHY;
233                 goto out;
234         }
235
236 out:
237         return ret_val;
238 }
239
240 /**
241  *  e1000_init_nvm_params_82575 - Init NVM func ptrs.
242  *  @hw: pointer to the HW structure
243  **/
244 s32 e1000_init_nvm_params_82575(struct e1000_hw *hw)
245 {
246         struct e1000_nvm_info *nvm = &hw->nvm;
247         u32 eecd = E1000_READ_REG(hw, E1000_EECD);
248         u16 size;
249
250         DEBUGFUNC("e1000_init_nvm_params_82575");
251
252         size = (u16)((eecd & E1000_EECD_SIZE_EX_MASK) >>
253                      E1000_EECD_SIZE_EX_SHIFT);
254         /*
255          * Added to a constant, "size" becomes the left-shift value
256          * for setting word_size.
257          */
258         size += NVM_WORD_SIZE_BASE_SHIFT;
259
260         nvm->word_size = 1 << size;
261         nvm->opcode_bits        = 8;
262         nvm->delay_usec         = 1;
263         switch (nvm->override) {
264         case e1000_nvm_override_spi_large:
265                 nvm->page_size    = 32;
266                 nvm->address_bits = 16;
267                 break;
268         case e1000_nvm_override_spi_small:
269                 nvm->page_size    = 8;
270                 nvm->address_bits = 8;
271                 break;
272         default:
273                 nvm->page_size    = eecd & E1000_EECD_ADDR_BITS ? 32 : 8;
274                 nvm->address_bits = eecd & E1000_EECD_ADDR_BITS ? 16 : 8;
275                 break;
276         }
277
278         nvm->type = e1000_nvm_eeprom_spi;
279
280         if (nvm->word_size == (1 << 15))
281                 nvm->page_size = 128;
282
283         /* Function Pointers */
284         nvm->ops.acquire    = e1000_acquire_nvm_82575;
285         nvm->ops.release    = e1000_release_nvm_82575;
286         if (nvm->word_size < (1 << 15))
287                 nvm->ops.read    = e1000_read_nvm_eerd;
288         else
289                 nvm->ops.read    = e1000_read_nvm_spi;
290
291         nvm->ops.write              = e1000_write_nvm_spi;
292         nvm->ops.validate           = e1000_validate_nvm_checksum_generic;
293         nvm->ops.update             = e1000_update_nvm_checksum_generic;
294         nvm->ops.valid_led_default  = e1000_valid_led_default_82575;
295
296         /* override genric family function pointers for specific descendants */
297         switch (hw->mac.type) {
298         case e1000_82580:
299                 nvm->ops.validate = e1000_validate_nvm_checksum_82580;
300                 nvm->ops.update = e1000_update_nvm_checksum_82580;
301                 break;
302         case e1000_i350:
303                 nvm->ops.validate = e1000_validate_nvm_checksum_i350;
304                 nvm->ops.update = e1000_update_nvm_checksum_i350;
305                 break;
306         default:
307                 break;
308         }
309
310         return E1000_SUCCESS;
311 }
312
313 /**
314  *  e1000_init_mac_params_82575 - Init MAC func ptrs.
315  *  @hw: pointer to the HW structure
316  **/
317 static s32 e1000_init_mac_params_82575(struct e1000_hw *hw)
318 {
319         struct e1000_mac_info *mac = &hw->mac;
320         struct e1000_dev_spec_82575 *dev_spec = &hw->dev_spec._82575;
321         u32 ctrl_ext = 0;
322
323         DEBUGFUNC("e1000_init_mac_params_82575");
324
325         /* Set media type */
326         /*
327          * The 82575 uses bits 22:23 for link mode. The mode can be changed
328          * based on the EEPROM. We cannot rely upon device ID. There
329          * is no distinguishable difference between fiber and internal
330          * SerDes mode on the 82575. There can be an external PHY attached
331          * on the SGMII interface. For this, we'll set sgmii_active to TRUE.
332          */
333         hw->phy.media_type = e1000_media_type_copper;
334         dev_spec->sgmii_active = FALSE;
335
336         ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
337         switch (ctrl_ext & E1000_CTRL_EXT_LINK_MODE_MASK) {
338         case E1000_CTRL_EXT_LINK_MODE_SGMII:
339                 dev_spec->sgmii_active = TRUE;
340                 break;
341         case E1000_CTRL_EXT_LINK_MODE_1000BASE_KX:
342         case E1000_CTRL_EXT_LINK_MODE_PCIE_SERDES:
343                 hw->phy.media_type = e1000_media_type_internal_serdes;
344                 break;
345         default:
346                 break;
347         }
348
349         /* Set mta register count */
350         mac->mta_reg_count = 128;
351         /* Set uta register count */
352         mac->uta_reg_count = (hw->mac.type == e1000_82575) ? 0 : 128;
353         /* Set rar entry count */
354         mac->rar_entry_count = E1000_RAR_ENTRIES_82575;
355         if (mac->type == e1000_82576)
356                 mac->rar_entry_count = E1000_RAR_ENTRIES_82576;
357         if (mac->type == e1000_82580)
358                 mac->rar_entry_count = E1000_RAR_ENTRIES_82580;
359         if (mac->type == e1000_i350) {
360                 mac->rar_entry_count = E1000_RAR_ENTRIES_I350;
361                 /* Enable EEE default settings for i350 */
362                 dev_spec->eee_disable = FALSE;
363         }
364
365         /* Set if part includes ASF firmware */
366         mac->asf_firmware_present = TRUE;
367         /* FWSM register */
368         mac->has_fwsm = TRUE;
369         /* ARC supported; valid only if manageability features are enabled. */
370         mac->arc_subsystem_valid =
371                 (E1000_READ_REG(hw, E1000_FWSM) & E1000_FWSM_MODE_MASK)
372                         ? TRUE : FALSE;
373
374         /* Function pointers */
375
376         /* bus type/speed/width */
377         mac->ops.get_bus_info = e1000_get_bus_info_pcie_generic;
378         /* reset */
379         if (mac->type >= e1000_82580)
380                 mac->ops.reset_hw = e1000_reset_hw_82580;
381         else
382         mac->ops.reset_hw = e1000_reset_hw_82575;
383         /* hw initialization */
384         mac->ops.init_hw = e1000_init_hw_82575;
385         /* link setup */
386         mac->ops.setup_link = e1000_setup_link_generic;
387         /* physical interface link setup */
388         mac->ops.setup_physical_interface =
389                 (hw->phy.media_type == e1000_media_type_copper)
390                         ? e1000_setup_copper_link_82575
391                         : e1000_setup_serdes_link_82575;
392         /* physical interface shutdown */
393         mac->ops.shutdown_serdes = e1000_shutdown_serdes_link_82575;
394         /* physical interface power up */
395         mac->ops.power_up_serdes = e1000_power_up_serdes_link_82575;
396         /* check for link */
397         mac->ops.check_for_link = e1000_check_for_link_82575;
398         /* receive address register setting */
399         mac->ops.rar_set = e1000_rar_set_generic;
400         /* read mac address */
401         mac->ops.read_mac_addr = e1000_read_mac_addr_82575;
402         /* configure collision distance */
403         mac->ops.config_collision_dist = e1000_config_collision_dist_82575;
404         /* multicast address update */
405         mac->ops.update_mc_addr_list = e1000_update_mc_addr_list_generic;
406         /* writing VFTA */
407         mac->ops.write_vfta = e1000_write_vfta_generic;
408         /* clearing VFTA */
409         mac->ops.clear_vfta = e1000_clear_vfta_generic;
410         /* ID LED init */
411         mac->ops.id_led_init = e1000_id_led_init_generic;
412         /* blink LED */
413         mac->ops.blink_led = e1000_blink_led_generic;
414         /* setup LED */
415         mac->ops.setup_led = e1000_setup_led_generic;
416         /* cleanup LED */
417         mac->ops.cleanup_led = e1000_cleanup_led_generic;
418         /* turn on/off LED */
419         mac->ops.led_on = e1000_led_on_generic;
420         mac->ops.led_off = e1000_led_off_generic;
421         /* clear hardware counters */
422         mac->ops.clear_hw_cntrs = e1000_clear_hw_cntrs_82575;
423         /* link info */
424         mac->ops.get_link_up_info = e1000_get_link_up_info_82575;
425
426         /* set lan id for port to determine which phy lock to use */
427         hw->mac.ops.set_lan_id(hw);
428
429         return E1000_SUCCESS;
430 }
431
432 /**
433  *  e1000_init_function_pointers_82575 - Init func ptrs.
434  *  @hw: pointer to the HW structure
435  *
436  *  Called to initialize all function pointers and parameters.
437  **/
438 void e1000_init_function_pointers_82575(struct e1000_hw *hw)
439 {
440         DEBUGFUNC("e1000_init_function_pointers_82575");
441
442         hw->mac.ops.init_params = e1000_init_mac_params_82575;
443         hw->nvm.ops.init_params = e1000_init_nvm_params_82575;
444         hw->phy.ops.init_params = e1000_init_phy_params_82575;
445         hw->mbx.ops.init_params = e1000_init_mbx_params_pf;
446 }
447
448 /**
449  *  e1000_acquire_phy_82575 - Acquire rights to access PHY
450  *  @hw: pointer to the HW structure
451  *
452  *  Acquire access rights to the correct PHY.
453  **/
454 static s32 e1000_acquire_phy_82575(struct e1000_hw *hw)
455 {
456         u16 mask = E1000_SWFW_PHY0_SM;
457
458         DEBUGFUNC("e1000_acquire_phy_82575");
459
460         if (hw->bus.func == E1000_FUNC_1)
461                 mask = E1000_SWFW_PHY1_SM;
462         else if (hw->bus.func == E1000_FUNC_2)
463                 mask = E1000_SWFW_PHY2_SM;
464         else if (hw->bus.func == E1000_FUNC_3)
465                 mask = E1000_SWFW_PHY3_SM;
466
467         return e1000_acquire_swfw_sync_82575(hw, mask);
468 }
469
470 /**
471  *  e1000_release_phy_82575 - Release rights to access PHY
472  *  @hw: pointer to the HW structure
473  *
474  *  A wrapper to release access rights to the correct PHY.
475  **/
476 static void e1000_release_phy_82575(struct e1000_hw *hw)
477 {
478         u16 mask = E1000_SWFW_PHY0_SM;
479
480         DEBUGFUNC("e1000_release_phy_82575");
481
482         if (hw->bus.func == E1000_FUNC_1)
483                 mask = E1000_SWFW_PHY1_SM;
484         else if (hw->bus.func == E1000_FUNC_2)
485                 mask = E1000_SWFW_PHY2_SM;
486         else if (hw->bus.func == E1000_FUNC_3)
487                 mask = E1000_SWFW_PHY3_SM;
488
489         e1000_release_swfw_sync_82575(hw, mask);
490 }
491
492 /**
493  *  e1000_read_phy_reg_sgmii_82575 - Read PHY register using sgmii
494  *  @hw: pointer to the HW structure
495  *  @offset: register offset to be read
496  *  @data: pointer to the read data
497  *
498  *  Reads the PHY register at offset using the serial gigabit media independent
499  *  interface and stores the retrieved information in data.
500  **/
501 static s32 e1000_read_phy_reg_sgmii_82575(struct e1000_hw *hw, u32 offset,
502                                           u16 *data)
503 {
504         s32 ret_val = -E1000_ERR_PARAM;
505
506         DEBUGFUNC("e1000_read_phy_reg_sgmii_82575");
507
508         if (offset > E1000_MAX_SGMII_PHY_REG_ADDR) {
509                 DEBUGOUT1("PHY Address %u is out of range\n", offset);
510                 goto out;
511         }
512
513         ret_val = hw->phy.ops.acquire(hw);
514         if (ret_val)
515                 goto out;
516
517         ret_val = e1000_read_phy_reg_i2c(hw, offset, data);
518
519         hw->phy.ops.release(hw);
520
521 out:
522         return ret_val;
523 }
524
525 /**
526  *  e1000_write_phy_reg_sgmii_82575 - Write PHY register using sgmii
527  *  @hw: pointer to the HW structure
528  *  @offset: register offset to write to
529  *  @data: data to write at register offset
530  *
531  *  Writes the data to PHY register at the offset using the serial gigabit
532  *  media independent interface.
533  **/
534 static s32 e1000_write_phy_reg_sgmii_82575(struct e1000_hw *hw, u32 offset,
535                                            u16 data)
536 {
537         s32 ret_val = -E1000_ERR_PARAM;
538
539         DEBUGFUNC("e1000_write_phy_reg_sgmii_82575");
540
541         if (offset > E1000_MAX_SGMII_PHY_REG_ADDR) {
542                 DEBUGOUT1("PHY Address %d is out of range\n", offset);
543                 goto out;
544         }
545
546         ret_val = hw->phy.ops.acquire(hw);
547         if (ret_val)
548                 goto out;
549
550         ret_val = e1000_write_phy_reg_i2c(hw, offset, data);
551
552         hw->phy.ops.release(hw);
553
554 out:
555         return ret_val;
556 }
557
558 /**
559  *  e1000_get_phy_id_82575 - Retrieve PHY addr and id
560  *  @hw: pointer to the HW structure
561  *
562  *  Retrieves the PHY address and ID for both PHY's which do and do not use
563  *  sgmi interface.
564  **/
565 static s32 e1000_get_phy_id_82575(struct e1000_hw *hw)
566 {
567         struct e1000_phy_info *phy = &hw->phy;
568         s32  ret_val = E1000_SUCCESS;
569         u16 phy_id;
570         u32 ctrl_ext;
571         u32 mdic;
572
573         DEBUGFUNC("e1000_get_phy_id_82575");
574
575         /*
576          * For SGMII PHYs, we try the list of possible addresses until
577          * we find one that works.  For non-SGMII PHYs
578          * (e.g. integrated copper PHYs), an address of 1 should
579          * work.  The result of this function should mean phy->phy_addr
580          * and phy->id are set correctly.
581          */
582         if (!e1000_sgmii_active_82575(hw)) {
583                 phy->addr = 1;
584                 ret_val = e1000_get_phy_id(hw);
585                 goto out;
586         }
587
588         if (e1000_sgmii_uses_mdio_82575(hw)) {
589                 switch (hw->mac.type) {
590                 case e1000_82575:
591                 case e1000_82576:
592                         mdic = E1000_READ_REG(hw, E1000_MDIC);
593                         mdic &= E1000_MDIC_PHY_MASK;
594                         phy->addr = mdic >> E1000_MDIC_PHY_SHIFT;
595                         break;
596                 case e1000_82580:
597                 case e1000_i350:
598                         mdic = E1000_READ_REG(hw, E1000_MDICNFG);
599                         mdic &= E1000_MDICNFG_PHY_MASK;
600                         phy->addr = mdic >> E1000_MDICNFG_PHY_SHIFT;
601                         break;
602                 default:
603                         ret_val = -E1000_ERR_PHY;
604                         goto out;
605                         break;
606                 }
607                 ret_val = e1000_get_phy_id(hw);
608                 goto out;
609         }
610
611         /* Power on sgmii phy if it is disabled */
612         ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
613         E1000_WRITE_REG(hw, E1000_CTRL_EXT,
614                         ctrl_ext & ~E1000_CTRL_EXT_SDP3_DATA);
615         E1000_WRITE_FLUSH(hw);
616         msec_delay(300);
617
618         /*
619          * The address field in the I2CCMD register is 3 bits and 0 is invalid.
620          * Therefore, we need to test 1-7
621          */
622         for (phy->addr = 1; phy->addr < 8; phy->addr++) {
623                 ret_val = e1000_read_phy_reg_sgmii_82575(hw, PHY_ID1, &phy_id);
624                 if (ret_val == E1000_SUCCESS) {
625                         DEBUGOUT2("Vendor ID 0x%08X read at address %u\n",
626                                   phy_id,
627                                   phy->addr);
628                         /*
629                          * At the time of this writing, The M88 part is
630                          * the only supported SGMII PHY product.
631                          */
632                         if (phy_id == M88_VENDOR)
633                                 break;
634                 } else {
635                         DEBUGOUT1("PHY address %u was unreadable\n",
636                                   phy->addr);
637                 }
638         }
639
640         /* A valid PHY type couldn't be found. */
641         if (phy->addr == 8) {
642                 phy->addr = 0;
643                 ret_val = -E1000_ERR_PHY;
644         } else {
645                 ret_val = e1000_get_phy_id(hw);
646         }
647
648         /* restore previous sfp cage power state */
649         E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext);
650
651 out:
652         return ret_val;
653 }
654
655 /**
656  *  e1000_phy_hw_reset_sgmii_82575 - Performs a PHY reset
657  *  @hw: pointer to the HW structure
658  *
659  *  Resets the PHY using the serial gigabit media independent interface.
660  **/
661 static s32 e1000_phy_hw_reset_sgmii_82575(struct e1000_hw *hw)
662 {
663         s32 ret_val = E1000_SUCCESS;
664
665         DEBUGFUNC("e1000_phy_hw_reset_sgmii_82575");
666
667         /*
668          * This isn't a TRUE "hard" reset, but is the only reset
669          * available to us at this time.
670          */
671
672         DEBUGOUT("Soft resetting SGMII attached PHY...\n");
673
674         if (!(hw->phy.ops.write_reg))
675                 goto out;
676
677         /*
678          * SFP documentation requires the following to configure the SPF module
679          * to work on SGMII.  No further documentation is given.
680          */
681         ret_val = hw->phy.ops.write_reg(hw, 0x1B, 0x8084);
682         if (ret_val)
683                 goto out;
684
685         ret_val = hw->phy.ops.commit(hw);
686
687 out:
688         return ret_val;
689 }
690
691 /**
692  *  e1000_set_d0_lplu_state_82575 - Set Low Power Linkup D0 state
693  *  @hw: pointer to the HW structure
694  *  @active: TRUE to enable LPLU, FALSE to disable
695  *
696  *  Sets the LPLU D0 state according to the active flag.  When
697  *  activating LPLU this function also disables smart speed
698  *  and vice versa.  LPLU will not be activated unless the
699  *  device autonegotiation advertisement meets standards of
700  *  either 10 or 10/100 or 10/100/1000 at all duplexes.
701  *  This is a function pointer entry point only called by
702  *  PHY setup routines.
703  **/
704 static s32 e1000_set_d0_lplu_state_82575(struct e1000_hw *hw, bool active)
705 {
706         struct e1000_phy_info *phy = &hw->phy;
707         s32 ret_val = E1000_SUCCESS;
708         u16 data;
709
710         DEBUGFUNC("e1000_set_d0_lplu_state_82575");
711
712         if (!(hw->phy.ops.read_reg))
713                 goto out;
714
715         ret_val = phy->ops.read_reg(hw, IGP02E1000_PHY_POWER_MGMT, &data);
716         if (ret_val)
717                 goto out;
718
719         if (active) {
720                 data |= IGP02E1000_PM_D0_LPLU;
721                 ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT,
722                                              data);
723                 if (ret_val)
724                         goto out;
725
726                 /* When LPLU is enabled, we should disable SmartSpeed */
727                 ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
728                                             &data);
729                 data &= ~IGP01E1000_PSCFR_SMART_SPEED;
730                 ret_val = phy->ops.write_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
731                                              data);
732                 if (ret_val)
733                         goto out;
734         } else {
735                 data &= ~IGP02E1000_PM_D0_LPLU;
736                 ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT,
737                                              data);
738                 /*
739                  * LPLU and SmartSpeed are mutually exclusive.  LPLU is used
740                  * during Dx states where the power conservation is most
741                  * important.  During driver activity we should enable
742                  * SmartSpeed, so performance is maintained.
743                  */
744                 if (phy->smart_speed == e1000_smart_speed_on) {
745                         ret_val = phy->ops.read_reg(hw,
746                                                     IGP01E1000_PHY_PORT_CONFIG,
747                                                     &data);
748                         if (ret_val)
749                                 goto out;
750
751                         data |= IGP01E1000_PSCFR_SMART_SPEED;
752                         ret_val = phy->ops.write_reg(hw,
753                                                      IGP01E1000_PHY_PORT_CONFIG,
754                                                      data);
755                         if (ret_val)
756                                 goto out;
757                 } else if (phy->smart_speed == e1000_smart_speed_off) {
758                         ret_val = phy->ops.read_reg(hw,
759                                                     IGP01E1000_PHY_PORT_CONFIG,
760                                                     &data);
761                         if (ret_val)
762                                 goto out;
763
764                         data &= ~IGP01E1000_PSCFR_SMART_SPEED;
765                         ret_val = phy->ops.write_reg(hw,
766                                                      IGP01E1000_PHY_PORT_CONFIG,
767                                                      data);
768                         if (ret_val)
769                                 goto out;
770                 }
771         }
772
773 out:
774         return ret_val;
775 }
776
777 /**
778  *  e1000_set_d0_lplu_state_82580 - Set Low Power Linkup D0 state
779  *  @hw: pointer to the HW structure
780  *  @active: TRUE to enable LPLU, FALSE to disable
781  *
782  *  Sets the LPLU D0 state according to the active flag.  When
783  *  activating LPLU this function also disables smart speed
784  *  and vice versa.  LPLU will not be activated unless the
785  *  device autonegotiation advertisement meets standards of
786  *  either 10 or 10/100 or 10/100/1000 at all duplexes.
787  *  This is a function pointer entry point only called by
788  *  PHY setup routines.
789  **/
790 static s32 e1000_set_d0_lplu_state_82580(struct e1000_hw *hw, bool active)
791 {
792         struct e1000_phy_info *phy = &hw->phy;
793         s32 ret_val = E1000_SUCCESS;
794         u16 data;
795
796         DEBUGFUNC("e1000_set_d0_lplu_state_82580");
797
798         data = E1000_READ_REG(hw, E1000_82580_PHY_POWER_MGMT);
799
800         if (active) {
801                 data |= E1000_82580_PM_D0_LPLU;
802
803                 /* When LPLU is enabled, we should disable SmartSpeed */
804                 data &= ~E1000_82580_PM_SPD;
805         } else {
806                 data &= ~E1000_82580_PM_D0_LPLU;
807
808                 /*
809                  * LPLU and SmartSpeed are mutually exclusive.  LPLU is used
810                  * during Dx states where the power conservation is most
811                  * important.  During driver activity we should enable
812                  * SmartSpeed, so performance is maintained.
813                  */
814                 if (phy->smart_speed == e1000_smart_speed_on) {
815                         data |= E1000_82580_PM_SPD;
816                 } else if (phy->smart_speed == e1000_smart_speed_off) {
817                         data &= ~E1000_82580_PM_SPD;
818                 }
819         }
820
821         E1000_WRITE_REG(hw, E1000_82580_PHY_POWER_MGMT, data);
822         return ret_val;
823 }
824
825 /**
826  *  e1000_set_d3_lplu_state_82580 - Sets low power link up state for D3
827  *  @hw: pointer to the HW structure
828  *  @active: boolean used to enable/disable lplu
829  *
830  *  Success returns 0, Failure returns 1
831  *
832  *  The low power link up (lplu) state is set to the power management level D3
833  *  and SmartSpeed is disabled when active is TRUE, else clear lplu for D3
834  *  and enable Smartspeed.  LPLU and Smartspeed are mutually exclusive.  LPLU
835  *  is used during Dx states where the power conservation is most important.
836  *  During driver activity, SmartSpeed should be enabled so performance is
837  *  maintained.
838  **/
839 s32 e1000_set_d3_lplu_state_82580(struct e1000_hw *hw, bool active)
840 {
841         struct e1000_phy_info *phy = &hw->phy;
842         s32 ret_val = E1000_SUCCESS;
843         u16 data;
844
845         DEBUGFUNC("e1000_set_d3_lplu_state_82580");
846
847         data = E1000_READ_REG(hw, E1000_82580_PHY_POWER_MGMT);
848
849         if (!active) {
850                 data &= ~E1000_82580_PM_D3_LPLU;
851                 /*
852                  * LPLU and SmartSpeed are mutually exclusive.  LPLU is used
853                  * during Dx states where the power conservation is most
854                  * important.  During driver activity we should enable
855                  * SmartSpeed, so performance is maintained.
856                  */
857                 if (phy->smart_speed == e1000_smart_speed_on) {
858                         data |= E1000_82580_PM_SPD;
859                 } else if (phy->smart_speed == e1000_smart_speed_off) {
860                         data &= ~E1000_82580_PM_SPD;
861                 }
862         } else if ((phy->autoneg_advertised == E1000_ALL_SPEED_DUPLEX) ||
863                    (phy->autoneg_advertised == E1000_ALL_NOT_GIG) ||
864                    (phy->autoneg_advertised == E1000_ALL_10_SPEED)) {
865                 data |= E1000_82580_PM_D3_LPLU;
866                 /* When LPLU is enabled, we should disable SmartSpeed */
867                 data &= ~E1000_82580_PM_SPD;
868         }
869
870         E1000_WRITE_REG(hw, E1000_82580_PHY_POWER_MGMT, data);
871         return ret_val;
872 }
873
874 /**
875  *  e1000_acquire_nvm_82575 - Request for access to EEPROM
876  *  @hw: pointer to the HW structure
877  *
878  *  Acquire the necessary semaphores for exclusive access to the EEPROM.
879  *  Set the EEPROM access request bit and wait for EEPROM access grant bit.
880  *  Return successful if access grant bit set, else clear the request for
881  *  EEPROM access and return -E1000_ERR_NVM (-1).
882  **/
883 static s32 e1000_acquire_nvm_82575(struct e1000_hw *hw)
884 {
885         s32 ret_val;
886
887         DEBUGFUNC("e1000_acquire_nvm_82575");
888
889         ret_val = e1000_acquire_swfw_sync_82575(hw, E1000_SWFW_EEP_SM);
890         if (ret_val)
891                 goto out;
892         ret_val = e1000_acquire_nvm_generic(hw);
893         if (ret_val)
894                 e1000_release_swfw_sync_82575(hw, E1000_SWFW_EEP_SM);
895
896 out:
897         return ret_val;
898 }
899
900 /**
901  *  e1000_release_nvm_82575 - Release exclusive access to EEPROM
902  *  @hw: pointer to the HW structure
903  *
904  *  Stop any current commands to the EEPROM and clear the EEPROM request bit,
905  *  then release the semaphores acquired.
906  **/
907 static void e1000_release_nvm_82575(struct e1000_hw *hw)
908 {
909         DEBUGFUNC("e1000_release_nvm_82575");
910
911         e1000_release_swfw_sync_82575(hw, E1000_SWFW_EEP_SM);
912 }
913
914 /**
915  *  e1000_acquire_swfw_sync_82575 - Acquire SW/FW semaphore
916  *  @hw: pointer to the HW structure
917  *  @mask: specifies which semaphore to acquire
918  *
919  *  Acquire the SW/FW semaphore to access the PHY or NVM.  The mask
920  *  will also specify which port we're acquiring the lock for.
921  **/
922 static s32 e1000_acquire_swfw_sync_82575(struct e1000_hw *hw, u16 mask)
923 {
924         u32 swfw_sync;
925         u32 swmask = mask;
926         u32 fwmask = mask << 16;
927         s32 ret_val = E1000_SUCCESS;
928         s32 i = 0, timeout = 200; /* FIXME: find real value to use here */
929
930         DEBUGFUNC("e1000_acquire_swfw_sync_82575");
931
932         while (i < timeout) {
933                 if (e1000_get_hw_semaphore_generic(hw)) {
934                         ret_val = -E1000_ERR_SWFW_SYNC;
935                         goto out;
936                 }
937
938                 swfw_sync = E1000_READ_REG(hw, E1000_SW_FW_SYNC);
939                 if (!(swfw_sync & (fwmask | swmask)))
940                         break;
941
942                 /*
943                  * Firmware currently using resource (fwmask)
944                  * or other software thread using resource (swmask)
945                  */
946                 e1000_put_hw_semaphore_generic(hw);
947                 msec_delay_irq(5);
948                 i++;
949         }
950
951         if (i == timeout) {
952                 DEBUGOUT("Driver can't access resource, SW_FW_SYNC timeout.\n");
953                 ret_val = -E1000_ERR_SWFW_SYNC;
954                 goto out;
955         }
956
957         swfw_sync |= swmask;
958         E1000_WRITE_REG(hw, E1000_SW_FW_SYNC, swfw_sync);
959
960         e1000_put_hw_semaphore_generic(hw);
961
962 out:
963         return ret_val;
964 }
965
966 /**
967  *  e1000_release_swfw_sync_82575 - Release SW/FW semaphore
968  *  @hw: pointer to the HW structure
969  *  @mask: specifies which semaphore to acquire
970  *
971  *  Release the SW/FW semaphore used to access the PHY or NVM.  The mask
972  *  will also specify which port we're releasing the lock for.
973  **/
974 static void e1000_release_swfw_sync_82575(struct e1000_hw *hw, u16 mask)
975 {
976         u32 swfw_sync;
977
978         DEBUGFUNC("e1000_release_swfw_sync_82575");
979
980         while (e1000_get_hw_semaphore_generic(hw) != E1000_SUCCESS);
981         /* Empty */
982
983         swfw_sync = E1000_READ_REG(hw, E1000_SW_FW_SYNC);
984         swfw_sync &= ~mask;
985         E1000_WRITE_REG(hw, E1000_SW_FW_SYNC, swfw_sync);
986
987         e1000_put_hw_semaphore_generic(hw);
988 }
989
990 /**
991  *  e1000_get_cfg_done_82575 - Read config done bit
992  *  @hw: pointer to the HW structure
993  *
994  *  Read the management control register for the config done bit for
995  *  completion status.  NOTE: silicon which is EEPROM-less will fail trying
996  *  to read the config done bit, so an error is *ONLY* logged and returns
997  *  E1000_SUCCESS.  If we were to return with error, EEPROM-less silicon
998  *  would not be able to be reset or change link.
999  **/
1000 static s32 e1000_get_cfg_done_82575(struct e1000_hw *hw)
1001 {
1002         s32 timeout = PHY_CFG_TIMEOUT;
1003         s32 ret_val = E1000_SUCCESS;
1004         u32 mask = E1000_NVM_CFG_DONE_PORT_0;
1005
1006         DEBUGFUNC("e1000_get_cfg_done_82575");
1007
1008         if (hw->bus.func == E1000_FUNC_1)
1009                 mask = E1000_NVM_CFG_DONE_PORT_1;
1010         else if (hw->bus.func == E1000_FUNC_2)
1011                 mask = E1000_NVM_CFG_DONE_PORT_2;
1012         else if (hw->bus.func == E1000_FUNC_3)
1013                 mask = E1000_NVM_CFG_DONE_PORT_3;
1014         while (timeout) {
1015                 if (E1000_READ_REG(hw, E1000_EEMNGCTL) & mask)
1016                         break;
1017                 msec_delay(1);
1018                 timeout--;
1019         }
1020         if (!timeout)
1021                 DEBUGOUT("MNG configuration cycle has not completed.\n");
1022
1023         /* If EEPROM is not marked present, init the PHY manually */
1024         if (((E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_PRES) == 0) &&
1025             (hw->phy.type == e1000_phy_igp_3))
1026                 e1000_phy_init_script_igp3(hw);
1027
1028         return ret_val;
1029 }
1030
1031 /**
1032  *  e1000_get_link_up_info_82575 - Get link speed/duplex info
1033  *  @hw: pointer to the HW structure
1034  *  @speed: stores the current speed
1035  *  @duplex: stores the current duplex
1036  *
1037  *  This is a wrapper function, if using the serial gigabit media independent
1038  *  interface, use PCS to retrieve the link speed and duplex information.
1039  *  Otherwise, use the generic function to get the link speed and duplex info.
1040  **/
1041 static s32 e1000_get_link_up_info_82575(struct e1000_hw *hw, u16 *speed,
1042                                         u16 *duplex)
1043 {
1044         s32 ret_val;
1045
1046         DEBUGFUNC("e1000_get_link_up_info_82575");
1047
1048         if (hw->phy.media_type != e1000_media_type_copper)
1049                 ret_val = e1000_get_pcs_speed_and_duplex_82575(hw, speed,
1050                                                                duplex);
1051         else
1052                 ret_val = e1000_get_speed_and_duplex_copper_generic(hw, speed,
1053                                                                     duplex);
1054
1055         return ret_val;
1056 }
1057
1058 /**
1059  *  e1000_check_for_link_82575 - Check for link
1060  *  @hw: pointer to the HW structure
1061  *
1062  *  If sgmii is enabled, then use the pcs register to determine link, otherwise
1063  *  use the generic interface for determining link.
1064  **/
1065 static s32 e1000_check_for_link_82575(struct e1000_hw *hw)
1066 {
1067         s32 ret_val;
1068         u16 speed, duplex;
1069
1070         DEBUGFUNC("e1000_check_for_link_82575");
1071
1072         if (hw->phy.media_type != e1000_media_type_copper) {
1073                 ret_val = e1000_get_pcs_speed_and_duplex_82575(hw, &speed,
1074                                                                &duplex);
1075                 /*
1076                  * Use this flag to determine if link needs to be checked or
1077                  * not.  If we have link clear the flag so that we do not
1078                  * continue to check for link.
1079                  */
1080                 hw->mac.get_link_status = !hw->mac.serdes_has_link;
1081         } else {
1082                 ret_val = e1000_check_for_copper_link_generic(hw);
1083         }
1084
1085         return ret_val;
1086 }
1087
1088 /**
1089  *  e1000_power_up_serdes_link_82575 - Power up the serdes link after shutdown
1090  *  @hw: pointer to the HW structure
1091  **/
1092 static void e1000_power_up_serdes_link_82575(struct e1000_hw *hw)
1093 {
1094         u32 reg;
1095
1096         DEBUGFUNC("e1000_power_up_serdes_link_82575");
1097
1098         if ((hw->phy.media_type != e1000_media_type_internal_serdes) &&
1099             !e1000_sgmii_active_82575(hw))
1100                 return;
1101
1102         /* Enable PCS to turn on link */
1103         reg = E1000_READ_REG(hw, E1000_PCS_CFG0);
1104         reg |= E1000_PCS_CFG_PCS_EN;
1105         E1000_WRITE_REG(hw, E1000_PCS_CFG0, reg);
1106
1107         /* Power up the laser */
1108         reg = E1000_READ_REG(hw, E1000_CTRL_EXT);
1109         reg &= ~E1000_CTRL_EXT_SDP3_DATA;
1110         E1000_WRITE_REG(hw, E1000_CTRL_EXT, reg);
1111
1112         /* flush the write to verify completion */
1113         E1000_WRITE_FLUSH(hw);
1114         msec_delay(1);
1115 }
1116
1117 /**
1118  *  e1000_get_pcs_speed_and_duplex_82575 - Retrieve current speed/duplex
1119  *  @hw: pointer to the HW structure
1120  *  @speed: stores the current speed
1121  *  @duplex: stores the current duplex
1122  *
1123  *  Using the physical coding sub-layer (PCS), retrieve the current speed and
1124  *  duplex, then store the values in the pointers provided.
1125  **/
1126 static s32 e1000_get_pcs_speed_and_duplex_82575(struct e1000_hw *hw,
1127                                                 u16 *speed, u16 *duplex)
1128 {
1129         struct e1000_mac_info *mac = &hw->mac;
1130         u32 pcs;
1131
1132         DEBUGFUNC("e1000_get_pcs_speed_and_duplex_82575");
1133
1134         /* Set up defaults for the return values of this function */
1135         mac->serdes_has_link = FALSE;
1136         *speed = 0;
1137         *duplex = 0;
1138
1139         /*
1140          * Read the PCS Status register for link state. For non-copper mode,
1141          * the status register is not accurate. The PCS status register is
1142          * used instead.
1143          */
1144         pcs = E1000_READ_REG(hw, E1000_PCS_LSTAT);
1145
1146         /*
1147          * The link up bit determines when link is up on autoneg. The sync ok
1148          * gets set once both sides sync up and agree upon link. Stable link
1149          * can be determined by checking for both link up and link sync ok
1150          */
1151         if ((pcs & E1000_PCS_LSTS_LINK_OK) && (pcs & E1000_PCS_LSTS_SYNK_OK)) {
1152                 mac->serdes_has_link = TRUE;
1153
1154                 /* Detect and store PCS speed */
1155                 if (pcs & E1000_PCS_LSTS_SPEED_1000) {
1156                         *speed = SPEED_1000;
1157                 } else if (pcs & E1000_PCS_LSTS_SPEED_100) {
1158                         *speed = SPEED_100;
1159                 } else {
1160                         *speed = SPEED_10;
1161                 }
1162
1163                 /* Detect and store PCS duplex */
1164                 if (pcs & E1000_PCS_LSTS_DUPLEX_FULL) {
1165                         *duplex = FULL_DUPLEX;
1166                 } else {
1167                         *duplex = HALF_DUPLEX;
1168                 }
1169         }
1170
1171         return E1000_SUCCESS;
1172 }
1173
1174 /**
1175  *  e1000_shutdown_serdes_link_82575 - Remove link during power down
1176  *  @hw: pointer to the HW structure
1177  *
1178  *  In the case of serdes shut down sfp and PCS on driver unload
1179  *  when management pass thru is not enabled.
1180  **/
1181 void e1000_shutdown_serdes_link_82575(struct e1000_hw *hw)
1182 {
1183         u32 reg;
1184
1185         DEBUGFUNC("e1000_shutdown_serdes_link_82575");
1186
1187         if ((hw->phy.media_type != e1000_media_type_internal_serdes) &&
1188             !e1000_sgmii_active_82575(hw))
1189                 return;
1190
1191         if (!e1000_enable_mng_pass_thru(hw)) {
1192                 /* Disable PCS to turn off link */
1193                 reg = E1000_READ_REG(hw, E1000_PCS_CFG0);
1194                 reg &= ~E1000_PCS_CFG_PCS_EN;
1195                 E1000_WRITE_REG(hw, E1000_PCS_CFG0, reg);
1196
1197                 /* shutdown the laser */
1198                 reg = E1000_READ_REG(hw, E1000_CTRL_EXT);
1199                 reg |= E1000_CTRL_EXT_SDP3_DATA;
1200                 E1000_WRITE_REG(hw, E1000_CTRL_EXT, reg);
1201
1202                 /* flush the write to verify completion */
1203                 E1000_WRITE_FLUSH(hw);
1204                 msec_delay(1);
1205         }
1206
1207         return;
1208 }
1209
1210 /**
1211  *  e1000_reset_hw_82575 - Reset hardware
1212  *  @hw: pointer to the HW structure
1213  *
1214  *  This resets the hardware into a known state.
1215  **/
1216 static s32 e1000_reset_hw_82575(struct e1000_hw *hw)
1217 {
1218         u32 ctrl;
1219         s32 ret_val;
1220
1221         DEBUGFUNC("e1000_reset_hw_82575");
1222
1223         /*
1224          * Prevent the PCI-E bus from sticking if there is no TLP connection
1225          * on the last TLP read/write transaction when MAC is reset.
1226          */
1227         ret_val = e1000_disable_pcie_master_generic(hw);
1228         if (ret_val) {
1229                 DEBUGOUT("PCI-E Master disable polling has failed.\n");
1230         }
1231
1232         /* set the completion timeout for interface */
1233         ret_val = e1000_set_pcie_completion_timeout(hw);
1234         if (ret_val) {
1235                 DEBUGOUT("PCI-E Set completion timeout has failed.\n");
1236         }
1237
1238         DEBUGOUT("Masking off all interrupts\n");
1239         E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
1240
1241         E1000_WRITE_REG(hw, E1000_RCTL, 0);
1242         E1000_WRITE_REG(hw, E1000_TCTL, E1000_TCTL_PSP);
1243         E1000_WRITE_FLUSH(hw);
1244
1245         msec_delay(10);
1246
1247         ctrl = E1000_READ_REG(hw, E1000_CTRL);
1248
1249         DEBUGOUT("Issuing a global reset to MAC\n");
1250         E1000_WRITE_REG(hw, E1000_CTRL, ctrl | E1000_CTRL_RST);
1251
1252         ret_val = e1000_get_auto_rd_done_generic(hw);
1253         if (ret_val) {
1254                 /*
1255                  * When auto config read does not complete, do not
1256                  * return with an error. This can happen in situations
1257                  * where there is no eeprom and prevents getting link.
1258                  */
1259                 DEBUGOUT("Auto Read Done did not complete\n");
1260         }
1261
1262         /* If EEPROM is not present, run manual init scripts */
1263         if ((E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_PRES) == 0)
1264                 e1000_reset_init_script_82575(hw);
1265
1266         /* Clear any pending interrupt events. */
1267         E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
1268         E1000_READ_REG(hw, E1000_ICR);
1269
1270         /* Install any alternate MAC address into RAR0 */
1271         ret_val = e1000_check_alt_mac_addr_generic(hw);
1272
1273         return ret_val;
1274 }
1275
1276 /**
1277  *  e1000_init_hw_82575 - Initialize hardware
1278  *  @hw: pointer to the HW structure
1279  *
1280  *  This inits the hardware readying it for operation.
1281  **/
1282 static s32 e1000_init_hw_82575(struct e1000_hw *hw)
1283 {
1284         struct e1000_mac_info *mac = &hw->mac;
1285         s32 ret_val;
1286         u16 i, rar_count = mac->rar_entry_count;
1287
1288         DEBUGFUNC("e1000_init_hw_82575");
1289
1290         /* Initialize identification LED */
1291         ret_val = mac->ops.id_led_init(hw);
1292         if (ret_val) {
1293                 DEBUGOUT("Error initializing identification LED\n");
1294                 /* This is not fatal and we should not stop init due to this */
1295         }
1296
1297         /* Disabling VLAN filtering */
1298         DEBUGOUT("Initializing the IEEE VLAN\n");
1299         mac->ops.clear_vfta(hw);
1300
1301         /* Setup the receive address */
1302         e1000_init_rx_addrs_generic(hw, rar_count);
1303
1304         /* Zero out the Multicast HASH table */
1305         DEBUGOUT("Zeroing the MTA\n");
1306         for (i = 0; i < mac->mta_reg_count; i++)
1307                 E1000_WRITE_REG_ARRAY(hw, E1000_MTA, i, 0);
1308
1309         /* Zero out the Unicast HASH table */
1310         DEBUGOUT("Zeroing the UTA\n");
1311         for (i = 0; i < mac->uta_reg_count; i++)
1312                 E1000_WRITE_REG_ARRAY(hw, E1000_UTA, i, 0);
1313
1314         /* Setup link and flow control */
1315         ret_val = mac->ops.setup_link(hw);
1316
1317         /*
1318          * Clear all of the statistics registers (clear on read).  It is
1319          * important that we do this after we have tried to establish link
1320          * because the symbol error count will increment wildly if there
1321          * is no link.
1322          */
1323         e1000_clear_hw_cntrs_82575(hw);
1324
1325         return ret_val;
1326 }
1327
1328 /**
1329  *  e1000_setup_copper_link_82575 - Configure copper link settings
1330  *  @hw: pointer to the HW structure
1331  *
1332  *  Configures the link for auto-neg or forced speed and duplex.  Then we check
1333  *  for link, once link is established calls to configure collision distance
1334  *  and flow control are called.
1335  **/
1336 static s32 e1000_setup_copper_link_82575(struct e1000_hw *hw)
1337 {
1338         u32 ctrl;
1339         s32  ret_val;
1340
1341         DEBUGFUNC("e1000_setup_copper_link_82575");
1342
1343         ctrl = E1000_READ_REG(hw, E1000_CTRL);
1344         ctrl |= E1000_CTRL_SLU;
1345         ctrl &= ~(E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
1346         E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
1347
1348         ret_val = e1000_setup_serdes_link_82575(hw);
1349         if (ret_val)
1350                 goto out;
1351
1352         if (e1000_sgmii_active_82575(hw) && !hw->phy.reset_disable) {
1353                 /* allow time for SFP cage time to power up phy */
1354                 msec_delay(300);
1355
1356                 ret_val = hw->phy.ops.reset(hw);
1357                 if (ret_val) {
1358                         DEBUGOUT("Error resetting the PHY.\n");
1359                         goto out;
1360                 }
1361         }
1362         switch (hw->phy.type) {
1363         case e1000_phy_m88:
1364                 if (hw->phy.id == I347AT4_E_PHY_ID ||
1365                     hw->phy.id == M88E1112_E_PHY_ID ||
1366                     hw->phy.id == M88E1340M_E_PHY_ID)
1367                         ret_val = e1000_copper_link_setup_m88_gen2(hw);
1368                 else
1369                         ret_val = e1000_copper_link_setup_m88(hw);
1370                 break;
1371         case e1000_phy_igp_3:
1372                 ret_val = e1000_copper_link_setup_igp(hw);
1373                 break;
1374         case e1000_phy_82580:
1375                 ret_val = e1000_copper_link_setup_82577(hw);
1376                 break;
1377         default:
1378                 ret_val = -E1000_ERR_PHY;
1379                 break;
1380         }
1381
1382         if (ret_val)
1383                 goto out;
1384
1385         ret_val = e1000_setup_copper_link_generic(hw);
1386 out:
1387         return ret_val;
1388 }
1389
1390 /**
1391  *  e1000_setup_serdes_link_82575 - Setup link for serdes
1392  *  @hw: pointer to the HW structure
1393  *
1394  *  Configure the physical coding sub-layer (PCS) link.  The PCS link is
1395  *  used on copper connections where the serialized gigabit media independent
1396  *  interface (sgmii), or serdes fiber is being used.  Configures the link
1397  *  for auto-negotiation or forces speed/duplex.
1398  **/
1399 static s32 e1000_setup_serdes_link_82575(struct e1000_hw *hw)
1400 {
1401         u32 ctrl_ext, ctrl_reg, reg;
1402         bool pcs_autoneg;
1403
1404         DEBUGFUNC("e1000_setup_serdes_link_82575");
1405
1406         if ((hw->phy.media_type != e1000_media_type_internal_serdes) &&
1407             !e1000_sgmii_active_82575(hw))
1408                 return E1000_SUCCESS;
1409
1410         /*
1411          * On the 82575, SerDes loopback mode persists until it is
1412          * explicitly turned off or a power cycle is performed.  A read to
1413          * the register does not indicate its status.  Therefore, we ensure
1414          * loopback mode is disabled during initialization.
1415          */
1416         E1000_WRITE_REG(hw, E1000_SCTL, E1000_SCTL_DISABLE_SERDES_LOOPBACK);
1417
1418         /* power on the sfp cage if present */
1419         ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
1420         ctrl_ext &= ~E1000_CTRL_EXT_SDP3_DATA;
1421         E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext);
1422
1423         ctrl_reg = E1000_READ_REG(hw, E1000_CTRL);
1424         ctrl_reg |= E1000_CTRL_SLU;
1425
1426         /* set both sw defined pins on 82575/82576*/
1427         if (hw->mac.type == e1000_82575 || hw->mac.type == e1000_82576)
1428                 ctrl_reg |= E1000_CTRL_SWDPIN0 | E1000_CTRL_SWDPIN1;
1429
1430         reg = E1000_READ_REG(hw, E1000_PCS_LCTL);
1431
1432         /* default pcs_autoneg to the same setting as mac autoneg */
1433         pcs_autoneg = hw->mac.autoneg;
1434
1435         switch (ctrl_ext & E1000_CTRL_EXT_LINK_MODE_MASK) {
1436         case E1000_CTRL_EXT_LINK_MODE_SGMII:
1437                 /* sgmii mode lets the phy handle forcing speed/duplex */
1438                 pcs_autoneg = TRUE;
1439                 /* autoneg time out should be disabled for SGMII mode */
1440                 reg &= ~(E1000_PCS_LCTL_AN_TIMEOUT);
1441                 break;
1442         case E1000_CTRL_EXT_LINK_MODE_1000BASE_KX:
1443                 /* disable PCS autoneg and support parallel detect only */
1444                 pcs_autoneg = FALSE;
1445                 /* fall through to default case */
1446         default:
1447                 /*
1448                  * non-SGMII modes only supports a speed of 1000/Full for the
1449                  * link so it is best to just force the MAC and let the pcs
1450                  * link either autoneg or be forced to 1000/Full
1451                  */
1452                 ctrl_reg |= E1000_CTRL_SPD_1000 | E1000_CTRL_FRCSPD |
1453                             E1000_CTRL_FD | E1000_CTRL_FRCDPX;
1454
1455                 /* set speed of 1000/Full if speed/duplex is forced */
1456                 reg |= E1000_PCS_LCTL_FSV_1000 | E1000_PCS_LCTL_FDV_FULL;
1457                 break;
1458         }
1459
1460         E1000_WRITE_REG(hw, E1000_CTRL, ctrl_reg);
1461
1462         /*
1463          * New SerDes mode allows for forcing speed or autonegotiating speed
1464          * at 1gb. Autoneg should be default set by most drivers. This is the
1465          * mode that will be compatible with older link partners and switches.
1466          * However, both are supported by the hardware and some drivers/tools.
1467          */
1468         reg &= ~(E1000_PCS_LCTL_AN_ENABLE | E1000_PCS_LCTL_FLV_LINK_UP |
1469                  E1000_PCS_LCTL_FSD | E1000_PCS_LCTL_FORCE_LINK);
1470
1471         /*
1472          * We force flow control to prevent the CTRL register values from being
1473          * overwritten by the autonegotiated flow control values
1474          */
1475         reg |= E1000_PCS_LCTL_FORCE_FCTRL;
1476
1477         if (pcs_autoneg) {
1478                 /* Set PCS register for autoneg */
1479                 reg |= E1000_PCS_LCTL_AN_ENABLE | /* Enable Autoneg */
1480                        E1000_PCS_LCTL_AN_RESTART; /* Restart autoneg */
1481                 DEBUGOUT1("Configuring Autoneg:PCS_LCTL=0x%08X\n", reg);
1482         } else {
1483                 /* Set PCS register for forced link */
1484                 reg |= E1000_PCS_LCTL_FSD;        /* Force Speed */
1485                 DEBUGOUT1("Configuring Forced Link:PCS_LCTL=0x%08X\n", reg);
1486         }
1487
1488         E1000_WRITE_REG(hw, E1000_PCS_LCTL, reg);
1489
1490         if (!e1000_sgmii_active_82575(hw))
1491                 e1000_force_mac_fc_generic(hw);
1492
1493         return E1000_SUCCESS;
1494 }
1495
1496 /**
1497  *  e1000_valid_led_default_82575 - Verify a valid default LED config
1498  *  @hw: pointer to the HW structure
1499  *  @data: pointer to the NVM (EEPROM)
1500  *
1501  *  Read the EEPROM for the current default LED configuration.  If the
1502  *  LED configuration is not valid, set to a valid LED configuration.
1503  **/
1504 static s32 e1000_valid_led_default_82575(struct e1000_hw *hw, u16 *data)
1505 {
1506         s32 ret_val;
1507
1508         DEBUGFUNC("e1000_valid_led_default_82575");
1509
1510         ret_val = hw->nvm.ops.read(hw, NVM_ID_LED_SETTINGS, 1, data);
1511         if (ret_val) {
1512                 DEBUGOUT("NVM Read Error\n");
1513                 goto out;
1514         }
1515
1516         if (*data == ID_LED_RESERVED_0000 || *data == ID_LED_RESERVED_FFFF) {
1517                 switch(hw->phy.media_type) {
1518                 case e1000_media_type_internal_serdes:
1519                         *data = ID_LED_DEFAULT_82575_SERDES;
1520                         break;
1521                 case e1000_media_type_copper:
1522                 default:
1523                         *data = ID_LED_DEFAULT;
1524                         break;
1525                 }
1526         }
1527 out:
1528         return ret_val;
1529 }
1530
1531 /**
1532  *  e1000_sgmii_active_82575 - Return sgmii state
1533  *  @hw: pointer to the HW structure
1534  *
1535  *  82575 silicon has a serialized gigabit media independent interface (sgmii)
1536  *  which can be enabled for use in the embedded applications.  Simply
1537  *  return the current state of the sgmii interface.
1538  **/
1539 static bool e1000_sgmii_active_82575(struct e1000_hw *hw)
1540 {
1541         struct e1000_dev_spec_82575 *dev_spec = &hw->dev_spec._82575;
1542         return dev_spec->sgmii_active;
1543 }
1544
1545 /**
1546  *  e1000_reset_init_script_82575 - Inits HW defaults after reset
1547  *  @hw: pointer to the HW structure
1548  *
1549  *  Inits recommended HW defaults after a reset when there is no EEPROM
1550  *  detected. This is only for the 82575.
1551  **/
1552 static s32 e1000_reset_init_script_82575(struct e1000_hw* hw)
1553 {
1554         DEBUGFUNC("e1000_reset_init_script_82575");
1555
1556         if (hw->mac.type == e1000_82575) {
1557                 DEBUGOUT("Running reset init script for 82575\n");
1558                 /* SerDes configuration via SERDESCTRL */
1559                 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCTL, 0x00, 0x0C);
1560                 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCTL, 0x01, 0x78);
1561                 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCTL, 0x1B, 0x23);
1562                 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCTL, 0x23, 0x15);
1563
1564                 /* CCM configuration via CCMCTL register */
1565                 e1000_write_8bit_ctrl_reg_generic(hw, E1000_CCMCTL, 0x14, 0x00);
1566                 e1000_write_8bit_ctrl_reg_generic(hw, E1000_CCMCTL, 0x10, 0x00);
1567
1568                 /* PCIe lanes configuration */
1569                 e1000_write_8bit_ctrl_reg_generic(hw, E1000_GIOCTL, 0x00, 0xEC);
1570                 e1000_write_8bit_ctrl_reg_generic(hw, E1000_GIOCTL, 0x61, 0xDF);
1571                 e1000_write_8bit_ctrl_reg_generic(hw, E1000_GIOCTL, 0x34, 0x05);
1572                 e1000_write_8bit_ctrl_reg_generic(hw, E1000_GIOCTL, 0x2F, 0x81);
1573
1574                 /* PCIe PLL Configuration */
1575                 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCCTL, 0x02, 0x47);
1576                 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCCTL, 0x14, 0x00);
1577                 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCCTL, 0x10, 0x00);
1578         }
1579
1580         return E1000_SUCCESS;
1581 }
1582
1583 /**
1584  *  e1000_read_mac_addr_82575 - Read device MAC address
1585  *  @hw: pointer to the HW structure
1586  **/
1587 static s32 e1000_read_mac_addr_82575(struct e1000_hw *hw)
1588 {
1589         s32 ret_val = E1000_SUCCESS;
1590
1591         DEBUGFUNC("e1000_read_mac_addr_82575");
1592
1593         /*
1594          * If there's an alternate MAC address place it in RAR0
1595          * so that it will override the Si installed default perm
1596          * address.
1597          */
1598         ret_val = e1000_check_alt_mac_addr_generic(hw);
1599         if (ret_val)
1600                 goto out;
1601
1602         ret_val = e1000_read_mac_addr_generic(hw);
1603
1604 out:
1605         return ret_val;
1606 }
1607
1608 /**
1609  *  e1000_config_collision_dist_82575 - Configure collision distance
1610  *  @hw: pointer to the HW structure
1611  *
1612  *  Configures the collision distance to the default value and is used
1613  *  during link setup.
1614  **/
1615 static void e1000_config_collision_dist_82575(struct e1000_hw *hw)
1616 {
1617         u32 tctl_ext;
1618
1619         DEBUGFUNC("e1000_config_collision_dist_82575");
1620
1621         tctl_ext = E1000_READ_REG(hw, E1000_TCTL_EXT);
1622
1623         tctl_ext &= ~E1000_TCTL_EXT_COLD;
1624         tctl_ext |= E1000_COLLISION_DISTANCE << E1000_TCTL_EXT_COLD_SHIFT;
1625
1626         E1000_WRITE_REG(hw, E1000_TCTL_EXT, tctl_ext);
1627         E1000_WRITE_FLUSH(hw);
1628 }
1629
1630 /**
1631  * e1000_power_down_phy_copper_82575 - Remove link during PHY power down
1632  * @hw: pointer to the HW structure
1633  *
1634  * In the case of a PHY power down to save power, or to turn off link during a
1635  * driver unload, or wake on lan is not enabled, remove the link.
1636  **/
1637 static void e1000_power_down_phy_copper_82575(struct e1000_hw *hw)
1638 {
1639         struct e1000_phy_info *phy = &hw->phy;
1640
1641         if (!(phy->ops.check_reset_block))
1642                 return;
1643
1644         /* If the management interface is not enabled, then power down */
1645         if (!(e1000_enable_mng_pass_thru(hw) || phy->ops.check_reset_block(hw)))
1646                 e1000_power_down_phy_copper(hw);
1647
1648         return;
1649 }
1650
1651 /**
1652  *  e1000_clear_hw_cntrs_82575 - Clear device specific hardware counters
1653  *  @hw: pointer to the HW structure
1654  *
1655  *  Clears the hardware counters by reading the counter registers.
1656  **/
1657 static void e1000_clear_hw_cntrs_82575(struct e1000_hw *hw)
1658 {
1659         DEBUGFUNC("e1000_clear_hw_cntrs_82575");
1660
1661         e1000_clear_hw_cntrs_base_generic(hw);
1662
1663         E1000_READ_REG(hw, E1000_PRC64);
1664         E1000_READ_REG(hw, E1000_PRC127);
1665         E1000_READ_REG(hw, E1000_PRC255);
1666         E1000_READ_REG(hw, E1000_PRC511);
1667         E1000_READ_REG(hw, E1000_PRC1023);
1668         E1000_READ_REG(hw, E1000_PRC1522);
1669         E1000_READ_REG(hw, E1000_PTC64);
1670         E1000_READ_REG(hw, E1000_PTC127);
1671         E1000_READ_REG(hw, E1000_PTC255);
1672         E1000_READ_REG(hw, E1000_PTC511);
1673         E1000_READ_REG(hw, E1000_PTC1023);
1674         E1000_READ_REG(hw, E1000_PTC1522);
1675
1676         E1000_READ_REG(hw, E1000_ALGNERRC);
1677         E1000_READ_REG(hw, E1000_RXERRC);
1678         E1000_READ_REG(hw, E1000_TNCRS);
1679         E1000_READ_REG(hw, E1000_CEXTERR);
1680         E1000_READ_REG(hw, E1000_TSCTC);
1681         E1000_READ_REG(hw, E1000_TSCTFC);
1682
1683         E1000_READ_REG(hw, E1000_MGTPRC);
1684         E1000_READ_REG(hw, E1000_MGTPDC);
1685         E1000_READ_REG(hw, E1000_MGTPTC);
1686
1687         E1000_READ_REG(hw, E1000_IAC);
1688         E1000_READ_REG(hw, E1000_ICRXOC);
1689
1690         E1000_READ_REG(hw, E1000_ICRXPTC);
1691         E1000_READ_REG(hw, E1000_ICRXATC);
1692         E1000_READ_REG(hw, E1000_ICTXPTC);
1693         E1000_READ_REG(hw, E1000_ICTXATC);
1694         E1000_READ_REG(hw, E1000_ICTXQEC);
1695         E1000_READ_REG(hw, E1000_ICTXQMTC);
1696         E1000_READ_REG(hw, E1000_ICRXDMTC);
1697
1698         E1000_READ_REG(hw, E1000_CBTMPC);
1699         E1000_READ_REG(hw, E1000_HTDPMC);
1700         E1000_READ_REG(hw, E1000_CBRMPC);
1701         E1000_READ_REG(hw, E1000_RPTHC);
1702         E1000_READ_REG(hw, E1000_HGPTC);
1703         E1000_READ_REG(hw, E1000_HTCBDPC);
1704         E1000_READ_REG(hw, E1000_HGORCL);
1705         E1000_READ_REG(hw, E1000_HGORCH);
1706         E1000_READ_REG(hw, E1000_HGOTCL);
1707         E1000_READ_REG(hw, E1000_HGOTCH);
1708         E1000_READ_REG(hw, E1000_LENERRS);
1709
1710         /* This register should not be read in copper configurations */
1711         if ((hw->phy.media_type == e1000_media_type_internal_serdes) ||
1712             e1000_sgmii_active_82575(hw))
1713                 E1000_READ_REG(hw, E1000_SCVPC);
1714 }
1715
1716 /**
1717  *  e1000_rx_fifo_flush_82575 - Clean rx fifo after Rx enable
1718  *  @hw: pointer to the HW structure
1719  *
1720  *  After rx enable if managability is enabled then there is likely some
1721  *  bad data at the start of the fifo and possibly in the DMA fifo.  This
1722  *  function clears the fifos and flushes any packets that came in as rx was
1723  *  being enabled.
1724  **/
1725 void e1000_rx_fifo_flush_82575(struct e1000_hw *hw)
1726 {
1727         u32 rctl, rlpml, rxdctl[4], rfctl, temp_rctl, rx_enabled;
1728         int i, ms_wait;
1729
1730         DEBUGFUNC("e1000_rx_fifo_workaround_82575");
1731         if (hw->mac.type != e1000_82575 ||
1732             !(E1000_READ_REG(hw, E1000_MANC) & E1000_MANC_RCV_TCO_EN))
1733                 return;
1734
1735         /* Disable all Rx queues */
1736         for (i = 0; i < 4; i++) {
1737                 rxdctl[i] = E1000_READ_REG(hw, E1000_RXDCTL(i));
1738                 E1000_WRITE_REG(hw, E1000_RXDCTL(i),
1739                                 rxdctl[i] & ~E1000_RXDCTL_QUEUE_ENABLE);
1740         }
1741         /* Poll all queues to verify they have shut down */
1742         for (ms_wait = 0; ms_wait < 10; ms_wait++) {
1743                 msec_delay(1);
1744                 rx_enabled = 0;
1745                 for (i = 0; i < 4; i++)
1746                         rx_enabled |= E1000_READ_REG(hw, E1000_RXDCTL(i));
1747                 if (!(rx_enabled & E1000_RXDCTL_QUEUE_ENABLE))
1748                         break;
1749         }
1750
1751         if (ms_wait == 10)
1752                 DEBUGOUT("Queue disable timed out after 10ms\n");
1753
1754         /* Clear RLPML, RCTL.SBP, RFCTL.LEF, and set RCTL.LPE so that all
1755          * incoming packets are rejected.  Set enable and wait 2ms so that
1756          * any packet that was coming in as RCTL.EN was set is flushed
1757          */
1758         rfctl = E1000_READ_REG(hw, E1000_RFCTL);
1759         E1000_WRITE_REG(hw, E1000_RFCTL, rfctl & ~E1000_RFCTL_LEF);
1760
1761         rlpml = E1000_READ_REG(hw, E1000_RLPML);
1762         E1000_WRITE_REG(hw, E1000_RLPML, 0);
1763
1764         rctl = E1000_READ_REG(hw, E1000_RCTL);
1765         temp_rctl = rctl & ~(E1000_RCTL_EN | E1000_RCTL_SBP);
1766         temp_rctl |= E1000_RCTL_LPE;
1767
1768         E1000_WRITE_REG(hw, E1000_RCTL, temp_rctl);
1769         E1000_WRITE_REG(hw, E1000_RCTL, temp_rctl | E1000_RCTL_EN);
1770         E1000_WRITE_FLUSH(hw);
1771         msec_delay(2);
1772
1773         /* Enable Rx queues that were previously enabled and restore our
1774          * previous state
1775          */
1776         for (i = 0; i < 4; i++)
1777                 E1000_WRITE_REG(hw, E1000_RXDCTL(i), rxdctl[i]);
1778         E1000_WRITE_REG(hw, E1000_RCTL, rctl);
1779         E1000_WRITE_FLUSH(hw);
1780
1781         E1000_WRITE_REG(hw, E1000_RLPML, rlpml);
1782         E1000_WRITE_REG(hw, E1000_RFCTL, rfctl);
1783
1784         /* Flush receive errors generated by workaround */
1785         E1000_READ_REG(hw, E1000_ROC);
1786         E1000_READ_REG(hw, E1000_RNBC);
1787         E1000_READ_REG(hw, E1000_MPC);
1788 }
1789
1790 /**
1791  *  e1000_set_pcie_completion_timeout - set pci-e completion timeout
1792  *  @hw: pointer to the HW structure
1793  *
1794  *  The defaults for 82575 and 82576 should be in the range of 50us to 50ms,
1795  *  however the hardware default for these parts is 500us to 1ms which is less
1796  *  than the 10ms recommended by the pci-e spec.  To address this we need to
1797  *  increase the value to either 10ms to 200ms for capability version 1 config,
1798  *  or 16ms to 55ms for version 2.
1799  **/
1800 static s32 e1000_set_pcie_completion_timeout(struct e1000_hw *hw)
1801 {
1802         u32 gcr = E1000_READ_REG(hw, E1000_GCR);
1803         s32 ret_val = E1000_SUCCESS;
1804         u16 pcie_devctl2;
1805
1806         /* only take action if timeout value is defaulted to 0 */
1807         if (gcr & E1000_GCR_CMPL_TMOUT_MASK)
1808                 goto out;
1809
1810         /*
1811          * if capababilities version is type 1 we can write the
1812          * timeout of 10ms to 200ms through the GCR register
1813          */
1814         if (!(gcr & E1000_GCR_CAP_VER2)) {
1815                 gcr |= E1000_GCR_CMPL_TMOUT_10ms;
1816                 goto out;
1817         }
1818
1819         /*
1820          * for version 2 capabilities we need to write the config space
1821          * directly in order to set the completion timeout value for
1822          * 16ms to 55ms
1823          */
1824         ret_val = e1000_read_pcie_cap_reg(hw, PCIE_DEVICE_CONTROL2,
1825                                           &pcie_devctl2);
1826         if (ret_val)
1827                 goto out;
1828
1829         pcie_devctl2 |= PCIE_DEVICE_CONTROL2_16ms;
1830
1831         ret_val = e1000_write_pcie_cap_reg(hw, PCIE_DEVICE_CONTROL2,
1832                                            &pcie_devctl2);
1833 out:
1834         /* disable completion timeout resend */
1835         gcr &= ~E1000_GCR_CMPL_TMOUT_RESEND;
1836
1837         E1000_WRITE_REG(hw, E1000_GCR, gcr);
1838         return ret_val;
1839 }
1840
1841 /**
1842  *  e1000_vmdq_set_anti_spoofing_pf - enable or disable anti-spoofing
1843  *  @hw: pointer to the hardware struct
1844  *  @enable: state to enter, either enabled or disabled
1845  *  @pf: Physical Function pool - do not set anti-spoofing for the PF
1846  *
1847  *  enables/disables L2 switch anti-spoofing functionality.
1848  **/
1849 void e1000_vmdq_set_anti_spoofing_pf(struct e1000_hw *hw, bool enable, int pf)
1850 {
1851         u32 dtxswc;
1852
1853         switch (hw->mac.type) {
1854         case e1000_82576:
1855         case e1000_i350:
1856                 dtxswc = E1000_READ_REG(hw, E1000_DTXSWC);
1857                 if (enable) {
1858                         dtxswc |= (E1000_DTXSWC_MAC_SPOOF_MASK |
1859                                    E1000_DTXSWC_VLAN_SPOOF_MASK);
1860                         /* The PF can spoof - it has to in order to
1861                          * support emulation mode NICs */
1862                         dtxswc ^= (1 << pf | 1 << (pf + MAX_NUM_VFS));
1863                 } else {
1864                         dtxswc &= ~(E1000_DTXSWC_MAC_SPOOF_MASK |
1865                                     E1000_DTXSWC_VLAN_SPOOF_MASK);
1866                 }
1867                 E1000_WRITE_REG(hw, E1000_DTXSWC, dtxswc);
1868                 break;
1869         default:
1870                 break;
1871         }
1872 }
1873
1874 /**
1875  *  e1000_vmdq_set_loopback_pf - enable or disable vmdq loopback
1876  *  @hw: pointer to the hardware struct
1877  *  @enable: state to enter, either enabled or disabled
1878  *
1879  *  enables/disables L2 switch loopback functionality.
1880  **/
1881 void e1000_vmdq_set_loopback_pf(struct e1000_hw *hw, bool enable)
1882 {
1883         u32 dtxswc;
1884
1885         switch (hw->mac.type) {
1886         case e1000_82576:
1887                 dtxswc = E1000_READ_REG(hw, E1000_DTXSWC);
1888                 if (enable)
1889                         dtxswc |= E1000_DTXSWC_VMDQ_LOOPBACK_EN;
1890                 else
1891                         dtxswc &= ~E1000_DTXSWC_VMDQ_LOOPBACK_EN;
1892                 E1000_WRITE_REG(hw, E1000_DTXSWC, dtxswc);
1893                 break;
1894         case e1000_i350:
1895                 dtxswc = E1000_READ_REG(hw, E1000_TXSWC);
1896                 if (enable)
1897                         dtxswc |= E1000_DTXSWC_VMDQ_LOOPBACK_EN;
1898                 else
1899                         dtxswc &= ~E1000_DTXSWC_VMDQ_LOOPBACK_EN;
1900                 E1000_WRITE_REG(hw, E1000_TXSWC, dtxswc);
1901                 break;
1902         default:
1903                 /* Currently no other hardware supports loopback */
1904                 break;
1905         }
1906
1907
1908 }
1909
1910 /**
1911  *  e1000_vmdq_set_replication_pf - enable or disable vmdq replication
1912  *  @hw: pointer to the hardware struct
1913  *  @enable: state to enter, either enabled or disabled
1914  *
1915  *  enables/disables replication of packets across multiple pools.
1916  **/
1917 void e1000_vmdq_set_replication_pf(struct e1000_hw *hw, bool enable)
1918 {
1919         u32 vt_ctl = E1000_READ_REG(hw, E1000_VT_CTL);
1920
1921         if (enable)
1922                 vt_ctl |= E1000_VT_CTL_VM_REPL_EN;
1923         else
1924                 vt_ctl &= ~E1000_VT_CTL_VM_REPL_EN;
1925
1926         E1000_WRITE_REG(hw, E1000_VT_CTL, vt_ctl);
1927 }
1928
1929 /**
1930  *  e1000_read_phy_reg_82580 - Read 82580 MDI control register
1931  *  @hw: pointer to the HW structure
1932  *  @offset: register offset to be read
1933  *  @data: pointer to the read data
1934  *
1935  *  Reads the MDI control register in the PHY at offset and stores the
1936  *  information read to data.
1937  **/
1938 static s32 e1000_read_phy_reg_82580(struct e1000_hw *hw, u32 offset, u16 *data)
1939 {
1940         s32 ret_val;
1941
1942         DEBUGFUNC("e1000_read_phy_reg_82580");
1943
1944         ret_val = hw->phy.ops.acquire(hw);
1945         if (ret_val)
1946                 goto out;
1947
1948         ret_val = e1000_read_phy_reg_mdic(hw, offset, data);
1949
1950         hw->phy.ops.release(hw);
1951
1952 out:
1953         return ret_val;
1954 }
1955
1956 /**
1957  *  e1000_write_phy_reg_82580 - Write 82580 MDI control register
1958  *  @hw: pointer to the HW structure
1959  *  @offset: register offset to write to
1960  *  @data: data to write to register at offset
1961  *
1962  *  Writes data to MDI control register in the PHY at offset.
1963  **/
1964 static s32 e1000_write_phy_reg_82580(struct e1000_hw *hw, u32 offset, u16 data)
1965 {
1966         s32 ret_val;
1967
1968         DEBUGFUNC("e1000_write_phy_reg_82580");
1969
1970         ret_val = hw->phy.ops.acquire(hw);
1971         if (ret_val)
1972                 goto out;
1973
1974         ret_val = e1000_write_phy_reg_mdic(hw, offset, data);
1975
1976         hw->phy.ops.release(hw);
1977
1978 out:
1979         return ret_val;
1980 }
1981
1982 /**
1983  *  e1000_reset_mdicnfg_82580 - Reset MDICNFG destination and com_mdio bits
1984  *  @hw: pointer to the HW structure
1985  *
1986  *  This resets the the MDICNFG.Destination and MDICNFG.Com_MDIO bits based on
1987  *  the values found in the EEPROM.  This addresses an issue in which these
1988  *  bits are not restored from EEPROM after reset.
1989  **/
1990 static s32 e1000_reset_mdicnfg_82580(struct e1000_hw *hw)
1991 {
1992         s32 ret_val = E1000_SUCCESS;
1993         u32 mdicnfg;
1994         u16 nvm_data = 0;
1995
1996         DEBUGFUNC("e1000_reset_mdicnfg_82580");
1997
1998         if (hw->mac.type != e1000_82580)
1999                 goto out;
2000         if (!e1000_sgmii_active_82575(hw))
2001                 goto out;
2002
2003         ret_val = hw->nvm.ops.read(hw, NVM_INIT_CONTROL3_PORT_A +
2004                                    NVM_82580_LAN_FUNC_OFFSET(hw->bus.func), 1,
2005                                    &nvm_data);
2006         if (ret_val) {
2007                 DEBUGOUT("NVM Read Error\n");
2008                 goto out;
2009         }
2010
2011         mdicnfg = E1000_READ_REG(hw, E1000_MDICNFG);
2012         if (nvm_data & NVM_WORD24_EXT_MDIO)
2013                 mdicnfg |= E1000_MDICNFG_EXT_MDIO;
2014         if (nvm_data & NVM_WORD24_COM_MDIO)
2015                 mdicnfg |= E1000_MDICNFG_COM_MDIO;
2016         E1000_WRITE_REG(hw, E1000_MDICNFG, mdicnfg);
2017 out:
2018         return ret_val;
2019 }
2020
2021 /**
2022  *  e1000_reset_hw_82580 - Reset hardware
2023  *  @hw: pointer to the HW structure
2024  *
2025  *  This resets function or entire device (all ports, etc.)
2026  *  to a known state.
2027  **/
2028 static s32 e1000_reset_hw_82580(struct e1000_hw *hw)
2029 {
2030         s32 ret_val = E1000_SUCCESS;
2031         /* BH SW mailbox bit in SW_FW_SYNC */
2032         u16 swmbsw_mask = E1000_SW_SYNCH_MB;
2033         u32 ctrl;
2034         bool global_device_reset = hw->dev_spec._82575.global_device_reset;
2035
2036         DEBUGFUNC("e1000_reset_hw_82580");
2037
2038         hw->dev_spec._82575.global_device_reset = FALSE;
2039
2040         /* Get current control state. */
2041         ctrl = E1000_READ_REG(hw, E1000_CTRL);
2042
2043         /*
2044          * Prevent the PCI-E bus from sticking if there is no TLP connection
2045          * on the last TLP read/write transaction when MAC is reset.
2046          */
2047         ret_val = e1000_disable_pcie_master_generic(hw);
2048         if (ret_val)
2049                 DEBUGOUT("PCI-E Master disable polling has failed.\n");
2050
2051         DEBUGOUT("Masking off all interrupts\n");
2052         E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
2053         E1000_WRITE_REG(hw, E1000_RCTL, 0);
2054         E1000_WRITE_REG(hw, E1000_TCTL, E1000_TCTL_PSP);
2055         E1000_WRITE_FLUSH(hw);
2056
2057         msec_delay(10);
2058
2059         /* Determine whether or not a global dev reset is requested */
2060         if (global_device_reset &&
2061                 e1000_acquire_swfw_sync_82575(hw, swmbsw_mask))
2062                         global_device_reset = FALSE;
2063
2064         if (global_device_reset &&
2065                 !(E1000_READ_REG(hw, E1000_STATUS) & E1000_STAT_DEV_RST_SET))
2066                 ctrl |= E1000_CTRL_DEV_RST;
2067         else
2068                 ctrl |= E1000_CTRL_RST;
2069
2070         E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
2071
2072         /* Add delay to insure DEV_RST has time to complete */
2073         if (global_device_reset)
2074                 msec_delay(5);
2075
2076         ret_val = e1000_get_auto_rd_done_generic(hw);
2077         if (ret_val) {
2078                 /*
2079                  * When auto config read does not complete, do not
2080                  * return with an error. This can happen in situations
2081                  * where there is no eeprom and prevents getting link.
2082                  */
2083                 DEBUGOUT("Auto Read Done did not complete\n");
2084         }
2085
2086         /* If EEPROM is not present, run manual init scripts */
2087         if ((E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_PRES) == 0)
2088                 e1000_reset_init_script_82575(hw);
2089
2090         /* clear global device reset status bit */
2091         E1000_WRITE_REG(hw, E1000_STATUS, E1000_STAT_DEV_RST_SET);
2092
2093         /* Clear any pending interrupt events. */
2094         E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
2095         E1000_READ_REG(hw, E1000_ICR);
2096
2097         ret_val = e1000_reset_mdicnfg_82580(hw);
2098         if (ret_val)
2099                 DEBUGOUT("Could not reset MDICNFG based on EEPROM\n");
2100
2101         /* Install any alternate MAC address into RAR0 */
2102         ret_val = e1000_check_alt_mac_addr_generic(hw);
2103
2104         /* Release semaphore */
2105         if (global_device_reset)
2106                 e1000_release_swfw_sync_82575(hw, swmbsw_mask);
2107
2108         return ret_val;
2109 }
2110
2111 /**
2112  *  e1000_rxpbs_adjust_82580 - adjust RXPBS value to reflect actual Rx PBA size
2113  *  @data: data received by reading RXPBS register
2114  *
2115  *  The 82580 uses a table based approach for packet buffer allocation sizes.
2116  *  This function converts the retrieved value into the correct table value
2117  *     0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7
2118  *  0x0 36  72 144   1   2   4   8  16
2119  *  0x8 35  70 140 rsv rsv rsv rsv rsv
2120  */
2121 u16 e1000_rxpbs_adjust_82580(u32 data)
2122 {
2123         u16 ret_val = 0;
2124
2125         if (data < E1000_82580_RXPBS_TABLE_SIZE)
2126                 ret_val = e1000_82580_rxpbs_table[data];
2127
2128         return ret_val;
2129 }
2130
2131 /**
2132  *  e1000_validate_nvm_checksum_with_offset - Validate EEPROM
2133  *  checksum
2134  *  @hw: pointer to the HW structure
2135  *  @offset: offset in words of the checksum protected region
2136  *
2137  *  Calculates the EEPROM checksum by reading/adding each word of the EEPROM
2138  *  and then verifies that the sum of the EEPROM is equal to 0xBABA.
2139  **/
2140 s32 e1000_validate_nvm_checksum_with_offset(struct e1000_hw *hw, u16 offset)
2141 {
2142         s32 ret_val = E1000_SUCCESS;
2143         u16 checksum = 0;
2144         u16 i, nvm_data;
2145
2146         DEBUGFUNC("e1000_validate_nvm_checksum_with_offset");
2147
2148         for (i = offset; i < ((NVM_CHECKSUM_REG + offset) + 1); i++) {
2149                 ret_val = hw->nvm.ops.read(hw, i, 1, &nvm_data);
2150                 if (ret_val) {
2151                         DEBUGOUT("NVM Read Error\n");
2152                         goto out;
2153                 }
2154                 checksum += nvm_data;
2155         }
2156
2157         if (checksum != (u16) NVM_SUM) {
2158                 DEBUGOUT("NVM Checksum Invalid\n");
2159                 ret_val = -E1000_ERR_NVM;
2160                 goto out;
2161         }
2162
2163 out:
2164         return ret_val;
2165 }
2166
2167 /**
2168  *  e1000_update_nvm_checksum_with_offset - Update EEPROM
2169  *  checksum
2170  *  @hw: pointer to the HW structure
2171  *  @offset: offset in words of the checksum protected region
2172  *
2173  *  Updates the EEPROM checksum by reading/adding each word of the EEPROM
2174  *  up to the checksum.  Then calculates the EEPROM checksum and writes the
2175  *  value to the EEPROM.
2176  **/
2177 s32 e1000_update_nvm_checksum_with_offset(struct e1000_hw *hw, u16 offset)
2178 {
2179         s32 ret_val;
2180         u16 checksum = 0;
2181         u16 i, nvm_data;
2182
2183         DEBUGFUNC("e1000_update_nvm_checksum_with_offset");
2184
2185         for (i = offset; i < (NVM_CHECKSUM_REG + offset); i++) {
2186                 ret_val = hw->nvm.ops.read(hw, i, 1, &nvm_data);
2187                 if (ret_val) {
2188                         DEBUGOUT("NVM Read Error while updating checksum.\n");
2189                         goto out;
2190                 }
2191                 checksum += nvm_data;
2192         }
2193         checksum = (u16) NVM_SUM - checksum;
2194         ret_val = hw->nvm.ops.write(hw, (NVM_CHECKSUM_REG + offset), 1,
2195                                 &checksum);
2196         if (ret_val)
2197                 DEBUGOUT("NVM Write Error while updating checksum.\n");
2198
2199 out:
2200         return ret_val;
2201 }
2202
2203 /**
2204  *  e1000_validate_nvm_checksum_82580 - Validate EEPROM checksum
2205  *  @hw: pointer to the HW structure
2206  *
2207  *  Calculates the EEPROM section checksum by reading/adding each word of
2208  *  the EEPROM and then verifies that the sum of the EEPROM is
2209  *  equal to 0xBABA.
2210  **/
2211 static s32 e1000_validate_nvm_checksum_82580(struct e1000_hw *hw)
2212 {
2213         s32 ret_val = E1000_SUCCESS;
2214         u16 eeprom_regions_count = 1;
2215         u16 j, nvm_data;
2216         u16 nvm_offset;
2217
2218         DEBUGFUNC("e1000_validate_nvm_checksum_82580");
2219
2220         ret_val = hw->nvm.ops.read(hw, NVM_COMPATIBILITY_REG_3, 1, &nvm_data);
2221         if (ret_val) {
2222                 DEBUGOUT("NVM Read Error\n");
2223                 goto out;
2224         }
2225
2226         if (nvm_data & NVM_COMPATIBILITY_BIT_MASK) {
2227                 /* if chekcsums compatibility bit is set validate checksums
2228                  * for all 4 ports. */
2229                 eeprom_regions_count = 4;
2230         }
2231
2232         for (j = 0; j < eeprom_regions_count; j++) {
2233                 nvm_offset = NVM_82580_LAN_FUNC_OFFSET(j);
2234                 ret_val = e1000_validate_nvm_checksum_with_offset(hw,
2235                                                                 nvm_offset);
2236                 if (ret_val != E1000_SUCCESS)
2237                         goto out;
2238         }
2239
2240 out:
2241         return ret_val;
2242 }
2243
2244 /**
2245  *  e1000_update_nvm_checksum_82580 - Update EEPROM checksum
2246  *  @hw: pointer to the HW structure
2247  *
2248  *  Updates the EEPROM section checksums for all 4 ports by reading/adding
2249  *  each word of the EEPROM up to the checksum.  Then calculates the EEPROM
2250  *  checksum and writes the value to the EEPROM.
2251  **/
2252 static s32 e1000_update_nvm_checksum_82580(struct e1000_hw *hw)
2253 {
2254         s32 ret_val;
2255         u16 j, nvm_data;
2256         u16 nvm_offset;
2257
2258         DEBUGFUNC("e1000_update_nvm_checksum_82580");
2259
2260         ret_val = hw->nvm.ops.read(hw, NVM_COMPATIBILITY_REG_3, 1, &nvm_data);
2261         if (ret_val) {
2262                 DEBUGOUT("NVM Read Error while updating checksum"
2263                         " compatibility bit.\n");
2264                 goto out;
2265         }
2266
2267         if ((nvm_data & NVM_COMPATIBILITY_BIT_MASK) == 0) {
2268                 /* set compatibility bit to validate checksums appropriately */
2269                 nvm_data = nvm_data | NVM_COMPATIBILITY_BIT_MASK;
2270                 ret_val = hw->nvm.ops.write(hw, NVM_COMPATIBILITY_REG_3, 1,
2271                                         &nvm_data);
2272                 if (ret_val) {
2273                         DEBUGOUT("NVM Write Error while updating checksum"
2274                                 " compatibility bit.\n");
2275                         goto out;
2276                 }
2277         }
2278
2279         for (j = 0; j < 4; j++) {
2280                 nvm_offset = NVM_82580_LAN_FUNC_OFFSET(j);
2281                 ret_val = e1000_update_nvm_checksum_with_offset(hw, nvm_offset);
2282                 if (ret_val) {
2283                         goto out;
2284                 }
2285         }
2286
2287 out:
2288         return ret_val;
2289 }
2290
2291 /**
2292  *  e1000_validate_nvm_checksum_i350 - Validate EEPROM checksum
2293  *  @hw: pointer to the HW structure
2294  *
2295  *  Calculates the EEPROM section checksum by reading/adding each word of
2296  *  the EEPROM and then verifies that the sum of the EEPROM is
2297  *  equal to 0xBABA.
2298  **/
2299 static s32 e1000_validate_nvm_checksum_i350(struct e1000_hw *hw)
2300 {
2301         s32 ret_val = E1000_SUCCESS;
2302         u16 j;
2303         u16 nvm_offset;
2304
2305         DEBUGFUNC("e1000_validate_nvm_checksum_i350");
2306
2307         for (j = 0; j < 4; j++) {
2308                 nvm_offset = NVM_82580_LAN_FUNC_OFFSET(j);
2309                 ret_val = e1000_validate_nvm_checksum_with_offset(hw,
2310                                                                 nvm_offset);
2311                 if (ret_val != E1000_SUCCESS)
2312                         goto out;
2313         }
2314
2315 out:
2316         return ret_val;
2317 }
2318
2319 /**
2320  *  e1000_update_nvm_checksum_i350 - Update EEPROM checksum
2321  *  @hw: pointer to the HW structure
2322  *
2323  *  Updates the EEPROM section checksums for all 4 ports by reading/adding
2324  *  each word of the EEPROM up to the checksum.  Then calculates the EEPROM
2325  *  checksum and writes the value to the EEPROM.
2326  **/
2327 static s32 e1000_update_nvm_checksum_i350(struct e1000_hw *hw)
2328 {
2329         s32 ret_val = E1000_SUCCESS;
2330         u16 j;
2331         u16 nvm_offset;
2332
2333         DEBUGFUNC("e1000_update_nvm_checksum_i350");
2334
2335         for (j = 0; j < 4; j++) {
2336                 nvm_offset = NVM_82580_LAN_FUNC_OFFSET(j);
2337                 ret_val = e1000_update_nvm_checksum_with_offset(hw, nvm_offset);
2338                 if (ret_val != E1000_SUCCESS)
2339                         goto out;
2340         }
2341
2342 out:
2343         return ret_val;
2344 }
2345
2346 /**
2347  *  e1000_set_eee_i350 - Enable/disable EEE support
2348  *  @hw: pointer to the HW structure
2349  *
2350  *  Enable/disable EEE based on setting in dev_spec structure.
2351  *
2352  **/
2353 s32 e1000_set_eee_i350(struct e1000_hw *hw)
2354 {
2355         s32 ret_val = E1000_SUCCESS;
2356         u32 ipcnfg, eeer, ctrl_ext;
2357
2358         DEBUGFUNC("e1000_set_eee_i350");
2359
2360         ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
2361         if ((hw->mac.type != e1000_i350) ||
2362             (ctrl_ext & E1000_CTRL_EXT_LINK_MODE_MASK))
2363                 goto out;
2364         ipcnfg = E1000_READ_REG(hw, E1000_IPCNFG);
2365         eeer = E1000_READ_REG(hw, E1000_EEER);
2366
2367         /* enable or disable per user setting */
2368         if (!(hw->dev_spec._82575.eee_disable)) {
2369                 ipcnfg |= (E1000_IPCNFG_EEE_1G_AN |
2370                            E1000_IPCNFG_EEE_100M_AN);
2371                 eeer |= (E1000_EEER_TX_LPI_EN |
2372                          E1000_EEER_RX_LPI_EN |
2373                          E1000_EEER_LPI_FC);
2374
2375         } else {
2376                 ipcnfg &= ~(E1000_IPCNFG_EEE_1G_AN |
2377                             E1000_IPCNFG_EEE_100M_AN);
2378                 eeer &= ~(E1000_EEER_TX_LPI_EN |
2379                           E1000_EEER_RX_LPI_EN |
2380                           E1000_EEER_LPI_FC);
2381         }
2382         E1000_WRITE_REG(hw, E1000_IPCNFG, ipcnfg);
2383         E1000_WRITE_REG(hw, E1000_EEER, eeer);
2384                         E1000_READ_REG(hw, E1000_IPCNFG);
2385                         E1000_READ_REG(hw, E1000_EEER);
2386 out:
2387
2388         return ret_val;
2389 }