1 /******************************************************************************
2
3 Copyright (c) 2001-2010, Intel Corporation
4 All rights reserved.
5
6 Redistribution and use in source and binary forms, with or without
7 modification, are permitted provided that the following conditions are met:
8
9 1. Redistributions of source code must retain the above copyright notice,
10 this list of conditions and the following disclaimer.
11
12 2. Redistributions in binary form must reproduce the above copyright
13 notice, this list of conditions and the following disclaimer in the
14 documentation and/or other materials provided with the distribution.
15
16 3. Neither the name of the Intel Corporation nor the names of its
17 contributors may be used to endorse or promote products derived from
18 this software without specific prior written permission.
19
20 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 POSSIBILITY OF SUCH DAMAGE.
31
32 ******************************************************************************/
33 /*$FreeBSD: releng/9.0/sys/dev/e1000/e1000_82541.c 218588 2011-02-12 00:07:40Z jfv $*/
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, 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 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 hw->phy.reset_disable = FALSE;
553
554 /* Earlier revs of the IGP phy require us to force MDI. */
555 if (hw->mac.type == e1000_82541 || hw->mac.type == e1000_82547) {
556 dev_spec->dsp_config = e1000_dsp_config_disabled;
557 phy->mdix = 1;
558 } else {
559 dev_spec->dsp_config = e1000_dsp_config_enabled;
560 }
561
562 ret_val = e1000_copper_link_setup_igp(hw);
563 if (ret_val)
564 goto out;
565
566 if (hw->mac.autoneg) {
567 if (dev_spec->ffe_config == e1000_ffe_config_active)
568 dev_spec->ffe_config = e1000_ffe_config_enabled;
569 }
570
571 /* Configure activity LED after Phy reset */
572 ledctl = E1000_READ_REG(hw, E1000_LEDCTL);
573 ledctl &= IGP_ACTIVITY_LED_MASK;
574 ledctl |= (IGP_ACTIVITY_LED_ENABLE | IGP_LED3_MODE);
575 E1000_WRITE_REG(hw, E1000_LEDCTL, ledctl);
576
577 ret_val = e1000_setup_copper_link_generic(hw);
578
579 out:
580 return ret_val;
581 }
582
583 /**
584 * e1000_check_for_link_82541 - Check/Store link connection
585 * @hw: pointer to the HW structure
586 *
587 * This checks the link condition of the adapter and stores the
588 * results in the hw->mac structure.
589 **/
590 static s32 e1000_check_for_link_82541(struct e1000_hw *hw)
591 {
592 struct e1000_mac_info *mac = &hw->mac;
593 s32 ret_val;
594 bool link;
595
596 DEBUGFUNC("e1000_check_for_link_82541");
597
598 /*
599 * We only want to go out to the PHY registers to see if Auto-Neg
600 * has completed and/or if our link status has changed. The
601 * get_link_status flag is set upon receiving a Link Status
602 * Change or Rx Sequence Error interrupt.
603 */
604 if (!mac->get_link_status) {
605 ret_val = E1000_SUCCESS;
606 goto out;
607 }
608
609 /*
610 * First we want to see if the MII Status Register reports
611 * link. If so, then we want to get the current speed/duplex
612 * of the PHY.
613 */
614 ret_val = e1000_phy_has_link_generic(hw, 1, 0, &link);
615 if (ret_val)
616 goto out;
617
618 if (!link) {
619 ret_val = e1000_config_dsp_after_link_change_82541(hw, FALSE);
620 goto out; /* No link detected */
621 }
622
623 mac->get_link_status = FALSE;
624
625 /*
626 * Check if there was DownShift, must be checked
627 * immediately after link-up
628 */
629 e1000_check_downshift_generic(hw);
630
631 /*
632 * If we are forcing speed/duplex, then we simply return since
633 * we have already determined whether we have link or not.
634 */
635 if (!mac->autoneg) {
636 ret_val = -E1000_ERR_CONFIG;
637 goto out;
638 }
639
640 ret_val = e1000_config_dsp_after_link_change_82541(hw, TRUE);
641
642 /*
643 * Auto-Neg is enabled. Auto Speed Detection takes care
644 * of MAC speed/duplex configuration. So we only need to
645 * configure Collision Distance in the MAC.
646 */
647 e1000_config_collision_dist_generic(hw);
648
649 /*
650 * Configure Flow Control now that Auto-Neg has completed.
651 * First, we need to restore the desired flow control
652 * settings because we may have had to re-autoneg with a
653 * different link partner.
654 */
655 ret_val = e1000_config_fc_after_link_up_generic(hw);
656 if (ret_val) {
657 DEBUGOUT("Error configuring flow control\n");
658 }
659
660 out:
661 return ret_val;
662 }
663
664 /**
665 * e1000_config_dsp_after_link_change_82541 - Config DSP after link
666 * @hw: pointer to the HW structure
667 * @link_up: boolean flag for link up status
668 *
669 * Return E1000_ERR_PHY when failing to read/write the PHY, else E1000_SUCCESS
670 * at any other case.
671 *
672 * 82541_rev_2 & 82547_rev_2 have the capability to configure the DSP when a
673 * gigabit link is achieved to improve link quality.
674 **/
675 static s32 e1000_config_dsp_after_link_change_82541(struct e1000_hw *hw,
676 bool link_up)
677 {
678 struct e1000_phy_info *phy = &hw->phy;
679 struct e1000_dev_spec_82541 *dev_spec = &hw->dev_spec._82541;
680 s32 ret_val;
681 u32 idle_errs = 0;
682 u16 phy_data, phy_saved_data, speed, duplex, i;
683 u16 ffe_idle_err_timeout = FFE_IDLE_ERR_COUNT_TIMEOUT_20;
684 u16 dsp_reg_array[IGP01E1000_PHY_CHANNEL_NUM] =
685 {IGP01E1000_PHY_AGC_PARAM_A,
686 IGP01E1000_PHY_AGC_PARAM_B,
687 IGP01E1000_PHY_AGC_PARAM_C,
688 IGP01E1000_PHY_AGC_PARAM_D};
689
690 DEBUGFUNC("e1000_config_dsp_after_link_change_82541");
691
692 if (link_up) {
693 ret_val = hw->mac.ops.get_link_up_info(hw, &speed, &duplex);
694 if (ret_val) {
695 DEBUGOUT("Error getting link speed and duplex\n");
696 goto out;
697 }
698
699 if (speed != SPEED_1000) {
700 ret_val = E1000_SUCCESS;
701 goto out;
702 }
703
704 ret_val = phy->ops.get_cable_length(hw);
705 if (ret_val)
706 goto out;
707
708 if ((dev_spec->dsp_config == e1000_dsp_config_enabled) &&
709 phy->min_cable_length >= 50) {
710
711 for (i = 0; i < IGP01E1000_PHY_CHANNEL_NUM; i++) {
712 ret_val = phy->ops.read_reg(hw,
713 dsp_reg_array[i],
714 &phy_data);
715 if (ret_val)
716 goto out;
717
718 phy_data &= ~IGP01E1000_PHY_EDAC_MU_INDEX;
719
720 ret_val = phy->ops.write_reg(hw,
721 dsp_reg_array[i],
722 phy_data);
723 if (ret_val)
724 goto out;
725 }
726 dev_spec->dsp_config = e1000_dsp_config_activated;
727 }
728
729 if ((dev_spec->ffe_config != e1000_ffe_config_enabled) ||
730 (phy->min_cable_length >= 50)) {
731 ret_val = E1000_SUCCESS;
732 goto out;
733 }
734
735 /* clear previous idle error counts */
736 ret_val = phy->ops.read_reg(hw, PHY_1000T_STATUS, &phy_data);
737 if (ret_val)
738 goto out;
739
740 for (i = 0; i < ffe_idle_err_timeout; i++) {
741 usec_delay(1000);
742 ret_val = phy->ops.read_reg(hw,
743 PHY_1000T_STATUS,
744 &phy_data);
745 if (ret_val)
746 goto out;
747
748 idle_errs += (phy_data & SR_1000T_IDLE_ERROR_CNT);
749 if (idle_errs > SR_1000T_PHY_EXCESSIVE_IDLE_ERR_COUNT) {
750 dev_spec->ffe_config = e1000_ffe_config_active;
751
752 ret_val = phy->ops.write_reg(hw,
753 IGP01E1000_PHY_DSP_FFE,
754 IGP01E1000_PHY_DSP_FFE_CM_CP);
755 if (ret_val)
756 goto out;
757 break;
758 }
759
760 if (idle_errs)
761 ffe_idle_err_timeout =
762 FFE_IDLE_ERR_COUNT_TIMEOUT_100;
763 }
764 } else {
765 if (dev_spec->dsp_config == e1000_dsp_config_activated) {
766 /*
767 * Save off the current value of register 0x2F5B
768 * to be restored at the end of the routines.
769 */
770 ret_val = phy->ops.read_reg(hw,
771 0x2F5B,
772 &phy_saved_data);
773 if (ret_val)
774 goto out;
775
776 /* Disable the PHY transmitter */
777 ret_val = phy->ops.write_reg(hw, 0x2F5B, 0x0003);
778 if (ret_val)
779 goto out;
780
781 msec_delay_irq(20);
782
783 ret_val = phy->ops.write_reg(hw,
784 0x0000,
785 IGP01E1000_IEEE_FORCE_GIG);
786 if (ret_val)
787 goto out;
788 for (i = 0; i < IGP01E1000_PHY_CHANNEL_NUM; i++) {
789 ret_val = phy->ops.read_reg(hw,
790 dsp_reg_array[i],
791 &phy_data);
792 if (ret_val)
793 goto out;
794
795 phy_data &= ~IGP01E1000_PHY_EDAC_MU_INDEX;
796 phy_data |= IGP01E1000_PHY_EDAC_SIGN_EXT_9_BITS;
797
798 ret_val = phy->ops.write_reg(hw,
799 dsp_reg_array[i],
800 phy_data);
801 if (ret_val)
802 goto out;
803 }
804
805 ret_val = phy->ops.write_reg(hw,
806 0x0000,
807 IGP01E1000_IEEE_RESTART_AUTONEG);
808 if (ret_val)
809 goto out;
810
811 msec_delay_irq(20);
812
813 /* Now enable the transmitter */
814 ret_val = phy->ops.write_reg(hw,
815 0x2F5B,
816 phy_saved_data);
817 if (ret_val)
818 goto out;
819
820 dev_spec->dsp_config = e1000_dsp_config_enabled;
821 }
822
823 if (dev_spec->ffe_config != e1000_ffe_config_active) {
824 ret_val = E1000_SUCCESS;
825 goto out;
826 }
827
828 /*
829 * Save off the current value of register 0x2F5B
830 * to be restored at the end of the routines.
831 */
832 ret_val = phy->ops.read_reg(hw, 0x2F5B, &phy_saved_data);
833 if (ret_val)
834 goto out;
835
836 /* Disable the PHY transmitter */
837 ret_val = phy->ops.write_reg(hw, 0x2F5B, 0x0003);
838 if (ret_val)
839 goto out;
840
841 msec_delay_irq(20);
842
843 ret_val = phy->ops.write_reg(hw,
844 0x0000,
845 IGP01E1000_IEEE_FORCE_GIG);
846 if (ret_val)
847 goto out;
848
849 ret_val = phy->ops.write_reg(hw,
850 IGP01E1000_PHY_DSP_FFE,
851 IGP01E1000_PHY_DSP_FFE_DEFAULT);
852 if (ret_val)
853 goto out;
854
855 ret_val = phy->ops.write_reg(hw,
856 0x0000,
857 IGP01E1000_IEEE_RESTART_AUTONEG);
858 if (ret_val)
859 goto out;
860
861 msec_delay_irq(20);
862
863 /* Now enable the transmitter */
864 ret_val = phy->ops.write_reg(hw, 0x2F5B, phy_saved_data);
865
866 if (ret_val)
867 goto out;
868
869 dev_spec->ffe_config = e1000_ffe_config_enabled;
870 }
871
872 out:
873 return ret_val;
874 }
875
876 /**
877 * e1000_get_cable_length_igp_82541 - Determine cable length for igp PHY
878 * @hw: pointer to the HW structure
879 *
880 * The automatic gain control (agc) normalizes the amplitude of the
881 * received signal, adjusting for the attenuation produced by the
882 * cable. By reading the AGC registers, which represent the
883 * combination of coarse and fine gain value, the value can be put
884 * into a lookup table to obtain the approximate cable length
885 * for each channel.
886 **/
887 static s32 e1000_get_cable_length_igp_82541(struct e1000_hw *hw)
888 {
889 struct e1000_phy_info *phy = &hw->phy;
890 s32 ret_val = E1000_SUCCESS;
891 u16 i, data;
892 u16 cur_agc_value, agc_value = 0;
893 u16 min_agc_value = IGP01E1000_AGC_LENGTH_TABLE_SIZE;
894 u16 agc_reg_array[IGP01E1000_PHY_CHANNEL_NUM] =
895 {IGP01E1000_PHY_AGC_A,
896 IGP01E1000_PHY_AGC_B,
897 IGP01E1000_PHY_AGC_C,
898 IGP01E1000_PHY_AGC_D};
899
900 DEBUGFUNC("e1000_get_cable_length_igp_82541");
901
902 /* Read the AGC registers for all channels */
903 for (i = 0; i < IGP01E1000_PHY_CHANNEL_NUM; i++) {
904 ret_val = phy->ops.read_reg(hw, agc_reg_array[i], &data);
905 if (ret_val)
906 goto out;
907
908 cur_agc_value = data >> IGP01E1000_AGC_LENGTH_SHIFT;
909
910 /* Bounds checking */
911 if ((cur_agc_value >= IGP01E1000_AGC_LENGTH_TABLE_SIZE - 1) ||
912 (cur_agc_value == 0)) {
913 ret_val = -E1000_ERR_PHY;
914 goto out;
915 }
916
917 agc_value += cur_agc_value;
918
919 if (min_agc_value > cur_agc_value)
920 min_agc_value = cur_agc_value;
921 }
922
923 /* Remove the minimal AGC result for length < 50m */
924 if (agc_value < IGP01E1000_PHY_CHANNEL_NUM * 50) {
925 agc_value -= min_agc_value;
926 /* Average the three remaining channels for the length. */
927 agc_value /= (IGP01E1000_PHY_CHANNEL_NUM - 1);
928 } else {
929 /* Average the channels for the length. */
930 agc_value /= IGP01E1000_PHY_CHANNEL_NUM;
931 }
932
933 phy->min_cable_length = (e1000_igp_cable_length_table[agc_value] >
934 IGP01E1000_AGC_RANGE)
935 ? (e1000_igp_cable_length_table[agc_value] -
936 IGP01E1000_AGC_RANGE)
937 : 0;
938 phy->max_cable_length = e1000_igp_cable_length_table[agc_value] +
939 IGP01E1000_AGC_RANGE;
940
941 phy->cable_length = (phy->min_cable_length + phy->max_cable_length) / 2;
942
943 out:
944 return ret_val;
945 }
946
947 /**
948 * e1000_set_d3_lplu_state_82541 - Sets low power link up state for D3
949 * @hw: pointer to the HW structure
950 * @active: boolean used to enable/disable lplu
951 *
952 * Success returns 0, Failure returns 1
953 *
954 * The low power link up (lplu) state is set to the power management level D3
955 * and SmartSpeed is disabled when active is TRUE, else clear lplu for D3
956 * and enable Smartspeed. LPLU and Smartspeed are mutually exclusive. LPLU
957 * is used during Dx states where the power conservation is most important.
958 * During driver activity, SmartSpeed should be enabled so performance is
959 * maintained.
960 **/
961 static s32 e1000_set_d3_lplu_state_82541(struct e1000_hw *hw, bool active)
962 {
963 struct e1000_phy_info *phy = &hw->phy;
964 s32 ret_val;
965 u16 data;
966
967 DEBUGFUNC("e1000_set_d3_lplu_state_82541");
968
969 switch (hw->mac.type) {
970 case e1000_82541_rev_2:
971 case e1000_82547_rev_2:
972 break;
973 default:
974 ret_val = e1000_set_d3_lplu_state_generic(hw, active);
975 goto out;
976 break;
977 }
978
979 ret_val = phy->ops.read_reg(hw, IGP01E1000_GMII_FIFO, &data);
980 if (ret_val)
981 goto out;
982
983 if (!active) {
984 data &= ~IGP01E1000_GMII_FLEX_SPD;
985 ret_val = phy->ops.write_reg(hw, IGP01E1000_GMII_FIFO, data);
986 if (ret_val)
987 goto out;
988
989 /*
990 * LPLU and SmartSpeed are mutually exclusive. LPLU is used
991 * during Dx states where the power conservation is most
992 * important. During driver activity we should enable
993 * SmartSpeed, so performance is maintained.
994 */
995 if (phy->smart_speed == e1000_smart_speed_on) {
996 ret_val = phy->ops.read_reg(hw,
997 IGP01E1000_PHY_PORT_CONFIG,
998 &data);
999 if (ret_val)
1000 goto out;
1001
1002 data |= IGP01E1000_PSCFR_SMART_SPEED;
1003 ret_val = phy->ops.write_reg(hw,
1004 IGP01E1000_PHY_PORT_CONFIG,
1005 data);
1006 if (ret_val)
1007 goto out;
1008 } else if (phy->smart_speed == e1000_smart_speed_off) {
1009 ret_val = phy->ops.read_reg(hw,
1010 IGP01E1000_PHY_PORT_CONFIG,
1011 &data);
1012 if (ret_val)
1013 goto out;
1014
1015 data &= ~IGP01E1000_PSCFR_SMART_SPEED;
1016 ret_val = phy->ops.write_reg(hw,
1017 IGP01E1000_PHY_PORT_CONFIG,
1018 data);
1019 if (ret_val)
1020 goto out;
1021 }
1022 } else if ((phy->autoneg_advertised == E1000_ALL_SPEED_DUPLEX) ||
1023 (phy->autoneg_advertised == E1000_ALL_NOT_GIG) ||
1024 (phy->autoneg_advertised == E1000_ALL_10_SPEED)) {
1025 data |= IGP01E1000_GMII_FLEX_SPD;
1026 ret_val = phy->ops.write_reg(hw, IGP01E1000_GMII_FIFO, data);
1027 if (ret_val)
1028 goto out;
1029
1030 /* When LPLU is enabled, we should disable SmartSpeed */
1031 ret_val = phy->ops.read_reg(hw,
1032 IGP01E1000_PHY_PORT_CONFIG,
1033 &data);
1034 if (ret_val)
1035 goto out;
1036
1037 data &= ~IGP01E1000_PSCFR_SMART_SPEED;
1038 ret_val = phy->ops.write_reg(hw,
1039 IGP01E1000_PHY_PORT_CONFIG,
1040 data);
1041 }
1042
1043 out:
1044 return ret_val;
1045 }
1046
1047 /**
1048 * e1000_setup_led_82541 - Configures SW controllable LED
1049 * @hw: pointer to the HW structure
1050 *
1051 * This prepares the SW controllable LED for use and saves the current state
1052 * of the LED so it can be later restored.
1053 **/
1054 static s32 e1000_setup_led_82541(struct e1000_hw *hw)
1055 {
1056 struct e1000_dev_spec_82541 *dev_spec = &hw->dev_spec._82541;
1057 s32 ret_val;
1058
1059 DEBUGFUNC("e1000_setup_led_82541");
1060
1061 ret_val = hw->phy.ops.read_reg(hw,
1062 IGP01E1000_GMII_FIFO,
1063 &dev_spec->spd_default);
1064 if (ret_val)
1065 goto out;
1066
1067 ret_val = hw->phy.ops.write_reg(hw,
1068 IGP01E1000_GMII_FIFO,
1069 (u16)(dev_spec->spd_default &
1070 ~IGP01E1000_GMII_SPD));
1071 if (ret_val)
1072 goto out;
1073
1074 E1000_WRITE_REG(hw, E1000_LEDCTL, hw->mac.ledctl_mode1);
1075
1076 out:
1077 return ret_val;
1078 }
1079
1080 /**
1081 * e1000_cleanup_led_82541 - Set LED config to default operation
1082 * @hw: pointer to the HW structure
1083 *
1084 * Remove the current LED configuration and set the LED configuration
1085 * to the default value, saved from the EEPROM.
1086 **/
1087 static s32 e1000_cleanup_led_82541(struct e1000_hw *hw)
1088 {
1089 struct e1000_dev_spec_82541 *dev_spec = &hw->dev_spec._82541;
1090 s32 ret_val;
1091
1092 DEBUGFUNC("e1000_cleanup_led_82541");
1093
1094 ret_val = hw->phy.ops.write_reg(hw,
1095 IGP01E1000_GMII_FIFO,
1096 dev_spec->spd_default);
1097 if (ret_val)
1098 goto out;
1099
1100 E1000_WRITE_REG(hw, E1000_LEDCTL, hw->mac.ledctl_default);
1101
1102 out:
1103 return ret_val;
1104 }
1105
1106 /**
1107 * e1000_phy_init_script_82541 - Initialize GbE PHY
1108 * @hw: pointer to the HW structure
1109 *
1110 * Initializes the IGP PHY.
1111 **/
1112 static s32 e1000_phy_init_script_82541(struct e1000_hw *hw)
1113 {
1114 struct e1000_dev_spec_82541 *dev_spec = &hw->dev_spec._82541;
1115 u32 ret_val;
1116 u16 phy_saved_data;
1117
1118 DEBUGFUNC("e1000_phy_init_script_82541");
1119
1120 if (!dev_spec->phy_init_script) {
1121 ret_val = E1000_SUCCESS;
1122 goto out;
1123 }
1124
1125 /* Delay after phy reset to enable NVM configuration to load */
1126 msec_delay(20);
1127
1128 /*
1129 * Save off the current value of register 0x2F5B to be restored at
1130 * the end of this routine.
1131 */
1132 ret_val = hw->phy.ops.read_reg(hw, 0x2F5B, &phy_saved_data);
1133
1134 /* Disabled the PHY transmitter */
1135 hw->phy.ops.write_reg(hw, 0x2F5B, 0x0003);
1136
1137 msec_delay(20);
1138
1139 hw->phy.ops.write_reg(hw, 0x0000, 0x0140);
1140
1141 msec_delay(5);
1142
1143 switch (hw->mac.type) {
1144 case e1000_82541:
1145 case e1000_82547:
1146 hw->phy.ops.write_reg(hw, 0x1F95, 0x0001);
1147
1148 hw->phy.ops.write_reg(hw, 0x1F71, 0xBD21);
1149
1150 hw->phy.ops.write_reg(hw, 0x1F79, 0x0018);
1151
1152 hw->phy.ops.write_reg(hw, 0x1F30, 0x1600);
1153
1154 hw->phy.ops.write_reg(hw, 0x1F31, 0x0014);
1155
1156 hw->phy.ops.write_reg(hw, 0x1F32, 0x161C);
1157
1158 hw->phy.ops.write_reg(hw, 0x1F94, 0x0003);
1159
1160 hw->phy.ops.write_reg(hw, 0x1F96, 0x003F);
1161
1162 hw->phy.ops.write_reg(hw, 0x2010, 0x0008);
1163 break;
1164 case e1000_82541_rev_2:
1165 case e1000_82547_rev_2:
1166 hw->phy.ops.write_reg(hw, 0x1F73, 0x0099);
1167 break;
1168 default:
1169 break;
1170 }
1171
1172 hw->phy.ops.write_reg(hw, 0x0000, 0x3300);
1173
1174 msec_delay(20);
1175
1176 /* Now enable the transmitter */
1177 hw->phy.ops.write_reg(hw, 0x2F5B, phy_saved_data);
1178
1179 if (hw->mac.type == e1000_82547) {
1180 u16 fused, fine, coarse;
1181
1182 /* Move to analog registers page */
1183 hw->phy.ops.read_reg(hw,
1184 IGP01E1000_ANALOG_SPARE_FUSE_STATUS,
1185 &fused);
1186
1187 if (!(fused & IGP01E1000_ANALOG_SPARE_FUSE_ENABLED)) {
1188 hw->phy.ops.read_reg(hw,
1189 IGP01E1000_ANALOG_FUSE_STATUS,
1190 &fused);
1191
1192 fine = fused & IGP01E1000_ANALOG_FUSE_FINE_MASK;
1193 coarse = fused & IGP01E1000_ANALOG_FUSE_COARSE_MASK;
1194
1195 if (coarse > IGP01E1000_ANALOG_FUSE_COARSE_THRESH) {
1196 coarse -= IGP01E1000_ANALOG_FUSE_COARSE_10;
1197 fine -= IGP01E1000_ANALOG_FUSE_FINE_1;
1198 } else if (coarse ==
1199 IGP01E1000_ANALOG_FUSE_COARSE_THRESH)
1200 fine -= IGP01E1000_ANALOG_FUSE_FINE_10;
1201
1202 fused = (fused & IGP01E1000_ANALOG_FUSE_POLY_MASK) |
1203 (fine & IGP01E1000_ANALOG_FUSE_FINE_MASK) |
1204 (coarse & IGP01E1000_ANALOG_FUSE_COARSE_MASK);
1205
1206 hw->phy.ops.write_reg(hw,
1207 IGP01E1000_ANALOG_FUSE_CONTROL,
1208 fused);
1209 hw->phy.ops.write_reg(hw,
1210 IGP01E1000_ANALOG_FUSE_BYPASS,
1211 IGP01E1000_ANALOG_FUSE_ENABLE_SW_CONTROL);
1212 }
1213 }
1214
1215 out:
1216 return ret_val;
1217 }
1218
1219 /**
1220 * e1000_init_script_state_82541 - Enable/Disable PHY init script
1221 * @hw: pointer to the HW structure
1222 * @state: boolean value used to enable/disable PHY init script
1223 *
1224 * Allows the driver to enable/disable the PHY init script, if the PHY is an
1225 * IGP PHY.
1226 **/
1227 void e1000_init_script_state_82541(struct e1000_hw *hw, bool state)
1228 {
1229 struct e1000_dev_spec_82541 *dev_spec = &hw->dev_spec._82541;
1230
1231 DEBUGFUNC("e1000_init_script_state_82541");
1232
1233 if (hw->phy.type != e1000_phy_igp) {
1234 DEBUGOUT("Initialization script not necessary.\n");
1235 goto out;
1236 }
1237
1238 dev_spec->phy_init_script = state;
1239
1240 out:
1241 return;
1242 }
1243
1244 /**
1245 * e1000_power_down_phy_copper_82541 - Remove link in case of PHY power down
1246 * @hw: pointer to the HW structure
1247 *
1248 * In the case of a PHY power down to save power, or to turn off link during a
1249 * driver unload, or wake on lan is not enabled, remove the link.
1250 **/
1251 static void e1000_power_down_phy_copper_82541(struct e1000_hw *hw)
1252 {
1253 /* If the management interface is not enabled, then power down */
1254 if (!(E1000_READ_REG(hw, E1000_MANC) & E1000_MANC_SMBUS_EN))
1255 e1000_power_down_phy_copper(hw);
1256
1257 return;
1258 }
1259
1260 /**
1261 * e1000_clear_hw_cntrs_82541 - Clear device specific hardware counters
1262 * @hw: pointer to the HW structure
1263 *
1264 * Clears the hardware counters by reading the counter registers.
1265 **/
1266 static void e1000_clear_hw_cntrs_82541(struct e1000_hw *hw)
1267 {
1268 DEBUGFUNC("e1000_clear_hw_cntrs_82541");
1269
1270 e1000_clear_hw_cntrs_base_generic(hw);
1271
1272 E1000_READ_REG(hw, E1000_PRC64);
1273 E1000_READ_REG(hw, E1000_PRC127);
1274 E1000_READ_REG(hw, E1000_PRC255);
1275 E1000_READ_REG(hw, E1000_PRC511);
1276 E1000_READ_REG(hw, E1000_PRC1023);
1277 E1000_READ_REG(hw, E1000_PRC1522);
1278 E1000_READ_REG(hw, E1000_PTC64);
1279 E1000_READ_REG(hw, E1000_PTC127);
1280 E1000_READ_REG(hw, E1000_PTC255);
1281 E1000_READ_REG(hw, E1000_PTC511);
1282 E1000_READ_REG(hw, E1000_PTC1023);
1283 E1000_READ_REG(hw, E1000_PTC1522);
1284
1285 E1000_READ_REG(hw, E1000_ALGNERRC);
1286 E1000_READ_REG(hw, E1000_RXERRC);
1287 E1000_READ_REG(hw, E1000_TNCRS);
1288 E1000_READ_REG(hw, E1000_CEXTERR);
1289 E1000_READ_REG(hw, E1000_TSCTC);
1290 E1000_READ_REG(hw, E1000_TSCTFC);
1291
1292 E1000_READ_REG(hw, E1000_MGTPRC);
1293 E1000_READ_REG(hw, E1000_MGTPDC);
1294 E1000_READ_REG(hw, E1000_MGTPTC);
1295 }
1296
1297 /**
1298 * e1000_read_mac_addr_82541 - Read device MAC address
1299 * @hw: pointer to the HW structure
1300 *
1301 * Reads the device MAC address from the EEPROM and stores the value.
1302 **/
1303 static s32 e1000_read_mac_addr_82541(struct e1000_hw *hw)
1304 {
1305 s32 ret_val = E1000_SUCCESS;
1306 u16 offset, nvm_data, i;
1307
1308 DEBUGFUNC("e1000_read_mac_addr");
1309
1310 for (i = 0; i < ETH_ADDR_LEN; i += 2) {
1311 offset = i >> 1;
1312 ret_val = hw->nvm.ops.read(hw, offset, 1, &nvm_data);
1313 if (ret_val) {
1314 DEBUGOUT("NVM Read Error\n");
1315 goto out;
1316 }
1317 hw->mac.perm_addr[i] = (u8)(nvm_data & 0xFF);
1318 hw->mac.perm_addr[i+1] = (u8)(nvm_data >> 8);
1319 }
1320
1321 for (i = 0; i < ETH_ADDR_LEN; i++)
1322 hw->mac.addr[i] = hw->mac.perm_addr[i];
1323
1324 out:
1325 return ret_val;
1326 }
1327
Cache object: 69d37de68425bf6dfd6f939f703aefb1
|