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