1 /******************************************************************************
3 Copyright (c) 2001-2010, Intel Corporation
6 Redistribution and use in source and binary forms, with or without
7 modification, are permitted provided that the following conditions are met:
9 1. Redistributions of source code must retain the above copyright notice,
10 this list of conditions and the following disclaimer.
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.
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.
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.
32 ******************************************************************************/
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
52 #include "e1000_api.h"
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,
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,
87 static s32 e1000_set_d3_lplu_state_82574(struct e1000_hw *hw,
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);
96 * e1000_init_phy_params_82571 - Init PHY func ptrs.
97 * @hw: pointer to the HW structure
99 static s32 e1000_init_phy_params_82571(struct e1000_hw *hw)
101 struct e1000_phy_info *phy = &hw->phy;
102 s32 ret_val = E1000_SUCCESS;
104 DEBUGFUNC("e1000_init_phy_params_82571");
106 if (hw->phy.media_type != e1000_media_type_copper) {
107 phy->type = e1000_phy_none;
112 phy->autoneg_mask = AUTONEG_ADVERTISE_SPEED_DEFAULT;
113 phy->reset_delay_us = 100;
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;
122 switch (hw->mac.type) {
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;
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;
151 E1000_MUTEX_INIT(&hw->dev_spec._82571.swflag_mutex);
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;
168 ret_val = -E1000_ERR_PHY;
173 /* This can only be done after all function pointers are setup. */
174 ret_val = e1000_get_phy_id_82571(hw);
176 DEBUGOUT("Error getting PHY ID\n");
181 switch (hw->mac.type) {
184 if (phy->id != IGP01E1000_I_PHY_ID)
185 ret_val = -E1000_ERR_PHY;
188 if (phy->id != M88E1111_I_PHY_ID)
189 ret_val = -E1000_ERR_PHY;
193 if (phy->id != BME1000_E_PHY_ID_R2)
194 ret_val = -E1000_ERR_PHY;
197 ret_val = -E1000_ERR_PHY;
202 DEBUGOUT1("PHY ID unknown: type = 0x%08x\n", phy->id);
209 * e1000_init_nvm_params_82571 - Init NVM func ptrs.
210 * @hw: pointer to the HW structure
212 static s32 e1000_init_nvm_params_82571(struct e1000_hw *hw)
214 struct e1000_nvm_info *nvm = &hw->nvm;
215 u32 eecd = E1000_READ_REG(hw, E1000_EECD);
218 DEBUGFUNC("e1000_init_nvm_params_82571");
220 nvm->opcode_bits = 8;
222 switch (nvm->override) {
223 case e1000_nvm_override_spi_large:
225 nvm->address_bits = 16;
227 case e1000_nvm_override_spi_small:
229 nvm->address_bits = 8;
232 nvm->page_size = eecd & E1000_EECD_ADDR_BITS ? 32 : 8;
233 nvm->address_bits = eecd & E1000_EECD_ADDR_BITS ? 16 : 8;
237 switch (hw->mac.type) {
241 if (((eecd >> 15) & 0x3) == 0x3) {
242 nvm->type = e1000_nvm_flash_hw;
243 nvm->word_size = 2048;
245 * Autonomous Flash update bit must be cleared due
246 * to Flash update issue.
248 eecd &= ~E1000_EECD_AUPDEN;
249 E1000_WRITE_REG(hw, E1000_EECD, eecd);
254 nvm->type = e1000_nvm_eeprom_spi;
255 size = (u16)((eecd & E1000_EECD_SIZE_EX_MASK) >>
256 E1000_EECD_SIZE_EX_SHIFT);
258 * Added to a constant, "size" becomes the left-shift value
259 * for setting word_size.
261 size += NVM_WORD_SIZE_BASE_SHIFT;
263 /* EEPROM access above 16k is unsupported */
266 nvm->word_size = 1 << size;
270 /* Function Pointers */
271 switch (hw->mac.type) {
274 nvm->ops.acquire = e1000_get_hw_semaphore_82574;
275 nvm->ops.release = e1000_put_hw_semaphore_82574;
278 nvm->ops.acquire = e1000_acquire_nvm_82571;
279 nvm->ops.release = e1000_release_nvm_82571;
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;
288 return E1000_SUCCESS;
292 * e1000_init_mac_params_82571 - Init MAC func ptrs.
293 * @hw: pointer to the HW structure
295 static s32 e1000_init_mac_params_82571(struct e1000_hw *hw)
297 struct e1000_mac_info *mac = &hw->mac;
300 bool force_clear_smbi = FALSE;
302 DEBUGFUNC("e1000_init_mac_params_82571");
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;
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;
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;
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;
346 /* Function pointers */
348 /* bus type/speed/width */
349 mac->ops.get_bus_info = e1000_get_bus_info_pcie_generic;
351 mac->ops.reset_hw = e1000_reset_hw_82571;
352 /* hw initialization */
353 mac->ops.init_hw = e1000_init_hw_82571;
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;
359 mac->ops.write_vfta = e1000_write_vfta_generic;
361 mac->ops.clear_vfta = e1000_clear_vfta_82571;
362 /* read mac address */
363 mac->ops.read_mac_addr = e1000_read_mac_addr_82571;
365 mac->ops.id_led_init = e1000_id_led_init_generic;
367 mac->ops.blink_led = e1000_blink_led_generic;
369 mac->ops.setup_led = e1000_setup_led_generic;
371 mac->ops.cleanup_led = e1000_cleanup_led_generic;
373 mac->ops.led_off = e1000_led_off_generic;
374 /* clear hardware counters */
375 mac->ops.clear_hw_cntrs = e1000_clear_hw_cntrs_82571;
377 /* MAC-specific function pointers */
378 switch (hw->mac.type) {
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;
385 mac->has_fwsm = TRUE;
387 * ARC supported; valid only if manageability features are
390 mac->arc_subsystem_valid =
391 (E1000_READ_REG(hw, E1000_FWSM) & E1000_FWSM_MODE_MASK)
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;
401 mac->ops.check_mng_mode = e1000_check_mng_mode_generic;
402 mac->ops.led_on = e1000_led_on_generic;
405 mac->has_fwsm = TRUE;
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.
416 switch (hw->mac.type) {
419 swsm2 = E1000_READ_REG(hw, E1000_SWSM2);
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;
427 force_clear_smbi = FALSE;
430 force_clear_smbi = TRUE;
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
442 DEBUGOUT("Please update your 82571 Bootagent\n");
444 E1000_WRITE_REG(hw, E1000_SWSM, swsm & ~E1000_SWSM_SMBI);
448 * Initialze device specific counter of SMBI acquisition
451 hw->dev_spec._82571.smb_counter = 0;
453 return E1000_SUCCESS;
457 * e1000_init_function_pointers_82571 - Init func ptrs.
458 * @hw: pointer to the HW structure
460 * Called to initialize all function pointers and parameters.
462 void e1000_init_function_pointers_82571(struct e1000_hw *hw)
464 DEBUGFUNC("e1000_init_function_pointers_82571");
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;
472 * e1000_get_phy_id_82571 - Retrieve the PHY ID and revision
473 * @hw: pointer to the HW structure
475 * Reads the PHY registers and stores the PHY ID and possibly the PHY
476 * revision in the hardware structure.
478 static s32 e1000_get_phy_id_82571(struct e1000_hw *hw)
480 struct e1000_phy_info *phy = &hw->phy;
481 s32 ret_val = E1000_SUCCESS;
484 DEBUGFUNC("e1000_get_phy_id_82571");
486 switch (hw->mac.type) {
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
495 phy->id = IGP01E1000_I_PHY_ID;
498 ret_val = e1000_get_phy_id(hw);
502 ret_val = phy->ops.read_reg(hw, PHY_ID1, &phy_id);
506 phy->id = (u32)(phy_id << 16);
508 ret_val = phy->ops.read_reg(hw, PHY_ID2, &phy_id);
512 phy->id |= (u32)(phy_id);
513 phy->revision = (u32)(phy_id & ~PHY_REVISION_MASK);
516 ret_val = -E1000_ERR_PHY;
524 * e1000_get_hw_semaphore_82571 - Acquire hardware semaphore
525 * @hw: pointer to the HW structure
527 * Acquire the HW semaphore to access the PHY or NVM
529 static s32 e1000_get_hw_semaphore_82571(struct e1000_hw *hw)
532 s32 ret_val = E1000_SUCCESS;
533 s32 sw_timeout = hw->nvm.word_size + 1;
534 s32 fw_timeout = hw->nvm.word_size + 1;
537 DEBUGFUNC("e1000_get_hw_semaphore_82571");
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
547 if (hw->dev_spec._82571.smb_counter > 2)
550 /* Get the SW semaphore */
551 while (i < sw_timeout) {
552 swsm = E1000_READ_REG(hw, E1000_SWSM);
553 if (!(swsm & E1000_SWSM_SMBI))
560 if (i == sw_timeout) {
561 DEBUGOUT("Driver can't access device - SMBI bit is set.\n");
562 hw->dev_spec._82571.smb_counter++;
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);
569 /* Semaphore acquired if bit latched */
570 if (E1000_READ_REG(hw, E1000_SWSM) & E1000_SWSM_SWESMBI)
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;
589 * e1000_put_hw_semaphore_82571 - Release hardware semaphore
590 * @hw: pointer to the HW structure
592 * Release hardware semaphore used to access the PHY or NVM
594 static void e1000_put_hw_semaphore_82571(struct e1000_hw *hw)
598 DEBUGFUNC("e1000_put_hw_semaphore_generic");
600 swsm = E1000_READ_REG(hw, E1000_SWSM);
602 swsm &= ~(E1000_SWSM_SMBI | E1000_SWSM_SWESMBI);
604 E1000_WRITE_REG(hw, E1000_SWSM, swsm);
608 * e1000_get_hw_semaphore_82573 - Acquire hardware semaphore
609 * @hw: pointer to the HW structure
611 * Acquire the HW semaphore during reset.
614 static s32 e1000_get_hw_semaphore_82573(struct e1000_hw *hw)
617 s32 ret_val = E1000_SUCCESS;
620 DEBUGFUNC("e1000_get_hw_semaphore_82573");
622 extcnf_ctrl = E1000_READ_REG(hw, E1000_EXTCNF_CTRL);
623 extcnf_ctrl |= E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP;
625 E1000_WRITE_REG(hw, E1000_EXTCNF_CTRL, extcnf_ctrl);
626 extcnf_ctrl = E1000_READ_REG(hw, E1000_EXTCNF_CTRL);
628 if (extcnf_ctrl & E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP)
631 extcnf_ctrl |= E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP;
635 } while (i < MDIO_OWNERSHIP_TIMEOUT);
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;
650 * e1000_put_hw_semaphore_82573 - Release hardware semaphore
651 * @hw: pointer to the HW structure
653 * Release hardware semaphore used during reset.
656 static void e1000_put_hw_semaphore_82573(struct e1000_hw *hw)
660 DEBUGFUNC("e1000_put_hw_semaphore_82573");
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);
668 * e1000_get_hw_semaphore_82574 - Acquire hardware semaphore
669 * @hw: pointer to the HW structure
671 * Acquire the HW semaphore to access the PHY or NVM.
674 static s32 e1000_get_hw_semaphore_82574(struct e1000_hw *hw)
678 DEBUGFUNC("e1000_get_hw_semaphore_82574");
680 E1000_MUTEX_LOCK(&hw->dev_spec._82571.swflag_mutex);
681 ret_val = e1000_get_hw_semaphore_82573(hw);
683 E1000_MUTEX_UNLOCK(&hw->dev_spec._82571.swflag_mutex);
688 * e1000_put_hw_semaphore_82574 - Release hardware semaphore
689 * @hw: pointer to the HW structure
691 * Release hardware semaphore used to access the PHY or NVM
694 static void e1000_put_hw_semaphore_82574(struct e1000_hw *hw)
696 DEBUGFUNC("e1000_put_hw_semaphore_82574");
698 e1000_put_hw_semaphore_82573(hw);
699 E1000_MUTEX_UNLOCK(&hw->dev_spec._82571.swflag_mutex);
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
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.
714 static s32 e1000_set_d0_lplu_state_82574(struct e1000_hw *hw, bool active)
716 u16 data = E1000_READ_REG(hw, E1000_POEMB);
718 DEBUGFUNC("e1000_set_d0_lplu_state_82574");
721 data |= E1000_PHY_CTRL_D0A_LPLU;
723 data &= ~E1000_PHY_CTRL_D0A_LPLU;
725 E1000_WRITE_REG(hw, E1000_POEMB, data);
726 return E1000_SUCCESS;
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
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
740 static s32 e1000_set_d3_lplu_state_82574(struct e1000_hw *hw, bool active)
742 u16 data = E1000_READ_REG(hw, E1000_POEMB);
744 DEBUGFUNC("e1000_set_d3_lplu_state_82574");
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;
754 E1000_WRITE_REG(hw, E1000_POEMB, data);
755 return E1000_SUCCESS;
759 * e1000_acquire_nvm_82571 - Request for access to the EEPROM
760 * @hw: pointer to the HW structure
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.
767 static s32 e1000_acquire_nvm_82571(struct e1000_hw *hw)
771 DEBUGFUNC("e1000_acquire_nvm_82571");
773 ret_val = e1000_get_hw_semaphore_82571(hw);
777 switch (hw->mac.type) {
781 ret_val = e1000_acquire_nvm_generic(hw);
786 e1000_put_hw_semaphore_82571(hw);
793 * e1000_release_nvm_82571 - Release exclusive access to EEPROM
794 * @hw: pointer to the HW structure
796 * Stop any current commands to the EEPROM and clear the EEPROM request bit.
798 static void e1000_release_nvm_82571(struct e1000_hw *hw)
800 DEBUGFUNC("e1000_release_nvm_82571");
802 e1000_release_nvm_generic(hw);
803 e1000_put_hw_semaphore_82571(hw);
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
813 * For non-82573 silicon, write data to EEPROM at offset using SPI interface.
815 * If e1000_update_nvm_checksum is not called after this function, the
816 * EEPROM will most likely contain an invalid checksum.
818 static s32 e1000_write_nvm_82571(struct e1000_hw *hw, u16 offset, u16 words,
821 s32 ret_val = E1000_SUCCESS;
823 DEBUGFUNC("e1000_write_nvm_82571");
825 switch (hw->mac.type) {
829 ret_val = e1000_write_nvm_eewr_82571(hw, offset, words, data);
833 ret_val = e1000_write_nvm_spi(hw, offset, words, data);
836 ret_val = -E1000_ERR_NVM;
844 * e1000_update_nvm_checksum_82571 - Update EEPROM checksum
845 * @hw: pointer to the HW structure
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.
851 static s32 e1000_update_nvm_checksum_82571(struct e1000_hw *hw)
857 DEBUGFUNC("e1000_update_nvm_checksum_82571");
859 ret_val = e1000_update_nvm_checksum_generic(hw);
864 * If our nvm is an EEPROM, then we're done
865 * otherwise, commit the checksum to the flash NVM.
867 if (hw->nvm.type != e1000_nvm_flash_hw)
870 /* Check for pending operations. */
871 for (i = 0; i < E1000_FLASH_UPDATES; i++) {
873 if ((E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_FLUPD) == 0)
877 if (i == E1000_FLASH_UPDATES) {
878 ret_val = -E1000_ERR_NVM;
882 /* Reset the firmware if using STM opcode. */
883 if ((E1000_READ_REG(hw, E1000_FLOP) & 0xFF00) == E1000_STM_OPCODE) {
885 * The enabling of and the actual reset must be done
886 * in two write cycles.
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);
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);
897 for (i = 0; i < E1000_FLASH_UPDATES; i++) {
899 if ((E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_FLUPD) == 0)
903 if (i == E1000_FLASH_UPDATES) {
904 ret_val = -E1000_ERR_NVM;
913 * e1000_validate_nvm_checksum_82571 - Validate EEPROM checksum
914 * @hw: pointer to the HW structure
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.
919 static s32 e1000_validate_nvm_checksum_82571(struct e1000_hw *hw)
921 DEBUGFUNC("e1000_validate_nvm_checksum_82571");
923 if (hw->nvm.type == e1000_nvm_flash_hw)
924 e1000_fix_nvm_checksum_82571(hw);
926 return e1000_validate_nvm_checksum_generic(hw);
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
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.
940 * If e1000_update_nvm_checksum is not called after this function, the
941 * EEPROM will most likely contain an invalid checksum.
943 static s32 e1000_write_nvm_eewr_82571(struct e1000_hw *hw, u16 offset,
944 u16 words, u16 *data)
946 struct e1000_nvm_info *nvm = &hw->nvm;
950 DEBUGFUNC("e1000_write_nvm_eewr_82571");
953 * A check for invalid values: offset too large, too many words,
954 * and not enough words.
956 if ((offset >= nvm->word_size) || (words > (nvm->word_size - offset)) ||
958 DEBUGOUT("nvm parameter(s) out of bounds\n");
959 ret_val = -E1000_ERR_NVM;
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;
968 ret_val = e1000_poll_eerd_eewr_done(hw, E1000_NVM_POLL_WRITE);
972 E1000_WRITE_REG(hw, E1000_EEWR, eewr);
974 ret_val = e1000_poll_eerd_eewr_done(hw, E1000_NVM_POLL_WRITE);
984 * e1000_get_cfg_done_82571 - Poll for configuration done
985 * @hw: pointer to the HW structure
987 * Reads the management control register for the config done bit to be set.
989 static s32 e1000_get_cfg_done_82571(struct e1000_hw *hw)
991 s32 timeout = PHY_CFG_TIMEOUT;
992 s32 ret_val = E1000_SUCCESS;
994 DEBUGFUNC("e1000_get_cfg_done_82571");
997 if (E1000_READ_REG(hw, E1000_EEMNGCTL) &
998 E1000_NVM_CFG_DONE_PORT_0)
1004 DEBUGOUT("MNG configuration cycle has not completed.\n");
1005 ret_val = -E1000_ERR_RESET;
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
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.
1024 static s32 e1000_set_d0_lplu_state_82571(struct e1000_hw *hw, bool active)
1026 struct e1000_phy_info *phy = &hw->phy;
1027 s32 ret_val = E1000_SUCCESS;
1030 DEBUGFUNC("e1000_set_d0_lplu_state_82571");
1032 if (!(phy->ops.read_reg))
1035 ret_val = phy->ops.read_reg(hw, IGP02E1000_PHY_POWER_MGMT, &data);
1040 data |= IGP02E1000_PM_D0_LPLU;
1041 ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT,
1046 /* When LPLU is enabled, we should disable SmartSpeed */
1047 ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
1049 data &= ~IGP01E1000_PSCFR_SMART_SPEED;
1050 ret_val = phy->ops.write_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
1055 data &= ~IGP02E1000_PM_D0_LPLU;
1056 ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT,
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.
1064 if (phy->smart_speed == e1000_smart_speed_on) {
1065 ret_val = phy->ops.read_reg(hw,
1066 IGP01E1000_PHY_PORT_CONFIG,
1071 data |= IGP01E1000_PSCFR_SMART_SPEED;
1072 ret_val = phy->ops.write_reg(hw,
1073 IGP01E1000_PHY_PORT_CONFIG,
1077 } else if (phy->smart_speed == e1000_smart_speed_off) {
1078 ret_val = phy->ops.read_reg(hw,
1079 IGP01E1000_PHY_PORT_CONFIG,
1084 data &= ~IGP01E1000_PSCFR_SMART_SPEED;
1085 ret_val = phy->ops.write_reg(hw,
1086 IGP01E1000_PHY_PORT_CONFIG,
1098 * e1000_reset_hw_82571 - Reset hardware
1099 * @hw: pointer to the HW structure
1101 * This resets the hardware into a known state.
1103 static s32 e1000_reset_hw_82571(struct e1000_hw *hw)
1108 DEBUGFUNC("e1000_reset_hw_82571");
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.
1114 ret_val = e1000_disable_pcie_master_generic(hw);
1116 DEBUGOUT("PCI-E Master disable polling has failed.\n");
1118 DEBUGOUT("Masking off all interrupts\n");
1119 E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
1121 E1000_WRITE_REG(hw, E1000_RCTL, 0);
1122 E1000_WRITE_REG(hw, E1000_TCTL, E1000_TCTL_PSP);
1123 E1000_WRITE_FLUSH(hw);
1128 * Must acquire the MDIO ownership before MAC reset.
1129 * Ownership defaults to firmware after a reset.
1131 switch (hw->mac.type) {
1133 ret_val = e1000_get_hw_semaphore_82573(hw);
1137 ret_val = e1000_get_hw_semaphore_82574(hw);
1143 DEBUGOUT("Cannot acquire MDIO ownership\n");
1145 ctrl = E1000_READ_REG(hw, E1000_CTRL);
1147 DEBUGOUT("Issuing a global reset to MAC\n");
1148 E1000_WRITE_REG(hw, E1000_CTRL, ctrl | E1000_CTRL_RST);
1150 /* Must release MDIO ownership and mutex after MAC reset. */
1151 switch (hw->mac.type) {
1154 e1000_put_hw_semaphore_82574(hw);
1160 if (hw->nvm.type == e1000_nvm_flash_hw) {
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);
1168 ret_val = e1000_get_auto_rd_done_generic(hw);
1170 /* We don't want to continue accessing MAC registers. */
1174 * Phy configuration from NVM just starts after EECD_AUTO_RD is set.
1175 * Need to wait for Phy configuration completion before accessing
1179 switch (hw->mac.type) {
1189 /* Clear any pending interrupt events. */
1190 E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
1191 E1000_READ_REG(hw, E1000_ICR);
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);
1199 e1000_set_laa_state_82571(hw, TRUE);
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;
1211 * e1000_init_hw_82571 - Initialize hardware
1212 * @hw: pointer to the HW structure
1214 * This inits the hardware readying it for operation.
1216 static s32 e1000_init_hw_82571(struct e1000_hw *hw)
1218 struct e1000_mac_info *mac = &hw->mac;
1221 u16 i, rar_count = mac->rar_entry_count;
1223 DEBUGFUNC("e1000_init_hw_82571");
1225 e1000_initialize_hw_bits_82571(hw);
1227 /* Initialize identification LED */
1228 ret_val = mac->ops.id_led_init(hw);
1230 DEBUGOUT("Error initializing identification LED\n");
1231 /* This is not fatal and we should not stop init due to this */
1233 /* Disabling VLAN filtering */
1234 DEBUGOUT("Initializing the IEEE VLAN\n");
1235 mac->ops.clear_vfta(hw);
1237 /* Setup the receive address. */
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.
1243 if (e1000_get_laa_state_82571(hw))
1245 e1000_init_rx_addrs_generic(hw, rar_count);
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);
1252 /* Setup link and flow control */
1253 ret_val = mac->ops.setup_link(hw);
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);
1262 /* ...for both queues. */
1263 switch (mac->type) {
1265 e1000_enable_tx_pkt_filtering_generic(hw);
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);
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);
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
1288 e1000_clear_hw_cntrs_82571(hw);
1294 * e1000_initialize_hw_bits_82571 - Initialize hardware-dependent bits
1295 * @hw: pointer to the HW structure
1297 * Initializes required hardware-dependent bits needed for normal operation.
1299 static void e1000_initialize_hw_bits_82571(struct e1000_hw *hw)
1303 DEBUGFUNC("e1000_initialize_hw_bits_82571");
1305 /* Transmit Descriptor Control 0 */
1306 reg = E1000_READ_REG(hw, E1000_TXDCTL(0));
1308 E1000_WRITE_REG(hw, E1000_TXDCTL(0), reg);
1310 /* Transmit Descriptor Control 1 */
1311 reg = E1000_READ_REG(hw, E1000_TXDCTL(1));
1313 E1000_WRITE_REG(hw, E1000_TXDCTL(1), reg);
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) {
1321 reg |= (1 << 23) | (1 << 24) | (1 << 25) | (1 << 26);
1326 E1000_WRITE_REG(hw, E1000_TARC(0), reg);
1328 /* Transmit Arbitration Control 1 */
1329 reg = E1000_READ_REG(hw, E1000_TARC(1));
1330 switch (hw->mac.type) {
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)
1339 E1000_WRITE_REG(hw, E1000_TARC(1), reg);
1345 /* Device Control */
1346 switch (hw->mac.type) {
1350 reg = E1000_READ_REG(hw, E1000_CTRL);
1352 E1000_WRITE_REG(hw, E1000_CTRL, reg);
1358 /* Extended Device Control */
1359 switch (hw->mac.type) {
1363 reg = E1000_READ_REG(hw, E1000_CTRL_EXT);
1366 E1000_WRITE_REG(hw, E1000_CTRL_EXT, reg);
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);
1379 * Workaround for hardware errata.
1380 * Ensure that DMA Dynamic Clock gating is disabled on 82571 and 82572
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);
1389 /* PCI-Ex Control Registers */
1390 switch (hw->mac.type) {
1393 reg = E1000_READ_REG(hw, E1000_GCR);
1395 E1000_WRITE_REG(hw, E1000_GCR, reg);
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.
1404 reg = E1000_READ_REG(hw, E1000_GCR2);
1406 E1000_WRITE_REG(hw, E1000_GCR2, reg);
1416 * e1000_clear_vfta_82571 - Clear VLAN filter table
1417 * @hw: pointer to the HW structure
1419 * Clears the register array which contains the VLAN filter table by
1420 * setting all the values to 0.
1422 static void e1000_clear_vfta_82571(struct e1000_hw *hw)
1426 u32 vfta_offset = 0;
1427 u32 vfta_bit_in_reg = 0;
1429 DEBUGFUNC("e1000_clear_vfta_82571");
1431 switch (hw->mac.type) {
1435 if (hw->mng_cookie.vlan_id != 0) {
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.
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);
1452 for (offset = 0; offset < E1000_VLAN_FILTER_TBL_SIZE; offset++) {
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.
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);
1465 * e1000_check_mng_mode_82574 - Check manageability is enabled
1466 * @hw: pointer to the HW structure
1468 * Reads the NVM Initialization Control Word 2 and returns TRUE
1469 * (>0) if any manageability is enabled, else FALSE (0).
1471 static bool e1000_check_mng_mode_82574(struct e1000_hw *hw)
1475 DEBUGFUNC("e1000_check_mng_mode_82574");
1477 hw->nvm.ops.read(hw, NVM_INIT_CONTROL2_REG, 1, &data);
1478 return (data & E1000_NVM_INIT_CTRL2_MNGM) != 0;
1482 * e1000_led_on_82574 - Turn LED on
1483 * @hw: pointer to the HW structure
1487 static s32 e1000_led_on_82574(struct e1000_hw *hw)
1492 DEBUGFUNC("e1000_led_on_82574");
1494 ctrl = hw->mac.ledctl_mode2;
1495 if (!(E1000_STATUS_LU & E1000_READ_REG(hw, E1000_STATUS))) {
1497 * If no link, then turn LED on by setting the invert bit
1498 * for each LED that's "on" (0x0E) in ledctl_mode2.
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));
1505 E1000_WRITE_REG(hw, E1000_LEDCTL, ctrl);
1507 return E1000_SUCCESS;
1511 * e1000_check_phy_82574 - check 82574 phy hung state
1512 * @hw: pointer to the HW structure
1514 * Returns whether phy is hung or not
1516 bool e1000_check_phy_82574(struct e1000_hw *hw)
1518 u16 status_1kbt = 0;
1519 u16 receive_errors = 0;
1520 bool phy_hung = FALSE;
1521 s32 ret_val = E1000_SUCCESS;
1523 DEBUGFUNC("e1000_check_phy_82574");
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.
1529 ret_val = hw->phy.ops.read_reg(hw, E1000_RECEIVE_ERROR_COUNTER,
1533 if (receive_errors == E1000_RECEIVE_ERROR_MAX) {
1534 ret_val = hw->phy.ops.read_reg(hw, E1000_BASE1000T_STATUS,
1538 if ((status_1kbt & E1000_IDLE_ERROR_COUNT_MASK) ==
1539 E1000_IDLE_ERROR_COUNT_MASK)
1548 * e1000_setup_link_82571 - Setup flow control and link settings
1549 * @hw: pointer to the HW structure
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.
1557 static s32 e1000_setup_link_82571(struct e1000_hw *hw)
1559 DEBUGFUNC("e1000_setup_link_82571");
1562 * 82573 does not have a word in the NVM to determine
1563 * the default flow control setting, so we explicitly
1566 switch (hw->mac.type) {
1570 if (hw->fc.requested_mode == e1000_fc_default)
1571 hw->fc.requested_mode = e1000_fc_full;
1577 return e1000_setup_link_generic(hw);
1581 * e1000_setup_copper_link_82571 - Configure copper link settings
1582 * @hw: pointer to the HW structure
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.
1588 static s32 e1000_setup_copper_link_82571(struct e1000_hw *hw)
1593 DEBUGFUNC("e1000_setup_copper_link_82571");
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);
1600 switch (hw->phy.type) {
1603 ret_val = e1000_copper_link_setup_m88(hw);
1605 case e1000_phy_igp_2:
1606 ret_val = e1000_copper_link_setup_igp(hw);
1609 ret_val = -E1000_ERR_PHY;
1616 ret_val = e1000_setup_copper_link_generic(hw);
1623 * e1000_setup_fiber_serdes_link_82571 - Setup link for fiber/serdes
1624 * @hw: pointer to the HW structure
1626 * Configures collision distance and flow control for fiber and serdes links.
1627 * Upon successful setup, poll for link.
1629 static s32 e1000_setup_fiber_serdes_link_82571(struct e1000_hw *hw)
1631 DEBUGFUNC("e1000_setup_fiber_serdes_link_82571");
1633 switch (hw->mac.type) {
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.
1643 E1000_WRITE_REG(hw, E1000_SCTL, E1000_SCTL_DISABLE_SERDES_LOOPBACK);
1649 return e1000_setup_fiber_serdes_link_generic(hw);
1653 * e1000_check_for_serdes_link_82571 - Check for link (Serdes)
1654 * @hw: pointer to the HW structure
1656 * Reports the link state as up or down.
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.
1663 * The link state is represented internally here by 4 states:
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)
1671 static s32 e1000_check_for_serdes_link_82571(struct e1000_hw *hw)
1673 struct e1000_mac_info *mac = &hw->mac;
1679 s32 ret_val = E1000_SUCCESS;
1681 DEBUGFUNC("e1000_check_for_serdes_link_82571");
1683 ctrl = E1000_READ_REG(hw, E1000_CTRL);
1684 status = E1000_READ_REG(hw, E1000_STATUS);
1685 rxcw = E1000_READ_REG(hw, E1000_RXCW);
1687 if ((rxcw & E1000_RXCW_SYNCH) && !(rxcw & E1000_RXCW_IV)) {
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)) {
1694 * We have lost link, retry autoneg before
1695 * reporting link failure
1697 mac->serdes_link_state =
1698 e1000_serdes_link_autoneg_progress;
1699 mac->serdes_has_link = FALSE;
1700 DEBUGOUT("AN_UP -> AN_PROG\n");
1702 mac->serdes_has_link = TRUE;
1706 case e1000_serdes_link_forced_up:
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.
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");
1725 mac->serdes_has_link = TRUE;
1729 case e1000_serdes_link_autoneg_progress:
1730 if (rxcw & E1000_RXCW_C) {
1732 * We received /C/ ordered sets, meaning the
1733 * link partner has autonegotiated, and we can
1734 * trust the Link Up (LU) status bit.
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;
1742 /* Autoneg completed, but failed. */
1743 mac->serdes_link_state =
1744 e1000_serdes_link_down;
1745 DEBUGOUT("AN_PROG -> DOWN\n");
1749 * The link partner did not autoneg.
1750 * Force link up and full duplex, and change
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);
1758 /* Configure Flow Control after link up. */
1760 e1000_config_fc_after_link_up_generic(hw);
1762 DEBUGOUT("Error config flow control\n");
1765 mac->serdes_link_state =
1766 e1000_serdes_link_forced_up;
1767 mac->serdes_has_link = TRUE;
1768 DEBUGOUT("AN_PROG -> FORCED_UP\n");
1772 case e1000_serdes_link_down:
1775 * The link was down but the receiver has now gained
1776 * valid sync, so lets see if we can bring the link
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");
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");
1795 * Check several times, if Sync and Config
1796 * both are consistently 1 then simply ignore
1797 * the Invalid bit and restart Autoneg
1799 for (i = 0; i < AN_RETRY_COUNT; i++) {
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");
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");
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)
1833 * Read the EEPROM for the current default LED configuration. If the
1834 * LED configuration is not valid, set to a valid LED configuration.
1836 static s32 e1000_valid_led_default_82571(struct e1000_hw *hw, u16 *data)
1840 DEBUGFUNC("e1000_valid_led_default_82571");
1842 ret_val = hw->nvm.ops.read(hw, NVM_ID_LED_SETTINGS, 1, data);
1844 DEBUGOUT("NVM Read Error\n");
1848 switch (hw->mac.type) {
1852 if (*data == ID_LED_RESERVED_F746)
1853 *data = ID_LED_DEFAULT_82573;
1856 if (*data == ID_LED_RESERVED_0000 ||
1857 *data == ID_LED_RESERVED_FFFF)
1858 *data = ID_LED_DEFAULT;
1867 * e1000_get_laa_state_82571 - Get locally administered address state
1868 * @hw: pointer to the HW structure
1870 * Retrieve and return the current locally administered address state.
1872 bool e1000_get_laa_state_82571(struct e1000_hw *hw)
1874 DEBUGFUNC("e1000_get_laa_state_82571");
1876 if (hw->mac.type != e1000_82571)
1879 return hw->dev_spec._82571.laa_is_present;
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
1887 * Enable/Disable the current locally administered address state.
1889 void e1000_set_laa_state_82571(struct e1000_hw *hw, bool state)
1891 DEBUGFUNC("e1000_set_laa_state_82571");
1893 if (hw->mac.type != e1000_82571)
1896 hw->dev_spec._82571.laa_is_present = state;
1898 /* If workaround is activated... */
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].
1907 e1000_rar_set_generic(hw, hw->mac.addr,
1908 hw->mac.rar_entry_count - 1);
1913 * e1000_fix_nvm_checksum_82571 - Fix EEPROM checksum
1914 * @hw: pointer to the HW structure
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.
1922 static s32 e1000_fix_nvm_checksum_82571(struct e1000_hw *hw)
1924 struct e1000_nvm_info *nvm = &hw->nvm;
1925 s32 ret_val = E1000_SUCCESS;
1928 DEBUGFUNC("e1000_fix_nvm_checksum_82571");
1930 if (nvm->type != e1000_nvm_flash_hw)
1934 * Check bit 4 of word 10h. If it is 0, firmware is done updating
1935 * 10h-12h. Checksum may need to be fixed.
1937 ret_val = nvm->ops.read(hw, 0x10, 1, &data);
1941 if (!(data & 0x10)) {
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
1950 ret_val = nvm->ops.read(hw, 0x23, 1, &data);
1954 if (!(data & 0x8000)) {
1956 ret_val = nvm->ops.write(hw, 0x23, 1, &data);
1959 ret_val = nvm->ops.update(hw);
1969 * e1000_read_mac_addr_82571 - Read device MAC address
1970 * @hw: pointer to the HW structure
1972 static s32 e1000_read_mac_addr_82571(struct e1000_hw *hw)
1974 s32 ret_val = E1000_SUCCESS;
1976 DEBUGFUNC("e1000_read_mac_addr_82571");
1978 if (hw->mac.type == e1000_82571) {
1980 * If there's an alternate MAC address place it in RAR0
1981 * so that it will override the Si installed default perm
1984 ret_val = e1000_check_alt_mac_addr_generic(hw);
1989 ret_val = e1000_read_mac_addr_generic(hw);
1996 * e1000_power_down_phy_copper_82571 - Remove link during PHY power down
1997 * @hw: pointer to the HW structure
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.
2002 static void e1000_power_down_phy_copper_82571(struct e1000_hw *hw)
2004 struct e1000_phy_info *phy = &hw->phy;
2005 struct e1000_mac_info *mac = &hw->mac;
2007 if (!(phy->ops.check_reset_block))
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);
2018 * e1000_clear_hw_cntrs_82571 - Clear device specific hardware counters
2019 * @hw: pointer to the HW structure
2021 * Clears the hardware counters by reading the counter registers.
2023 static void e1000_clear_hw_cntrs_82571(struct e1000_hw *hw)
2025 DEBUGFUNC("e1000_clear_hw_cntrs_82571");
2027 e1000_clear_hw_cntrs_base_generic(hw);
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);
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);
2049 E1000_READ_REG(hw, E1000_MGTPRC);
2050 E1000_READ_REG(hw, E1000_MGTPDC);
2051 E1000_READ_REG(hw, E1000_MGTPTC);
2053 E1000_READ_REG(hw, E1000_IAC);
2054 E1000_READ_REG(hw, E1000_ICRXOC);
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);