em(4): Sync with Intel's em-6.9.6(FreeBSD)
[dragonfly.git] / sys / dev / netif / ig_hal / e1000_82571.c
1 /******************************************************************************
2
3   Copyright (c) 2001-2008, 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  * 82571EB Gigabit Ethernet Controller
37  * 82571EB Gigabit Ethernet Controller (Copper)
38  * 82571EB Gigabit Ethernet Controller (Fiber)
39  * 82571EB Dual Port Gigabit Mezzanine Adapter
40  * 82571EB Quad Port Gigabit Mezzanine Adapter
41  * 82571PT Gigabit PT Quad Port Server ExpressModule
42  * 82572EI Gigabit Ethernet Controller (Copper)
43  * 82572EI Gigabit Ethernet Controller (Fiber)
44  * 82572EI Gigabit Ethernet Controller
45  * 82573V Gigabit Ethernet Controller (Copper)
46  * 82573E Gigabit Ethernet Controller (Copper)
47  * 82573L Gigabit Ethernet Controller
48  * 82574L Gigabit Network Connection
49  */
50
51 #include "e1000_api.h"
52
53 static s32  e1000_init_phy_params_82571(struct e1000_hw *hw);
54 static s32  e1000_init_nvm_params_82571(struct e1000_hw *hw);
55 static s32  e1000_init_mac_params_82571(struct e1000_hw *hw);
56 static s32  e1000_acquire_nvm_82571(struct e1000_hw *hw);
57 static void e1000_release_nvm_82571(struct e1000_hw *hw);
58 static s32  e1000_write_nvm_82571(struct e1000_hw *hw, u16 offset,
59                                   u16 words, u16 *data);
60 static s32  e1000_update_nvm_checksum_82571(struct e1000_hw *hw);
61 static s32  e1000_validate_nvm_checksum_82571(struct e1000_hw *hw);
62 static s32  e1000_get_cfg_done_82571(struct e1000_hw *hw);
63 static s32  e1000_set_d0_lplu_state_82571(struct e1000_hw *hw,
64                                           bool active);
65 static s32  e1000_reset_hw_82571(struct e1000_hw *hw);
66 static s32  e1000_init_hw_82571(struct e1000_hw *hw);
67 static void e1000_clear_vfta_82571(struct e1000_hw *hw);
68 static bool e1000_check_mng_mode_82574(struct e1000_hw *hw);
69 static s32 e1000_led_on_82574(struct e1000_hw *hw);
70 static void e1000_update_mc_addr_list_82571(struct e1000_hw *hw,
71                                            u8 *mc_addr_list, u32 mc_addr_count,
72                                            u32 rar_used_count, u32 rar_count);
73 static s32  e1000_setup_link_82571(struct e1000_hw *hw);
74 static s32  e1000_setup_copper_link_82571(struct e1000_hw *hw);
75 static s32  e1000_setup_fiber_serdes_link_82571(struct e1000_hw *hw);
76 static s32  e1000_valid_led_default_82571(struct e1000_hw *hw, u16 *data);
77 static void e1000_clear_hw_cntrs_82571(struct e1000_hw *hw);
78 static s32  e1000_get_hw_semaphore_82571(struct e1000_hw *hw);
79 static s32  e1000_fix_nvm_checksum_82571(struct e1000_hw *hw);
80 static s32  e1000_get_phy_id_82571(struct e1000_hw *hw);
81 static void e1000_put_hw_semaphore_82571(struct e1000_hw *hw);
82 static void e1000_initialize_hw_bits_82571(struct e1000_hw *hw);
83 static s32  e1000_write_nvm_eewr_82571(struct e1000_hw *hw, u16 offset,
84                                        u16 words, u16 *data);
85 static s32  e1000_read_mac_addr_82571(struct e1000_hw *hw);
86 static void e1000_power_down_phy_copper_82571(struct e1000_hw *hw);
87
88 /**
89  *  e1000_init_phy_params_82571 - Init PHY func ptrs.
90  *  @hw: pointer to the HW structure
91  **/
92 static s32 e1000_init_phy_params_82571(struct e1000_hw *hw)
93 {
94         struct e1000_phy_info *phy = &hw->phy;
95         s32 ret_val = E1000_SUCCESS;
96
97         DEBUGFUNC("e1000_init_phy_params_82571");
98
99         if (hw->phy.media_type != e1000_media_type_copper) {
100                 phy->type = e1000_phy_none;
101                 goto out;
102         }
103
104         phy->addr                        = 1;
105         phy->autoneg_mask                = AUTONEG_ADVERTISE_SPEED_DEFAULT;
106         phy->reset_delay_us              = 100;
107
108         phy->ops.acquire                 = e1000_get_hw_semaphore_82571;
109         phy->ops.check_polarity          = e1000_check_polarity_igp;
110         phy->ops.check_reset_block       = e1000_check_reset_block_generic;
111         phy->ops.release                 = e1000_put_hw_semaphore_82571;
112         phy->ops.reset                   = e1000_phy_hw_reset_generic;
113         phy->ops.set_d0_lplu_state       = e1000_set_d0_lplu_state_82571;
114         phy->ops.set_d3_lplu_state       = e1000_set_d3_lplu_state_generic;
115         phy->ops.power_up                = e1000_power_up_phy_copper;
116         phy->ops.power_down              = e1000_power_down_phy_copper_82571;
117
118         switch (hw->mac.type) {
119         case e1000_82571:
120         case e1000_82572:
121                 phy->type                   = e1000_phy_igp_2;
122                 phy->ops.get_cfg_done       = e1000_get_cfg_done_82571;
123                 phy->ops.get_info           = e1000_get_phy_info_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
129                 /* This uses above function pointers */
130                 ret_val = e1000_get_phy_id_82571(hw);
131
132                 /* Verify PHY ID */
133                 if (phy->id != IGP01E1000_I_PHY_ID) {
134                         ret_val = -E1000_ERR_PHY;
135                         goto out;
136                 }
137                 break;
138         case e1000_82573:
139                 phy->type                   = e1000_phy_m88;
140                 phy->ops.get_cfg_done       = e1000_get_cfg_done_generic;
141                 phy->ops.get_info           = e1000_get_phy_info_m88;
142                 phy->ops.commit             = e1000_phy_sw_reset_generic;
143                 phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_m88;
144                 phy->ops.get_cable_length   = e1000_get_cable_length_m88;
145                 phy->ops.read_reg           = e1000_read_phy_reg_m88;
146                 phy->ops.write_reg          = e1000_write_phy_reg_m88;
147
148                 /* This uses above function pointers */
149                 ret_val = e1000_get_phy_id_82571(hw);
150
151                 /* Verify PHY ID */
152                 if (phy->id != M88E1111_I_PHY_ID) {
153                         ret_val = -E1000_ERR_PHY;
154                         DEBUGOUT1("PHY ID unknown: type = 0x%08x\n", phy->id);
155                         goto out;
156                 }
157                 break;
158         case e1000_82574:
159                 phy->type                   = e1000_phy_bm;
160                 phy->ops.get_cfg_done       = e1000_get_cfg_done_generic;
161                 phy->ops.get_info           = e1000_get_phy_info_m88;
162                 phy->ops.commit             = e1000_phy_sw_reset_generic;
163                 phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_m88;
164                 phy->ops.get_cable_length   = e1000_get_cable_length_m88;
165                 phy->ops.read_reg           = e1000_read_phy_reg_bm2;
166                 phy->ops.write_reg          = e1000_write_phy_reg_bm2;
167
168                 /* This uses above function pointers */
169                 ret_val = e1000_get_phy_id_82571(hw);
170                 /* Verify PHY ID */
171                 if (phy->id != BME1000_E_PHY_ID_R2) {
172                         ret_val = -E1000_ERR_PHY;
173                         DEBUGOUT1("PHY ID unknown: type = 0x%08x\n", phy->id);
174                         goto out;
175                 }
176                 break;
177         default:
178                 ret_val = -E1000_ERR_PHY;
179                 goto out;
180                 break;
181         }
182
183 out:
184         return ret_val;
185 }
186
187 /**
188  *  e1000_init_nvm_params_82571 - Init NVM func ptrs.
189  *  @hw: pointer to the HW structure
190  **/
191 static s32 e1000_init_nvm_params_82571(struct e1000_hw *hw)
192 {
193         struct e1000_nvm_info *nvm = &hw->nvm;
194         u32 eecd = E1000_READ_REG(hw, E1000_EECD);
195         u16 size;
196
197         DEBUGFUNC("e1000_init_nvm_params_82571");
198
199         nvm->opcode_bits = 8;
200         nvm->delay_usec = 1;
201         switch (nvm->override) {
202         case e1000_nvm_override_spi_large:
203                 nvm->page_size = 32;
204                 nvm->address_bits = 16;
205                 break;
206         case e1000_nvm_override_spi_small:
207                 nvm->page_size = 8;
208                 nvm->address_bits = 8;
209                 break;
210         default:
211                 nvm->page_size = eecd & E1000_EECD_ADDR_BITS ? 32 : 8;
212                 nvm->address_bits = eecd & E1000_EECD_ADDR_BITS ? 16 : 8;
213                 break;
214         }
215
216         switch (hw->mac.type) {
217         case e1000_82573:
218         case e1000_82574:
219                 if (((eecd >> 15) & 0x3) == 0x3) {
220                         nvm->type = e1000_nvm_flash_hw;
221                         nvm->word_size = 2048;
222                         /*
223                          * Autonomous Flash update bit must be cleared due
224                          * to Flash update issue.
225                          */
226                         eecd &= ~E1000_EECD_AUPDEN;
227                         E1000_WRITE_REG(hw, E1000_EECD, eecd);
228                         break;
229                 }
230                 /* Fall Through */
231         default:
232                 nvm->type = e1000_nvm_eeprom_spi;
233                 size = (u16)((eecd & E1000_EECD_SIZE_EX_MASK) >>
234                                   E1000_EECD_SIZE_EX_SHIFT);
235                 /*
236                  * Added to a constant, "size" becomes the left-shift value
237                  * for setting word_size.
238                  */
239                 size += NVM_WORD_SIZE_BASE_SHIFT;
240
241                 /* EEPROM access above 16k is unsupported */
242                 if (size > 14)
243                         size = 14;
244                 nvm->word_size  = 1 << size;
245                 break;
246         }
247
248         /* Function Pointers */
249         nvm->ops.acquire       = e1000_acquire_nvm_82571;
250         nvm->ops.read          = e1000_read_nvm_eerd;
251         nvm->ops.release       = e1000_release_nvm_82571;
252         nvm->ops.update        = e1000_update_nvm_checksum_82571;
253         nvm->ops.validate      = e1000_validate_nvm_checksum_82571;
254         nvm->ops.valid_led_default = e1000_valid_led_default_82571;
255         nvm->ops.write         = e1000_write_nvm_82571;
256
257         return E1000_SUCCESS;
258 }
259
260 /**
261  *  e1000_init_mac_params_82571 - Init MAC func ptrs.
262  *  @hw: pointer to the HW structure
263  **/
264 static s32 e1000_init_mac_params_82571(struct e1000_hw *hw)
265 {
266         struct e1000_mac_info *mac = &hw->mac;
267         s32 ret_val = E1000_SUCCESS;
268
269         DEBUGFUNC("e1000_init_mac_params_82571");
270
271         /* Set media type */
272         switch (hw->device_id) {
273         case E1000_DEV_ID_82571EB_FIBER:
274         case E1000_DEV_ID_82572EI_FIBER:
275         case E1000_DEV_ID_82571EB_QUAD_FIBER:
276                 hw->phy.media_type = e1000_media_type_fiber;
277                 break;
278         case E1000_DEV_ID_82571EB_SERDES:
279         case E1000_DEV_ID_82571EB_SERDES_DUAL:
280         case E1000_DEV_ID_82571EB_SERDES_QUAD:
281         case E1000_DEV_ID_82572EI_SERDES:
282                 hw->phy.media_type = e1000_media_type_internal_serdes;
283                 break;
284         default:
285                 hw->phy.media_type = e1000_media_type_copper;
286                 break;
287         }
288
289         /* Set mta register count */
290         mac->mta_reg_count = 128;
291         /* Set rar entry count */
292         mac->rar_entry_count = E1000_RAR_ENTRIES;
293         /* Set if part includes ASF firmware */
294         mac->asf_firmware_present = TRUE;
295         /* Set if manageability features are enabled. */
296         mac->arc_subsystem_valid =
297                 (E1000_READ_REG(hw, E1000_FWSM) & E1000_FWSM_MODE_MASK)
298                         ? TRUE : FALSE;
299
300         /* Function pointers */
301
302         /* bus type/speed/width */
303         mac->ops.get_bus_info = e1000_get_bus_info_pcie_generic;
304         /* function id */
305         switch (hw->mac.type) {
306         case e1000_82573:
307         case e1000_82574:
308                 mac->ops.set_lan_id = e1000_set_lan_id_single_port;
309                 break;
310         default:
311                 break;
312         }
313         /* reset */
314         mac->ops.reset_hw = e1000_reset_hw_82571;
315         /* hw initialization */
316         mac->ops.init_hw = e1000_init_hw_82571;
317         /* link setup */
318         mac->ops.setup_link = e1000_setup_link_82571;
319         /* physical interface link setup */
320         mac->ops.setup_physical_interface =
321                 (hw->phy.media_type == e1000_media_type_copper)
322                         ? e1000_setup_copper_link_82571
323                         : e1000_setup_fiber_serdes_link_82571;
324         /* check for link */
325         switch (hw->phy.media_type) {
326         case e1000_media_type_copper:
327                 mac->ops.check_for_link = e1000_check_for_copper_link_generic;
328                 break;
329         case e1000_media_type_fiber:
330                 mac->ops.check_for_link = e1000_check_for_fiber_link_generic;
331                 break;
332         case e1000_media_type_internal_serdes:
333                 mac->ops.check_for_link = e1000_check_for_serdes_link_generic;
334                 break;
335         default:
336                 ret_val = -E1000_ERR_CONFIG;
337                 goto out;
338                 break;
339         }
340         /* check management mode */
341         switch (hw->mac.type) {
342         case e1000_82574:
343                 mac->ops.check_mng_mode = e1000_check_mng_mode_82574;
344                 break;
345         default:
346                 mac->ops.check_mng_mode = e1000_check_mng_mode_generic;
347                 break;
348         }
349         /* multicast address update */
350         mac->ops.update_mc_addr_list = e1000_update_mc_addr_list_82571;
351         /* writing VFTA */
352         mac->ops.write_vfta = e1000_write_vfta_generic;
353         /* clearing VFTA */
354         mac->ops.clear_vfta = e1000_clear_vfta_82571;
355         /* setting MTA */
356         mac->ops.mta_set = e1000_mta_set_generic;
357         /* read mac address */
358         mac->ops.read_mac_addr = e1000_read_mac_addr_82571;
359         /* blink LED */
360         mac->ops.blink_led = e1000_blink_led_generic;
361         /* setup LED */
362         mac->ops.setup_led = e1000_setup_led_generic;
363         /* cleanup LED */
364         mac->ops.cleanup_led = e1000_cleanup_led_generic;
365         /* turn on/off LED */
366         switch (hw->mac.type) {
367         case e1000_82574:
368                 mac->ops.led_on = e1000_led_on_82574;
369                 break;
370         default:
371                 mac->ops.led_on = e1000_led_on_generic;
372                 break;
373         }
374         mac->ops.led_off = e1000_led_off_generic;
375         /* clear hardware counters */
376         mac->ops.clear_hw_cntrs = e1000_clear_hw_cntrs_82571;
377         /* link info */
378         mac->ops.get_link_up_info =
379                 (hw->phy.media_type == e1000_media_type_copper)
380                         ? e1000_get_speed_and_duplex_copper_generic
381                         : e1000_get_speed_and_duplex_fiber_serdes_generic;
382
383 out:
384         return ret_val;
385 }
386
387 /**
388  *  e1000_init_function_pointers_82571 - Init func ptrs.
389  *  @hw: pointer to the HW structure
390  *
391  *  Called to initialize all function pointers and parameters.
392  **/
393 void e1000_init_function_pointers_82571(struct e1000_hw *hw)
394 {
395         DEBUGFUNC("e1000_init_function_pointers_82571");
396
397         hw->mac.ops.init_params = e1000_init_mac_params_82571;
398         hw->nvm.ops.init_params = e1000_init_nvm_params_82571;
399         hw->phy.ops.init_params = e1000_init_phy_params_82571;
400 }
401
402 /**
403  *  e1000_get_phy_id_82571 - Retrieve the PHY ID and revision
404  *  @hw: pointer to the HW structure
405  *
406  *  Reads the PHY registers and stores the PHY ID and possibly the PHY
407  *  revision in the hardware structure.
408  **/
409 static s32 e1000_get_phy_id_82571(struct e1000_hw *hw)
410 {
411         struct e1000_phy_info *phy = &hw->phy;
412         s32 ret_val = E1000_SUCCESS;
413         u16 phy_id = 0;
414
415         DEBUGFUNC("e1000_get_phy_id_82571");
416
417         switch (hw->mac.type) {
418         case e1000_82571:
419         case e1000_82572:
420                 /*
421                  * The 82571 firmware may still be configuring the PHY.
422                  * In this case, we cannot access the PHY until the
423                  * configuration is done.  So we explicitly set the
424                  * PHY ID.
425                  */
426                 phy->id = IGP01E1000_I_PHY_ID;
427                 break;
428         case e1000_82573:
429                 ret_val = e1000_get_phy_id(hw);
430                 break;
431         case e1000_82574:
432                 ret_val = phy->ops.read_reg(hw, PHY_ID1, &phy_id);
433                 if (ret_val)
434                         goto out;
435
436                 phy->id = (u32)(phy_id << 16);
437                 usec_delay(20);
438                 ret_val = phy->ops.read_reg(hw, PHY_ID2, &phy_id);
439                 if (ret_val)
440                         goto out;
441
442                 phy->id |= (u32)(phy_id);
443                 phy->revision = (u32)(phy_id & ~PHY_REVISION_MASK);
444                 break;
445         default:
446                 ret_val = -E1000_ERR_PHY;
447                 break;
448         }
449
450 out:
451         return ret_val;
452 }
453
454 /**
455  *  e1000_get_hw_semaphore_82571 - Acquire hardware semaphore
456  *  @hw: pointer to the HW structure
457  *
458  *  Acquire the HW semaphore to access the PHY or NVM
459  **/
460 static s32 e1000_get_hw_semaphore_82571(struct e1000_hw *hw)
461 {
462         u32 swsm;
463         s32 ret_val = E1000_SUCCESS;
464         s32 timeout = hw->nvm.word_size + 1;
465         s32 i = 0;
466
467         DEBUGFUNC("e1000_get_hw_semaphore_82571");
468
469         /* Get the FW semaphore. */
470         for (i = 0; i < timeout; i++) {
471                 swsm = E1000_READ_REG(hw, E1000_SWSM);
472                 E1000_WRITE_REG(hw, E1000_SWSM, swsm | E1000_SWSM_SWESMBI);
473
474                 /* Semaphore acquired if bit latched */
475                 if (E1000_READ_REG(hw, E1000_SWSM) & E1000_SWSM_SWESMBI)
476                         break;
477
478                 usec_delay(50);
479         }
480
481         if (i == timeout) {
482                 /* Release semaphores */
483                 e1000_put_hw_semaphore_generic(hw);
484                 DEBUGOUT("Driver can't access the NVM\n");
485                 ret_val = -E1000_ERR_NVM;
486                 goto out;
487         }
488
489 out:
490         return ret_val;
491 }
492
493 /**
494  *  e1000_put_hw_semaphore_82571 - Release hardware semaphore
495  *  @hw: pointer to the HW structure
496  *
497  *  Release hardware semaphore used to access the PHY or NVM
498  **/
499 static void e1000_put_hw_semaphore_82571(struct e1000_hw *hw)
500 {
501         u32 swsm;
502
503         DEBUGFUNC("e1000_put_hw_semaphore_82571");
504
505         swsm = E1000_READ_REG(hw, E1000_SWSM);
506
507         swsm &= ~E1000_SWSM_SWESMBI;
508
509         E1000_WRITE_REG(hw, E1000_SWSM, swsm);
510 }
511
512 /**
513  *  e1000_acquire_nvm_82571 - Request for access to the EEPROM
514  *  @hw: pointer to the HW structure
515  *
516  *  To gain access to the EEPROM, first we must obtain a hardware semaphore.
517  *  Then for non-82573 hardware, set the EEPROM access request bit and wait
518  *  for EEPROM access grant bit.  If the access grant bit is not set, release
519  *  hardware semaphore.
520  **/
521 static s32 e1000_acquire_nvm_82571(struct e1000_hw *hw)
522 {
523         s32 ret_val;
524
525         DEBUGFUNC("e1000_acquire_nvm_82571");
526
527         ret_val = e1000_get_hw_semaphore_82571(hw);
528         if (ret_val)
529                 goto out;
530
531         if (hw->mac.type != e1000_82573 && hw->mac.type != e1000_82574)
532                 ret_val = e1000_acquire_nvm_generic(hw);
533
534         if (ret_val)
535                 e1000_put_hw_semaphore_82571(hw);
536
537 out:
538         return ret_val;
539 }
540
541 /**
542  *  e1000_release_nvm_82571 - Release exclusive access to EEPROM
543  *  @hw: pointer to the HW structure
544  *
545  *  Stop any current commands to the EEPROM and clear the EEPROM request bit.
546  **/
547 static void e1000_release_nvm_82571(struct e1000_hw *hw)
548 {
549         DEBUGFUNC("e1000_release_nvm_82571");
550
551         e1000_release_nvm_generic(hw);
552         e1000_put_hw_semaphore_82571(hw);
553 }
554
555 /**
556  *  e1000_write_nvm_82571 - Write to EEPROM using appropriate interface
557  *  @hw: pointer to the HW structure
558  *  @offset: offset within the EEPROM to be written to
559  *  @words: number of words to write
560  *  @data: 16 bit word(s) to be written to the EEPROM
561  *
562  *  For non-82573 silicon, write data to EEPROM at offset using SPI interface.
563  *
564  *  If e1000_update_nvm_checksum is not called after this function, the
565  *  EEPROM will most likely contain an invalid checksum.
566  **/
567 static s32 e1000_write_nvm_82571(struct e1000_hw *hw, u16 offset, u16 words,
568                                  u16 *data)
569 {
570         s32 ret_val = E1000_SUCCESS;
571
572         DEBUGFUNC("e1000_write_nvm_82571");
573
574         switch (hw->mac.type) {
575         case e1000_82573:
576         case e1000_82574:
577                 ret_val = e1000_write_nvm_eewr_82571(hw, offset, words, data);
578                 break;
579         case e1000_82571:
580         case e1000_82572:
581                 ret_val = e1000_write_nvm_spi(hw, offset, words, data);
582                 break;
583         default:
584                 ret_val = -E1000_ERR_NVM;
585                 break;
586         }
587
588         return ret_val;
589 }
590
591 /**
592  *  e1000_update_nvm_checksum_82571 - Update EEPROM checksum
593  *  @hw: pointer to the HW structure
594  *
595  *  Updates the EEPROM checksum by reading/adding each word of the EEPROM
596  *  up to the checksum.  Then calculates the EEPROM checksum and writes the
597  *  value to the EEPROM.
598  **/
599 static s32 e1000_update_nvm_checksum_82571(struct e1000_hw *hw)
600 {
601         u32 eecd;
602         s32 ret_val;
603         u16 i;
604
605         DEBUGFUNC("e1000_update_nvm_checksum_82571");
606
607         ret_val = e1000_update_nvm_checksum_generic(hw);
608         if (ret_val)
609                 goto out;
610
611         /*
612          * If our nvm is an EEPROM, then we're done
613          * otherwise, commit the checksum to the flash NVM.
614          */
615         if (hw->nvm.type != e1000_nvm_flash_hw)
616                 goto out;
617
618         /* Check for pending operations. */
619         for (i = 0; i < E1000_FLASH_UPDATES; i++) {
620                 msec_delay(1);
621                 if ((E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_FLUPD) == 0)
622                         break;
623         }
624
625         if (i == E1000_FLASH_UPDATES) {
626                 ret_val = -E1000_ERR_NVM;
627                 goto out;
628         }
629
630         /* Reset the firmware if using STM opcode. */
631         if ((E1000_READ_REG(hw, E1000_FLOP) & 0xFF00) == E1000_STM_OPCODE) {
632                 /*
633                  * The enabling of and the actual reset must be done
634                  * in two write cycles.
635                  */
636                 E1000_WRITE_REG(hw, E1000_HICR, E1000_HICR_FW_RESET_ENABLE);
637                 E1000_WRITE_FLUSH(hw);
638                 E1000_WRITE_REG(hw, E1000_HICR, E1000_HICR_FW_RESET);
639         }
640
641         /* Commit the write to flash */
642         eecd = E1000_READ_REG(hw, E1000_EECD) | E1000_EECD_FLUPD;
643         E1000_WRITE_REG(hw, E1000_EECD, eecd);
644
645         for (i = 0; i < E1000_FLASH_UPDATES; i++) {
646                 msec_delay(1);
647                 if ((E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_FLUPD) == 0)
648                         break;
649         }
650
651         if (i == E1000_FLASH_UPDATES) {
652                 ret_val = -E1000_ERR_NVM;
653                 goto out;
654         }
655
656 out:
657         return ret_val;
658 }
659
660 /**
661  *  e1000_validate_nvm_checksum_82571 - Validate EEPROM checksum
662  *  @hw: pointer to the HW structure
663  *
664  *  Calculates the EEPROM checksum by reading/adding each word of the EEPROM
665  *  and then verifies that the sum of the EEPROM is equal to 0xBABA.
666  **/
667 static s32 e1000_validate_nvm_checksum_82571(struct e1000_hw *hw)
668 {
669         DEBUGFUNC("e1000_validate_nvm_checksum_82571");
670
671         if (hw->nvm.type == e1000_nvm_flash_hw)
672                 e1000_fix_nvm_checksum_82571(hw);
673
674         return e1000_validate_nvm_checksum_generic(hw);
675 }
676
677 /**
678  *  e1000_write_nvm_eewr_82571 - Write to EEPROM for 82573 silicon
679  *  @hw: pointer to the HW structure
680  *  @offset: offset within the EEPROM to be written to
681  *  @words: number of words to write
682  *  @data: 16 bit word(s) to be written to the EEPROM
683  *
684  *  After checking for invalid values, poll the EEPROM to ensure the previous
685  *  command has completed before trying to write the next word.  After write
686  *  poll for completion.
687  *
688  *  If e1000_update_nvm_checksum is not called after this function, the
689  *  EEPROM will most likely contain an invalid checksum.
690  **/
691 static s32 e1000_write_nvm_eewr_82571(struct e1000_hw *hw, u16 offset,
692                                       u16 words, u16 *data)
693 {
694         struct e1000_nvm_info *nvm = &hw->nvm;
695         u32 i, eewr = 0;
696         s32 ret_val = 0;
697
698         DEBUGFUNC("e1000_write_nvm_eewr_82571");
699
700         /*
701          * A check for invalid values:  offset too large, too many words,
702          * and not enough words.
703          */
704         if ((offset >= nvm->word_size) || (words > (nvm->word_size - offset)) ||
705             (words == 0)) {
706                 DEBUGOUT("nvm parameter(s) out of bounds\n");
707                 ret_val = -E1000_ERR_NVM;
708                 goto out;
709         }
710
711         for (i = 0; i < words; i++) {
712                 eewr = (data[i] << E1000_NVM_RW_REG_DATA) |
713                        ((offset+i) << E1000_NVM_RW_ADDR_SHIFT) |
714                        E1000_NVM_RW_REG_START;
715
716                 ret_val = e1000_poll_eerd_eewr_done(hw, E1000_NVM_POLL_WRITE);
717                 if (ret_val)
718                         break;
719
720                 E1000_WRITE_REG(hw, E1000_EEWR, eewr);
721
722                 ret_val = e1000_poll_eerd_eewr_done(hw, E1000_NVM_POLL_WRITE);
723                 if (ret_val)
724                         break;
725         }
726
727 out:
728         return ret_val;
729 }
730
731 /**
732  *  e1000_get_cfg_done_82571 - Poll for configuration done
733  *  @hw: pointer to the HW structure
734  *
735  *  Reads the management control register for the config done bit to be set.
736  **/
737 static s32 e1000_get_cfg_done_82571(struct e1000_hw *hw)
738 {
739         s32 timeout = PHY_CFG_TIMEOUT;
740         s32 ret_val = E1000_SUCCESS;
741
742         DEBUGFUNC("e1000_get_cfg_done_82571");
743
744         while (timeout) {
745                 if (E1000_READ_REG(hw, E1000_EEMNGCTL) & E1000_NVM_CFG_DONE_PORT_0)
746                         break;
747                 msec_delay(1);
748                 timeout--;
749         }
750         if (!timeout) {
751                 DEBUGOUT("MNG configuration cycle has not completed.\n");
752                 ret_val = -E1000_ERR_RESET;
753                 goto out;
754         }
755
756 out:
757         return ret_val;
758 }
759
760 /**
761  *  e1000_set_d0_lplu_state_82571 - Set Low Power Linkup D0 state
762  *  @hw: pointer to the HW structure
763  *  @active: TRUE to enable LPLU, FALSE to disable
764  *
765  *  Sets the LPLU D0 state according to the active flag.  When activating LPLU
766  *  this function also disables smart speed and vice versa.  LPLU will not be
767  *  activated unless the device autonegotiation advertisement meets standards
768  *  of either 10 or 10/100 or 10/100/1000 at all duplexes.  This is a function
769  *  pointer entry point only called by PHY setup routines.
770  **/
771 static s32 e1000_set_d0_lplu_state_82571(struct e1000_hw *hw, bool active)
772 {
773         struct e1000_phy_info *phy = &hw->phy;
774         s32 ret_val = E1000_SUCCESS;
775         u16 data;
776
777         DEBUGFUNC("e1000_set_d0_lplu_state_82571");
778
779         if (!(phy->ops.read_reg))
780                 goto out;
781
782         ret_val = phy->ops.read_reg(hw, IGP02E1000_PHY_POWER_MGMT, &data);
783         if (ret_val)
784                 goto out;
785
786         if (active) {
787                 data |= IGP02E1000_PM_D0_LPLU;
788                 ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT,
789                                              data);
790                 if (ret_val)
791                         goto out;
792
793                 /* When LPLU is enabled, we should disable SmartSpeed */
794                 ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
795                                             &data);
796                 data &= ~IGP01E1000_PSCFR_SMART_SPEED;
797                 ret_val = phy->ops.write_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
798                                              data);
799                 if (ret_val)
800                         goto out;
801         } else {
802                 data &= ~IGP02E1000_PM_D0_LPLU;
803                 ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT,
804                                              data);
805                 /*
806                  * LPLU and SmartSpeed are mutually exclusive.  LPLU is used
807                  * during Dx states where the power conservation is most
808                  * important.  During driver activity we should enable
809                  * SmartSpeed, so performance is maintained.
810                  */
811                 if (phy->smart_speed == e1000_smart_speed_on) {
812                         ret_val = phy->ops.read_reg(hw,
813                                                     IGP01E1000_PHY_PORT_CONFIG,
814                                                     &data);
815                         if (ret_val)
816                                 goto out;
817
818                         data |= IGP01E1000_PSCFR_SMART_SPEED;
819                         ret_val = phy->ops.write_reg(hw,
820                                                      IGP01E1000_PHY_PORT_CONFIG,
821                                                      data);
822                         if (ret_val)
823                                 goto out;
824                 } else if (phy->smart_speed == e1000_smart_speed_off) {
825                         ret_val = phy->ops.read_reg(hw,
826                                                     IGP01E1000_PHY_PORT_CONFIG,
827                                                     &data);
828                         if (ret_val)
829                                 goto out;
830
831                         data &= ~IGP01E1000_PSCFR_SMART_SPEED;
832                         ret_val = phy->ops.write_reg(hw,
833                                                      IGP01E1000_PHY_PORT_CONFIG,
834                                                      data);
835                         if (ret_val)
836                                 goto out;
837                 }
838         }
839
840 out:
841         return ret_val;
842 }
843
844 /**
845  *  e1000_reset_hw_82571 - Reset hardware
846  *  @hw: pointer to the HW structure
847  *
848  *  This resets the hardware into a known state.
849  **/
850 static s32 e1000_reset_hw_82571(struct e1000_hw *hw)
851 {
852         u32 ctrl, extcnf_ctrl, ctrl_ext, icr;
853         s32 ret_val;
854         u16 i = 0;
855
856         DEBUGFUNC("e1000_reset_hw_82571");
857
858         /*
859          * Prevent the PCI-E bus from sticking if there is no TLP connection
860          * on the last TLP read/write transaction when MAC is reset.
861          */
862         ret_val = e1000_disable_pcie_master_generic(hw);
863         if (ret_val)
864                 DEBUGOUT("PCI-E Master disable polling has failed.\n");
865
866         DEBUGOUT("Masking off all interrupts\n");
867         E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
868
869         E1000_WRITE_REG(hw, E1000_RCTL, 0);
870         E1000_WRITE_REG(hw, E1000_TCTL, E1000_TCTL_PSP);
871         E1000_WRITE_FLUSH(hw);
872
873         msec_delay(10);
874
875         /*
876          * Must acquire the MDIO ownership before MAC reset.
877          * Ownership defaults to firmware after a reset.
878          */
879         if (hw->mac.type == e1000_82573 || hw->mac.type == e1000_82574) {
880                 extcnf_ctrl = E1000_READ_REG(hw, E1000_EXTCNF_CTRL);
881                 extcnf_ctrl |= E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP;
882
883                 do {
884                         E1000_WRITE_REG(hw, E1000_EXTCNF_CTRL, extcnf_ctrl);
885                         extcnf_ctrl = E1000_READ_REG(hw, E1000_EXTCNF_CTRL);
886
887                         if (extcnf_ctrl & E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP)
888                                 break;
889
890                         extcnf_ctrl |= E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP;
891
892                         msec_delay(2);
893                         i++;
894                 } while (i < MDIO_OWNERSHIP_TIMEOUT);
895         }
896
897         ctrl = E1000_READ_REG(hw, E1000_CTRL);
898
899         DEBUGOUT("Issuing a global reset to MAC\n");
900         E1000_WRITE_REG(hw, E1000_CTRL, ctrl | E1000_CTRL_RST);
901
902         if (hw->nvm.type == e1000_nvm_flash_hw) {
903                 usec_delay(10);
904                 ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
905                 ctrl_ext |= E1000_CTRL_EXT_EE_RST;
906                 E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext);
907                 E1000_WRITE_FLUSH(hw);
908         }
909
910         ret_val = e1000_get_auto_rd_done_generic(hw);
911         if (ret_val)
912                 /* We don't want to continue accessing MAC registers. */
913                 goto out;
914
915         /*
916          * Phy configuration from NVM just starts after EECD_AUTO_RD is set.
917          * Need to wait for Phy configuration completion before accessing
918          * NVM and Phy.
919          */
920         if (hw->mac.type == e1000_82573 || hw->mac.type == e1000_82574)
921                 msec_delay(25);
922
923         /* Clear any pending interrupt events. */
924         E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
925         icr = E1000_READ_REG(hw, E1000_ICR);
926
927         if (!(e1000_check_alt_mac_addr_generic(hw)))
928                 e1000_set_laa_state_82571(hw, TRUE);
929
930 out:
931         return ret_val;
932 }
933
934 /**
935  *  e1000_init_hw_82571 - Initialize hardware
936  *  @hw: pointer to the HW structure
937  *
938  *  This inits the hardware readying it for operation.
939  **/
940 static s32 e1000_init_hw_82571(struct e1000_hw *hw)
941 {
942         struct e1000_mac_info *mac = &hw->mac;
943         u32 reg_data;
944         s32 ret_val;
945         u16 i, rar_count = mac->rar_entry_count;
946
947         DEBUGFUNC("e1000_init_hw_82571");
948
949         e1000_initialize_hw_bits_82571(hw);
950
951         /* Initialize identification LED */
952         ret_val = e1000_id_led_init_generic(hw);
953         if (ret_val) {
954                 DEBUGOUT("Error initializing identification LED\n");
955                 /* This is not fatal and we should not stop init due to this */
956         }
957
958         /* Disabling VLAN filtering */
959         DEBUGOUT("Initializing the IEEE VLAN\n");
960         mac->ops.clear_vfta(hw);
961
962         /* Setup the receive address. */
963         /*
964          * If, however, a locally administered address was assigned to the
965          * 82571, we must reserve a RAR for it to work around an issue where
966          * resetting one port will reload the MAC on the other port.
967          */
968         if (e1000_get_laa_state_82571(hw))
969                 rar_count--;
970         e1000_init_rx_addrs_generic(hw, rar_count);
971
972         /* Zero out the Multicast HASH table */
973         DEBUGOUT("Zeroing the MTA\n");
974         for (i = 0; i < mac->mta_reg_count; i++)
975                 E1000_WRITE_REG_ARRAY(hw, E1000_MTA, i, 0);
976
977         /* Setup link and flow control */
978         ret_val = mac->ops.setup_link(hw);
979
980         /* Set the transmit descriptor write-back policy */
981         reg_data = E1000_READ_REG(hw, E1000_TXDCTL(0));
982         reg_data = (reg_data & ~E1000_TXDCTL_WTHRESH) |
983                    E1000_TXDCTL_FULL_TX_DESC_WB |
984                    E1000_TXDCTL_COUNT_DESC;
985         E1000_WRITE_REG(hw, E1000_TXDCTL(0), reg_data);
986
987         /* ...for both queues. */
988         if (mac->type != e1000_82573 && mac->type != e1000_82574) {
989                 reg_data = E1000_READ_REG(hw, E1000_TXDCTL(1));
990                 reg_data = (reg_data & ~E1000_TXDCTL_WTHRESH) |
991                            E1000_TXDCTL_FULL_TX_DESC_WB |
992                            E1000_TXDCTL_COUNT_DESC;
993                 E1000_WRITE_REG(hw, E1000_TXDCTL(1), reg_data);
994         } else {
995                 e1000_enable_tx_pkt_filtering_generic(hw);
996                 reg_data = E1000_READ_REG(hw, E1000_GCR);
997                 reg_data |= E1000_GCR_L1_ACT_WITHOUT_L0S_RX;
998                 E1000_WRITE_REG(hw, E1000_GCR, reg_data);
999         }
1000
1001         /*
1002          * Clear all of the statistics registers (clear on read).  It is
1003          * important that we do this after we have tried to establish link
1004          * because the symbol error count will increment wildly if there
1005          * is no link.
1006          */
1007         e1000_clear_hw_cntrs_82571(hw);
1008
1009         return ret_val;
1010 }
1011
1012 /**
1013  *  e1000_initialize_hw_bits_82571 - Initialize hardware-dependent bits
1014  *  @hw: pointer to the HW structure
1015  *
1016  *  Initializes required hardware-dependent bits needed for normal operation.
1017  **/
1018 static void e1000_initialize_hw_bits_82571(struct e1000_hw *hw)
1019 {
1020         u32 reg;
1021
1022         DEBUGFUNC("e1000_initialize_hw_bits_82571");
1023
1024         /* Transmit Descriptor Control 0 */
1025         reg = E1000_READ_REG(hw, E1000_TXDCTL(0));
1026         reg |= (1 << 22);
1027         E1000_WRITE_REG(hw, E1000_TXDCTL(0), reg);
1028
1029         /* Transmit Descriptor Control 1 */
1030         reg = E1000_READ_REG(hw, E1000_TXDCTL(1));
1031         reg |= (1 << 22);
1032         E1000_WRITE_REG(hw, E1000_TXDCTL(1), reg);
1033
1034         /* Transmit Arbitration Control 0 */
1035         reg = E1000_READ_REG(hw, E1000_TARC(0));
1036         reg &= ~(0xF << 27); /* 30:27 */
1037         switch (hw->mac.type) {
1038         case e1000_82571:
1039         case e1000_82572:
1040                 reg |= (1 << 23) | (1 << 24) | (1 << 25) | (1 << 26);
1041                 break;
1042         default:
1043                 break;
1044         }
1045         E1000_WRITE_REG(hw, E1000_TARC(0), reg);
1046
1047         /* Transmit Arbitration Control 1 */
1048         reg = E1000_READ_REG(hw, E1000_TARC(1));
1049         switch (hw->mac.type) {
1050         case e1000_82571:
1051         case e1000_82572:
1052                 reg &= ~((1 << 29) | (1 << 30));
1053                 reg |= (1 << 22) | (1 << 24) | (1 << 25) | (1 << 26);
1054                 if (E1000_READ_REG(hw, E1000_TCTL) & E1000_TCTL_MULR)
1055                         reg &= ~(1 << 28);
1056                 else
1057                         reg |= (1 << 28);
1058                 E1000_WRITE_REG(hw, E1000_TARC(1), reg);
1059                 break;
1060         default:
1061                 break;
1062         }
1063
1064         /* Device Control */
1065         if (hw->mac.type == e1000_82573 || hw->mac.type == e1000_82574) {
1066                 reg = E1000_READ_REG(hw, E1000_CTRL);
1067                 reg &= ~(1 << 29);
1068                 E1000_WRITE_REG(hw, E1000_CTRL, reg);
1069         }
1070
1071         /* Extended Device Control */
1072         if (hw->mac.type == e1000_82573 || hw->mac.type == e1000_82574) {
1073                 reg = E1000_READ_REG(hw, E1000_CTRL_EXT);
1074                 reg &= ~(1 << 23);
1075                 reg |= (1 << 22);
1076                 E1000_WRITE_REG(hw, E1000_CTRL_EXT, reg);
1077         }
1078
1079         /* PCI-Ex Control Register */
1080         if (hw->mac.type == e1000_82574) {
1081                 reg = E1000_READ_REG(hw, E1000_GCR);
1082                 reg |= (1 << 22);
1083                 E1000_WRITE_REG(hw, E1000_GCR, reg);
1084         }
1085
1086         return;
1087 }
1088
1089 /**
1090  *  e1000_clear_vfta_82571 - Clear VLAN filter table
1091  *  @hw: pointer to the HW structure
1092  *
1093  *  Clears the register array which contains the VLAN filter table by
1094  *  setting all the values to 0.
1095  **/
1096 static void e1000_clear_vfta_82571(struct e1000_hw *hw)
1097 {
1098         u32 offset;
1099         u32 vfta_value = 0;
1100         u32 vfta_offset = 0;
1101         u32 vfta_bit_in_reg = 0;
1102
1103         DEBUGFUNC("e1000_clear_vfta_82571");
1104
1105         if (hw->mac.type == e1000_82573 || hw->mac.type == e1000_82574) {
1106                 if (hw->mng_cookie.vlan_id != 0) {
1107                         /*
1108                          * The VFTA is a 4096b bit-field, each identifying
1109                          * a single VLAN ID.  The following operations
1110                          * determine which 32b entry (i.e. offset) into the
1111                          * array we want to set the VLAN ID (i.e. bit) of
1112                          * the manageability unit.
1113                          */
1114                         vfta_offset = (hw->mng_cookie.vlan_id >>
1115                                        E1000_VFTA_ENTRY_SHIFT) &
1116                                       E1000_VFTA_ENTRY_MASK;
1117                         vfta_bit_in_reg = 1 << (hw->mng_cookie.vlan_id &
1118                                                E1000_VFTA_ENTRY_BIT_SHIFT_MASK);
1119                 }
1120         }
1121         for (offset = 0; offset < E1000_VLAN_FILTER_TBL_SIZE; offset++) {
1122                 /*
1123                  * If the offset we want to clear is the same offset of the
1124                  * manageability VLAN ID, then clear all bits except that of
1125                  * the manageability unit.
1126                  */
1127                 vfta_value = (offset == vfta_offset) ? vfta_bit_in_reg : 0;
1128                 E1000_WRITE_REG_ARRAY(hw, E1000_VFTA, offset, vfta_value);
1129                 E1000_WRITE_FLUSH(hw);
1130         }
1131 }
1132
1133 /**
1134  *  e1000_check_mng_mode_82574 - Check manageability is enabled
1135  *  @hw: pointer to the HW structure
1136  *
1137  *  Reads the NVM Initialization Control Word 2 and returns TRUE
1138  *  (>0) if any manageability is enabled, else FALSE (0).
1139  **/
1140 static bool e1000_check_mng_mode_82574(struct e1000_hw *hw)
1141 {
1142         u16 data;
1143
1144         DEBUGFUNC("e1000_check_mng_mode_82574");
1145
1146         hw->nvm.ops.read(hw, NVM_INIT_CONTROL2_REG, 1, &data);
1147         return (data & E1000_NVM_INIT_CTRL2_MNGM) != 0;
1148 }
1149
1150 /**
1151  *  e1000_led_on_82574 - Turn LED on
1152  *  @hw: pointer to the HW structure
1153  *
1154  *  Turn LED on.
1155  **/
1156 static s32 e1000_led_on_82574(struct e1000_hw *hw)
1157 {
1158         u32 ctrl;
1159         u32 i;
1160
1161         DEBUGFUNC("e1000_led_on_82574");
1162
1163         ctrl = hw->mac.ledctl_mode2;
1164         if (!(E1000_STATUS_LU & E1000_READ_REG(hw, E1000_STATUS))) {
1165                 /*
1166                  * If no link, then turn LED on by setting the invert bit
1167                  * for each LED that's "on" (0x0E) in ledctl_mode2.
1168                  */
1169                 for (i = 0; i < 4; i++)
1170                         if (((hw->mac.ledctl_mode2 >> (i * 8)) & 0xFF) ==
1171                             E1000_LEDCTL_MODE_LED_ON)
1172                                 ctrl |= (E1000_LEDCTL_LED0_IVRT << (i * 8));
1173         }
1174         E1000_WRITE_REG(hw, E1000_LEDCTL, ctrl);
1175
1176         return E1000_SUCCESS;
1177 }
1178
1179 /**
1180  *  e1000_update_mc_addr_list_82571 - Update Multicast addresses
1181  *  @hw: pointer to the HW structure
1182  *  @mc_addr_list: array of multicast addresses to program
1183  *  @mc_addr_count: number of multicast addresses to program
1184  *  @rar_used_count: the first RAR register free to program
1185  *  @rar_count: total number of supported Receive Address Registers
1186  *
1187  *  Updates the Receive Address Registers and Multicast Table Array.
1188  *  The caller must have a packed mc_addr_list of multicast addresses.
1189  *  The parameter rar_count will usually be hw->mac.rar_entry_count
1190  *  unless there are workarounds that change this.
1191  **/
1192 static void e1000_update_mc_addr_list_82571(struct e1000_hw *hw,
1193                                            u8 *mc_addr_list, u32 mc_addr_count,
1194                                            u32 rar_used_count, u32 rar_count)
1195 {
1196         DEBUGFUNC("e1000_update_mc_addr_list_82571");
1197
1198         if (e1000_get_laa_state_82571(hw))
1199                 rar_count--;
1200
1201         e1000_update_mc_addr_list_generic(hw, mc_addr_list, mc_addr_count,
1202                                           rar_used_count, rar_count);
1203 }
1204
1205 /**
1206  *  e1000_setup_link_82571 - Setup flow control and link settings
1207  *  @hw: pointer to the HW structure
1208  *
1209  *  Determines which flow control settings to use, then configures flow
1210  *  control.  Calls the appropriate media-specific link configuration
1211  *  function.  Assuming the adapter has a valid link partner, a valid link
1212  *  should be established.  Assumes the hardware has previously been reset
1213  *  and the transmitter and receiver are not enabled.
1214  **/
1215 static s32 e1000_setup_link_82571(struct e1000_hw *hw)
1216 {
1217         DEBUGFUNC("e1000_setup_link_82571");
1218
1219         /*
1220          * 82573 does not have a word in the NVM to determine
1221          * the default flow control setting, so we explicitly
1222          * set it to full.
1223          */
1224         if ((hw->mac.type == e1000_82573 || hw->mac.type == e1000_82574) &&
1225             hw->fc.requested_mode == e1000_fc_default)
1226                 hw->fc.requested_mode = e1000_fc_full;
1227
1228         return e1000_setup_link_generic(hw);
1229 }
1230
1231 /**
1232  *  e1000_setup_copper_link_82571 - Configure copper link settings
1233  *  @hw: pointer to the HW structure
1234  *
1235  *  Configures the link for auto-neg or forced speed and duplex.  Then we check
1236  *  for link, once link is established calls to configure collision distance
1237  *  and flow control are called.
1238  **/
1239 static s32 e1000_setup_copper_link_82571(struct e1000_hw *hw)
1240 {
1241         u32 ctrl, led_ctrl;
1242         s32  ret_val;
1243
1244         DEBUGFUNC("e1000_setup_copper_link_82571");
1245
1246         ctrl = E1000_READ_REG(hw, E1000_CTRL);
1247         ctrl |= E1000_CTRL_SLU;
1248         ctrl &= ~(E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
1249         E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
1250
1251         switch (hw->phy.type) {
1252         case e1000_phy_m88:
1253         case e1000_phy_bm:
1254                 ret_val = e1000_copper_link_setup_m88(hw);
1255                 break;
1256         case e1000_phy_igp_2:
1257                 ret_val = e1000_copper_link_setup_igp(hw);
1258                 /* Setup activity LED */
1259                 led_ctrl = E1000_READ_REG(hw, E1000_LEDCTL);
1260                 led_ctrl &= IGP_ACTIVITY_LED_MASK;
1261                 led_ctrl |= (IGP_ACTIVITY_LED_ENABLE | IGP_LED3_MODE);
1262                 E1000_WRITE_REG(hw, E1000_LEDCTL, led_ctrl);
1263                 break;
1264         default:
1265                 ret_val = -E1000_ERR_PHY;
1266                 break;
1267         }
1268
1269         if (ret_val)
1270                 goto out;
1271
1272         ret_val = e1000_setup_copper_link_generic(hw);
1273
1274 out:
1275         return ret_val;
1276 }
1277
1278 /**
1279  *  e1000_setup_fiber_serdes_link_82571 - Setup link for fiber/serdes
1280  *  @hw: pointer to the HW structure
1281  *
1282  *  Configures collision distance and flow control for fiber and serdes links.
1283  *  Upon successful setup, poll for link.
1284  **/
1285 static s32 e1000_setup_fiber_serdes_link_82571(struct e1000_hw *hw)
1286 {
1287         DEBUGFUNC("e1000_setup_fiber_serdes_link_82571");
1288
1289         switch (hw->mac.type) {
1290         case e1000_82571:
1291         case e1000_82572:
1292                 /*
1293                  * If SerDes loopback mode is entered, there is no form
1294                  * of reset to take the adapter out of that mode.  So we
1295                  * have to explicitly take the adapter out of loopback
1296                  * mode.  This prevents drivers from twiddling their thumbs
1297                  * if another tool failed to take it out of loopback mode.
1298                  */
1299                 E1000_WRITE_REG(hw, E1000_SCTL, E1000_SCTL_DISABLE_SERDES_LOOPBACK);
1300                 break;
1301         default:
1302                 break;
1303         }
1304
1305         return e1000_setup_fiber_serdes_link_generic(hw);
1306 }
1307
1308 /**
1309  *  e1000_valid_led_default_82571 - Verify a valid default LED config
1310  *  @hw: pointer to the HW structure
1311  *  @data: pointer to the NVM (EEPROM)
1312  *
1313  *  Read the EEPROM for the current default LED configuration.  If the
1314  *  LED configuration is not valid, set to a valid LED configuration.
1315  **/
1316 static s32 e1000_valid_led_default_82571(struct e1000_hw *hw, u16 *data)
1317 {
1318         s32 ret_val;
1319
1320         DEBUGFUNC("e1000_valid_led_default_82571");
1321
1322         ret_val = hw->nvm.ops.read(hw, NVM_ID_LED_SETTINGS, 1, data);
1323         if (ret_val) {
1324                 DEBUGOUT("NVM Read Error\n");
1325                 goto out;
1326         }
1327
1328         if ((hw->mac.type == e1000_82573 || hw->mac.type == e1000_82574) &&
1329             *data == ID_LED_RESERVED_F746)
1330                 *data = ID_LED_DEFAULT_82573;
1331         else if (*data == ID_LED_RESERVED_0000 || *data == ID_LED_RESERVED_FFFF)
1332                 *data = ID_LED_DEFAULT;
1333 out:
1334         return ret_val;
1335 }
1336
1337 /**
1338  *  e1000_get_laa_state_82571 - Get locally administered address state
1339  *  @hw: pointer to the HW structure
1340  *
1341  *  Retrieve and return the current locally administered address state.
1342  **/
1343 bool e1000_get_laa_state_82571(struct e1000_hw *hw)
1344 {
1345         DEBUGFUNC("e1000_get_laa_state_82571");
1346
1347         if (hw->mac.type != e1000_82571)
1348                 return FALSE;
1349
1350         return hw->dev_spec._82571.laa_is_present;
1351 }
1352
1353 /**
1354  *  e1000_set_laa_state_82571 - Set locally administered address state
1355  *  @hw: pointer to the HW structure
1356  *  @state: enable/disable locally administered address
1357  *
1358  *  Enable/Disable the current locally administered address state.
1359  **/
1360 void e1000_set_laa_state_82571(struct e1000_hw *hw, bool state)
1361 {
1362         DEBUGFUNC("e1000_set_laa_state_82571");
1363
1364         if (hw->mac.type != e1000_82571)
1365                 return;
1366
1367         hw->dev_spec._82571.laa_is_present = state;
1368
1369         /* If workaround is activated... */
1370         if (state)
1371                 /*
1372                  * Hold a copy of the LAA in RAR[14] This is done so that
1373                  * between the time RAR[0] gets clobbered and the time it
1374                  * gets fixed, the actual LAA is in one of the RARs and no
1375                  * incoming packets directed to this port are dropped.
1376                  * Eventually the LAA will be in RAR[0] and RAR[14].
1377                  */
1378                 e1000_rar_set_generic(hw, hw->mac.addr,
1379                                       hw->mac.rar_entry_count - 1);
1380         return;
1381 }
1382
1383 /**
1384  *  e1000_fix_nvm_checksum_82571 - Fix EEPROM checksum
1385  *  @hw: pointer to the HW structure
1386  *
1387  *  Verifies that the EEPROM has completed the update.  After updating the
1388  *  EEPROM, we need to check bit 15 in work 0x23 for the checksum fix.  If
1389  *  the checksum fix is not implemented, we need to set the bit and update
1390  *  the checksum.  Otherwise, if bit 15 is set and the checksum is incorrect,
1391  *  we need to return bad checksum.
1392  **/
1393 static s32 e1000_fix_nvm_checksum_82571(struct e1000_hw *hw)
1394 {
1395         struct e1000_nvm_info *nvm = &hw->nvm;
1396         s32 ret_val = E1000_SUCCESS;
1397         u16 data;
1398
1399         DEBUGFUNC("e1000_fix_nvm_checksum_82571");
1400
1401         if (nvm->type != e1000_nvm_flash_hw)
1402                 goto out;
1403
1404         /*
1405          * Check bit 4 of word 10h.  If it is 0, firmware is done updating
1406          * 10h-12h.  Checksum may need to be fixed.
1407          */
1408         ret_val = nvm->ops.read(hw, 0x10, 1, &data);
1409         if (ret_val)
1410                 goto out;
1411
1412         if (!(data & 0x10)) {
1413                 /*
1414                  * Read 0x23 and check bit 15.  This bit is a 1
1415                  * when the checksum has already been fixed.  If
1416                  * the checksum is still wrong and this bit is a
1417                  * 1, we need to return bad checksum.  Otherwise,
1418                  * we need to set this bit to a 1 and update the
1419                  * checksum.
1420                  */
1421                 ret_val = nvm->ops.read(hw, 0x23, 1, &data);
1422                 if (ret_val)
1423                         goto out;
1424
1425                 if (!(data & 0x8000)) {
1426                         data |= 0x8000;
1427                         ret_val = nvm->ops.write(hw, 0x23, 1, &data);
1428                         if (ret_val)
1429                                 goto out;
1430                         ret_val = nvm->ops.update(hw);
1431                 }
1432         }
1433
1434 out:
1435         return ret_val;
1436 }
1437
1438 /**
1439  *  e1000_read_mac_addr_82571 - Read device MAC address
1440  *  @hw: pointer to the HW structure
1441  **/
1442 static s32 e1000_read_mac_addr_82571(struct e1000_hw *hw)
1443 {
1444         s32 ret_val = E1000_SUCCESS;
1445
1446         DEBUGFUNC("e1000_read_mac_addr_82571");
1447         if (e1000_check_alt_mac_addr_generic(hw))
1448                 ret_val = e1000_read_mac_addr_generic(hw);
1449
1450         return ret_val;
1451 }
1452
1453 /**
1454  * e1000_power_down_phy_copper_82571 - Remove link during PHY power down
1455  * @hw: pointer to the HW structure
1456  *
1457  * In the case of a PHY power down to save power, or to turn off link during a
1458  * driver unload, or wake on lan is not enabled, remove the link.
1459  **/
1460 static void e1000_power_down_phy_copper_82571(struct e1000_hw *hw)
1461 {
1462         struct e1000_phy_info *phy = &hw->phy;
1463         struct e1000_mac_info *mac = &hw->mac;
1464
1465         if (!(phy->ops.check_reset_block))
1466                 return;
1467
1468         /* If the management interface is not enabled, then power down */
1469         if (!(mac->ops.check_mng_mode(hw) || phy->ops.check_reset_block(hw)))
1470                 e1000_power_down_phy_copper(hw);
1471
1472         return;
1473 }
1474
1475 /**
1476  *  e1000_clear_hw_cntrs_82571 - Clear device specific hardware counters
1477  *  @hw: pointer to the HW structure
1478  *
1479  *  Clears the hardware counters by reading the counter registers.
1480  **/
1481 static void e1000_clear_hw_cntrs_82571(struct e1000_hw *hw)
1482 {
1483         DEBUGFUNC("e1000_clear_hw_cntrs_82571");
1484
1485         e1000_clear_hw_cntrs_base_generic(hw);
1486
1487         E1000_READ_REG(hw, E1000_PRC64);
1488         E1000_READ_REG(hw, E1000_PRC127);
1489         E1000_READ_REG(hw, E1000_PRC255);
1490         E1000_READ_REG(hw, E1000_PRC511);
1491         E1000_READ_REG(hw, E1000_PRC1023);
1492         E1000_READ_REG(hw, E1000_PRC1522);
1493         E1000_READ_REG(hw, E1000_PTC64);
1494         E1000_READ_REG(hw, E1000_PTC127);
1495         E1000_READ_REG(hw, E1000_PTC255);
1496         E1000_READ_REG(hw, E1000_PTC511);
1497         E1000_READ_REG(hw, E1000_PTC1023);
1498         E1000_READ_REG(hw, E1000_PTC1522);
1499
1500         E1000_READ_REG(hw, E1000_ALGNERRC);
1501         E1000_READ_REG(hw, E1000_RXERRC);
1502         E1000_READ_REG(hw, E1000_TNCRS);
1503         E1000_READ_REG(hw, E1000_CEXTERR);
1504         E1000_READ_REG(hw, E1000_TSCTC);
1505         E1000_READ_REG(hw, E1000_TSCTFC);
1506
1507         E1000_READ_REG(hw, E1000_MGTPRC);
1508         E1000_READ_REG(hw, E1000_MGTPDC);
1509         E1000_READ_REG(hw, E1000_MGTPTC);
1510
1511         E1000_READ_REG(hw, E1000_IAC);
1512         E1000_READ_REG(hw, E1000_ICRXOC);
1513
1514         E1000_READ_REG(hw, E1000_ICRXPTC);
1515         E1000_READ_REG(hw, E1000_ICRXATC);
1516         E1000_READ_REG(hw, E1000_ICTXPTC);
1517         E1000_READ_REG(hw, E1000_ICTXATC);
1518         E1000_READ_REG(hw, E1000_ICTXQEC);
1519         E1000_READ_REG(hw, E1000_ICTXQMTC);
1520         E1000_READ_REG(hw, E1000_ICRXDMTC);
1521 }