]> CyberLeo.Net >> Repos - FreeBSD/releng/10.2.git/blob - sys/dev/e1000/e1000_82571.c
- Copy stable/10@285827 to releng/10.2 in preparation for 10.2-RC1
[FreeBSD/releng/10.2.git] / sys / dev / e1000 / e1000_82571.c
1 /******************************************************************************
2
3   Copyright (c) 2001-2014, Intel Corporation 
4   All rights reserved.
5   
6   Redistribution and use in source and binary forms, with or without 
7   modification, are permitted provided that the following conditions are met:
8   
9    1. Redistributions of source code must retain the above copyright notice, 
10       this list of conditions and the following disclaimer.
11   
12    2. Redistributions in binary form must reproduce the above copyright 
13       notice, this list of conditions and the following disclaimer in the 
14       documentation and/or other materials provided with the distribution.
15   
16    3. Neither the name of the Intel Corporation nor the names of its 
17       contributors may be used to endorse or promote products derived from 
18       this software without specific prior written permission.
19   
20   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
22   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
23   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
24   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
25   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
26   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
27   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
28   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
29   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30   POSSIBILITY OF SUCH DAMAGE.
31
32 ******************************************************************************/
33 /*$FreeBSD$*/
34
35 /* 82571EB Gigabit Ethernet Controller
36  * 82571EB Gigabit Ethernet Controller (Copper)
37  * 82571EB Gigabit Ethernet Controller (Fiber)
38  * 82571EB Dual Port Gigabit Mezzanine Adapter
39  * 82571EB Quad Port Gigabit Mezzanine Adapter
40  * 82571PT Gigabit PT Quad Port Server ExpressModule
41  * 82572EI Gigabit Ethernet Controller (Copper)
42  * 82572EI Gigabit Ethernet Controller (Fiber)
43  * 82572EI Gigabit Ethernet Controller
44  * 82573V Gigabit Ethernet Controller (Copper)
45  * 82573E Gigabit Ethernet Controller (Copper)
46  * 82573L Gigabit Ethernet Controller
47  * 82574L Gigabit Network Connection
48  * 82583V Gigabit Network Connection
49  */
50
51 #include "e1000_api.h"
52
53 static s32  e1000_acquire_nvm_82571(struct e1000_hw *hw);
54 static void e1000_release_nvm_82571(struct e1000_hw *hw);
55 static s32  e1000_write_nvm_82571(struct e1000_hw *hw, u16 offset,
56                                   u16 words, u16 *data);
57 static s32  e1000_update_nvm_checksum_82571(struct e1000_hw *hw);
58 static s32  e1000_validate_nvm_checksum_82571(struct e1000_hw *hw);
59 static s32  e1000_get_cfg_done_82571(struct e1000_hw *hw);
60 static s32  e1000_set_d0_lplu_state_82571(struct e1000_hw *hw,
61                                           bool active);
62 static s32  e1000_reset_hw_82571(struct e1000_hw *hw);
63 static s32  e1000_init_hw_82571(struct e1000_hw *hw);
64 static void e1000_clear_vfta_82571(struct e1000_hw *hw);
65 static bool e1000_check_mng_mode_82574(struct e1000_hw *hw);
66 static s32 e1000_led_on_82574(struct e1000_hw *hw);
67 static s32  e1000_setup_link_82571(struct e1000_hw *hw);
68 static s32  e1000_setup_copper_link_82571(struct e1000_hw *hw);
69 static s32  e1000_check_for_serdes_link_82571(struct e1000_hw *hw);
70 static s32  e1000_setup_fiber_serdes_link_82571(struct e1000_hw *hw);
71 static s32  e1000_valid_led_default_82571(struct e1000_hw *hw, u16 *data);
72 static void e1000_clear_hw_cntrs_82571(struct e1000_hw *hw);
73 static s32  e1000_get_hw_semaphore_82571(struct e1000_hw *hw);
74 static s32  e1000_fix_nvm_checksum_82571(struct e1000_hw *hw);
75 static s32  e1000_get_phy_id_82571(struct e1000_hw *hw);
76 static void e1000_put_hw_semaphore_82571(struct e1000_hw *hw);
77 static void e1000_put_hw_semaphore_82573(struct e1000_hw *hw);
78 static s32  e1000_get_hw_semaphore_82574(struct e1000_hw *hw);
79 static void e1000_put_hw_semaphore_82574(struct e1000_hw *hw);
80 static s32  e1000_set_d0_lplu_state_82574(struct e1000_hw *hw,
81                                           bool active);
82 static s32  e1000_set_d3_lplu_state_82574(struct e1000_hw *hw,
83                                           bool active);
84 static void e1000_initialize_hw_bits_82571(struct e1000_hw *hw);
85 static s32  e1000_write_nvm_eewr_82571(struct e1000_hw *hw, u16 offset,
86                                        u16 words, u16 *data);
87 static s32  e1000_read_mac_addr_82571(struct e1000_hw *hw);
88 static void e1000_power_down_phy_copper_82571(struct e1000_hw *hw);
89
90 /**
91  *  e1000_init_phy_params_82571 - Init PHY func ptrs.
92  *  @hw: pointer to the HW structure
93  **/
94 static s32 e1000_init_phy_params_82571(struct e1000_hw *hw)
95 {
96         struct e1000_phy_info *phy = &hw->phy;
97         s32 ret_val;
98
99         DEBUGFUNC("e1000_init_phy_params_82571");
100
101         if (hw->phy.media_type != e1000_media_type_copper) {
102                 phy->type = e1000_phy_none;
103                 return E1000_SUCCESS;
104         }
105
106         phy->addr                       = 1;
107         phy->autoneg_mask               = AUTONEG_ADVERTISE_SPEED_DEFAULT;
108         phy->reset_delay_us             = 100;
109
110         phy->ops.check_reset_block      = e1000_check_reset_block_generic;
111         phy->ops.reset                  = e1000_phy_hw_reset_generic;
112         phy->ops.set_d0_lplu_state      = e1000_set_d0_lplu_state_82571;
113         phy->ops.set_d3_lplu_state      = e1000_set_d3_lplu_state_generic;
114         phy->ops.power_up               = e1000_power_up_phy_copper;
115         phy->ops.power_down             = e1000_power_down_phy_copper_82571;
116
117         switch (hw->mac.type) {
118         case e1000_82571:
119         case e1000_82572:
120                 phy->type               = e1000_phy_igp_2;
121                 phy->ops.get_cfg_done   = e1000_get_cfg_done_82571;
122                 phy->ops.get_info       = e1000_get_phy_info_igp;
123                 phy->ops.check_polarity = e1000_check_polarity_igp;
124                 phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_igp;
125                 phy->ops.get_cable_length = e1000_get_cable_length_igp_2;
126                 phy->ops.read_reg       = e1000_read_phy_reg_igp;
127                 phy->ops.write_reg      = e1000_write_phy_reg_igp;
128                 phy->ops.acquire        = e1000_get_hw_semaphore_82571;
129                 phy->ops.release        = e1000_put_hw_semaphore_82571;
130                 break;
131         case e1000_82573:
132                 phy->type               = e1000_phy_m88;
133                 phy->ops.get_cfg_done   = e1000_get_cfg_done_generic;
134                 phy->ops.get_info       = e1000_get_phy_info_m88;
135                 phy->ops.check_polarity = e1000_check_polarity_m88;
136                 phy->ops.commit         = e1000_phy_sw_reset_generic;
137                 phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_m88;
138                 phy->ops.get_cable_length = e1000_get_cable_length_m88;
139                 phy->ops.read_reg       = e1000_read_phy_reg_m88;
140                 phy->ops.write_reg      = e1000_write_phy_reg_m88;
141                 phy->ops.acquire        = e1000_get_hw_semaphore_82571;
142                 phy->ops.release        = e1000_put_hw_semaphore_82571;
143                 break;
144         case e1000_82574:
145         case e1000_82583:
146                 E1000_MUTEX_INIT(&hw->dev_spec._82571.swflag_mutex);
147
148                 phy->type               = e1000_phy_bm;
149                 phy->ops.get_cfg_done   = e1000_get_cfg_done_generic;
150                 phy->ops.get_info       = e1000_get_phy_info_m88;
151                 phy->ops.check_polarity = e1000_check_polarity_m88;
152                 phy->ops.commit         = e1000_phy_sw_reset_generic;
153                 phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_m88;
154                 phy->ops.get_cable_length = e1000_get_cable_length_m88;
155                 phy->ops.read_reg       = e1000_read_phy_reg_bm2;
156                 phy->ops.write_reg      = e1000_write_phy_reg_bm2;
157                 phy->ops.acquire        = e1000_get_hw_semaphore_82574;
158                 phy->ops.release        = e1000_put_hw_semaphore_82574;
159                 phy->ops.set_d0_lplu_state = e1000_set_d0_lplu_state_82574;
160                 phy->ops.set_d3_lplu_state = e1000_set_d3_lplu_state_82574;
161                 break;
162         default:
163                 return -E1000_ERR_PHY;
164                 break;
165         }
166
167         /* This can only be done after all function pointers are setup. */
168         ret_val = e1000_get_phy_id_82571(hw);
169         if (ret_val) {
170                 DEBUGOUT("Error getting PHY ID\n");
171                 return ret_val;
172         }
173
174         /* Verify phy id */
175         switch (hw->mac.type) {
176         case e1000_82571:
177         case e1000_82572:
178                 if (phy->id != IGP01E1000_I_PHY_ID)
179                         ret_val = -E1000_ERR_PHY;
180                 break;
181         case e1000_82573:
182                 if (phy->id != M88E1111_I_PHY_ID)
183                         ret_val = -E1000_ERR_PHY;
184                 break;
185         case e1000_82574:
186         case e1000_82583:
187                 if (phy->id != BME1000_E_PHY_ID_R2)
188                         ret_val = -E1000_ERR_PHY;
189                 break;
190         default:
191                 ret_val = -E1000_ERR_PHY;
192                 break;
193         }
194
195         if (ret_val)
196                 DEBUGOUT1("PHY ID unknown: type = 0x%08x\n", phy->id);
197
198         return ret_val;
199 }
200
201 /**
202  *  e1000_init_nvm_params_82571 - Init NVM func ptrs.
203  *  @hw: pointer to the HW structure
204  **/
205 static s32 e1000_init_nvm_params_82571(struct e1000_hw *hw)
206 {
207         struct e1000_nvm_info *nvm = &hw->nvm;
208         u32 eecd = E1000_READ_REG(hw, E1000_EECD);
209         u16 size;
210
211         DEBUGFUNC("e1000_init_nvm_params_82571");
212
213         nvm->opcode_bits = 8;
214         nvm->delay_usec = 1;
215         switch (nvm->override) {
216         case e1000_nvm_override_spi_large:
217                 nvm->page_size = 32;
218                 nvm->address_bits = 16;
219                 break;
220         case e1000_nvm_override_spi_small:
221                 nvm->page_size = 8;
222                 nvm->address_bits = 8;
223                 break;
224         default:
225                 nvm->page_size = eecd & E1000_EECD_ADDR_BITS ? 32 : 8;
226                 nvm->address_bits = eecd & E1000_EECD_ADDR_BITS ? 16 : 8;
227                 break;
228         }
229
230         switch (hw->mac.type) {
231         case e1000_82573:
232         case e1000_82574:
233         case e1000_82583:
234                 if (((eecd >> 15) & 0x3) == 0x3) {
235                         nvm->type = e1000_nvm_flash_hw;
236                         nvm->word_size = 2048;
237                         /* Autonomous Flash update bit must be cleared due
238                          * to Flash update issue.
239                          */
240                         eecd &= ~E1000_EECD_AUPDEN;
241                         E1000_WRITE_REG(hw, E1000_EECD, eecd);
242                         break;
243                 }
244                 /* Fall Through */
245         default:
246                 nvm->type = e1000_nvm_eeprom_spi;
247                 size = (u16)((eecd & E1000_EECD_SIZE_EX_MASK) >>
248                              E1000_EECD_SIZE_EX_SHIFT);
249                 /* Added to a constant, "size" becomes the left-shift value
250                  * for setting word_size.
251                  */
252                 size += NVM_WORD_SIZE_BASE_SHIFT;
253
254                 /* EEPROM access above 16k is unsupported */
255                 if (size > 14)
256                         size = 14;
257                 nvm->word_size = 1 << size;
258                 break;
259         }
260
261         /* Function Pointers */
262         switch (hw->mac.type) {
263         case e1000_82574:
264         case e1000_82583:
265                 nvm->ops.acquire = e1000_get_hw_semaphore_82574;
266                 nvm->ops.release = e1000_put_hw_semaphore_82574;
267                 break;
268         default:
269                 nvm->ops.acquire = e1000_acquire_nvm_82571;
270                 nvm->ops.release = e1000_release_nvm_82571;
271                 break;
272         }
273         nvm->ops.read = e1000_read_nvm_eerd;
274         nvm->ops.update = e1000_update_nvm_checksum_82571;
275         nvm->ops.validate = e1000_validate_nvm_checksum_82571;
276         nvm->ops.valid_led_default = e1000_valid_led_default_82571;
277         nvm->ops.write = e1000_write_nvm_82571;
278
279         return E1000_SUCCESS;
280 }
281
282 /**
283  *  e1000_init_mac_params_82571 - Init MAC func ptrs.
284  *  @hw: pointer to the HW structure
285  **/
286 static s32 e1000_init_mac_params_82571(struct e1000_hw *hw)
287 {
288         struct e1000_mac_info *mac = &hw->mac;
289         u32 swsm = 0;
290         u32 swsm2 = 0;
291         bool force_clear_smbi = FALSE;
292
293         DEBUGFUNC("e1000_init_mac_params_82571");
294
295         /* Set media type and media-dependent function pointers */
296         switch (hw->device_id) {
297         case E1000_DEV_ID_82571EB_FIBER:
298         case E1000_DEV_ID_82572EI_FIBER:
299         case E1000_DEV_ID_82571EB_QUAD_FIBER:
300                 hw->phy.media_type = e1000_media_type_fiber;
301                 mac->ops.setup_physical_interface =
302                         e1000_setup_fiber_serdes_link_82571;
303                 mac->ops.check_for_link = e1000_check_for_fiber_link_generic;
304                 mac->ops.get_link_up_info =
305                         e1000_get_speed_and_duplex_fiber_serdes_generic;
306                 break;
307         case E1000_DEV_ID_82571EB_SERDES:
308         case E1000_DEV_ID_82571EB_SERDES_DUAL:
309         case E1000_DEV_ID_82571EB_SERDES_QUAD:
310         case E1000_DEV_ID_82572EI_SERDES:
311                 hw->phy.media_type = e1000_media_type_internal_serdes;
312                 mac->ops.setup_physical_interface =
313                         e1000_setup_fiber_serdes_link_82571;
314                 mac->ops.check_for_link = e1000_check_for_serdes_link_82571;
315                 mac->ops.get_link_up_info =
316                         e1000_get_speed_and_duplex_fiber_serdes_generic;
317                 break;
318         default:
319                 hw->phy.media_type = e1000_media_type_copper;
320                 mac->ops.setup_physical_interface =
321                         e1000_setup_copper_link_82571;
322                 mac->ops.check_for_link = e1000_check_for_copper_link_generic;
323                 mac->ops.get_link_up_info =
324                         e1000_get_speed_and_duplex_copper_generic;
325                 break;
326         }
327
328         /* Set mta register count */
329         mac->mta_reg_count = 128;
330         /* Set rar entry count */
331         mac->rar_entry_count = E1000_RAR_ENTRIES;
332         /* Set if part includes ASF firmware */
333         mac->asf_firmware_present = TRUE;
334         /* Adaptive IFS supported */
335         mac->adaptive_ifs = TRUE;
336
337         /* Function pointers */
338
339         /* bus type/speed/width */
340         mac->ops.get_bus_info = e1000_get_bus_info_pcie_generic;
341         /* reset */
342         mac->ops.reset_hw = e1000_reset_hw_82571;
343         /* hw initialization */
344         mac->ops.init_hw = e1000_init_hw_82571;
345         /* link setup */
346         mac->ops.setup_link = e1000_setup_link_82571;
347         /* multicast address update */
348         mac->ops.update_mc_addr_list = e1000_update_mc_addr_list_generic;
349         /* writing VFTA */
350         mac->ops.write_vfta = e1000_write_vfta_generic;
351         /* clearing VFTA */
352         mac->ops.clear_vfta = e1000_clear_vfta_82571;
353         /* read mac address */
354         mac->ops.read_mac_addr = e1000_read_mac_addr_82571;
355         /* ID LED init */
356         mac->ops.id_led_init = e1000_id_led_init_generic;
357         /* setup LED */
358         mac->ops.setup_led = e1000_setup_led_generic;
359         /* cleanup LED */
360         mac->ops.cleanup_led = e1000_cleanup_led_generic;
361         /* turn off LED */
362         mac->ops.led_off = e1000_led_off_generic;
363         /* clear hardware counters */
364         mac->ops.clear_hw_cntrs = e1000_clear_hw_cntrs_82571;
365
366         /* MAC-specific function pointers */
367         switch (hw->mac.type) {
368         case e1000_82573:
369                 mac->ops.set_lan_id = e1000_set_lan_id_single_port;
370                 mac->ops.check_mng_mode = e1000_check_mng_mode_generic;
371                 mac->ops.led_on = e1000_led_on_generic;
372                 mac->ops.blink_led = e1000_blink_led_generic;
373
374                 /* FWSM register */
375                 mac->has_fwsm = TRUE;
376                 /* ARC supported; valid only if manageability features are
377                  * enabled.
378                  */
379                 mac->arc_subsystem_valid = !!(E1000_READ_REG(hw, E1000_FWSM) &
380                                               E1000_FWSM_MODE_MASK);
381                 break;
382         case e1000_82574:
383         case e1000_82583:
384                 mac->ops.set_lan_id = e1000_set_lan_id_single_port;
385                 mac->ops.check_mng_mode = e1000_check_mng_mode_82574;
386                 mac->ops.led_on = e1000_led_on_82574;
387                 break;
388         default:
389                 mac->ops.check_mng_mode = e1000_check_mng_mode_generic;
390                 mac->ops.led_on = e1000_led_on_generic;
391                 mac->ops.blink_led = e1000_blink_led_generic;
392
393                 /* FWSM register */
394                 mac->has_fwsm = TRUE;
395                 break;
396         }
397
398         /* Ensure that the inter-port SWSM.SMBI lock bit is clear before
399          * first NVM or PHY acess. This should be done for single-port
400          * devices, and for one port only on dual-port devices so that
401          * for those devices we can still use the SMBI lock to synchronize
402          * inter-port accesses to the PHY & NVM.
403          */
404         switch (hw->mac.type) {
405         case e1000_82571:
406         case e1000_82572:
407                 swsm2 = E1000_READ_REG(hw, E1000_SWSM2);
408
409                 if (!(swsm2 & E1000_SWSM2_LOCK)) {
410                         /* Only do this for the first interface on this card */
411                         E1000_WRITE_REG(hw, E1000_SWSM2, swsm2 |
412                                         E1000_SWSM2_LOCK);
413                         force_clear_smbi = TRUE;
414                 } else {
415                         force_clear_smbi = FALSE;
416                 }
417                 break;
418         default:
419                 force_clear_smbi = TRUE;
420                 break;
421         }
422
423         if (force_clear_smbi) {
424                 /* Make sure SWSM.SMBI is clear */
425                 swsm = E1000_READ_REG(hw, E1000_SWSM);
426                 if (swsm & E1000_SWSM_SMBI) {
427                         /* This bit should not be set on a first interface, and
428                          * indicates that the bootagent or EFI code has
429                          * improperly left this bit enabled
430                          */
431                         DEBUGOUT("Please update your 82571 Bootagent\n");
432                 }
433                 E1000_WRITE_REG(hw, E1000_SWSM, swsm & ~E1000_SWSM_SMBI);
434         }
435
436         /* Initialze device specific counter of SMBI acquisition timeouts. */
437          hw->dev_spec._82571.smb_counter = 0;
438
439         return E1000_SUCCESS;
440 }
441
442 /**
443  *  e1000_init_function_pointers_82571 - Init func ptrs.
444  *  @hw: pointer to the HW structure
445  *
446  *  Called to initialize all function pointers and parameters.
447  **/
448 void e1000_init_function_pointers_82571(struct e1000_hw *hw)
449 {
450         DEBUGFUNC("e1000_init_function_pointers_82571");
451
452         hw->mac.ops.init_params = e1000_init_mac_params_82571;
453         hw->nvm.ops.init_params = e1000_init_nvm_params_82571;
454         hw->phy.ops.init_params = e1000_init_phy_params_82571;
455 }
456
457 /**
458  *  e1000_get_phy_id_82571 - Retrieve the PHY ID and revision
459  *  @hw: pointer to the HW structure
460  *
461  *  Reads the PHY registers and stores the PHY ID and possibly the PHY
462  *  revision in the hardware structure.
463  **/
464 static s32 e1000_get_phy_id_82571(struct e1000_hw *hw)
465 {
466         struct e1000_phy_info *phy = &hw->phy;
467         s32 ret_val;
468         u16 phy_id = 0;
469
470         DEBUGFUNC("e1000_get_phy_id_82571");
471
472         switch (hw->mac.type) {
473         case e1000_82571:
474         case e1000_82572:
475                 /* The 82571 firmware may still be configuring the PHY.
476                  * In this case, we cannot access the PHY until the
477                  * configuration is done.  So we explicitly set the
478                  * PHY ID.
479                  */
480                 phy->id = IGP01E1000_I_PHY_ID;
481                 break;
482         case e1000_82573:
483                 return e1000_get_phy_id(hw);
484                 break;
485         case e1000_82574:
486         case e1000_82583:
487                 ret_val = phy->ops.read_reg(hw, PHY_ID1, &phy_id);
488                 if (ret_val)
489                         return ret_val;
490
491                 phy->id = (u32)(phy_id << 16);
492                 usec_delay(20);
493                 ret_val = phy->ops.read_reg(hw, PHY_ID2, &phy_id);
494                 if (ret_val)
495                         return ret_val;
496
497                 phy->id |= (u32)(phy_id);
498                 phy->revision = (u32)(phy_id & ~PHY_REVISION_MASK);
499                 break;
500         default:
501                 return -E1000_ERR_PHY;
502                 break;
503         }
504
505         return E1000_SUCCESS;
506 }
507
508 /**
509  *  e1000_get_hw_semaphore_82571 - Acquire hardware semaphore
510  *  @hw: pointer to the HW structure
511  *
512  *  Acquire the HW semaphore to access the PHY or NVM
513  **/
514 static s32 e1000_get_hw_semaphore_82571(struct e1000_hw *hw)
515 {
516         u32 swsm;
517         s32 sw_timeout = hw->nvm.word_size + 1;
518         s32 fw_timeout = hw->nvm.word_size + 1;
519         s32 i = 0;
520
521         DEBUGFUNC("e1000_get_hw_semaphore_82571");
522
523         /* If we have timedout 3 times on trying to acquire
524          * the inter-port SMBI semaphore, there is old code
525          * operating on the other port, and it is not
526          * releasing SMBI. Modify the number of times that
527          * we try for the semaphore to interwork with this
528          * older code.
529          */
530         if (hw->dev_spec._82571.smb_counter > 2)
531                 sw_timeout = 1;
532
533         /* Get the SW semaphore */
534         while (i < sw_timeout) {
535                 swsm = E1000_READ_REG(hw, E1000_SWSM);
536                 if (!(swsm & E1000_SWSM_SMBI))
537                         break;
538
539                 usec_delay(50);
540                 i++;
541         }
542
543         if (i == sw_timeout) {
544                 DEBUGOUT("Driver can't access device - SMBI bit is set.\n");
545                 hw->dev_spec._82571.smb_counter++;
546         }
547         /* Get the FW semaphore. */
548         for (i = 0; i < fw_timeout; i++) {
549                 swsm = E1000_READ_REG(hw, E1000_SWSM);
550                 E1000_WRITE_REG(hw, E1000_SWSM, swsm | E1000_SWSM_SWESMBI);
551
552                 /* Semaphore acquired if bit latched */
553                 if (E1000_READ_REG(hw, E1000_SWSM) & E1000_SWSM_SWESMBI)
554                         break;
555
556                 usec_delay(50);
557         }
558
559         if (i == fw_timeout) {
560                 /* Release semaphores */
561                 e1000_put_hw_semaphore_82571(hw);
562                 DEBUGOUT("Driver can't access the NVM\n");
563                 return -E1000_ERR_NVM;
564         }
565
566         return E1000_SUCCESS;
567 }
568
569 /**
570  *  e1000_put_hw_semaphore_82571 - Release hardware semaphore
571  *  @hw: pointer to the HW structure
572  *
573  *  Release hardware semaphore used to access the PHY or NVM
574  **/
575 static void e1000_put_hw_semaphore_82571(struct e1000_hw *hw)
576 {
577         u32 swsm;
578
579         DEBUGFUNC("e1000_put_hw_semaphore_generic");
580
581         swsm = E1000_READ_REG(hw, E1000_SWSM);
582
583         swsm &= ~(E1000_SWSM_SMBI | E1000_SWSM_SWESMBI);
584
585         E1000_WRITE_REG(hw, E1000_SWSM, swsm);
586 }
587
588 /**
589  *  e1000_get_hw_semaphore_82573 - Acquire hardware semaphore
590  *  @hw: pointer to the HW structure
591  *
592  *  Acquire the HW semaphore during reset.
593  *
594  **/
595 static s32 e1000_get_hw_semaphore_82573(struct e1000_hw *hw)
596 {
597         u32 extcnf_ctrl;
598         s32 i = 0;
599
600         DEBUGFUNC("e1000_get_hw_semaphore_82573");
601
602         extcnf_ctrl = E1000_READ_REG(hw, E1000_EXTCNF_CTRL);
603         do {
604                 extcnf_ctrl |= E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP;
605                 E1000_WRITE_REG(hw, E1000_EXTCNF_CTRL, extcnf_ctrl);
606                 extcnf_ctrl = E1000_READ_REG(hw, E1000_EXTCNF_CTRL);
607
608                 if (extcnf_ctrl & E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP)
609                         break;
610
611                 msec_delay(2);
612                 i++;
613         } while (i < MDIO_OWNERSHIP_TIMEOUT);
614
615         if (i == MDIO_OWNERSHIP_TIMEOUT) {
616                 /* Release semaphores */
617                 e1000_put_hw_semaphore_82573(hw);
618                 DEBUGOUT("Driver can't access the PHY\n");
619                 return -E1000_ERR_PHY;
620         }
621
622         return E1000_SUCCESS;
623 }
624
625 /**
626  *  e1000_put_hw_semaphore_82573 - Release hardware semaphore
627  *  @hw: pointer to the HW structure
628  *
629  *  Release hardware semaphore used during reset.
630  *
631  **/
632 static void e1000_put_hw_semaphore_82573(struct e1000_hw *hw)
633 {
634         u32 extcnf_ctrl;
635
636         DEBUGFUNC("e1000_put_hw_semaphore_82573");
637
638         extcnf_ctrl = E1000_READ_REG(hw, E1000_EXTCNF_CTRL);
639         extcnf_ctrl &= ~E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP;
640         E1000_WRITE_REG(hw, E1000_EXTCNF_CTRL, extcnf_ctrl);
641 }
642
643 /**
644  *  e1000_get_hw_semaphore_82574 - Acquire hardware semaphore
645  *  @hw: pointer to the HW structure
646  *
647  *  Acquire the HW semaphore to access the PHY or NVM.
648  *
649  **/
650 static s32 e1000_get_hw_semaphore_82574(struct e1000_hw *hw)
651 {
652         s32 ret_val;
653
654         DEBUGFUNC("e1000_get_hw_semaphore_82574");
655
656         E1000_MUTEX_LOCK(&hw->dev_spec._82571.swflag_mutex);
657         ret_val = e1000_get_hw_semaphore_82573(hw);
658         if (ret_val)
659                 E1000_MUTEX_UNLOCK(&hw->dev_spec._82571.swflag_mutex);
660         return ret_val;
661 }
662
663 /**
664  *  e1000_put_hw_semaphore_82574 - Release hardware semaphore
665  *  @hw: pointer to the HW structure
666  *
667  *  Release hardware semaphore used to access the PHY or NVM
668  *
669  **/
670 static void e1000_put_hw_semaphore_82574(struct e1000_hw *hw)
671 {
672         DEBUGFUNC("e1000_put_hw_semaphore_82574");
673
674         e1000_put_hw_semaphore_82573(hw);
675         E1000_MUTEX_UNLOCK(&hw->dev_spec._82571.swflag_mutex);
676 }
677
678 /**
679  *  e1000_set_d0_lplu_state_82574 - Set Low Power Linkup D0 state
680  *  @hw: pointer to the HW structure
681  *  @active: TRUE to enable LPLU, FALSE to disable
682  *
683  *  Sets the LPLU D0 state according to the active flag.
684  *  LPLU will not be activated unless the
685  *  device autonegotiation advertisement meets standards of
686  *  either 10 or 10/100 or 10/100/1000 at all duplexes.
687  *  This is a function pointer entry point only called by
688  *  PHY setup routines.
689  **/
690 static s32 e1000_set_d0_lplu_state_82574(struct e1000_hw *hw, bool active)
691 {
692         u32 data = E1000_READ_REG(hw, E1000_POEMB);
693
694         DEBUGFUNC("e1000_set_d0_lplu_state_82574");
695
696         if (active)
697                 data |= E1000_PHY_CTRL_D0A_LPLU;
698         else
699                 data &= ~E1000_PHY_CTRL_D0A_LPLU;
700
701         E1000_WRITE_REG(hw, E1000_POEMB, data);
702         return E1000_SUCCESS;
703 }
704
705 /**
706  *  e1000_set_d3_lplu_state_82574 - Sets low power link up state for D3
707  *  @hw: pointer to the HW structure
708  *  @active: boolean used to enable/disable lplu
709  *
710  *  The low power link up (lplu) state is set to the power management level D3
711  *  when active is TRUE, else clear lplu for D3. LPLU
712  *  is used during Dx states where the power conservation is most important.
713  *  During driver activity, SmartSpeed should be enabled so performance is
714  *  maintained.
715  **/
716 static s32 e1000_set_d3_lplu_state_82574(struct e1000_hw *hw, bool active)
717 {
718         u32 data = E1000_READ_REG(hw, E1000_POEMB);
719
720         DEBUGFUNC("e1000_set_d3_lplu_state_82574");
721
722         if (!active) {
723                 data &= ~E1000_PHY_CTRL_NOND0A_LPLU;
724         } else if ((hw->phy.autoneg_advertised == E1000_ALL_SPEED_DUPLEX) ||
725                    (hw->phy.autoneg_advertised == E1000_ALL_NOT_GIG) ||
726                    (hw->phy.autoneg_advertised == E1000_ALL_10_SPEED)) {
727                 data |= E1000_PHY_CTRL_NOND0A_LPLU;
728         }
729
730         E1000_WRITE_REG(hw, E1000_POEMB, data);
731         return E1000_SUCCESS;
732 }
733
734 /**
735  *  e1000_acquire_nvm_82571 - Request for access to the EEPROM
736  *  @hw: pointer to the HW structure
737  *
738  *  To gain access to the EEPROM, first we must obtain a hardware semaphore.
739  *  Then for non-82573 hardware, set the EEPROM access request bit and wait
740  *  for EEPROM access grant bit.  If the access grant bit is not set, release
741  *  hardware semaphore.
742  **/
743 static s32 e1000_acquire_nvm_82571(struct e1000_hw *hw)
744 {
745         s32 ret_val;
746
747         DEBUGFUNC("e1000_acquire_nvm_82571");
748
749         ret_val = e1000_get_hw_semaphore_82571(hw);
750         if (ret_val)
751                 return ret_val;
752
753         switch (hw->mac.type) {
754         case e1000_82573:
755                 break;
756         default:
757                 ret_val = e1000_acquire_nvm_generic(hw);
758                 break;
759         }
760
761         if (ret_val)
762                 e1000_put_hw_semaphore_82571(hw);
763
764         return ret_val;
765 }
766
767 /**
768  *  e1000_release_nvm_82571 - Release exclusive access to EEPROM
769  *  @hw: pointer to the HW structure
770  *
771  *  Stop any current commands to the EEPROM and clear the EEPROM request bit.
772  **/
773 static void e1000_release_nvm_82571(struct e1000_hw *hw)
774 {
775         DEBUGFUNC("e1000_release_nvm_82571");
776
777         e1000_release_nvm_generic(hw);
778         e1000_put_hw_semaphore_82571(hw);
779 }
780
781 /**
782  *  e1000_write_nvm_82571 - Write to EEPROM using appropriate interface
783  *  @hw: pointer to the HW structure
784  *  @offset: offset within the EEPROM to be written to
785  *  @words: number of words to write
786  *  @data: 16 bit word(s) to be written to the EEPROM
787  *
788  *  For non-82573 silicon, write data to EEPROM at offset using SPI interface.
789  *
790  *  If e1000_update_nvm_checksum is not called after this function, the
791  *  EEPROM will most likely contain an invalid checksum.
792  **/
793 static s32 e1000_write_nvm_82571(struct e1000_hw *hw, u16 offset, u16 words,
794                                  u16 *data)
795 {
796         s32 ret_val;
797
798         DEBUGFUNC("e1000_write_nvm_82571");
799
800         switch (hw->mac.type) {
801         case e1000_82573:
802         case e1000_82574:
803         case e1000_82583:
804                 ret_val = e1000_write_nvm_eewr_82571(hw, offset, words, data);
805                 break;
806         case e1000_82571:
807         case e1000_82572:
808                 ret_val = e1000_write_nvm_spi(hw, offset, words, data);
809                 break;
810         default:
811                 ret_val = -E1000_ERR_NVM;
812                 break;
813         }
814
815         return ret_val;
816 }
817
818 /**
819  *  e1000_update_nvm_checksum_82571 - Update EEPROM checksum
820  *  @hw: pointer to the HW structure
821  *
822  *  Updates the EEPROM checksum by reading/adding each word of the EEPROM
823  *  up to the checksum.  Then calculates the EEPROM checksum and writes the
824  *  value to the EEPROM.
825  **/
826 static s32 e1000_update_nvm_checksum_82571(struct e1000_hw *hw)
827 {
828         u32 eecd;
829         s32 ret_val;
830         u16 i;
831
832         DEBUGFUNC("e1000_update_nvm_checksum_82571");
833
834         ret_val = e1000_update_nvm_checksum_generic(hw);
835         if (ret_val)
836                 return ret_val;
837
838         /* If our nvm is an EEPROM, then we're done
839          * otherwise, commit the checksum to the flash NVM.
840          */
841         if (hw->nvm.type != e1000_nvm_flash_hw)
842                 return E1000_SUCCESS;
843
844         /* Check for pending operations. */
845         for (i = 0; i < E1000_FLASH_UPDATES; i++) {
846                 msec_delay(1);
847                 if (!(E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_FLUPD))
848                         break;
849         }
850
851         if (i == E1000_FLASH_UPDATES)
852                 return -E1000_ERR_NVM;
853
854         /* Reset the firmware if using STM opcode. */
855         if ((E1000_READ_REG(hw, E1000_FLOP) & 0xFF00) == E1000_STM_OPCODE) {
856                 /* The enabling of and the actual reset must be done
857                  * in two write cycles.
858                  */
859                 E1000_WRITE_REG(hw, E1000_HICR, E1000_HICR_FW_RESET_ENABLE);
860                 E1000_WRITE_FLUSH(hw);
861                 E1000_WRITE_REG(hw, E1000_HICR, E1000_HICR_FW_RESET);
862         }
863
864         /* Commit the write to flash */
865         eecd = E1000_READ_REG(hw, E1000_EECD) | E1000_EECD_FLUPD;
866         E1000_WRITE_REG(hw, E1000_EECD, eecd);
867
868         for (i = 0; i < E1000_FLASH_UPDATES; i++) {
869                 msec_delay(1);
870                 if (!(E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_FLUPD))
871                         break;
872         }
873
874         if (i == E1000_FLASH_UPDATES)
875                 return -E1000_ERR_NVM;
876
877         return E1000_SUCCESS;
878 }
879
880 /**
881  *  e1000_validate_nvm_checksum_82571 - Validate EEPROM checksum
882  *  @hw: pointer to the HW structure
883  *
884  *  Calculates the EEPROM checksum by reading/adding each word of the EEPROM
885  *  and then verifies that the sum of the EEPROM is equal to 0xBABA.
886  **/
887 static s32 e1000_validate_nvm_checksum_82571(struct e1000_hw *hw)
888 {
889         DEBUGFUNC("e1000_validate_nvm_checksum_82571");
890
891         if (hw->nvm.type == e1000_nvm_flash_hw)
892                 e1000_fix_nvm_checksum_82571(hw);
893
894         return e1000_validate_nvm_checksum_generic(hw);
895 }
896
897 /**
898  *  e1000_write_nvm_eewr_82571 - Write to EEPROM for 82573 silicon
899  *  @hw: pointer to the HW structure
900  *  @offset: offset within the EEPROM to be written to
901  *  @words: number of words to write
902  *  @data: 16 bit word(s) to be written to the EEPROM
903  *
904  *  After checking for invalid values, poll the EEPROM to ensure the previous
905  *  command has completed before trying to write the next word.  After write
906  *  poll for completion.
907  *
908  *  If e1000_update_nvm_checksum is not called after this function, the
909  *  EEPROM will most likely contain an invalid checksum.
910  **/
911 static s32 e1000_write_nvm_eewr_82571(struct e1000_hw *hw, u16 offset,
912                                       u16 words, u16 *data)
913 {
914         struct e1000_nvm_info *nvm = &hw->nvm;
915         u32 i, eewr = 0;
916         s32 ret_val = E1000_SUCCESS;
917
918         DEBUGFUNC("e1000_write_nvm_eewr_82571");
919
920         /* A check for invalid values:  offset too large, too many words,
921          * and not enough words.
922          */
923         if ((offset >= nvm->word_size) || (words > (nvm->word_size - offset)) ||
924             (words == 0)) {
925                 DEBUGOUT("nvm parameter(s) out of bounds\n");
926                 return -E1000_ERR_NVM;
927         }
928
929         for (i = 0; i < words; i++) {
930                 eewr = ((data[i] << E1000_NVM_RW_REG_DATA) |
931                         ((offset + i) << E1000_NVM_RW_ADDR_SHIFT) |
932                         E1000_NVM_RW_REG_START);
933
934                 ret_val = e1000_poll_eerd_eewr_done(hw, E1000_NVM_POLL_WRITE);
935                 if (ret_val)
936                         break;
937
938                 E1000_WRITE_REG(hw, E1000_EEWR, eewr);
939
940                 ret_val = e1000_poll_eerd_eewr_done(hw, E1000_NVM_POLL_WRITE);
941                 if (ret_val)
942                         break;
943         }
944
945         return ret_val;
946 }
947
948 /**
949  *  e1000_get_cfg_done_82571 - Poll for configuration done
950  *  @hw: pointer to the HW structure
951  *
952  *  Reads the management control register for the config done bit to be set.
953  **/
954 static s32 e1000_get_cfg_done_82571(struct e1000_hw *hw)
955 {
956         s32 timeout = PHY_CFG_TIMEOUT;
957
958         DEBUGFUNC("e1000_get_cfg_done_82571");
959
960         while (timeout) {
961                 if (E1000_READ_REG(hw, E1000_EEMNGCTL) &
962                     E1000_NVM_CFG_DONE_PORT_0)
963                         break;
964                 msec_delay(1);
965                 timeout--;
966         }
967         if (!timeout) {
968                 DEBUGOUT("MNG configuration cycle has not completed.\n");
969                 return -E1000_ERR_RESET;
970         }
971
972         return E1000_SUCCESS;
973 }
974
975 /**
976  *  e1000_set_d0_lplu_state_82571 - Set Low Power Linkup D0 state
977  *  @hw: pointer to the HW structure
978  *  @active: TRUE to enable LPLU, FALSE to disable
979  *
980  *  Sets the LPLU D0 state according to the active flag.  When activating LPLU
981  *  this function also disables smart speed and vice versa.  LPLU will not be
982  *  activated unless the device autonegotiation advertisement meets standards
983  *  of either 10 or 10/100 or 10/100/1000 at all duplexes.  This is a function
984  *  pointer entry point only called by PHY setup routines.
985  **/
986 static s32 e1000_set_d0_lplu_state_82571(struct e1000_hw *hw, bool active)
987 {
988         struct e1000_phy_info *phy = &hw->phy;
989         s32 ret_val;
990         u16 data;
991
992         DEBUGFUNC("e1000_set_d0_lplu_state_82571");
993
994         if (!(phy->ops.read_reg))
995                 return E1000_SUCCESS;
996
997         ret_val = phy->ops.read_reg(hw, IGP02E1000_PHY_POWER_MGMT, &data);
998         if (ret_val)
999                 return ret_val;
1000
1001         if (active) {
1002                 data |= IGP02E1000_PM_D0_LPLU;
1003                 ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT,
1004                                              data);
1005                 if (ret_val)
1006                         return ret_val;
1007
1008                 /* When LPLU is enabled, we should disable SmartSpeed */
1009                 ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
1010                                             &data);
1011                 if (ret_val)
1012                         return ret_val;
1013                 data &= ~IGP01E1000_PSCFR_SMART_SPEED;
1014                 ret_val = phy->ops.write_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
1015                                              data);
1016                 if (ret_val)
1017                         return ret_val;
1018         } else {
1019                 data &= ~IGP02E1000_PM_D0_LPLU;
1020                 ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT,
1021                                              data);
1022                 /* LPLU and SmartSpeed are mutually exclusive.  LPLU is used
1023                  * during Dx states where the power conservation is most
1024                  * important.  During driver activity we should enable
1025                  * SmartSpeed, so performance is maintained.
1026                  */
1027                 if (phy->smart_speed == e1000_smart_speed_on) {
1028                         ret_val = phy->ops.read_reg(hw,
1029                                                     IGP01E1000_PHY_PORT_CONFIG,
1030                                                     &data);
1031                         if (ret_val)
1032                                 return ret_val;
1033
1034                         data |= IGP01E1000_PSCFR_SMART_SPEED;
1035                         ret_val = phy->ops.write_reg(hw,
1036                                                      IGP01E1000_PHY_PORT_CONFIG,
1037                                                      data);
1038                         if (ret_val)
1039                                 return ret_val;
1040                 } else if (phy->smart_speed == e1000_smart_speed_off) {
1041                         ret_val = phy->ops.read_reg(hw,
1042                                                     IGP01E1000_PHY_PORT_CONFIG,
1043                                                     &data);
1044                         if (ret_val)
1045                                 return ret_val;
1046
1047                         data &= ~IGP01E1000_PSCFR_SMART_SPEED;
1048                         ret_val = phy->ops.write_reg(hw,
1049                                                      IGP01E1000_PHY_PORT_CONFIG,
1050                                                      data);
1051                         if (ret_val)
1052                                 return ret_val;
1053                 }
1054         }
1055
1056         return E1000_SUCCESS;
1057 }
1058
1059 /**
1060  *  e1000_reset_hw_82571 - Reset hardware
1061  *  @hw: pointer to the HW structure
1062  *
1063  *  This resets the hardware into a known state.
1064  **/
1065 static s32 e1000_reset_hw_82571(struct e1000_hw *hw)
1066 {
1067         u32 ctrl, ctrl_ext, eecd, tctl;
1068         s32 ret_val;
1069
1070         DEBUGFUNC("e1000_reset_hw_82571");
1071
1072         /* Prevent the PCI-E bus from sticking if there is no TLP connection
1073          * on the last TLP read/write transaction when MAC is reset.
1074          */
1075         ret_val = e1000_disable_pcie_master_generic(hw);
1076         if (ret_val)
1077                 DEBUGOUT("PCI-E Master disable polling has failed.\n");
1078
1079         DEBUGOUT("Masking off all interrupts\n");
1080         E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
1081
1082         E1000_WRITE_REG(hw, E1000_RCTL, 0);
1083         tctl = E1000_READ_REG(hw, E1000_TCTL);
1084         tctl &= ~E1000_TCTL_EN;
1085         E1000_WRITE_REG(hw, E1000_TCTL, tctl);
1086         E1000_WRITE_FLUSH(hw);
1087
1088         msec_delay(10);
1089
1090         /* Must acquire the MDIO ownership before MAC reset.
1091          * Ownership defaults to firmware after a reset.
1092          */
1093         switch (hw->mac.type) {
1094         case e1000_82573:
1095                 ret_val = e1000_get_hw_semaphore_82573(hw);
1096                 break;
1097         case e1000_82574:
1098         case e1000_82583:
1099                 ret_val = e1000_get_hw_semaphore_82574(hw);
1100                 break;
1101         default:
1102                 break;
1103         }
1104
1105         ctrl = E1000_READ_REG(hw, E1000_CTRL);
1106
1107         DEBUGOUT("Issuing a global reset to MAC\n");
1108         E1000_WRITE_REG(hw, E1000_CTRL, ctrl | E1000_CTRL_RST);
1109
1110         /* Must release MDIO ownership and mutex after MAC reset. */
1111         switch (hw->mac.type) {
1112         case e1000_82573:
1113                 /* Release mutex only if the hw semaphore is acquired */
1114                 if (!ret_val)
1115                         e1000_put_hw_semaphore_82573(hw);
1116                 break;
1117         case e1000_82574:
1118         case e1000_82583:
1119                 /* Release mutex only if the hw semaphore is acquired */
1120                 if (!ret_val)
1121                         e1000_put_hw_semaphore_82574(hw);
1122                 break;
1123         default:
1124                 break;
1125         }
1126
1127         if (hw->nvm.type == e1000_nvm_flash_hw) {
1128                 usec_delay(10);
1129                 ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
1130                 ctrl_ext |= E1000_CTRL_EXT_EE_RST;
1131                 E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext);
1132                 E1000_WRITE_FLUSH(hw);
1133         }
1134
1135         ret_val = e1000_get_auto_rd_done_generic(hw);
1136         if (ret_val)
1137                 /* We don't want to continue accessing MAC registers. */
1138                 return ret_val;
1139
1140         /* Phy configuration from NVM just starts after EECD_AUTO_RD is set.
1141          * Need to wait for Phy configuration completion before accessing
1142          * NVM and Phy.
1143          */
1144
1145         switch (hw->mac.type) {
1146         case e1000_82571:
1147         case e1000_82572:
1148                 /* REQ and GNT bits need to be cleared when using AUTO_RD
1149                  * to access the EEPROM.
1150                  */
1151                 eecd = E1000_READ_REG(hw, E1000_EECD);
1152                 eecd &= ~(E1000_EECD_REQ | E1000_EECD_GNT);
1153                 E1000_WRITE_REG(hw, E1000_EECD, eecd);
1154                 break;
1155         case e1000_82573:
1156         case e1000_82574:
1157         case e1000_82583:
1158                 msec_delay(25);
1159                 break;
1160         default:
1161                 break;
1162         }
1163
1164         /* Clear any pending interrupt events. */
1165         E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
1166         E1000_READ_REG(hw, E1000_ICR);
1167
1168         if (hw->mac.type == e1000_82571) {
1169                 /* Install any alternate MAC address into RAR0 */
1170                 ret_val = e1000_check_alt_mac_addr_generic(hw);
1171                 if (ret_val)
1172                         return ret_val;
1173
1174                 e1000_set_laa_state_82571(hw, TRUE);
1175         }
1176
1177         /* Reinitialize the 82571 serdes link state machine */
1178         if (hw->phy.media_type == e1000_media_type_internal_serdes)
1179                 hw->mac.serdes_link_state = e1000_serdes_link_down;
1180
1181         return E1000_SUCCESS;
1182 }
1183
1184 /**
1185  *  e1000_init_hw_82571 - Initialize hardware
1186  *  @hw: pointer to the HW structure
1187  *
1188  *  This inits the hardware readying it for operation.
1189  **/
1190 static s32 e1000_init_hw_82571(struct e1000_hw *hw)
1191 {
1192         struct e1000_mac_info *mac = &hw->mac;
1193         u32 reg_data;
1194         s32 ret_val;
1195         u16 i, rar_count = mac->rar_entry_count;
1196
1197         DEBUGFUNC("e1000_init_hw_82571");
1198
1199         e1000_initialize_hw_bits_82571(hw);
1200
1201         /* Initialize identification LED */
1202         ret_val = mac->ops.id_led_init(hw);
1203         /* An error is not fatal and we should not stop init due to this */
1204         if (ret_val)
1205                 DEBUGOUT("Error initializing identification LED\n");
1206
1207         /* Disabling VLAN filtering */
1208         DEBUGOUT("Initializing the IEEE VLAN\n");
1209         mac->ops.clear_vfta(hw);
1210
1211         /* Setup the receive address.
1212          * If, however, a locally administered address was assigned to the
1213          * 82571, we must reserve a RAR for it to work around an issue where
1214          * resetting one port will reload the MAC on the other port.
1215          */
1216         if (e1000_get_laa_state_82571(hw))
1217                 rar_count--;
1218         e1000_init_rx_addrs_generic(hw, rar_count);
1219
1220         /* Zero out the Multicast HASH table */
1221         DEBUGOUT("Zeroing the MTA\n");
1222         for (i = 0; i < mac->mta_reg_count; i++)
1223                 E1000_WRITE_REG_ARRAY(hw, E1000_MTA, i, 0);
1224
1225         /* Setup link and flow control */
1226         ret_val = mac->ops.setup_link(hw);
1227
1228         /* Set the transmit descriptor write-back policy */
1229         reg_data = E1000_READ_REG(hw, E1000_TXDCTL(0));
1230         reg_data = ((reg_data & ~E1000_TXDCTL_WTHRESH) |
1231                     E1000_TXDCTL_FULL_TX_DESC_WB | E1000_TXDCTL_COUNT_DESC);
1232         E1000_WRITE_REG(hw, E1000_TXDCTL(0), reg_data);
1233
1234         /* ...for both queues. */
1235         switch (mac->type) {
1236         case e1000_82573:
1237                 e1000_enable_tx_pkt_filtering_generic(hw);
1238                 /* fall through */
1239         case e1000_82574:
1240         case e1000_82583:
1241                 reg_data = E1000_READ_REG(hw, E1000_GCR);
1242                 reg_data |= E1000_GCR_L1_ACT_WITHOUT_L0S_RX;
1243                 E1000_WRITE_REG(hw, E1000_GCR, reg_data);
1244                 break;
1245         default:
1246                 reg_data = E1000_READ_REG(hw, E1000_TXDCTL(1));
1247                 reg_data = ((reg_data & ~E1000_TXDCTL_WTHRESH) |
1248                             E1000_TXDCTL_FULL_TX_DESC_WB |
1249                             E1000_TXDCTL_COUNT_DESC);
1250                 E1000_WRITE_REG(hw, E1000_TXDCTL(1), reg_data);
1251                 break;
1252         }
1253
1254         /* Clear all of the statistics registers (clear on read).  It is
1255          * important that we do this after we have tried to establish link
1256          * because the symbol error count will increment wildly if there
1257          * is no link.
1258          */
1259         e1000_clear_hw_cntrs_82571(hw);
1260
1261         return ret_val;
1262 }
1263
1264 /**
1265  *  e1000_initialize_hw_bits_82571 - Initialize hardware-dependent bits
1266  *  @hw: pointer to the HW structure
1267  *
1268  *  Initializes required hardware-dependent bits needed for normal operation.
1269  **/
1270 static void e1000_initialize_hw_bits_82571(struct e1000_hw *hw)
1271 {
1272         u32 reg;
1273
1274         DEBUGFUNC("e1000_initialize_hw_bits_82571");
1275
1276         /* Transmit Descriptor Control 0 */
1277         reg = E1000_READ_REG(hw, E1000_TXDCTL(0));
1278         reg |= (1 << 22);
1279         E1000_WRITE_REG(hw, E1000_TXDCTL(0), reg);
1280
1281         /* Transmit Descriptor Control 1 */
1282         reg = E1000_READ_REG(hw, E1000_TXDCTL(1));
1283         reg |= (1 << 22);
1284         E1000_WRITE_REG(hw, E1000_TXDCTL(1), reg);
1285
1286         /* Transmit Arbitration Control 0 */
1287         reg = E1000_READ_REG(hw, E1000_TARC(0));
1288         reg &= ~(0xF << 27); /* 30:27 */
1289         switch (hw->mac.type) {
1290         case e1000_82571:
1291         case e1000_82572:
1292                 reg |= (1 << 23) | (1 << 24) | (1 << 25) | (1 << 26);
1293                 break;
1294         case e1000_82574:
1295         case e1000_82583:
1296                 reg |= (1 << 26);
1297                 break;
1298         default:
1299                 break;
1300         }
1301         E1000_WRITE_REG(hw, E1000_TARC(0), reg);
1302
1303         /* Transmit Arbitration Control 1 */
1304         reg = E1000_READ_REG(hw, E1000_TARC(1));
1305         switch (hw->mac.type) {
1306         case e1000_82571:
1307         case e1000_82572:
1308                 reg &= ~((1 << 29) | (1 << 30));
1309                 reg |= (1 << 22) | (1 << 24) | (1 << 25) | (1 << 26);
1310                 if (E1000_READ_REG(hw, E1000_TCTL) & E1000_TCTL_MULR)
1311                         reg &= ~(1 << 28);
1312                 else
1313                         reg |= (1 << 28);
1314                 E1000_WRITE_REG(hw, E1000_TARC(1), reg);
1315                 break;
1316         default:
1317                 break;
1318         }
1319
1320         /* Device Control */
1321         switch (hw->mac.type) {
1322         case e1000_82573:
1323         case e1000_82574:
1324         case e1000_82583:
1325                 reg = E1000_READ_REG(hw, E1000_CTRL);
1326                 reg &= ~(1 << 29);
1327                 E1000_WRITE_REG(hw, E1000_CTRL, reg);
1328                 break;
1329         default:
1330                 break;
1331         }
1332
1333         /* Extended Device Control */
1334         switch (hw->mac.type) {
1335         case e1000_82573:
1336         case e1000_82574:
1337         case e1000_82583:
1338                 reg = E1000_READ_REG(hw, E1000_CTRL_EXT);
1339                 reg &= ~(1 << 23);
1340                 reg |= (1 << 22);
1341                 E1000_WRITE_REG(hw, E1000_CTRL_EXT, reg);
1342                 break;
1343         default:
1344                 break;
1345         }
1346
1347         if (hw->mac.type == e1000_82571) {
1348                 reg = E1000_READ_REG(hw, E1000_PBA_ECC);
1349                 reg |= E1000_PBA_ECC_CORR_EN;
1350                 E1000_WRITE_REG(hw, E1000_PBA_ECC, reg);
1351         }
1352
1353         /* Workaround for hardware errata.
1354          * Ensure that DMA Dynamic Clock gating is disabled on 82571 and 82572
1355          */
1356         if ((hw->mac.type == e1000_82571) ||
1357            (hw->mac.type == e1000_82572)) {
1358                 reg = E1000_READ_REG(hw, E1000_CTRL_EXT);
1359                 reg &= ~E1000_CTRL_EXT_DMA_DYN_CLK_EN;
1360                 E1000_WRITE_REG(hw, E1000_CTRL_EXT, reg);
1361         }
1362
1363         /* Disable IPv6 extension header parsing because some malformed
1364          * IPv6 headers can hang the Rx.
1365          */
1366         if (hw->mac.type <= e1000_82573) {
1367                 reg = E1000_READ_REG(hw, E1000_RFCTL);
1368                 reg |= (E1000_RFCTL_IPV6_EX_DIS | E1000_RFCTL_NEW_IPV6_EXT_DIS);
1369                 E1000_WRITE_REG(hw, E1000_RFCTL, reg);
1370         }
1371
1372         /* PCI-Ex Control Registers */
1373         switch (hw->mac.type) {
1374         case e1000_82574:
1375         case e1000_82583:
1376                 reg = E1000_READ_REG(hw, E1000_GCR);
1377                 reg |= (1 << 22);
1378                 E1000_WRITE_REG(hw, E1000_GCR, reg);
1379
1380                 /* Workaround for hardware errata.
1381                  * apply workaround for hardware errata documented in errata
1382                  * docs Fixes issue where some error prone or unreliable PCIe
1383                  * completions are occurring, particularly with ASPM enabled.
1384                  * Without fix, issue can cause Tx timeouts.
1385                  */
1386                 reg = E1000_READ_REG(hw, E1000_GCR2);
1387                 reg |= 1;
1388                 E1000_WRITE_REG(hw, E1000_GCR2, reg);
1389                 break;
1390         default:
1391                 break;
1392         }
1393
1394         return;
1395 }
1396
1397 /**
1398  *  e1000_clear_vfta_82571 - Clear VLAN filter table
1399  *  @hw: pointer to the HW structure
1400  *
1401  *  Clears the register array which contains the VLAN filter table by
1402  *  setting all the values to 0.
1403  **/
1404 static void e1000_clear_vfta_82571(struct e1000_hw *hw)
1405 {
1406         u32 offset;
1407         u32 vfta_value = 0;
1408         u32 vfta_offset = 0;
1409         u32 vfta_bit_in_reg = 0;
1410
1411         DEBUGFUNC("e1000_clear_vfta_82571");
1412
1413         switch (hw->mac.type) {
1414         case e1000_82573:
1415         case e1000_82574:
1416         case e1000_82583:
1417                 if (hw->mng_cookie.vlan_id != 0) {
1418                         /* The VFTA is a 4096b bit-field, each identifying
1419                          * a single VLAN ID.  The following operations
1420                          * determine which 32b entry (i.e. offset) into the
1421                          * array we want to set the VLAN ID (i.e. bit) of
1422                          * the manageability unit.
1423                          */
1424                         vfta_offset = (hw->mng_cookie.vlan_id >>
1425                                        E1000_VFTA_ENTRY_SHIFT) &
1426                             E1000_VFTA_ENTRY_MASK;
1427                         vfta_bit_in_reg =
1428                             1 << (hw->mng_cookie.vlan_id &
1429                                   E1000_VFTA_ENTRY_BIT_SHIFT_MASK);
1430                 }
1431                 break;
1432         default:
1433                 break;
1434         }
1435         for (offset = 0; offset < E1000_VLAN_FILTER_TBL_SIZE; offset++) {
1436                 /* If the offset we want to clear is the same offset of the
1437                  * manageability VLAN ID, then clear all bits except that of
1438                  * the manageability unit.
1439                  */
1440                 vfta_value = (offset == vfta_offset) ? vfta_bit_in_reg : 0;
1441                 E1000_WRITE_REG_ARRAY(hw, E1000_VFTA, offset, vfta_value);
1442                 E1000_WRITE_FLUSH(hw);
1443         }
1444 }
1445
1446 /**
1447  *  e1000_check_mng_mode_82574 - Check manageability is enabled
1448  *  @hw: pointer to the HW structure
1449  *
1450  *  Reads the NVM Initialization Control Word 2 and returns TRUE
1451  *  (>0) if any manageability is enabled, else FALSE (0).
1452  **/
1453 static bool e1000_check_mng_mode_82574(struct e1000_hw *hw)
1454 {
1455         u16 data;
1456         s32 ret_val;
1457
1458         DEBUGFUNC("e1000_check_mng_mode_82574");
1459
1460         ret_val = hw->nvm.ops.read(hw, NVM_INIT_CONTROL2_REG, 1, &data);
1461         if (ret_val)
1462                 return FALSE;
1463
1464         return (data & E1000_NVM_INIT_CTRL2_MNGM) != 0;
1465 }
1466
1467 /**
1468  *  e1000_led_on_82574 - Turn LED on
1469  *  @hw: pointer to the HW structure
1470  *
1471  *  Turn LED on.
1472  **/
1473 static s32 e1000_led_on_82574(struct e1000_hw *hw)
1474 {
1475         u32 ctrl;
1476         u32 i;
1477
1478         DEBUGFUNC("e1000_led_on_82574");
1479
1480         ctrl = hw->mac.ledctl_mode2;
1481         if (!(E1000_STATUS_LU & E1000_READ_REG(hw, E1000_STATUS))) {
1482                 /* If no link, then turn LED on by setting the invert bit
1483                  * for each LED that's "on" (0x0E) in ledctl_mode2.
1484                  */
1485                 for (i = 0; i < 4; i++)
1486                         if (((hw->mac.ledctl_mode2 >> (i * 8)) & 0xFF) ==
1487                             E1000_LEDCTL_MODE_LED_ON)
1488                                 ctrl |= (E1000_LEDCTL_LED0_IVRT << (i * 8));
1489         }
1490         E1000_WRITE_REG(hw, E1000_LEDCTL, ctrl);
1491
1492         return E1000_SUCCESS;
1493 }
1494
1495 /**
1496  *  e1000_check_phy_82574 - check 82574 phy hung state
1497  *  @hw: pointer to the HW structure
1498  *
1499  *  Returns whether phy is hung or not
1500  **/
1501 bool e1000_check_phy_82574(struct e1000_hw *hw)
1502 {
1503         u16 status_1kbt = 0;
1504         u16 receive_errors = 0;
1505         s32 ret_val;
1506
1507         DEBUGFUNC("e1000_check_phy_82574");
1508
1509         /* Read PHY Receive Error counter first, if its is max - all F's then
1510          * read the Base1000T status register If both are max then PHY is hung.
1511          */
1512         ret_val = hw->phy.ops.read_reg(hw, E1000_RECEIVE_ERROR_COUNTER,
1513                                        &receive_errors);
1514         if (ret_val)
1515                 return FALSE;
1516         if (receive_errors == E1000_RECEIVE_ERROR_MAX) {
1517                 ret_val = hw->phy.ops.read_reg(hw, E1000_BASE1000T_STATUS,
1518                                                &status_1kbt);
1519                 if (ret_val)
1520                         return FALSE;
1521                 if ((status_1kbt & E1000_IDLE_ERROR_COUNT_MASK) ==
1522                     E1000_IDLE_ERROR_COUNT_MASK)
1523                         return TRUE;
1524         }
1525
1526         return FALSE;
1527 }
1528
1529
1530 /**
1531  *  e1000_setup_link_82571 - Setup flow control and link settings
1532  *  @hw: pointer to the HW structure
1533  *
1534  *  Determines which flow control settings to use, then configures flow
1535  *  control.  Calls the appropriate media-specific link configuration
1536  *  function.  Assuming the adapter has a valid link partner, a valid link
1537  *  should be established.  Assumes the hardware has previously been reset
1538  *  and the transmitter and receiver are not enabled.
1539  **/
1540 static s32 e1000_setup_link_82571(struct e1000_hw *hw)
1541 {
1542         DEBUGFUNC("e1000_setup_link_82571");
1543
1544         /* 82573 does not have a word in the NVM to determine
1545          * the default flow control setting, so we explicitly
1546          * set it to full.
1547          */
1548         switch (hw->mac.type) {
1549         case e1000_82573:
1550         case e1000_82574:
1551         case e1000_82583:
1552                 if (hw->fc.requested_mode == e1000_fc_default)
1553                         hw->fc.requested_mode = e1000_fc_full;
1554                 break;
1555         default:
1556                 break;
1557         }
1558
1559         return e1000_setup_link_generic(hw);
1560 }
1561
1562 /**
1563  *  e1000_setup_copper_link_82571 - Configure copper link settings
1564  *  @hw: pointer to the HW structure
1565  *
1566  *  Configures the link for auto-neg or forced speed and duplex.  Then we check
1567  *  for link, once link is established calls to configure collision distance
1568  *  and flow control are called.
1569  **/
1570 static s32 e1000_setup_copper_link_82571(struct e1000_hw *hw)
1571 {
1572         u32 ctrl;
1573         s32 ret_val;
1574
1575         DEBUGFUNC("e1000_setup_copper_link_82571");
1576
1577         ctrl = E1000_READ_REG(hw, E1000_CTRL);
1578         ctrl |= E1000_CTRL_SLU;
1579         ctrl &= ~(E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
1580         E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
1581
1582         switch (hw->phy.type) {
1583         case e1000_phy_m88:
1584         case e1000_phy_bm:
1585                 ret_val = e1000_copper_link_setup_m88(hw);
1586                 break;
1587         case e1000_phy_igp_2:
1588                 ret_val = e1000_copper_link_setup_igp(hw);
1589                 break;
1590         default:
1591                 return -E1000_ERR_PHY;
1592                 break;
1593         }
1594
1595         if (ret_val)
1596                 return ret_val;
1597
1598         return e1000_setup_copper_link_generic(hw);
1599 }
1600
1601 /**
1602  *  e1000_setup_fiber_serdes_link_82571 - Setup link for fiber/serdes
1603  *  @hw: pointer to the HW structure
1604  *
1605  *  Configures collision distance and flow control for fiber and serdes links.
1606  *  Upon successful setup, poll for link.
1607  **/
1608 static s32 e1000_setup_fiber_serdes_link_82571(struct e1000_hw *hw)
1609 {
1610         DEBUGFUNC("e1000_setup_fiber_serdes_link_82571");
1611
1612         switch (hw->mac.type) {
1613         case e1000_82571:
1614         case e1000_82572:
1615                 /* If SerDes loopback mode is entered, there is no form
1616                  * of reset to take the adapter out of that mode.  So we
1617                  * have to explicitly take the adapter out of loopback
1618                  * mode.  This prevents drivers from twiddling their thumbs
1619                  * if another tool failed to take it out of loopback mode.
1620                  */
1621                 E1000_WRITE_REG(hw, E1000_SCTL,
1622                                 E1000_SCTL_DISABLE_SERDES_LOOPBACK);
1623                 break;
1624         default:
1625                 break;
1626         }
1627
1628         return e1000_setup_fiber_serdes_link_generic(hw);
1629 }
1630
1631 /**
1632  *  e1000_check_for_serdes_link_82571 - Check for link (Serdes)
1633  *  @hw: pointer to the HW structure
1634  *
1635  *  Reports the link state as up or down.
1636  *
1637  *  If autonegotiation is supported by the link partner, the link state is
1638  *  determined by the result of autonegotiation. This is the most likely case.
1639  *  If autonegotiation is not supported by the link partner, and the link
1640  *  has a valid signal, force the link up.
1641  *
1642  *  The link state is represented internally here by 4 states:
1643  *
1644  *  1) down
1645  *  2) autoneg_progress
1646  *  3) autoneg_complete (the link successfully autonegotiated)
1647  *  4) forced_up (the link has been forced up, it did not autonegotiate)
1648  *
1649  **/
1650 static s32 e1000_check_for_serdes_link_82571(struct e1000_hw *hw)
1651 {
1652         struct e1000_mac_info *mac = &hw->mac;
1653         u32 rxcw;
1654         u32 ctrl;
1655         u32 status;
1656         u32 txcw;
1657         u32 i;
1658         s32 ret_val = E1000_SUCCESS;
1659
1660         DEBUGFUNC("e1000_check_for_serdes_link_82571");
1661
1662         ctrl = E1000_READ_REG(hw, E1000_CTRL);
1663         status = E1000_READ_REG(hw, E1000_STATUS);
1664         E1000_READ_REG(hw, E1000_RXCW);
1665         /* SYNCH bit and IV bit are sticky */
1666         usec_delay(10);
1667         rxcw = E1000_READ_REG(hw, E1000_RXCW);
1668
1669         if ((rxcw & E1000_RXCW_SYNCH) && !(rxcw & E1000_RXCW_IV)) {
1670                 /* Receiver is synchronized with no invalid bits.  */
1671                 switch (mac->serdes_link_state) {
1672                 case e1000_serdes_link_autoneg_complete:
1673                         if (!(status & E1000_STATUS_LU)) {
1674                                 /* We have lost link, retry autoneg before
1675                                  * reporting link failure
1676                                  */
1677                                 mac->serdes_link_state =
1678                                     e1000_serdes_link_autoneg_progress;
1679                                 mac->serdes_has_link = FALSE;
1680                                 DEBUGOUT("AN_UP     -> AN_PROG\n");
1681                         } else {
1682                                 mac->serdes_has_link = TRUE;
1683                         }
1684                         break;
1685
1686                 case e1000_serdes_link_forced_up:
1687                         /* If we are receiving /C/ ordered sets, re-enable
1688                          * auto-negotiation in the TXCW register and disable
1689                          * forced link in the Device Control register in an
1690                          * attempt to auto-negotiate with our link partner.
1691                          */
1692                         if (rxcw & E1000_RXCW_C) {
1693                                 /* Enable autoneg, and unforce link up */
1694                                 E1000_WRITE_REG(hw, E1000_TXCW, mac->txcw);
1695                                 E1000_WRITE_REG(hw, E1000_CTRL,
1696                                     (ctrl & ~E1000_CTRL_SLU));
1697                                 mac->serdes_link_state =
1698                                     e1000_serdes_link_autoneg_progress;
1699                                 mac->serdes_has_link = FALSE;
1700                                 DEBUGOUT("FORCED_UP -> AN_PROG\n");
1701                         } else {
1702                                 mac->serdes_has_link = TRUE;
1703                         }
1704                         break;
1705
1706                 case e1000_serdes_link_autoneg_progress:
1707                         if (rxcw & E1000_RXCW_C) {
1708                                 /* We received /C/ ordered sets, meaning the
1709                                  * link partner has autonegotiated, and we can
1710                                  * trust the Link Up (LU) status bit.
1711                                  */
1712                                 if (status & E1000_STATUS_LU) {
1713                                         mac->serdes_link_state =
1714                                             e1000_serdes_link_autoneg_complete;
1715                                         DEBUGOUT("AN_PROG   -> AN_UP\n");
1716                                         mac->serdes_has_link = TRUE;
1717                                 } else {
1718                                         /* Autoneg completed, but failed. */
1719                                         mac->serdes_link_state =
1720                                             e1000_serdes_link_down;
1721                                         DEBUGOUT("AN_PROG   -> DOWN\n");
1722                                 }
1723                         } else {
1724                                 /* The link partner did not autoneg.
1725                                  * Force link up and full duplex, and change
1726                                  * state to forced.
1727                                  */
1728                                 E1000_WRITE_REG(hw, E1000_TXCW,
1729                                 (mac->txcw & ~E1000_TXCW_ANE));
1730                                 ctrl |= (E1000_CTRL_SLU | E1000_CTRL_FD);
1731                                 E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
1732
1733                                 /* Configure Flow Control after link up. */
1734                                 ret_val =
1735                                     e1000_config_fc_after_link_up_generic(hw);
1736                                 if (ret_val) {
1737                                         DEBUGOUT("Error config flow control\n");
1738                                         break;
1739                                 }
1740                                 mac->serdes_link_state =
1741                                                 e1000_serdes_link_forced_up;
1742                                 mac->serdes_has_link = TRUE;
1743                                 DEBUGOUT("AN_PROG   -> FORCED_UP\n");
1744                         }
1745                         break;
1746
1747                 case e1000_serdes_link_down:
1748                 default:
1749                         /* The link was down but the receiver has now gained
1750                          * valid sync, so lets see if we can bring the link
1751                          * up.
1752                          */
1753                         E1000_WRITE_REG(hw, E1000_TXCW, mac->txcw);
1754                         E1000_WRITE_REG(hw, E1000_CTRL, (ctrl &
1755                                         ~E1000_CTRL_SLU));
1756                         mac->serdes_link_state =
1757                                         e1000_serdes_link_autoneg_progress;
1758                         mac->serdes_has_link = FALSE;
1759                         DEBUGOUT("DOWN      -> AN_PROG\n");
1760                         break;
1761                 }
1762         } else {
1763                 if (!(rxcw & E1000_RXCW_SYNCH)) {
1764                         mac->serdes_has_link = FALSE;
1765                         mac->serdes_link_state = e1000_serdes_link_down;
1766                         DEBUGOUT("ANYSTATE  -> DOWN\n");
1767                 } else {
1768                         /* Check several times, if SYNCH bit and CONFIG
1769                          * bit both are consistently 1 then simply ignore
1770                          * the IV bit and restart Autoneg
1771                          */
1772                         for (i = 0; i < AN_RETRY_COUNT; i++) {
1773                                 usec_delay(10);
1774                                 rxcw = E1000_READ_REG(hw, E1000_RXCW);
1775                                 if ((rxcw & E1000_RXCW_SYNCH) &&
1776                                     (rxcw & E1000_RXCW_C))
1777                                         continue;
1778
1779                                 if (rxcw & E1000_RXCW_IV) {
1780                                         mac->serdes_has_link = FALSE;
1781                                         mac->serdes_link_state =
1782                                                         e1000_serdes_link_down;
1783                                         DEBUGOUT("ANYSTATE  -> DOWN\n");
1784                                         break;
1785                                 }
1786                         }
1787
1788                         if (i == AN_RETRY_COUNT) {
1789                                 txcw = E1000_READ_REG(hw, E1000_TXCW);
1790                                 txcw |= E1000_TXCW_ANE;
1791                                 E1000_WRITE_REG(hw, E1000_TXCW, txcw);
1792                                 mac->serdes_link_state =
1793                                         e1000_serdes_link_autoneg_progress;
1794                                 mac->serdes_has_link = FALSE;
1795                                 DEBUGOUT("ANYSTATE  -> AN_PROG\n");
1796                         }
1797                 }
1798         }
1799
1800         return ret_val;
1801 }
1802
1803 /**
1804  *  e1000_valid_led_default_82571 - Verify a valid default LED config
1805  *  @hw: pointer to the HW structure
1806  *  @data: pointer to the NVM (EEPROM)
1807  *
1808  *  Read the EEPROM for the current default LED configuration.  If the
1809  *  LED configuration is not valid, set to a valid LED configuration.
1810  **/
1811 static s32 e1000_valid_led_default_82571(struct e1000_hw *hw, u16 *data)
1812 {
1813         s32 ret_val;
1814
1815         DEBUGFUNC("e1000_valid_led_default_82571");
1816
1817         ret_val = hw->nvm.ops.read(hw, NVM_ID_LED_SETTINGS, 1, data);
1818         if (ret_val) {
1819                 DEBUGOUT("NVM Read Error\n");
1820                 return ret_val;
1821         }
1822
1823         switch (hw->mac.type) {
1824         case e1000_82573:
1825         case e1000_82574:
1826         case e1000_82583:
1827                 if (*data == ID_LED_RESERVED_F746)
1828                         *data = ID_LED_DEFAULT_82573;
1829                 break;
1830         default:
1831                 if (*data == ID_LED_RESERVED_0000 ||
1832                     *data == ID_LED_RESERVED_FFFF)
1833                         *data = ID_LED_DEFAULT;
1834                 break;
1835         }
1836
1837         return E1000_SUCCESS;
1838 }
1839
1840 /**
1841  *  e1000_get_laa_state_82571 - Get locally administered address state
1842  *  @hw: pointer to the HW structure
1843  *
1844  *  Retrieve and return the current locally administered address state.
1845  **/
1846 bool e1000_get_laa_state_82571(struct e1000_hw *hw)
1847 {
1848         DEBUGFUNC("e1000_get_laa_state_82571");
1849
1850         if (hw->mac.type != e1000_82571)
1851                 return FALSE;
1852
1853         return hw->dev_spec._82571.laa_is_present;
1854 }
1855
1856 /**
1857  *  e1000_set_laa_state_82571 - Set locally administered address state
1858  *  @hw: pointer to the HW structure
1859  *  @state: enable/disable locally administered address
1860  *
1861  *  Enable/Disable the current locally administered address state.
1862  **/
1863 void e1000_set_laa_state_82571(struct e1000_hw *hw, bool state)
1864 {
1865         DEBUGFUNC("e1000_set_laa_state_82571");
1866
1867         if (hw->mac.type != e1000_82571)
1868                 return;
1869
1870         hw->dev_spec._82571.laa_is_present = state;
1871
1872         /* If workaround is activated... */
1873         if (state)
1874                 /* Hold a copy of the LAA in RAR[14] This is done so that
1875                  * between the time RAR[0] gets clobbered and the time it
1876                  * gets fixed, the actual LAA is in one of the RARs and no
1877                  * incoming packets directed to this port are dropped.
1878                  * Eventually the LAA will be in RAR[0] and RAR[14].
1879                  */
1880                 hw->mac.ops.rar_set(hw, hw->mac.addr,
1881                                     hw->mac.rar_entry_count - 1);
1882         return;
1883 }
1884
1885 /**
1886  *  e1000_fix_nvm_checksum_82571 - Fix EEPROM checksum
1887  *  @hw: pointer to the HW structure
1888  *
1889  *  Verifies that the EEPROM has completed the update.  After updating the
1890  *  EEPROM, we need to check bit 15 in work 0x23 for the checksum fix.  If
1891  *  the checksum fix is not implemented, we need to set the bit and update
1892  *  the checksum.  Otherwise, if bit 15 is set and the checksum is incorrect,
1893  *  we need to return bad checksum.
1894  **/
1895 static s32 e1000_fix_nvm_checksum_82571(struct e1000_hw *hw)
1896 {
1897         struct e1000_nvm_info *nvm = &hw->nvm;
1898         s32 ret_val;
1899         u16 data;
1900
1901         DEBUGFUNC("e1000_fix_nvm_checksum_82571");
1902
1903         if (nvm->type != e1000_nvm_flash_hw)
1904                 return E1000_SUCCESS;
1905
1906         /* Check bit 4 of word 10h.  If it is 0, firmware is done updating
1907          * 10h-12h.  Checksum may need to be fixed.
1908          */
1909         ret_val = nvm->ops.read(hw, 0x10, 1, &data);
1910         if (ret_val)
1911                 return ret_val;
1912
1913         if (!(data & 0x10)) {
1914                 /* Read 0x23 and check bit 15.  This bit is a 1
1915                  * when the checksum has already been fixed.  If
1916                  * the checksum is still wrong and this bit is a
1917                  * 1, we need to return bad checksum.  Otherwise,
1918                  * we need to set this bit to a 1 and update the
1919                  * checksum.
1920                  */
1921                 ret_val = nvm->ops.read(hw, 0x23, 1, &data);
1922                 if (ret_val)
1923                         return ret_val;
1924
1925                 if (!(data & 0x8000)) {
1926                         data |= 0x8000;
1927                         ret_val = nvm->ops.write(hw, 0x23, 1, &data);
1928                         if (ret_val)
1929                                 return ret_val;
1930                         ret_val = nvm->ops.update(hw);
1931                         if (ret_val)
1932                                 return ret_val;
1933                 }
1934         }
1935
1936         return E1000_SUCCESS;
1937 }
1938
1939
1940 /**
1941  *  e1000_read_mac_addr_82571 - Read device MAC address
1942  *  @hw: pointer to the HW structure
1943  **/
1944 static s32 e1000_read_mac_addr_82571(struct e1000_hw *hw)
1945 {
1946         DEBUGFUNC("e1000_read_mac_addr_82571");
1947
1948         if (hw->mac.type == e1000_82571) {
1949                 s32 ret_val;
1950
1951                 /* If there's an alternate MAC address place it in RAR0
1952                  * so that it will override the Si installed default perm
1953                  * address.
1954                  */
1955                 ret_val = e1000_check_alt_mac_addr_generic(hw);
1956                 if (ret_val)
1957                         return ret_val;
1958         }
1959
1960         return e1000_read_mac_addr_generic(hw);
1961 }
1962
1963 /**
1964  * e1000_power_down_phy_copper_82571 - Remove link during PHY power down
1965  * @hw: pointer to the HW structure
1966  *
1967  * In the case of a PHY power down to save power, or to turn off link during a
1968  * driver unload, or wake on lan is not enabled, remove the link.
1969  **/
1970 static void e1000_power_down_phy_copper_82571(struct e1000_hw *hw)
1971 {
1972         struct e1000_phy_info *phy = &hw->phy;
1973         struct e1000_mac_info *mac = &hw->mac;
1974
1975         if (!phy->ops.check_reset_block)
1976                 return;
1977
1978         /* If the management interface is not enabled, then power down */
1979         if (!(mac->ops.check_mng_mode(hw) || phy->ops.check_reset_block(hw)))
1980                 e1000_power_down_phy_copper(hw);
1981
1982         return;
1983 }
1984
1985 /**
1986  *  e1000_clear_hw_cntrs_82571 - Clear device specific hardware counters
1987  *  @hw: pointer to the HW structure
1988  *
1989  *  Clears the hardware counters by reading the counter registers.
1990  **/
1991 static void e1000_clear_hw_cntrs_82571(struct e1000_hw *hw)
1992 {
1993         DEBUGFUNC("e1000_clear_hw_cntrs_82571");
1994
1995         e1000_clear_hw_cntrs_base_generic(hw);
1996
1997         E1000_READ_REG(hw, E1000_PRC64);
1998         E1000_READ_REG(hw, E1000_PRC127);
1999         E1000_READ_REG(hw, E1000_PRC255);
2000         E1000_READ_REG(hw, E1000_PRC511);
2001         E1000_READ_REG(hw, E1000_PRC1023);
2002         E1000_READ_REG(hw, E1000_PRC1522);
2003         E1000_READ_REG(hw, E1000_PTC64);
2004         E1000_READ_REG(hw, E1000_PTC127);
2005         E1000_READ_REG(hw, E1000_PTC255);
2006         E1000_READ_REG(hw, E1000_PTC511);
2007         E1000_READ_REG(hw, E1000_PTC1023);
2008         E1000_READ_REG(hw, E1000_PTC1522);
2009
2010         E1000_READ_REG(hw, E1000_ALGNERRC);
2011         E1000_READ_REG(hw, E1000_RXERRC);
2012         E1000_READ_REG(hw, E1000_TNCRS);
2013         E1000_READ_REG(hw, E1000_CEXTERR);
2014         E1000_READ_REG(hw, E1000_TSCTC);
2015         E1000_READ_REG(hw, E1000_TSCTFC);
2016
2017         E1000_READ_REG(hw, E1000_MGTPRC);
2018         E1000_READ_REG(hw, E1000_MGTPDC);
2019         E1000_READ_REG(hw, E1000_MGTPTC);
2020
2021         E1000_READ_REG(hw, E1000_IAC);
2022         E1000_READ_REG(hw, E1000_ICRXOC);
2023
2024         E1000_READ_REG(hw, E1000_ICRXPTC);
2025         E1000_READ_REG(hw, E1000_ICRXATC);
2026         E1000_READ_REG(hw, E1000_ICTXPTC);
2027         E1000_READ_REG(hw, E1000_ICTXATC);
2028         E1000_READ_REG(hw, E1000_ICTXQEC);
2029         E1000_READ_REG(hw, E1000_ICTXQMTC);
2030         E1000_READ_REG(hw, E1000_ICRXDMTC);
2031 }