]> CyberLeo.Net >> Repos - FreeBSD/releng/9.2.git/blob - sys/dev/e1000/e1000_82541.c
- Copy stable/9 to releng/9.2 as part of the 9.2-RELEASE cycle.
[FreeBSD/releng/9.2.git] / sys / dev / e1000 / e1000_82541.c
1 /******************************************************************************
2
3   Copyright (c) 2001-2011, 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  * 82541EI Gigabit Ethernet Controller
37  * 82541ER Gigabit Ethernet Controller
38  * 82541GI Gigabit Ethernet Controller
39  * 82541PI Gigabit Ethernet Controller
40  * 82547EI Gigabit Ethernet Controller
41  * 82547GI Gigabit Ethernet Controller
42  */
43
44 #include "e1000_api.h"
45
46 static s32  e1000_init_phy_params_82541(struct e1000_hw *hw);
47 static s32  e1000_init_nvm_params_82541(struct e1000_hw *hw);
48 static s32  e1000_init_mac_params_82541(struct e1000_hw *hw);
49 static s32  e1000_reset_hw_82541(struct e1000_hw *hw);
50 static s32  e1000_init_hw_82541(struct e1000_hw *hw);
51 static s32  e1000_get_link_up_info_82541(struct e1000_hw *hw, u16 *speed,
52                                          u16 *duplex);
53 static s32  e1000_phy_hw_reset_82541(struct e1000_hw *hw);
54 static s32  e1000_setup_copper_link_82541(struct e1000_hw *hw);
55 static s32  e1000_check_for_link_82541(struct e1000_hw *hw);
56 static s32  e1000_get_cable_length_igp_82541(struct e1000_hw *hw);
57 static s32  e1000_set_d3_lplu_state_82541(struct e1000_hw *hw,
58                                           bool active);
59 static s32  e1000_setup_led_82541(struct e1000_hw *hw);
60 static s32  e1000_cleanup_led_82541(struct e1000_hw *hw);
61 static void e1000_clear_hw_cntrs_82541(struct e1000_hw *hw);
62 static s32  e1000_read_mac_addr_82541(struct e1000_hw *hw);
63 static s32  e1000_config_dsp_after_link_change_82541(struct e1000_hw *hw,
64                                                      bool link_up);
65 static s32  e1000_phy_init_script_82541(struct e1000_hw *hw);
66 static void e1000_power_down_phy_copper_82541(struct e1000_hw *hw);
67
68 static const u16 e1000_igp_cable_length_table[] =
69     { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
70       5, 10, 10, 10, 10, 10, 10, 10, 20, 20, 20, 20, 20, 25, 25, 25,
71       25, 25, 25, 25, 30, 30, 30, 30, 40, 40, 40, 40, 40, 40, 40, 40,
72       40, 50, 50, 50, 50, 50, 50, 50, 60, 60, 60, 60, 60, 60, 60, 60,
73       60, 70, 70, 70, 70, 70, 70, 80, 80, 80, 80, 80, 80, 90, 90, 90,
74       90, 90, 90, 90, 90, 90, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
75       100, 100, 100, 100, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
76       110, 110, 110, 110, 110, 110, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120};
77 #define IGP01E1000_AGC_LENGTH_TABLE_SIZE \
78                 (sizeof(e1000_igp_cable_length_table) / \
79                  sizeof(e1000_igp_cable_length_table[0]))
80
81 /**
82  *  e1000_init_phy_params_82541 - Init PHY func ptrs.
83  *  @hw: pointer to the HW structure
84  **/
85 static s32 e1000_init_phy_params_82541(struct e1000_hw *hw)
86 {
87         struct e1000_phy_info *phy = &hw->phy;
88         s32 ret_val = E1000_SUCCESS;
89
90         DEBUGFUNC("e1000_init_phy_params_82541");
91
92         phy->addr                      = 1;
93         phy->autoneg_mask              = AUTONEG_ADVERTISE_SPEED_DEFAULT;
94         phy->reset_delay_us            = 10000;
95         phy->type                      = e1000_phy_igp;
96
97         /* Function Pointers */
98         phy->ops.check_polarity        = e1000_check_polarity_igp;
99         phy->ops.force_speed_duplex    = e1000_phy_force_speed_duplex_igp;
100         phy->ops.get_cable_length      = e1000_get_cable_length_igp_82541;
101         phy->ops.get_cfg_done          = e1000_get_cfg_done_generic;
102         phy->ops.get_info              = e1000_get_phy_info_igp;
103         phy->ops.read_reg              = e1000_read_phy_reg_igp;
104         phy->ops.reset                 = e1000_phy_hw_reset_82541;
105         phy->ops.set_d3_lplu_state     = e1000_set_d3_lplu_state_82541;
106         phy->ops.write_reg             = e1000_write_phy_reg_igp;
107         phy->ops.power_up              = e1000_power_up_phy_copper;
108         phy->ops.power_down            = e1000_power_down_phy_copper_82541;
109
110         ret_val = e1000_get_phy_id(hw);
111         if (ret_val)
112                 goto out;
113
114         /* Verify phy id */
115         if (phy->id != IGP01E1000_I_PHY_ID) {
116                 ret_val = -E1000_ERR_PHY;
117                 goto out;
118         }
119
120 out:
121         return ret_val;
122 }
123
124 /**
125  *  e1000_init_nvm_params_82541 - Init NVM func ptrs.
126  *  @hw: pointer to the HW structure
127  **/
128 static s32 e1000_init_nvm_params_82541(struct e1000_hw *hw)
129 {
130         struct   e1000_nvm_info *nvm = &hw->nvm;
131         s32  ret_val = E1000_SUCCESS;
132         u32 eecd = E1000_READ_REG(hw, E1000_EECD);
133         u16 size;
134
135         DEBUGFUNC("e1000_init_nvm_params_82541");
136
137         switch (nvm->override) {
138         case e1000_nvm_override_spi_large:
139                 nvm->type = e1000_nvm_eeprom_spi;
140                 eecd |= E1000_EECD_ADDR_BITS;
141                 break;
142         case e1000_nvm_override_spi_small:
143                 nvm->type = e1000_nvm_eeprom_spi;
144                 eecd &= ~E1000_EECD_ADDR_BITS;
145                 break;
146         case e1000_nvm_override_microwire_large:
147                 nvm->type = e1000_nvm_eeprom_microwire;
148                 eecd |= E1000_EECD_SIZE;
149                 break;
150         case e1000_nvm_override_microwire_small:
151                 nvm->type = e1000_nvm_eeprom_microwire;
152                 eecd &= ~E1000_EECD_SIZE;
153                 break;
154         default:
155                 nvm->type = eecd & E1000_EECD_TYPE
156                             ? e1000_nvm_eeprom_spi
157                             : e1000_nvm_eeprom_microwire;
158                 break;
159         }
160
161         if (nvm->type == e1000_nvm_eeprom_spi) {
162                 nvm->address_bits       = (eecd & E1000_EECD_ADDR_BITS)
163                                           ? 16 : 8;
164                 nvm->delay_usec         = 1;
165                 nvm->opcode_bits        = 8;
166                 nvm->page_size          = (eecd & E1000_EECD_ADDR_BITS)
167                                           ? 32 : 8;
168
169                 /* Function Pointers */
170                 nvm->ops.acquire        = e1000_acquire_nvm_generic;
171                 nvm->ops.read           = e1000_read_nvm_spi;
172                 nvm->ops.release        = e1000_release_nvm_generic;
173                 nvm->ops.update         = e1000_update_nvm_checksum_generic;
174                 nvm->ops.valid_led_default = e1000_valid_led_default_generic;
175                 nvm->ops.validate       = e1000_validate_nvm_checksum_generic;
176                 nvm->ops.write          = e1000_write_nvm_spi;
177
178                 /*
179                  * nvm->word_size must be discovered after the pointers
180                  * are set so we can verify the size from the nvm image
181                  * itself.  Temporarily set it to a dummy value so the
182                  * read will work.
183                  */
184                 nvm->word_size = 64;
185                 ret_val = nvm->ops.read(hw, NVM_CFG, 1, &size);
186                 if (ret_val)
187                         goto out;
188                 size = (size & NVM_SIZE_MASK) >> NVM_SIZE_SHIFT;
189                 /*
190                  * if size != 0, it can be added to a constant and become
191                  * the left-shift value to set the word_size.  Otherwise,
192                  * word_size stays at 64.
193                  */
194                 if (size) {
195                         size += NVM_WORD_SIZE_BASE_SHIFT_82541;
196                         nvm->word_size = 1 << size;
197                 }
198         } else {
199                 nvm->address_bits       = (eecd & E1000_EECD_ADDR_BITS)
200                                           ? 8 : 6;
201                 nvm->delay_usec         = 50;
202                 nvm->opcode_bits        = 3;
203                 nvm->word_size          = (eecd & E1000_EECD_ADDR_BITS)
204                                           ? 256 : 64;
205
206                 /* Function Pointers */
207                 nvm->ops.acquire        = e1000_acquire_nvm_generic;
208                 nvm->ops.read           = e1000_read_nvm_microwire;
209                 nvm->ops.release        = e1000_release_nvm_generic;
210                 nvm->ops.update         = e1000_update_nvm_checksum_generic;
211                 nvm->ops.valid_led_default = e1000_valid_led_default_generic;
212                 nvm->ops.validate       = e1000_validate_nvm_checksum_generic;
213                 nvm->ops.write          = e1000_write_nvm_microwire;
214         }
215
216 out:
217         return ret_val;
218 }
219
220 /**
221  *  e1000_init_mac_params_82541 - Init MAC func ptrs.
222  *  @hw: pointer to the HW structure
223  **/
224 static s32 e1000_init_mac_params_82541(struct e1000_hw *hw)
225 {
226         struct e1000_mac_info *mac = &hw->mac;
227
228         DEBUGFUNC("e1000_init_mac_params_82541");
229
230         /* Set media type */
231         hw->phy.media_type = e1000_media_type_copper;
232         /* Set mta register count */
233         mac->mta_reg_count = 128;
234         /* Set rar entry count */
235         mac->rar_entry_count = E1000_RAR_ENTRIES;
236         /* Set if part includes ASF firmware */
237         mac->asf_firmware_present = TRUE;
238
239         /* Function Pointers */
240
241         /* bus type/speed/width */
242         mac->ops.get_bus_info = e1000_get_bus_info_pci_generic;
243         /* function id */
244         mac->ops.set_lan_id = e1000_set_lan_id_single_port;
245         /* reset */
246         mac->ops.reset_hw = e1000_reset_hw_82541;
247         /* hw initialization */
248         mac->ops.init_hw = e1000_init_hw_82541;
249         /* link setup */
250         mac->ops.setup_link = e1000_setup_link_generic;
251         /* physical interface link setup */
252         mac->ops.setup_physical_interface = e1000_setup_copper_link_82541;
253         /* check for link */
254         mac->ops.check_for_link = e1000_check_for_link_82541;
255         /* link info */
256         mac->ops.get_link_up_info = e1000_get_link_up_info_82541;
257         /* multicast address update */
258         mac->ops.update_mc_addr_list = e1000_update_mc_addr_list_generic;
259         /* writing VFTA */
260         mac->ops.write_vfta = e1000_write_vfta_generic;
261         /* clearing VFTA */
262         mac->ops.clear_vfta = e1000_clear_vfta_generic;
263         /* read mac address */
264         mac->ops.read_mac_addr = e1000_read_mac_addr_82541;
265         /* ID LED init */
266         mac->ops.id_led_init = e1000_id_led_init_generic;
267         /* setup LED */
268         mac->ops.setup_led = e1000_setup_led_82541;
269         /* cleanup LED */
270         mac->ops.cleanup_led = e1000_cleanup_led_82541;
271         /* turn on/off LED */
272         mac->ops.led_on = e1000_led_on_generic;
273         mac->ops.led_off = e1000_led_off_generic;
274         /* clear hardware counters */
275         mac->ops.clear_hw_cntrs = e1000_clear_hw_cntrs_82541;
276
277         return E1000_SUCCESS;
278 }
279
280 /**
281  *  e1000_init_function_pointers_82541 - Init func ptrs.
282  *  @hw: pointer to the HW structure
283  *
284  *  Called to initialize all function pointers and parameters.
285  **/
286 void e1000_init_function_pointers_82541(struct e1000_hw *hw)
287 {
288         DEBUGFUNC("e1000_init_function_pointers_82541");
289
290         hw->mac.ops.init_params = e1000_init_mac_params_82541;
291         hw->nvm.ops.init_params = e1000_init_nvm_params_82541;
292         hw->phy.ops.init_params = e1000_init_phy_params_82541;
293 }
294
295 /**
296  *  e1000_reset_hw_82541 - Reset hardware
297  *  @hw: pointer to the HW structure
298  *
299  *  This resets the hardware into a known state.
300  **/
301 static s32 e1000_reset_hw_82541(struct e1000_hw *hw)
302 {
303         u32 ledctl, ctrl, icr, manc;
304
305         DEBUGFUNC("e1000_reset_hw_82541");
306
307         DEBUGOUT("Masking off all interrupts\n");
308         E1000_WRITE_REG(hw, E1000_IMC, 0xFFFFFFFF);
309
310         E1000_WRITE_REG(hw, E1000_RCTL, 0);
311         E1000_WRITE_REG(hw, E1000_TCTL, E1000_TCTL_PSP);
312         E1000_WRITE_FLUSH(hw);
313
314         /*
315          * Delay to allow any outstanding PCI transactions to complete
316          * before resetting the device.
317          */
318         msec_delay(10);
319
320         ctrl = E1000_READ_REG(hw, E1000_CTRL);
321
322         /* Must reset the Phy before resetting the MAC */
323         if ((hw->mac.type == e1000_82541) || (hw->mac.type == e1000_82547)) {
324                 E1000_WRITE_REG(hw, E1000_CTRL, (ctrl | E1000_CTRL_PHY_RST));
325                 msec_delay(5);
326         }
327
328         DEBUGOUT("Issuing a global reset to 82541/82547 MAC\n");
329         switch (hw->mac.type) {
330         case e1000_82541:
331         case e1000_82541_rev_2:
332                 /*
333                  * These controllers can't ack the 64-bit write when
334                  * issuing the reset, so we use IO-mapping as a
335                  * workaround to issue the reset.
336                  */
337                 E1000_WRITE_REG_IO(hw, E1000_CTRL, ctrl | E1000_CTRL_RST);
338                 break;
339         default:
340                 E1000_WRITE_REG(hw, E1000_CTRL, ctrl | E1000_CTRL_RST);
341                 break;
342         }
343
344         /* Wait for NVM reload */
345         msec_delay(20);
346
347         /* Disable HW ARPs on ASF enabled adapters */
348         manc = E1000_READ_REG(hw, E1000_MANC);
349         manc &= ~E1000_MANC_ARP_EN;
350         E1000_WRITE_REG(hw, E1000_MANC, manc);
351
352         if ((hw->mac.type == e1000_82541) || (hw->mac.type == e1000_82547)) {
353                 e1000_phy_init_script_82541(hw);
354
355                 /* Configure activity LED after Phy reset */
356                 ledctl = E1000_READ_REG(hw, E1000_LEDCTL);
357                 ledctl &= IGP_ACTIVITY_LED_MASK;
358                 ledctl |= (IGP_ACTIVITY_LED_ENABLE | IGP_LED3_MODE);
359                 E1000_WRITE_REG(hw, E1000_LEDCTL, ledctl);
360         }
361
362         /* Once again, mask the interrupts */
363         DEBUGOUT("Masking off all interrupts\n");
364         E1000_WRITE_REG(hw, E1000_IMC, 0xFFFFFFFF);
365
366         /* Clear any pending interrupt events. */
367         icr = E1000_READ_REG(hw, E1000_ICR);
368
369         return E1000_SUCCESS;
370 }
371
372 /**
373  *  e1000_init_hw_82541 - Initialize hardware
374  *  @hw: pointer to the HW structure
375  *
376  *  This inits the hardware readying it for operation.
377  **/
378 static s32 e1000_init_hw_82541(struct e1000_hw *hw)
379 {
380         struct e1000_mac_info *mac = &hw->mac;
381         struct e1000_dev_spec_82541 *dev_spec = &hw->dev_spec._82541;
382         u32 i, txdctl;
383         s32 ret_val;
384
385         DEBUGFUNC("e1000_init_hw_82541");
386
387         /* Initialize identification LED */
388         ret_val = mac->ops.id_led_init(hw);
389         if (ret_val) {
390                 DEBUGOUT("Error initializing identification LED\n");
391                 /* This is not fatal and we should not stop init due to this */
392         }
393         
394         /* Storing the Speed Power Down  value for later use */
395         ret_val = hw->phy.ops.read_reg(hw,
396                                        IGP01E1000_GMII_FIFO,
397                                        &dev_spec->spd_default);
398         if (ret_val)
399                 goto out;
400
401         /* Disabling VLAN filtering */
402         DEBUGOUT("Initializing the IEEE VLAN\n");
403         mac->ops.clear_vfta(hw);
404
405         /* Setup the receive address. */
406         e1000_init_rx_addrs_generic(hw, mac->rar_entry_count);
407
408         /* Zero out the Multicast HASH table */
409         DEBUGOUT("Zeroing the MTA\n");
410         for (i = 0; i < mac->mta_reg_count; i++) {
411                 E1000_WRITE_REG_ARRAY(hw, E1000_MTA, i, 0);
412                 /*
413                  * Avoid back to back register writes by adding the register
414                  * read (flush).  This is to protect against some strange
415                  * bridge configurations that may issue Memory Write Block
416                  * (MWB) to our register space.
417                  */
418                 E1000_WRITE_FLUSH(hw);
419         }
420
421         /* Setup link and flow control */
422         ret_val = mac->ops.setup_link(hw);
423
424         txdctl = E1000_READ_REG(hw, E1000_TXDCTL(0));
425         txdctl = (txdctl & ~E1000_TXDCTL_WTHRESH) |
426                  E1000_TXDCTL_FULL_TX_DESC_WB;
427         E1000_WRITE_REG(hw, E1000_TXDCTL(0), txdctl);
428
429         /*
430          * Clear all of the statistics registers (clear on read).  It is
431          * important that we do this after we have tried to establish link
432          * because the symbol error count will increment wildly if there
433          * is no link.
434          */
435         e1000_clear_hw_cntrs_82541(hw);
436
437 out:
438         return ret_val;
439 }
440
441 /**
442  * e1000_get_link_up_info_82541 - Report speed and duplex
443  * @hw: pointer to the HW structure
444  * @speed: pointer to speed buffer
445  * @duplex: pointer to duplex buffer
446  *
447  * Retrieve the current speed and duplex configuration.
448  **/
449 static s32 e1000_get_link_up_info_82541(struct e1000_hw *hw, u16 *speed,
450                                         u16 *duplex)
451 {
452         struct e1000_phy_info *phy = &hw->phy;
453         s32 ret_val;
454         u16 data;
455
456         DEBUGFUNC("e1000_get_link_up_info_82541");
457
458         ret_val = e1000_get_speed_and_duplex_copper_generic(hw, speed, duplex);
459         if (ret_val)
460                 goto out;
461
462         if (!phy->speed_downgraded)
463                 goto out;
464
465         /*
466          * IGP01 PHY may advertise full duplex operation after speed
467          * downgrade even if it is operating at half duplex.
468          * Here we set the duplex settings to match the duplex in the
469          * link partner's capabilities.
470          */
471         ret_val = phy->ops.read_reg(hw, PHY_AUTONEG_EXP, &data);
472         if (ret_val)
473                 goto out;
474
475         if (!(data & NWAY_ER_LP_NWAY_CAPS)) {
476                 *duplex = HALF_DUPLEX;
477         } else {
478                 ret_val = phy->ops.read_reg(hw, PHY_LP_ABILITY, &data);
479                 if (ret_val)
480                         goto out;
481
482                 if (*speed == SPEED_100) {
483                         if (!(data & NWAY_LPAR_100TX_FD_CAPS))
484                                 *duplex = HALF_DUPLEX;
485                 } else if (*speed == SPEED_10) {
486                         if (!(data & NWAY_LPAR_10T_FD_CAPS))
487                                 *duplex = HALF_DUPLEX;
488                 }
489         }
490
491 out:
492         return ret_val;
493 }
494
495 /**
496  *  e1000_phy_hw_reset_82541 - PHY hardware reset
497  *  @hw: pointer to the HW structure
498  *
499  *  Verify the reset block is not blocking us from resetting.  Acquire
500  *  semaphore (if necessary) and read/set/write the device control reset
501  *  bit in the PHY.  Wait the appropriate delay time for the device to
502  *  reset and release the semaphore (if necessary).
503  **/
504 static s32 e1000_phy_hw_reset_82541(struct e1000_hw *hw)
505 {
506         s32 ret_val;
507         u32 ledctl;
508
509         DEBUGFUNC("e1000_phy_hw_reset_82541");
510
511         ret_val = e1000_phy_hw_reset_generic(hw);
512         if (ret_val)
513                 goto out;
514
515         e1000_phy_init_script_82541(hw);
516
517         if ((hw->mac.type == e1000_82541) || (hw->mac.type == e1000_82547)) {
518                 /* Configure activity LED after PHY reset */
519                 ledctl = E1000_READ_REG(hw, E1000_LEDCTL);
520                 ledctl &= IGP_ACTIVITY_LED_MASK;
521                 ledctl |= (IGP_ACTIVITY_LED_ENABLE | IGP_LED3_MODE);
522                 E1000_WRITE_REG(hw, E1000_LEDCTL, ledctl);
523         }
524
525 out:
526         return ret_val;
527 }
528
529 /**
530  *  e1000_setup_copper_link_82541 - Configure copper link settings
531  *  @hw: pointer to the HW structure
532  *
533  *  Calls the appropriate function to configure the link for auto-neg or forced
534  *  speed and duplex.  Then we check for link, once link is established calls
535  *  to configure collision distance and flow control are called.  If link is
536  *  not established, we return -E1000_ERR_PHY (-2).
537  **/
538 static s32 e1000_setup_copper_link_82541(struct e1000_hw *hw)
539 {
540         struct e1000_phy_info *phy = &hw->phy;
541         struct e1000_dev_spec_82541 *dev_spec = &hw->dev_spec._82541;
542         s32  ret_val;
543         u32 ctrl, ledctl;
544
545         DEBUGFUNC("e1000_setup_copper_link_82541");
546
547         ctrl = E1000_READ_REG(hw, E1000_CTRL);
548         ctrl |= E1000_CTRL_SLU;
549         ctrl &= ~(E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
550         E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
551
552         /* Earlier revs of the IGP phy require us to force MDI. */
553         if (hw->mac.type == e1000_82541 || hw->mac.type == e1000_82547) {
554                 dev_spec->dsp_config = e1000_dsp_config_disabled;
555                 phy->mdix = 1;
556         } else {
557                 dev_spec->dsp_config = e1000_dsp_config_enabled;
558         }
559
560         ret_val = e1000_copper_link_setup_igp(hw);
561         if (ret_val)
562                 goto out;
563
564         if (hw->mac.autoneg) {
565                 if (dev_spec->ffe_config == e1000_ffe_config_active)
566                         dev_spec->ffe_config = e1000_ffe_config_enabled;
567         }
568
569         /* Configure activity LED after Phy reset */
570         ledctl = E1000_READ_REG(hw, E1000_LEDCTL);
571         ledctl &= IGP_ACTIVITY_LED_MASK;
572         ledctl |= (IGP_ACTIVITY_LED_ENABLE | IGP_LED3_MODE);
573         E1000_WRITE_REG(hw, E1000_LEDCTL, ledctl);
574
575         ret_val = e1000_setup_copper_link_generic(hw);
576
577 out:
578         return ret_val;
579 }
580
581 /**
582  *  e1000_check_for_link_82541 - Check/Store link connection
583  *  @hw: pointer to the HW structure
584  *
585  *  This checks the link condition of the adapter and stores the
586  *  results in the hw->mac structure.
587  **/
588 static s32 e1000_check_for_link_82541(struct e1000_hw *hw)
589 {
590         struct e1000_mac_info *mac = &hw->mac;
591         s32 ret_val;
592         bool link;
593
594         DEBUGFUNC("e1000_check_for_link_82541");
595
596         /*
597          * We only want to go out to the PHY registers to see if Auto-Neg
598          * has completed and/or if our link status has changed.  The
599          * get_link_status flag is set upon receiving a Link Status
600          * Change or Rx Sequence Error interrupt.
601          */
602         if (!mac->get_link_status) {
603                 ret_val = E1000_SUCCESS;
604                 goto out;
605         }
606
607         /*
608          * First we want to see if the MII Status Register reports
609          * link.  If so, then we want to get the current speed/duplex
610          * of the PHY.
611          */
612         ret_val = e1000_phy_has_link_generic(hw, 1, 0, &link);
613         if (ret_val)
614                 goto out;
615
616         if (!link) {
617                 ret_val = e1000_config_dsp_after_link_change_82541(hw, FALSE);
618                 goto out; /* No link detected */
619         }
620
621         mac->get_link_status = FALSE;
622
623         /*
624          * Check if there was DownShift, must be checked
625          * immediately after link-up
626          */
627         e1000_check_downshift_generic(hw);
628
629         /*
630          * If we are forcing speed/duplex, then we simply return since
631          * we have already determined whether we have link or not.
632          */
633         if (!mac->autoneg) {
634                 ret_val = -E1000_ERR_CONFIG;
635                 goto out;
636         }
637
638         ret_val = e1000_config_dsp_after_link_change_82541(hw, TRUE);
639
640         /*
641          * Auto-Neg is enabled.  Auto Speed Detection takes care
642          * of MAC speed/duplex configuration.  So we only need to
643          * configure Collision Distance in the MAC.
644          */
645         mac->ops.config_collision_dist(hw);
646
647         /*
648          * Configure Flow Control now that Auto-Neg has completed.
649          * First, we need to restore the desired flow control
650          * settings because we may have had to re-autoneg with a
651          * different link partner.
652          */
653         ret_val = e1000_config_fc_after_link_up_generic(hw);
654         if (ret_val) {
655                 DEBUGOUT("Error configuring flow control\n");
656         }
657
658 out:
659         return ret_val;
660 }
661
662 /**
663  *  e1000_config_dsp_after_link_change_82541 - Config DSP after link
664  *  @hw: pointer to the HW structure
665  *  @link_up: boolean flag for link up status
666  *
667  *  Return E1000_ERR_PHY when failing to read/write the PHY, else E1000_SUCCESS
668  *  at any other case.
669  *
670  *  82541_rev_2 & 82547_rev_2 have the capability to configure the DSP when a
671  *  gigabit link is achieved to improve link quality.
672  **/
673 static s32 e1000_config_dsp_after_link_change_82541(struct e1000_hw *hw,
674                                                     bool link_up)
675 {
676         struct e1000_phy_info *phy = &hw->phy;
677         struct e1000_dev_spec_82541 *dev_spec = &hw->dev_spec._82541;
678         s32 ret_val;
679         u32 idle_errs = 0;
680         u16 phy_data, phy_saved_data, speed, duplex, i;
681         u16 ffe_idle_err_timeout = FFE_IDLE_ERR_COUNT_TIMEOUT_20;
682         u16 dsp_reg_array[IGP01E1000_PHY_CHANNEL_NUM] =
683                                                    {IGP01E1000_PHY_AGC_PARAM_A,
684                                                     IGP01E1000_PHY_AGC_PARAM_B,
685                                                     IGP01E1000_PHY_AGC_PARAM_C,
686                                                     IGP01E1000_PHY_AGC_PARAM_D};
687
688         DEBUGFUNC("e1000_config_dsp_after_link_change_82541");
689
690         if (link_up) {
691                 ret_val = hw->mac.ops.get_link_up_info(hw, &speed, &duplex);
692                 if (ret_val) {
693                         DEBUGOUT("Error getting link speed and duplex\n");
694                         goto out;
695                 }
696
697                 if (speed != SPEED_1000) {
698                         ret_val = E1000_SUCCESS;
699                         goto out;
700                 }
701
702                 ret_val = phy->ops.get_cable_length(hw);
703                 if (ret_val)
704                         goto out;
705
706                 if ((dev_spec->dsp_config == e1000_dsp_config_enabled) &&
707                     phy->min_cable_length >= 50) {
708
709                         for (i = 0; i < IGP01E1000_PHY_CHANNEL_NUM; i++) {
710                                 ret_val = phy->ops.read_reg(hw,
711                                                             dsp_reg_array[i],
712                                                             &phy_data);
713                                 if (ret_val)
714                                         goto out;
715
716                                 phy_data &= ~IGP01E1000_PHY_EDAC_MU_INDEX;
717
718                                 ret_val = phy->ops.write_reg(hw,
719                                                              dsp_reg_array[i],
720                                                              phy_data);
721                                 if (ret_val)
722                                         goto out;
723                         }
724                         dev_spec->dsp_config = e1000_dsp_config_activated;
725                 }
726
727                 if ((dev_spec->ffe_config != e1000_ffe_config_enabled) ||
728                     (phy->min_cable_length >= 50)) {
729                         ret_val = E1000_SUCCESS;
730                         goto out;
731                 }
732
733                 /* clear previous idle error counts */
734                 ret_val = phy->ops.read_reg(hw, PHY_1000T_STATUS, &phy_data);
735                 if (ret_val)
736                         goto out;
737
738                 for (i = 0; i < ffe_idle_err_timeout; i++) {
739                         usec_delay(1000);
740                         ret_val = phy->ops.read_reg(hw,
741                                                     PHY_1000T_STATUS,
742                                                     &phy_data);
743                         if (ret_val)
744                                 goto out;
745
746                         idle_errs += (phy_data & SR_1000T_IDLE_ERROR_CNT);
747                         if (idle_errs > SR_1000T_PHY_EXCESSIVE_IDLE_ERR_COUNT) {
748                                 dev_spec->ffe_config = e1000_ffe_config_active;
749
750                                 ret_val = phy->ops.write_reg(hw,
751                                                   IGP01E1000_PHY_DSP_FFE,
752                                                   IGP01E1000_PHY_DSP_FFE_CM_CP);
753                                 if (ret_val)
754                                         goto out;
755                                 break;
756                         }
757
758                         if (idle_errs)
759                                 ffe_idle_err_timeout =
760                                                  FFE_IDLE_ERR_COUNT_TIMEOUT_100;
761                 }
762         } else {
763                 if (dev_spec->dsp_config == e1000_dsp_config_activated) {
764                         /*
765                          * Save off the current value of register 0x2F5B
766                          * to be restored at the end of the routines.
767                          */
768                         ret_val = phy->ops.read_reg(hw,
769                                                     0x2F5B,
770                                                     &phy_saved_data);
771                         if (ret_val)
772                                 goto out;
773
774                         /* Disable the PHY transmitter */
775                         ret_val = phy->ops.write_reg(hw, 0x2F5B, 0x0003);
776                         if (ret_val)
777                                 goto out;
778
779                         msec_delay_irq(20);
780
781                         ret_val = phy->ops.write_reg(hw,
782                                                      0x0000,
783                                                      IGP01E1000_IEEE_FORCE_GIG);
784                         if (ret_val)
785                                 goto out;
786                         for (i = 0; i < IGP01E1000_PHY_CHANNEL_NUM; i++) {
787                                 ret_val = phy->ops.read_reg(hw,
788                                                             dsp_reg_array[i],
789                                                             &phy_data);
790                                 if (ret_val)
791                                         goto out;
792
793                                 phy_data &= ~IGP01E1000_PHY_EDAC_MU_INDEX;
794                                 phy_data |= IGP01E1000_PHY_EDAC_SIGN_EXT_9_BITS;
795
796                                 ret_val = phy->ops.write_reg(hw,
797                                                              dsp_reg_array[i],
798                                                              phy_data);
799                                 if (ret_val)
800                                         goto out;
801                         }
802
803                         ret_val = phy->ops.write_reg(hw,
804                                                0x0000,
805                                                IGP01E1000_IEEE_RESTART_AUTONEG);
806                         if (ret_val)
807                                 goto out;
808
809                         msec_delay_irq(20);
810
811                         /* Now enable the transmitter */
812                         ret_val = phy->ops.write_reg(hw,
813                                                      0x2F5B,
814                                                      phy_saved_data);
815                         if (ret_val)
816                                 goto out;
817
818                         dev_spec->dsp_config = e1000_dsp_config_enabled;
819                 }
820
821                 if (dev_spec->ffe_config != e1000_ffe_config_active) {
822                         ret_val = E1000_SUCCESS;
823                         goto out;
824                 }
825
826                 /*
827                  * Save off the current value of register 0x2F5B
828                  * to be restored at the end of the routines.
829                  */
830                 ret_val = phy->ops.read_reg(hw, 0x2F5B, &phy_saved_data);
831                 if (ret_val)
832                         goto out;
833
834                 /* Disable the PHY transmitter */
835                 ret_val = phy->ops.write_reg(hw, 0x2F5B, 0x0003);
836                 if (ret_val)
837                         goto out;
838
839                 msec_delay_irq(20);
840
841                 ret_val = phy->ops.write_reg(hw,
842                                              0x0000,
843                                              IGP01E1000_IEEE_FORCE_GIG);
844                 if (ret_val)
845                         goto out;
846
847                 ret_val = phy->ops.write_reg(hw,
848                                              IGP01E1000_PHY_DSP_FFE,
849                                              IGP01E1000_PHY_DSP_FFE_DEFAULT);
850                 if (ret_val)
851                         goto out;
852
853                 ret_val = phy->ops.write_reg(hw,
854                                              0x0000,
855                                              IGP01E1000_IEEE_RESTART_AUTONEG);
856                 if (ret_val)
857                         goto out;
858
859                 msec_delay_irq(20);
860
861                 /* Now enable the transmitter */
862                 ret_val = phy->ops.write_reg(hw, 0x2F5B, phy_saved_data);
863
864                 if (ret_val)
865                         goto out;
866
867                 dev_spec->ffe_config = e1000_ffe_config_enabled;
868         }
869
870 out:
871         return ret_val;
872 }
873
874 /**
875  *  e1000_get_cable_length_igp_82541 - Determine cable length for igp PHY
876  *  @hw: pointer to the HW structure
877  *
878  *  The automatic gain control (agc) normalizes the amplitude of the
879  *  received signal, adjusting for the attenuation produced by the
880  *  cable.  By reading the AGC registers, which represent the
881  *  combination of coarse and fine gain value, the value can be put
882  *  into a lookup table to obtain the approximate cable length
883  *  for each channel.
884  **/
885 static s32 e1000_get_cable_length_igp_82541(struct e1000_hw *hw)
886 {
887         struct e1000_phy_info *phy = &hw->phy;
888         s32 ret_val = E1000_SUCCESS;
889         u16 i, data;
890         u16 cur_agc_value, agc_value = 0;
891         u16 min_agc_value = IGP01E1000_AGC_LENGTH_TABLE_SIZE;
892         u16 agc_reg_array[IGP01E1000_PHY_CHANNEL_NUM] =
893                                                          {IGP01E1000_PHY_AGC_A,
894                                                           IGP01E1000_PHY_AGC_B,
895                                                           IGP01E1000_PHY_AGC_C,
896                                                           IGP01E1000_PHY_AGC_D};
897
898         DEBUGFUNC("e1000_get_cable_length_igp_82541");
899
900         /* Read the AGC registers for all channels */
901         for (i = 0; i < IGP01E1000_PHY_CHANNEL_NUM; i++) {
902                 ret_val = phy->ops.read_reg(hw, agc_reg_array[i], &data);
903                 if (ret_val)
904                         goto out;
905
906                 cur_agc_value = data >> IGP01E1000_AGC_LENGTH_SHIFT;
907
908                 /* Bounds checking */
909                 if ((cur_agc_value >= IGP01E1000_AGC_LENGTH_TABLE_SIZE - 1) ||
910                     (cur_agc_value == 0)) {
911                         ret_val = -E1000_ERR_PHY;
912                         goto out;
913                 }
914
915                 agc_value += cur_agc_value;
916
917                 if (min_agc_value > cur_agc_value)
918                         min_agc_value = cur_agc_value;
919         }
920
921         /* Remove the minimal AGC result for length < 50m */
922         if (agc_value < IGP01E1000_PHY_CHANNEL_NUM * 50) {
923                 agc_value -= min_agc_value;
924                 /* Average the three remaining channels for the length. */
925                 agc_value /= (IGP01E1000_PHY_CHANNEL_NUM - 1);
926         } else {
927                 /* Average the channels for the length. */
928                 agc_value /= IGP01E1000_PHY_CHANNEL_NUM;
929         }
930
931         phy->min_cable_length = (e1000_igp_cable_length_table[agc_value] >
932                                  IGP01E1000_AGC_RANGE)
933                                 ? (e1000_igp_cable_length_table[agc_value] -
934                                    IGP01E1000_AGC_RANGE)
935                                 : 0;
936         phy->max_cable_length = e1000_igp_cable_length_table[agc_value] +
937                                 IGP01E1000_AGC_RANGE;
938
939         phy->cable_length = (phy->min_cable_length + phy->max_cable_length) / 2;
940
941 out:
942         return ret_val;
943 }
944
945 /**
946  *  e1000_set_d3_lplu_state_82541 - Sets low power link up state for D3
947  *  @hw: pointer to the HW structure
948  *  @active: boolean used to enable/disable lplu
949  *
950  *  Success returns 0, Failure returns 1
951  *
952  *  The low power link up (lplu) state is set to the power management level D3
953  *  and SmartSpeed is disabled when active is TRUE, else clear lplu for D3
954  *  and enable Smartspeed.  LPLU and Smartspeed are mutually exclusive.  LPLU
955  *  is used during Dx states where the power conservation is most important.
956  *  During driver activity, SmartSpeed should be enabled so performance is
957  *  maintained.
958  **/
959 static s32 e1000_set_d3_lplu_state_82541(struct e1000_hw *hw, bool active)
960 {
961         struct e1000_phy_info *phy = &hw->phy;
962         s32 ret_val;
963         u16 data;
964
965         DEBUGFUNC("e1000_set_d3_lplu_state_82541");
966
967         switch (hw->mac.type) {
968         case e1000_82541_rev_2:
969         case e1000_82547_rev_2:
970                 break;
971         default:
972                 ret_val = e1000_set_d3_lplu_state_generic(hw, active);
973                 goto out;
974                 break;
975         }
976
977         ret_val = phy->ops.read_reg(hw, IGP01E1000_GMII_FIFO, &data);
978         if (ret_val)
979                 goto out;
980
981         if (!active) {
982                 data &= ~IGP01E1000_GMII_FLEX_SPD;
983                 ret_val = phy->ops.write_reg(hw, IGP01E1000_GMII_FIFO, data);
984                 if (ret_val)
985                         goto out;
986
987                 /*
988                  * LPLU and SmartSpeed are mutually exclusive.  LPLU is used
989                  * during Dx states where the power conservation is most
990                  * important.  During driver activity we should enable
991                  * SmartSpeed, so performance is maintained.
992                  */
993                 if (phy->smart_speed == e1000_smart_speed_on) {
994                         ret_val = phy->ops.read_reg(hw,
995                                                     IGP01E1000_PHY_PORT_CONFIG,
996                                                     &data);
997                         if (ret_val)
998                                 goto out;
999
1000                         data |= IGP01E1000_PSCFR_SMART_SPEED;
1001                         ret_val = phy->ops.write_reg(hw,
1002                                                      IGP01E1000_PHY_PORT_CONFIG,
1003                                                      data);
1004                         if (ret_val)
1005                                 goto out;
1006                 } else if (phy->smart_speed == e1000_smart_speed_off) {
1007                         ret_val = phy->ops.read_reg(hw,
1008                                                     IGP01E1000_PHY_PORT_CONFIG,
1009                                                     &data);
1010                         if (ret_val)
1011                                 goto out;
1012
1013                         data &= ~IGP01E1000_PSCFR_SMART_SPEED;
1014                         ret_val = phy->ops.write_reg(hw,
1015                                                      IGP01E1000_PHY_PORT_CONFIG,
1016                                                      data);
1017                         if (ret_val)
1018                                 goto out;
1019                 }
1020         } else if ((phy->autoneg_advertised == E1000_ALL_SPEED_DUPLEX) ||
1021                    (phy->autoneg_advertised == E1000_ALL_NOT_GIG) ||
1022                    (phy->autoneg_advertised == E1000_ALL_10_SPEED)) {
1023                 data |= IGP01E1000_GMII_FLEX_SPD;
1024                 ret_val = phy->ops.write_reg(hw, IGP01E1000_GMII_FIFO, data);
1025                 if (ret_val)
1026                         goto out;
1027
1028                 /* When LPLU is enabled, we should disable SmartSpeed */
1029                 ret_val = phy->ops.read_reg(hw,
1030                                             IGP01E1000_PHY_PORT_CONFIG,
1031                                             &data);
1032                 if (ret_val)
1033                         goto out;
1034
1035                 data &= ~IGP01E1000_PSCFR_SMART_SPEED;
1036                 ret_val = phy->ops.write_reg(hw,
1037                                              IGP01E1000_PHY_PORT_CONFIG,
1038                                              data);
1039         }
1040
1041 out:
1042         return ret_val;
1043 }
1044
1045 /**
1046  *  e1000_setup_led_82541 - Configures SW controllable LED
1047  *  @hw: pointer to the HW structure
1048  *
1049  *  This prepares the SW controllable LED for use and saves the current state
1050  *  of the LED so it can be later restored.
1051  **/
1052 static s32 e1000_setup_led_82541(struct e1000_hw *hw)
1053 {
1054         struct e1000_dev_spec_82541 *dev_spec = &hw->dev_spec._82541;
1055         s32 ret_val;
1056
1057         DEBUGFUNC("e1000_setup_led_82541");
1058
1059         ret_val = hw->phy.ops.read_reg(hw,
1060                                        IGP01E1000_GMII_FIFO,
1061                                        &dev_spec->spd_default);
1062         if (ret_val)
1063                 goto out;
1064
1065         ret_val = hw->phy.ops.write_reg(hw,
1066                                         IGP01E1000_GMII_FIFO,
1067                                         (u16)(dev_spec->spd_default &
1068                                                 ~IGP01E1000_GMII_SPD));
1069         if (ret_val)
1070                 goto out;
1071
1072         E1000_WRITE_REG(hw, E1000_LEDCTL, hw->mac.ledctl_mode1);
1073
1074 out:
1075         return ret_val;
1076 }
1077
1078 /**
1079  *  e1000_cleanup_led_82541 - Set LED config to default operation
1080  *  @hw: pointer to the HW structure
1081  *
1082  *  Remove the current LED configuration and set the LED configuration
1083  *  to the default value, saved from the EEPROM.
1084  **/
1085 static s32 e1000_cleanup_led_82541(struct e1000_hw *hw)
1086 {
1087         struct e1000_dev_spec_82541 *dev_spec = &hw->dev_spec._82541;
1088         s32 ret_val;
1089
1090         DEBUGFUNC("e1000_cleanup_led_82541");
1091
1092         ret_val = hw->phy.ops.write_reg(hw,
1093                                         IGP01E1000_GMII_FIFO,
1094                                         dev_spec->spd_default);
1095         if (ret_val)
1096                 goto out;
1097
1098         E1000_WRITE_REG(hw, E1000_LEDCTL, hw->mac.ledctl_default);
1099
1100 out:
1101         return ret_val;
1102 }
1103
1104 /**
1105  *  e1000_phy_init_script_82541 - Initialize GbE PHY
1106  *  @hw: pointer to the HW structure
1107  *
1108  *  Initializes the IGP PHY.
1109  **/
1110 static s32 e1000_phy_init_script_82541(struct e1000_hw *hw)
1111 {
1112         struct e1000_dev_spec_82541 *dev_spec = &hw->dev_spec._82541;
1113         u32 ret_val;
1114         u16 phy_saved_data;
1115
1116         DEBUGFUNC("e1000_phy_init_script_82541");
1117
1118         if (!dev_spec->phy_init_script) {
1119                 ret_val = E1000_SUCCESS;
1120                 goto out;
1121         }
1122
1123         /* Delay after phy reset to enable NVM configuration to load */
1124         msec_delay(20);
1125
1126         /*
1127          * Save off the current value of register 0x2F5B to be restored at
1128          * the end of this routine.
1129          */
1130         ret_val = hw->phy.ops.read_reg(hw, 0x2F5B, &phy_saved_data);
1131
1132         /* Disabled the PHY transmitter */
1133         hw->phy.ops.write_reg(hw, 0x2F5B, 0x0003);
1134
1135         msec_delay(20);
1136
1137         hw->phy.ops.write_reg(hw, 0x0000, 0x0140);
1138
1139         msec_delay(5);
1140
1141         switch (hw->mac.type) {
1142         case e1000_82541:
1143         case e1000_82547:
1144                 hw->phy.ops.write_reg(hw, 0x1F95, 0x0001);
1145
1146                 hw->phy.ops.write_reg(hw, 0x1F71, 0xBD21);
1147
1148                 hw->phy.ops.write_reg(hw, 0x1F79, 0x0018);
1149
1150                 hw->phy.ops.write_reg(hw, 0x1F30, 0x1600);
1151
1152                 hw->phy.ops.write_reg(hw, 0x1F31, 0x0014);
1153
1154                 hw->phy.ops.write_reg(hw, 0x1F32, 0x161C);
1155
1156                 hw->phy.ops.write_reg(hw, 0x1F94, 0x0003);
1157
1158                 hw->phy.ops.write_reg(hw, 0x1F96, 0x003F);
1159
1160                 hw->phy.ops.write_reg(hw, 0x2010, 0x0008);
1161                 break;
1162         case e1000_82541_rev_2:
1163         case e1000_82547_rev_2:
1164                 hw->phy.ops.write_reg(hw, 0x1F73, 0x0099);
1165                 break;
1166         default:
1167                 break;
1168         }
1169
1170         hw->phy.ops.write_reg(hw, 0x0000, 0x3300);
1171
1172         msec_delay(20);
1173
1174         /* Now enable the transmitter */
1175         hw->phy.ops.write_reg(hw, 0x2F5B, phy_saved_data);
1176
1177         if (hw->mac.type == e1000_82547) {
1178                 u16 fused, fine, coarse;
1179
1180                 /* Move to analog registers page */
1181                 hw->phy.ops.read_reg(hw,
1182                                   IGP01E1000_ANALOG_SPARE_FUSE_STATUS,
1183                                   &fused);
1184
1185                 if (!(fused & IGP01E1000_ANALOG_SPARE_FUSE_ENABLED)) {
1186                         hw->phy.ops.read_reg(hw,
1187                                           IGP01E1000_ANALOG_FUSE_STATUS,
1188                                           &fused);
1189
1190                         fine = fused & IGP01E1000_ANALOG_FUSE_FINE_MASK;
1191                         coarse = fused & IGP01E1000_ANALOG_FUSE_COARSE_MASK;
1192
1193                         if (coarse > IGP01E1000_ANALOG_FUSE_COARSE_THRESH) {
1194                                 coarse -= IGP01E1000_ANALOG_FUSE_COARSE_10;
1195                                 fine -= IGP01E1000_ANALOG_FUSE_FINE_1;
1196                         } else if (coarse ==
1197                                    IGP01E1000_ANALOG_FUSE_COARSE_THRESH)
1198                                 fine -= IGP01E1000_ANALOG_FUSE_FINE_10;
1199
1200                         fused = (fused & IGP01E1000_ANALOG_FUSE_POLY_MASK) |
1201                                 (fine & IGP01E1000_ANALOG_FUSE_FINE_MASK) |
1202                                 (coarse & IGP01E1000_ANALOG_FUSE_COARSE_MASK);
1203
1204                         hw->phy.ops.write_reg(hw,
1205                                            IGP01E1000_ANALOG_FUSE_CONTROL,
1206                                            fused);
1207                         hw->phy.ops.write_reg(hw,
1208                                       IGP01E1000_ANALOG_FUSE_BYPASS,
1209                                       IGP01E1000_ANALOG_FUSE_ENABLE_SW_CONTROL);
1210                 }
1211         }
1212
1213 out:
1214         return ret_val;
1215 }
1216
1217 /**
1218  *  e1000_init_script_state_82541 - Enable/Disable PHY init script
1219  *  @hw: pointer to the HW structure
1220  *  @state: boolean value used to enable/disable PHY init script
1221  *
1222  *  Allows the driver to enable/disable the PHY init script, if the PHY is an
1223  *  IGP PHY.
1224  **/
1225 void e1000_init_script_state_82541(struct e1000_hw *hw, bool state)
1226 {
1227         struct e1000_dev_spec_82541 *dev_spec = &hw->dev_spec._82541;
1228
1229         DEBUGFUNC("e1000_init_script_state_82541");
1230
1231         if (hw->phy.type != e1000_phy_igp) {
1232                 DEBUGOUT("Initialization script not necessary.\n");
1233                 goto out;
1234         }
1235
1236         dev_spec->phy_init_script = state;
1237
1238 out:
1239         return;
1240 }
1241
1242 /**
1243  * e1000_power_down_phy_copper_82541 - Remove link in case of PHY power down
1244  * @hw: pointer to the HW structure
1245  *
1246  * In the case of a PHY power down to save power, or to turn off link during a
1247  * driver unload, or wake on lan is not enabled, remove the link.
1248  **/
1249 static void e1000_power_down_phy_copper_82541(struct e1000_hw *hw)
1250 {
1251         /* If the management interface is not enabled, then power down */
1252         if (!(E1000_READ_REG(hw, E1000_MANC) & E1000_MANC_SMBUS_EN))
1253                 e1000_power_down_phy_copper(hw);
1254
1255         return;
1256 }
1257
1258 /**
1259  *  e1000_clear_hw_cntrs_82541 - Clear device specific hardware counters
1260  *  @hw: pointer to the HW structure
1261  *
1262  *  Clears the hardware counters by reading the counter registers.
1263  **/
1264 static void e1000_clear_hw_cntrs_82541(struct e1000_hw *hw)
1265 {
1266         DEBUGFUNC("e1000_clear_hw_cntrs_82541");
1267
1268         e1000_clear_hw_cntrs_base_generic(hw);
1269
1270         E1000_READ_REG(hw, E1000_PRC64);
1271         E1000_READ_REG(hw, E1000_PRC127);
1272         E1000_READ_REG(hw, E1000_PRC255);
1273         E1000_READ_REG(hw, E1000_PRC511);
1274         E1000_READ_REG(hw, E1000_PRC1023);
1275         E1000_READ_REG(hw, E1000_PRC1522);
1276         E1000_READ_REG(hw, E1000_PTC64);
1277         E1000_READ_REG(hw, E1000_PTC127);
1278         E1000_READ_REG(hw, E1000_PTC255);
1279         E1000_READ_REG(hw, E1000_PTC511);
1280         E1000_READ_REG(hw, E1000_PTC1023);
1281         E1000_READ_REG(hw, E1000_PTC1522);
1282
1283         E1000_READ_REG(hw, E1000_ALGNERRC);
1284         E1000_READ_REG(hw, E1000_RXERRC);
1285         E1000_READ_REG(hw, E1000_TNCRS);
1286         E1000_READ_REG(hw, E1000_CEXTERR);
1287         E1000_READ_REG(hw, E1000_TSCTC);
1288         E1000_READ_REG(hw, E1000_TSCTFC);
1289
1290         E1000_READ_REG(hw, E1000_MGTPRC);
1291         E1000_READ_REG(hw, E1000_MGTPDC);
1292         E1000_READ_REG(hw, E1000_MGTPTC);
1293 }
1294
1295 /**
1296  *  e1000_read_mac_addr_82541 - Read device MAC address
1297  *  @hw: pointer to the HW structure
1298  *
1299  *  Reads the device MAC address from the EEPROM and stores the value.
1300  **/
1301 static s32 e1000_read_mac_addr_82541(struct e1000_hw *hw)
1302 {
1303         s32  ret_val = E1000_SUCCESS;
1304         u16 offset, nvm_data, i;
1305
1306         DEBUGFUNC("e1000_read_mac_addr");
1307
1308         for (i = 0; i < ETH_ADDR_LEN; i += 2) {
1309                 offset = i >> 1;
1310                 ret_val = hw->nvm.ops.read(hw, offset, 1, &nvm_data);
1311                 if (ret_val) {
1312                         DEBUGOUT("NVM Read Error\n");
1313                         goto out;
1314                 }
1315                 hw->mac.perm_addr[i] = (u8)(nvm_data & 0xFF);
1316                 hw->mac.perm_addr[i+1] = (u8)(nvm_data >> 8);
1317         }
1318
1319         for (i = 0; i < ETH_ADDR_LEN; i++)
1320                 hw->mac.addr[i] = hw->mac.perm_addr[i];
1321
1322 out:
1323         return ret_val;
1324 }
1325