1 /******************************************************************************
3 Copyright (c) 2001-2011, 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.setup_led = e1000_setup_led_generic;
369 mac->ops.cleanup_led = e1000_cleanup_led_generic;
371 mac->ops.led_off = e1000_led_off_generic;
372 /* clear hardware counters */
373 mac->ops.clear_hw_cntrs = e1000_clear_hw_cntrs_82571;
375 /* MAC-specific function pointers */
376 switch (hw->mac.type) {
378 mac->ops.set_lan_id = e1000_set_lan_id_single_port;
379 mac->ops.check_mng_mode = e1000_check_mng_mode_generic;
380 mac->ops.led_on = e1000_led_on_generic;
381 mac->ops.blink_led = e1000_blink_led_generic;
384 mac->has_fwsm = TRUE;
386 * ARC supported; valid only if manageability features are
389 mac->arc_subsystem_valid = (E1000_READ_REG(hw, E1000_FWSM) &
390 E1000_FWSM_MODE_MASK) ? TRUE : FALSE;
394 mac->ops.set_lan_id = e1000_set_lan_id_single_port;
395 mac->ops.check_mng_mode = e1000_check_mng_mode_82574;
396 mac->ops.led_on = e1000_led_on_82574;
399 mac->ops.check_mng_mode = e1000_check_mng_mode_generic;
400 mac->ops.led_on = e1000_led_on_generic;
401 mac->ops.blink_led = e1000_blink_led_generic;
404 mac->has_fwsm = TRUE;
409 * Ensure that the inter-port SWSM.SMBI lock bit is clear before
410 * first NVM or PHY acess. This should be done for single-port
411 * devices, and for one port only on dual-port devices so that
412 * for those devices we can still use the SMBI lock to synchronize
413 * inter-port accesses to the PHY & NVM.
415 switch (hw->mac.type) {
418 swsm2 = E1000_READ_REG(hw, E1000_SWSM2);
420 if (!(swsm2 & E1000_SWSM2_LOCK)) {
421 /* Only do this for the first interface on this card */
422 E1000_WRITE_REG(hw, E1000_SWSM2, swsm2 |
424 force_clear_smbi = TRUE;
426 force_clear_smbi = FALSE;
429 force_clear_smbi = TRUE;
433 if (force_clear_smbi) {
434 /* Make sure SWSM.SMBI is clear */
435 swsm = E1000_READ_REG(hw, E1000_SWSM);
436 if (swsm & E1000_SWSM_SMBI) {
437 /* This bit should not be set on a first interface, and
438 * indicates that the bootagent or EFI code has
439 * improperly left this bit enabled
441 DEBUGOUT("Please update your 82571 Bootagent\n");
443 E1000_WRITE_REG(hw, E1000_SWSM, swsm & ~E1000_SWSM_SMBI);
447 * Initialze device specific counter of SMBI acquisition
450 hw->dev_spec._82571.smb_counter = 0;
452 return E1000_SUCCESS;
456 * e1000_init_function_pointers_82571 - Init func ptrs.
457 * @hw: pointer to the HW structure
459 * Called to initialize all function pointers and parameters.
461 void e1000_init_function_pointers_82571(struct e1000_hw *hw)
463 DEBUGFUNC("e1000_init_function_pointers_82571");
465 hw->mac.ops.init_params = e1000_init_mac_params_82571;
466 hw->nvm.ops.init_params = e1000_init_nvm_params_82571;
467 hw->phy.ops.init_params = e1000_init_phy_params_82571;
471 * e1000_get_phy_id_82571 - Retrieve the PHY ID and revision
472 * @hw: pointer to the HW structure
474 * Reads the PHY registers and stores the PHY ID and possibly the PHY
475 * revision in the hardware structure.
477 static s32 e1000_get_phy_id_82571(struct e1000_hw *hw)
479 struct e1000_phy_info *phy = &hw->phy;
480 s32 ret_val = E1000_SUCCESS;
483 DEBUGFUNC("e1000_get_phy_id_82571");
485 switch (hw->mac.type) {
489 * The 82571 firmware may still be configuring the PHY.
490 * In this case, we cannot access the PHY until the
491 * configuration is done. So we explicitly set the
494 phy->id = IGP01E1000_I_PHY_ID;
497 ret_val = e1000_get_phy_id(hw);
501 ret_val = phy->ops.read_reg(hw, PHY_ID1, &phy_id);
505 phy->id = (u32)(phy_id << 16);
507 ret_val = phy->ops.read_reg(hw, PHY_ID2, &phy_id);
511 phy->id |= (u32)(phy_id);
512 phy->revision = (u32)(phy_id & ~PHY_REVISION_MASK);
515 ret_val = -E1000_ERR_PHY;
523 * e1000_get_hw_semaphore_82571 - Acquire hardware semaphore
524 * @hw: pointer to the HW structure
526 * Acquire the HW semaphore to access the PHY or NVM
528 static s32 e1000_get_hw_semaphore_82571(struct e1000_hw *hw)
531 s32 ret_val = E1000_SUCCESS;
532 s32 sw_timeout = hw->nvm.word_size + 1;
533 s32 fw_timeout = hw->nvm.word_size + 1;
536 DEBUGFUNC("e1000_get_hw_semaphore_82571");
539 * If we have timedout 3 times on trying to acquire
540 * the inter-port SMBI semaphore, there is old code
541 * operating on the other port, and it is not
542 * releasing SMBI. Modify the number of times that
543 * we try for the semaphore to interwork with this
546 if (hw->dev_spec._82571.smb_counter > 2)
549 /* Get the SW semaphore */
550 while (i < sw_timeout) {
551 swsm = E1000_READ_REG(hw, E1000_SWSM);
552 if (!(swsm & E1000_SWSM_SMBI))
559 if (i == sw_timeout) {
560 DEBUGOUT("Driver can't access device - SMBI bit is set.\n");
561 hw->dev_spec._82571.smb_counter++;
563 /* Get the FW semaphore. */
564 for (i = 0; i < fw_timeout; i++) {
565 swsm = E1000_READ_REG(hw, E1000_SWSM);
566 E1000_WRITE_REG(hw, E1000_SWSM, swsm | E1000_SWSM_SWESMBI);
568 /* Semaphore acquired if bit latched */
569 if (E1000_READ_REG(hw, E1000_SWSM) & E1000_SWSM_SWESMBI)
575 if (i == fw_timeout) {
576 /* Release semaphores */
577 e1000_put_hw_semaphore_82571(hw);
578 DEBUGOUT("Driver can't access the NVM\n");
579 ret_val = -E1000_ERR_NVM;
588 * e1000_put_hw_semaphore_82571 - Release hardware semaphore
589 * @hw: pointer to the HW structure
591 * Release hardware semaphore used to access the PHY or NVM
593 static void e1000_put_hw_semaphore_82571(struct e1000_hw *hw)
597 DEBUGFUNC("e1000_put_hw_semaphore_generic");
599 swsm = E1000_READ_REG(hw, E1000_SWSM);
601 swsm &= ~(E1000_SWSM_SMBI | E1000_SWSM_SWESMBI);
603 E1000_WRITE_REG(hw, E1000_SWSM, swsm);
607 * e1000_get_hw_semaphore_82573 - Acquire hardware semaphore
608 * @hw: pointer to the HW structure
610 * Acquire the HW semaphore during reset.
613 static s32 e1000_get_hw_semaphore_82573(struct e1000_hw *hw)
616 s32 ret_val = E1000_SUCCESS;
619 DEBUGFUNC("e1000_get_hw_semaphore_82573");
621 extcnf_ctrl = E1000_READ_REG(hw, E1000_EXTCNF_CTRL);
622 extcnf_ctrl |= E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP;
624 E1000_WRITE_REG(hw, E1000_EXTCNF_CTRL, extcnf_ctrl);
625 extcnf_ctrl = E1000_READ_REG(hw, E1000_EXTCNF_CTRL);
627 if (extcnf_ctrl & E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP)
630 extcnf_ctrl |= E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP;
634 } while (i < MDIO_OWNERSHIP_TIMEOUT);
636 if (i == MDIO_OWNERSHIP_TIMEOUT) {
637 /* Release semaphores */
638 e1000_put_hw_semaphore_82573(hw);
639 DEBUGOUT("Driver can't access the PHY\n");
640 ret_val = -E1000_ERR_PHY;
649 * e1000_put_hw_semaphore_82573 - Release hardware semaphore
650 * @hw: pointer to the HW structure
652 * Release hardware semaphore used during reset.
655 static void e1000_put_hw_semaphore_82573(struct e1000_hw *hw)
659 DEBUGFUNC("e1000_put_hw_semaphore_82573");
661 extcnf_ctrl = E1000_READ_REG(hw, E1000_EXTCNF_CTRL);
662 extcnf_ctrl &= ~E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP;
663 E1000_WRITE_REG(hw, E1000_EXTCNF_CTRL, extcnf_ctrl);
667 * e1000_get_hw_semaphore_82574 - Acquire hardware semaphore
668 * @hw: pointer to the HW structure
670 * Acquire the HW semaphore to access the PHY or NVM.
673 static s32 e1000_get_hw_semaphore_82574(struct e1000_hw *hw)
677 DEBUGFUNC("e1000_get_hw_semaphore_82574");
679 E1000_MUTEX_LOCK(&hw->dev_spec._82571.swflag_mutex);
680 ret_val = e1000_get_hw_semaphore_82573(hw);
682 E1000_MUTEX_UNLOCK(&hw->dev_spec._82571.swflag_mutex);
687 * e1000_put_hw_semaphore_82574 - Release hardware semaphore
688 * @hw: pointer to the HW structure
690 * Release hardware semaphore used to access the PHY or NVM
693 static void e1000_put_hw_semaphore_82574(struct e1000_hw *hw)
695 DEBUGFUNC("e1000_put_hw_semaphore_82574");
697 e1000_put_hw_semaphore_82573(hw);
698 E1000_MUTEX_UNLOCK(&hw->dev_spec._82571.swflag_mutex);
702 * e1000_set_d0_lplu_state_82574 - Set Low Power Linkup D0 state
703 * @hw: pointer to the HW structure
704 * @active: TRUE to enable LPLU, FALSE to disable
706 * Sets the LPLU D0 state according to the active flag.
707 * LPLU will not be activated unless the
708 * device autonegotiation advertisement meets standards of
709 * either 10 or 10/100 or 10/100/1000 at all duplexes.
710 * This is a function pointer entry point only called by
711 * PHY setup routines.
713 static s32 e1000_set_d0_lplu_state_82574(struct e1000_hw *hw, bool active)
715 u16 data = E1000_READ_REG(hw, E1000_POEMB);
717 DEBUGFUNC("e1000_set_d0_lplu_state_82574");
720 data |= E1000_PHY_CTRL_D0A_LPLU;
722 data &= ~E1000_PHY_CTRL_D0A_LPLU;
724 E1000_WRITE_REG(hw, E1000_POEMB, data);
725 return E1000_SUCCESS;
729 * e1000_set_d3_lplu_state_82574 - Sets low power link up state for D3
730 * @hw: pointer to the HW structure
731 * @active: boolean used to enable/disable lplu
733 * The low power link up (lplu) state is set to the power management level D3
734 * when active is TRUE, else clear lplu for D3. LPLU
735 * is used during Dx states where the power conservation is most important.
736 * During driver activity, SmartSpeed should be enabled so performance is
739 static s32 e1000_set_d3_lplu_state_82574(struct e1000_hw *hw, bool active)
741 u16 data = E1000_READ_REG(hw, E1000_POEMB);
743 DEBUGFUNC("e1000_set_d3_lplu_state_82574");
746 data &= ~E1000_PHY_CTRL_NOND0A_LPLU;
747 } else if ((hw->phy.autoneg_advertised == E1000_ALL_SPEED_DUPLEX) ||
748 (hw->phy.autoneg_advertised == E1000_ALL_NOT_GIG) ||
749 (hw->phy.autoneg_advertised == E1000_ALL_10_SPEED)) {
750 data |= E1000_PHY_CTRL_NOND0A_LPLU;
753 E1000_WRITE_REG(hw, E1000_POEMB, data);
754 return E1000_SUCCESS;
758 * e1000_acquire_nvm_82571 - Request for access to the EEPROM
759 * @hw: pointer to the HW structure
761 * To gain access to the EEPROM, first we must obtain a hardware semaphore.
762 * Then for non-82573 hardware, set the EEPROM access request bit and wait
763 * for EEPROM access grant bit. If the access grant bit is not set, release
764 * hardware semaphore.
766 static s32 e1000_acquire_nvm_82571(struct e1000_hw *hw)
770 DEBUGFUNC("e1000_acquire_nvm_82571");
772 ret_val = e1000_get_hw_semaphore_82571(hw);
776 switch (hw->mac.type) {
780 ret_val = e1000_acquire_nvm_generic(hw);
785 e1000_put_hw_semaphore_82571(hw);
792 * e1000_release_nvm_82571 - Release exclusive access to EEPROM
793 * @hw: pointer to the HW structure
795 * Stop any current commands to the EEPROM and clear the EEPROM request bit.
797 static void e1000_release_nvm_82571(struct e1000_hw *hw)
799 DEBUGFUNC("e1000_release_nvm_82571");
801 e1000_release_nvm_generic(hw);
802 e1000_put_hw_semaphore_82571(hw);
806 * e1000_write_nvm_82571 - Write to EEPROM using appropriate interface
807 * @hw: pointer to the HW structure
808 * @offset: offset within the EEPROM to be written to
809 * @words: number of words to write
810 * @data: 16 bit word(s) to be written to the EEPROM
812 * For non-82573 silicon, write data to EEPROM at offset using SPI interface.
814 * If e1000_update_nvm_checksum is not called after this function, the
815 * EEPROM will most likely contain an invalid checksum.
817 static s32 e1000_write_nvm_82571(struct e1000_hw *hw, u16 offset, u16 words,
820 s32 ret_val = E1000_SUCCESS;
822 DEBUGFUNC("e1000_write_nvm_82571");
824 switch (hw->mac.type) {
828 ret_val = e1000_write_nvm_eewr_82571(hw, offset, words, data);
832 ret_val = e1000_write_nvm_spi(hw, offset, words, data);
835 ret_val = -E1000_ERR_NVM;
843 * e1000_update_nvm_checksum_82571 - Update EEPROM checksum
844 * @hw: pointer to the HW structure
846 * Updates the EEPROM checksum by reading/adding each word of the EEPROM
847 * up to the checksum. Then calculates the EEPROM checksum and writes the
848 * value to the EEPROM.
850 static s32 e1000_update_nvm_checksum_82571(struct e1000_hw *hw)
856 DEBUGFUNC("e1000_update_nvm_checksum_82571");
858 ret_val = e1000_update_nvm_checksum_generic(hw);
863 * If our nvm is an EEPROM, then we're done
864 * otherwise, commit the checksum to the flash NVM.
866 if (hw->nvm.type != e1000_nvm_flash_hw)
869 /* Check for pending operations. */
870 for (i = 0; i < E1000_FLASH_UPDATES; i++) {
872 if ((E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_FLUPD) == 0)
876 if (i == E1000_FLASH_UPDATES) {
877 ret_val = -E1000_ERR_NVM;
881 /* Reset the firmware if using STM opcode. */
882 if ((E1000_READ_REG(hw, E1000_FLOP) & 0xFF00) == E1000_STM_OPCODE) {
884 * The enabling of and the actual reset must be done
885 * in two write cycles.
887 E1000_WRITE_REG(hw, E1000_HICR, E1000_HICR_FW_RESET_ENABLE);
888 E1000_WRITE_FLUSH(hw);
889 E1000_WRITE_REG(hw, E1000_HICR, E1000_HICR_FW_RESET);
892 /* Commit the write to flash */
893 eecd = E1000_READ_REG(hw, E1000_EECD) | E1000_EECD_FLUPD;
894 E1000_WRITE_REG(hw, E1000_EECD, eecd);
896 for (i = 0; i < E1000_FLASH_UPDATES; i++) {
898 if ((E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_FLUPD) == 0)
902 if (i == E1000_FLASH_UPDATES) {
903 ret_val = -E1000_ERR_NVM;
912 * e1000_validate_nvm_checksum_82571 - Validate EEPROM checksum
913 * @hw: pointer to the HW structure
915 * Calculates the EEPROM checksum by reading/adding each word of the EEPROM
916 * and then verifies that the sum of the EEPROM is equal to 0xBABA.
918 static s32 e1000_validate_nvm_checksum_82571(struct e1000_hw *hw)
920 DEBUGFUNC("e1000_validate_nvm_checksum_82571");
922 if (hw->nvm.type == e1000_nvm_flash_hw)
923 e1000_fix_nvm_checksum_82571(hw);
925 return e1000_validate_nvm_checksum_generic(hw);
929 * e1000_write_nvm_eewr_82571 - Write to EEPROM for 82573 silicon
930 * @hw: pointer to the HW structure
931 * @offset: offset within the EEPROM to be written to
932 * @words: number of words to write
933 * @data: 16 bit word(s) to be written to the EEPROM
935 * After checking for invalid values, poll the EEPROM to ensure the previous
936 * command has completed before trying to write the next word. After write
937 * poll for completion.
939 * If e1000_update_nvm_checksum is not called after this function, the
940 * EEPROM will most likely contain an invalid checksum.
942 static s32 e1000_write_nvm_eewr_82571(struct e1000_hw *hw, u16 offset,
943 u16 words, u16 *data)
945 struct e1000_nvm_info *nvm = &hw->nvm;
949 DEBUGFUNC("e1000_write_nvm_eewr_82571");
952 * A check for invalid values: offset too large, too many words,
953 * and not enough words.
955 if ((offset >= nvm->word_size) || (words > (nvm->word_size - offset)) ||
957 DEBUGOUT("nvm parameter(s) out of bounds\n");
958 ret_val = -E1000_ERR_NVM;
962 for (i = 0; i < words; i++) {
963 eewr = (data[i] << E1000_NVM_RW_REG_DATA) |
964 ((offset+i) << E1000_NVM_RW_ADDR_SHIFT) |
965 E1000_NVM_RW_REG_START;
967 ret_val = e1000_poll_eerd_eewr_done(hw, E1000_NVM_POLL_WRITE);
971 E1000_WRITE_REG(hw, E1000_EEWR, eewr);
973 ret_val = e1000_poll_eerd_eewr_done(hw, E1000_NVM_POLL_WRITE);
983 * e1000_get_cfg_done_82571 - Poll for configuration done
984 * @hw: pointer to the HW structure
986 * Reads the management control register for the config done bit to be set.
988 static s32 e1000_get_cfg_done_82571(struct e1000_hw *hw)
990 s32 timeout = PHY_CFG_TIMEOUT;
991 s32 ret_val = E1000_SUCCESS;
993 DEBUGFUNC("e1000_get_cfg_done_82571");
996 if (E1000_READ_REG(hw, E1000_EEMNGCTL) &
997 E1000_NVM_CFG_DONE_PORT_0)
1003 DEBUGOUT("MNG configuration cycle has not completed.\n");
1004 ret_val = -E1000_ERR_RESET;
1013 * e1000_set_d0_lplu_state_82571 - Set Low Power Linkup D0 state
1014 * @hw: pointer to the HW structure
1015 * @active: TRUE to enable LPLU, FALSE to disable
1017 * Sets the LPLU D0 state according to the active flag. When activating LPLU
1018 * this function also disables smart speed and vice versa. LPLU will not be
1019 * activated unless the device autonegotiation advertisement meets standards
1020 * of either 10 or 10/100 or 10/100/1000 at all duplexes. This is a function
1021 * pointer entry point only called by PHY setup routines.
1023 static s32 e1000_set_d0_lplu_state_82571(struct e1000_hw *hw, bool active)
1025 struct e1000_phy_info *phy = &hw->phy;
1026 s32 ret_val = E1000_SUCCESS;
1029 DEBUGFUNC("e1000_set_d0_lplu_state_82571");
1031 if (!(phy->ops.read_reg))
1034 ret_val = phy->ops.read_reg(hw, IGP02E1000_PHY_POWER_MGMT, &data);
1039 data |= IGP02E1000_PM_D0_LPLU;
1040 ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT,
1045 /* When LPLU is enabled, we should disable SmartSpeed */
1046 ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
1048 data &= ~IGP01E1000_PSCFR_SMART_SPEED;
1049 ret_val = phy->ops.write_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
1054 data &= ~IGP02E1000_PM_D0_LPLU;
1055 ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT,
1058 * LPLU and SmartSpeed are mutually exclusive. LPLU is used
1059 * during Dx states where the power conservation is most
1060 * important. During driver activity we should enable
1061 * SmartSpeed, so performance is maintained.
1063 if (phy->smart_speed == e1000_smart_speed_on) {
1064 ret_val = phy->ops.read_reg(hw,
1065 IGP01E1000_PHY_PORT_CONFIG,
1070 data |= IGP01E1000_PSCFR_SMART_SPEED;
1071 ret_val = phy->ops.write_reg(hw,
1072 IGP01E1000_PHY_PORT_CONFIG,
1076 } else if (phy->smart_speed == e1000_smart_speed_off) {
1077 ret_val = phy->ops.read_reg(hw,
1078 IGP01E1000_PHY_PORT_CONFIG,
1083 data &= ~IGP01E1000_PSCFR_SMART_SPEED;
1084 ret_val = phy->ops.write_reg(hw,
1085 IGP01E1000_PHY_PORT_CONFIG,
1097 * e1000_reset_hw_82571 - Reset hardware
1098 * @hw: pointer to the HW structure
1100 * This resets the hardware into a known state.
1102 static s32 e1000_reset_hw_82571(struct e1000_hw *hw)
1107 DEBUGFUNC("e1000_reset_hw_82571");
1110 * Prevent the PCI-E bus from sticking if there is no TLP connection
1111 * on the last TLP read/write transaction when MAC is reset.
1113 ret_val = e1000_disable_pcie_master_generic(hw);
1115 DEBUGOUT("PCI-E Master disable polling has failed.\n");
1117 DEBUGOUT("Masking off all interrupts\n");
1118 E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
1120 E1000_WRITE_REG(hw, E1000_RCTL, 0);
1121 E1000_WRITE_REG(hw, E1000_TCTL, E1000_TCTL_PSP);
1122 E1000_WRITE_FLUSH(hw);
1127 * Must acquire the MDIO ownership before MAC reset.
1128 * Ownership defaults to firmware after a reset.
1130 switch (hw->mac.type) {
1132 ret_val = e1000_get_hw_semaphore_82573(hw);
1136 ret_val = e1000_get_hw_semaphore_82574(hw);
1142 DEBUGOUT("Cannot acquire MDIO ownership\n");
1144 ctrl = E1000_READ_REG(hw, E1000_CTRL);
1146 DEBUGOUT("Issuing a global reset to MAC\n");
1147 E1000_WRITE_REG(hw, E1000_CTRL, ctrl | E1000_CTRL_RST);
1149 /* Must release MDIO ownership and mutex after MAC reset. */
1150 switch (hw->mac.type) {
1153 e1000_put_hw_semaphore_82574(hw);
1159 if (hw->nvm.type == e1000_nvm_flash_hw) {
1161 ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
1162 ctrl_ext |= E1000_CTRL_EXT_EE_RST;
1163 E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext);
1164 E1000_WRITE_FLUSH(hw);
1167 ret_val = e1000_get_auto_rd_done_generic(hw);
1169 /* We don't want to continue accessing MAC registers. */
1173 * Phy configuration from NVM just starts after EECD_AUTO_RD is set.
1174 * Need to wait for Phy configuration completion before accessing
1178 switch (hw->mac.type) {
1188 /* Clear any pending interrupt events. */
1189 E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
1190 E1000_READ_REG(hw, E1000_ICR);
1192 if (hw->mac.type == e1000_82571) {
1193 /* Install any alternate MAC address into RAR0 */
1194 ret_val = e1000_check_alt_mac_addr_generic(hw);
1198 e1000_set_laa_state_82571(hw, TRUE);
1201 /* Reinitialize the 82571 serdes link state machine */
1202 if (hw->phy.media_type == e1000_media_type_internal_serdes)
1203 hw->mac.serdes_link_state = e1000_serdes_link_down;
1210 * e1000_init_hw_82571 - Initialize hardware
1211 * @hw: pointer to the HW structure
1213 * This inits the hardware readying it for operation.
1215 static s32 e1000_init_hw_82571(struct e1000_hw *hw)
1217 struct e1000_mac_info *mac = &hw->mac;
1220 u16 i, rar_count = mac->rar_entry_count;
1222 DEBUGFUNC("e1000_init_hw_82571");
1224 e1000_initialize_hw_bits_82571(hw);
1226 /* Initialize identification LED */
1227 ret_val = mac->ops.id_led_init(hw);
1229 DEBUGOUT("Error initializing identification LED\n");
1230 /* This is not fatal and we should not stop init due to this */
1232 /* Disabling VLAN filtering */
1233 DEBUGOUT("Initializing the IEEE VLAN\n");
1234 mac->ops.clear_vfta(hw);
1236 /* Setup the receive address. */
1238 * If, however, a locally administered address was assigned to the
1239 * 82571, we must reserve a RAR for it to work around an issue where
1240 * resetting one port will reload the MAC on the other port.
1242 if (e1000_get_laa_state_82571(hw))
1244 e1000_init_rx_addrs_generic(hw, rar_count);
1246 /* Zero out the Multicast HASH table */
1247 DEBUGOUT("Zeroing the MTA\n");
1248 for (i = 0; i < mac->mta_reg_count; i++)
1249 E1000_WRITE_REG_ARRAY(hw, E1000_MTA, i, 0);
1251 /* Setup link and flow control */
1252 ret_val = mac->ops.setup_link(hw);
1254 /* Set the transmit descriptor write-back policy */
1255 reg_data = E1000_READ_REG(hw, E1000_TXDCTL(0));
1256 reg_data = (reg_data & ~E1000_TXDCTL_WTHRESH) |
1257 E1000_TXDCTL_FULL_TX_DESC_WB | E1000_TXDCTL_COUNT_DESC;
1258 E1000_WRITE_REG(hw, E1000_TXDCTL(0), reg_data);
1260 /* ...for both queues. */
1261 switch (mac->type) {
1263 e1000_enable_tx_pkt_filtering_generic(hw);
1267 reg_data = E1000_READ_REG(hw, E1000_GCR);
1268 reg_data |= E1000_GCR_L1_ACT_WITHOUT_L0S_RX;
1269 E1000_WRITE_REG(hw, E1000_GCR, reg_data);
1272 reg_data = E1000_READ_REG(hw, E1000_TXDCTL(1));
1273 reg_data = (reg_data & ~E1000_TXDCTL_WTHRESH) |
1274 E1000_TXDCTL_FULL_TX_DESC_WB |
1275 E1000_TXDCTL_COUNT_DESC;
1276 E1000_WRITE_REG(hw, E1000_TXDCTL(1), reg_data);
1281 * Clear all of the statistics registers (clear on read). It is
1282 * important that we do this after we have tried to establish link
1283 * because the symbol error count will increment wildly if there
1286 e1000_clear_hw_cntrs_82571(hw);
1292 * e1000_initialize_hw_bits_82571 - Initialize hardware-dependent bits
1293 * @hw: pointer to the HW structure
1295 * Initializes required hardware-dependent bits needed for normal operation.
1297 static void e1000_initialize_hw_bits_82571(struct e1000_hw *hw)
1301 DEBUGFUNC("e1000_initialize_hw_bits_82571");
1303 /* Transmit Descriptor Control 0 */
1304 reg = E1000_READ_REG(hw, E1000_TXDCTL(0));
1306 E1000_WRITE_REG(hw, E1000_TXDCTL(0), reg);
1308 /* Transmit Descriptor Control 1 */
1309 reg = E1000_READ_REG(hw, E1000_TXDCTL(1));
1311 E1000_WRITE_REG(hw, E1000_TXDCTL(1), reg);
1313 /* Transmit Arbitration Control 0 */
1314 reg = E1000_READ_REG(hw, E1000_TARC(0));
1315 reg &= ~(0xF << 27); /* 30:27 */
1316 switch (hw->mac.type) {
1319 reg |= (1 << 23) | (1 << 24) | (1 << 25) | (1 << 26);
1328 E1000_WRITE_REG(hw, E1000_TARC(0), reg);
1330 /* Transmit Arbitration Control 1 */
1331 reg = E1000_READ_REG(hw, E1000_TARC(1));
1332 switch (hw->mac.type) {
1335 reg &= ~((1 << 29) | (1 << 30));
1336 reg |= (1 << 22) | (1 << 24) | (1 << 25) | (1 << 26);
1337 if (E1000_READ_REG(hw, E1000_TCTL) & E1000_TCTL_MULR)
1341 E1000_WRITE_REG(hw, E1000_TARC(1), reg);
1347 /* Device Control */
1348 switch (hw->mac.type) {
1352 reg = E1000_READ_REG(hw, E1000_CTRL);
1354 E1000_WRITE_REG(hw, E1000_CTRL, reg);
1360 /* Extended Device Control */
1361 switch (hw->mac.type) {
1365 reg = E1000_READ_REG(hw, E1000_CTRL_EXT);
1368 E1000_WRITE_REG(hw, E1000_CTRL_EXT, reg);
1374 if (hw->mac.type == e1000_82571) {
1375 reg = E1000_READ_REG(hw, E1000_PBA_ECC);
1376 reg |= E1000_PBA_ECC_CORR_EN;
1377 E1000_WRITE_REG(hw, E1000_PBA_ECC, reg);
1381 * Workaround for hardware errata.
1382 * Ensure that DMA Dynamic Clock gating is disabled on 82571 and 82572
1384 if ((hw->mac.type == e1000_82571) ||
1385 (hw->mac.type == e1000_82572)) {
1386 reg = E1000_READ_REG(hw, E1000_CTRL_EXT);
1387 reg &= ~E1000_CTRL_EXT_DMA_DYN_CLK_EN;
1388 E1000_WRITE_REG(hw, E1000_CTRL_EXT, reg);
1391 /* PCI-Ex Control Registers */
1392 switch (hw->mac.type) {
1395 reg = E1000_READ_REG(hw, E1000_GCR);
1397 E1000_WRITE_REG(hw, E1000_GCR, reg);
1400 * Workaround for hardware errata.
1401 * apply workaround for hardware errata documented in errata
1402 * docs Fixes issue where some error prone or unreliable PCIe
1403 * completions are occurring, particularly with ASPM enabled.
1404 * Without fix, issue can cause Tx timeouts.
1406 reg = E1000_READ_REG(hw, E1000_GCR2);
1408 E1000_WRITE_REG(hw, E1000_GCR2, reg);
1418 * e1000_clear_vfta_82571 - Clear VLAN filter table
1419 * @hw: pointer to the HW structure
1421 * Clears the register array which contains the VLAN filter table by
1422 * setting all the values to 0.
1424 static void e1000_clear_vfta_82571(struct e1000_hw *hw)
1428 u32 vfta_offset = 0;
1429 u32 vfta_bit_in_reg = 0;
1431 DEBUGFUNC("e1000_clear_vfta_82571");
1433 switch (hw->mac.type) {
1437 if (hw->mng_cookie.vlan_id != 0) {
1439 * The VFTA is a 4096b bit-field, each identifying
1440 * a single VLAN ID. The following operations
1441 * determine which 32b entry (i.e. offset) into the
1442 * array we want to set the VLAN ID (i.e. bit) of
1443 * the manageability unit.
1445 vfta_offset = (hw->mng_cookie.vlan_id >>
1446 E1000_VFTA_ENTRY_SHIFT) & E1000_VFTA_ENTRY_MASK;
1447 vfta_bit_in_reg = 1 << (hw->mng_cookie.vlan_id &
1448 E1000_VFTA_ENTRY_BIT_SHIFT_MASK);
1454 for (offset = 0; offset < E1000_VLAN_FILTER_TBL_SIZE; offset++) {
1456 * If the offset we want to clear is the same offset of the
1457 * manageability VLAN ID, then clear all bits except that of
1458 * the manageability unit.
1460 vfta_value = (offset == vfta_offset) ? vfta_bit_in_reg : 0;
1461 E1000_WRITE_REG_ARRAY(hw, E1000_VFTA, offset, vfta_value);
1462 E1000_WRITE_FLUSH(hw);
1467 * e1000_check_mng_mode_82574 - Check manageability is enabled
1468 * @hw: pointer to the HW structure
1470 * Reads the NVM Initialization Control Word 2 and returns TRUE
1471 * (>0) if any manageability is enabled, else FALSE (0).
1473 static bool e1000_check_mng_mode_82574(struct e1000_hw *hw)
1477 DEBUGFUNC("e1000_check_mng_mode_82574");
1479 hw->nvm.ops.read(hw, NVM_INIT_CONTROL2_REG, 1, &data);
1480 return (data & E1000_NVM_INIT_CTRL2_MNGM) != 0;
1484 * e1000_led_on_82574 - Turn LED on
1485 * @hw: pointer to the HW structure
1489 static s32 e1000_led_on_82574(struct e1000_hw *hw)
1494 DEBUGFUNC("e1000_led_on_82574");
1496 ctrl = hw->mac.ledctl_mode2;
1497 if (!(E1000_STATUS_LU & E1000_READ_REG(hw, E1000_STATUS))) {
1499 * If no link, then turn LED on by setting the invert bit
1500 * for each LED that's "on" (0x0E) in ledctl_mode2.
1502 for (i = 0; i < 4; i++)
1503 if (((hw->mac.ledctl_mode2 >> (i * 8)) & 0xFF) ==
1504 E1000_LEDCTL_MODE_LED_ON)
1505 ctrl |= (E1000_LEDCTL_LED0_IVRT << (i * 8));
1507 E1000_WRITE_REG(hw, E1000_LEDCTL, ctrl);
1509 return E1000_SUCCESS;
1513 * e1000_check_phy_82574 - check 82574 phy hung state
1514 * @hw: pointer to the HW structure
1516 * Returns whether phy is hung or not
1518 bool e1000_check_phy_82574(struct e1000_hw *hw)
1520 u16 status_1kbt = 0;
1521 u16 receive_errors = 0;
1522 bool phy_hung = FALSE;
1523 s32 ret_val = E1000_SUCCESS;
1525 DEBUGFUNC("e1000_check_phy_82574");
1528 * Read PHY Receive Error counter first, if its is max - all F's then
1529 * read the Base1000T status register If both are max then PHY is hung.
1531 ret_val = hw->phy.ops.read_reg(hw, E1000_RECEIVE_ERROR_COUNTER,
1535 if (receive_errors == E1000_RECEIVE_ERROR_MAX) {
1536 ret_val = hw->phy.ops.read_reg(hw, E1000_BASE1000T_STATUS,
1540 if ((status_1kbt & E1000_IDLE_ERROR_COUNT_MASK) ==
1541 E1000_IDLE_ERROR_COUNT_MASK)
1550 * e1000_setup_link_82571 - Setup flow control and link settings
1551 * @hw: pointer to the HW structure
1553 * Determines which flow control settings to use, then configures flow
1554 * control. Calls the appropriate media-specific link configuration
1555 * function. Assuming the adapter has a valid link partner, a valid link
1556 * should be established. Assumes the hardware has previously been reset
1557 * and the transmitter and receiver are not enabled.
1559 static s32 e1000_setup_link_82571(struct e1000_hw *hw)
1561 DEBUGFUNC("e1000_setup_link_82571");
1564 * 82573 does not have a word in the NVM to determine
1565 * the default flow control setting, so we explicitly
1568 switch (hw->mac.type) {
1572 if (hw->fc.requested_mode == e1000_fc_default)
1573 hw->fc.requested_mode = e1000_fc_full;
1579 return e1000_setup_link_generic(hw);
1583 * e1000_setup_copper_link_82571 - Configure copper link settings
1584 * @hw: pointer to the HW structure
1586 * Configures the link for auto-neg or forced speed and duplex. Then we check
1587 * for link, once link is established calls to configure collision distance
1588 * and flow control are called.
1590 static s32 e1000_setup_copper_link_82571(struct e1000_hw *hw)
1595 DEBUGFUNC("e1000_setup_copper_link_82571");
1597 ctrl = E1000_READ_REG(hw, E1000_CTRL);
1598 ctrl |= E1000_CTRL_SLU;
1599 ctrl &= ~(E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
1600 E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
1602 switch (hw->phy.type) {
1605 ret_val = e1000_copper_link_setup_m88(hw);
1607 case e1000_phy_igp_2:
1608 ret_val = e1000_copper_link_setup_igp(hw);
1611 ret_val = -E1000_ERR_PHY;
1618 ret_val = e1000_setup_copper_link_generic(hw);
1625 * e1000_setup_fiber_serdes_link_82571 - Setup link for fiber/serdes
1626 * @hw: pointer to the HW structure
1628 * Configures collision distance and flow control for fiber and serdes links.
1629 * Upon successful setup, poll for link.
1631 static s32 e1000_setup_fiber_serdes_link_82571(struct e1000_hw *hw)
1633 DEBUGFUNC("e1000_setup_fiber_serdes_link_82571");
1635 switch (hw->mac.type) {
1639 * If SerDes loopback mode is entered, there is no form
1640 * of reset to take the adapter out of that mode. So we
1641 * have to explicitly take the adapter out of loopback
1642 * mode. This prevents drivers from twiddling their thumbs
1643 * if another tool failed to take it out of loopback mode.
1645 E1000_WRITE_REG(hw, E1000_SCTL,
1646 E1000_SCTL_DISABLE_SERDES_LOOPBACK);
1652 return e1000_setup_fiber_serdes_link_generic(hw);
1656 * e1000_check_for_serdes_link_82571 - Check for link (Serdes)
1657 * @hw: pointer to the HW structure
1659 * Reports the link state as up or down.
1661 * If autonegotiation is supported by the link partner, the link state is
1662 * determined by the result of autonegotiation. This is the most likely case.
1663 * If autonegotiation is not supported by the link partner, and the link
1664 * has a valid signal, force the link up.
1666 * The link state is represented internally here by 4 states:
1669 * 2) autoneg_progress
1670 * 3) autoneg_complete (the link successfully autonegotiated)
1671 * 4) forced_up (the link has been forced up, it did not autonegotiate)
1674 static s32 e1000_check_for_serdes_link_82571(struct e1000_hw *hw)
1676 struct e1000_mac_info *mac = &hw->mac;
1682 s32 ret_val = E1000_SUCCESS;
1684 DEBUGFUNC("e1000_check_for_serdes_link_82571");
1686 ctrl = E1000_READ_REG(hw, E1000_CTRL);
1687 status = E1000_READ_REG(hw, E1000_STATUS);
1688 rxcw = E1000_READ_REG(hw, E1000_RXCW);
1690 if ((rxcw & E1000_RXCW_SYNCH) && !(rxcw & E1000_RXCW_IV)) {
1692 /* Receiver is synchronized with no invalid bits. */
1693 switch (mac->serdes_link_state) {
1694 case e1000_serdes_link_autoneg_complete:
1695 if (!(status & E1000_STATUS_LU)) {
1697 * We have lost link, retry autoneg before
1698 * reporting link failure
1700 mac->serdes_link_state =
1701 e1000_serdes_link_autoneg_progress;
1702 mac->serdes_has_link = FALSE;
1703 DEBUGOUT("AN_UP -> AN_PROG\n");
1705 mac->serdes_has_link = TRUE;
1709 case e1000_serdes_link_forced_up:
1711 * If we are receiving /C/ ordered sets, re-enable
1712 * auto-negotiation in the TXCW register and disable
1713 * forced link in the Device Control register in an
1714 * attempt to auto-negotiate with our link partner.
1715 * If the partner code word is null, stop forcing
1716 * and restart auto negotiation.
1718 if ((rxcw & E1000_RXCW_C) || !(rxcw & E1000_RXCW_CW)) {
1719 /* Enable autoneg, and unforce link up */
1720 E1000_WRITE_REG(hw, E1000_TXCW, mac->txcw);
1721 E1000_WRITE_REG(hw, E1000_CTRL,
1722 (ctrl & ~E1000_CTRL_SLU));
1723 mac->serdes_link_state =
1724 e1000_serdes_link_autoneg_progress;
1725 mac->serdes_has_link = FALSE;
1726 DEBUGOUT("FORCED_UP -> AN_PROG\n");
1728 mac->serdes_has_link = TRUE;
1732 case e1000_serdes_link_autoneg_progress:
1733 if (rxcw & E1000_RXCW_C) {
1735 * We received /C/ ordered sets, meaning the
1736 * link partner has autonegotiated, and we can
1737 * trust the Link Up (LU) status bit.
1739 if (status & E1000_STATUS_LU) {
1740 mac->serdes_link_state =
1741 e1000_serdes_link_autoneg_complete;
1742 DEBUGOUT("AN_PROG -> AN_UP\n");
1743 mac->serdes_has_link = TRUE;
1745 /* Autoneg completed, but failed. */
1746 mac->serdes_link_state =
1747 e1000_serdes_link_down;
1748 DEBUGOUT("AN_PROG -> DOWN\n");
1752 * The link partner did not autoneg.
1753 * Force link up and full duplex, and change
1756 E1000_WRITE_REG(hw, E1000_TXCW,
1757 (mac->txcw & ~E1000_TXCW_ANE));
1758 ctrl |= (E1000_CTRL_SLU | E1000_CTRL_FD);
1759 E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
1761 /* Configure Flow Control after link up. */
1763 e1000_config_fc_after_link_up_generic(hw);
1765 DEBUGOUT("Error config flow control\n");
1768 mac->serdes_link_state =
1769 e1000_serdes_link_forced_up;
1770 mac->serdes_has_link = TRUE;
1771 DEBUGOUT("AN_PROG -> FORCED_UP\n");
1775 case e1000_serdes_link_down:
1778 * The link was down but the receiver has now gained
1779 * valid sync, so lets see if we can bring the link
1782 E1000_WRITE_REG(hw, E1000_TXCW, mac->txcw);
1783 E1000_WRITE_REG(hw, E1000_CTRL, (ctrl &
1785 mac->serdes_link_state =
1786 e1000_serdes_link_autoneg_progress;
1787 mac->serdes_has_link = FALSE;
1788 DEBUGOUT("DOWN -> AN_PROG\n");
1792 if (!(rxcw & E1000_RXCW_SYNCH)) {
1793 mac->serdes_has_link = FALSE;
1794 mac->serdes_link_state = e1000_serdes_link_down;
1795 DEBUGOUT("ANYSTATE -> DOWN\n");
1798 * Check several times, if Sync and Config
1799 * both are consistently 1 then simply ignore
1800 * the Invalid bit and restart Autoneg
1802 for (i = 0; i < AN_RETRY_COUNT; i++) {
1804 rxcw = E1000_READ_REG(hw, E1000_RXCW);
1805 if ((rxcw & E1000_RXCW_IV) &&
1806 !((rxcw & E1000_RXCW_SYNCH) &&
1807 (rxcw & E1000_RXCW_C))) {
1808 mac->serdes_has_link = FALSE;
1809 mac->serdes_link_state =
1810 e1000_serdes_link_down;
1811 DEBUGOUT("ANYSTATE -> DOWN\n");
1816 if (i == AN_RETRY_COUNT) {
1817 txcw = E1000_READ_REG(hw, E1000_TXCW);
1818 txcw |= E1000_TXCW_ANE;
1819 E1000_WRITE_REG(hw, E1000_TXCW, txcw);
1820 mac->serdes_link_state =
1821 e1000_serdes_link_autoneg_progress;
1822 mac->serdes_has_link = FALSE;
1823 DEBUGOUT("ANYSTATE -> AN_PROG\n");
1832 * e1000_valid_led_default_82571 - Verify a valid default LED config
1833 * @hw: pointer to the HW structure
1834 * @data: pointer to the NVM (EEPROM)
1836 * Read the EEPROM for the current default LED configuration. If the
1837 * LED configuration is not valid, set to a valid LED configuration.
1839 static s32 e1000_valid_led_default_82571(struct e1000_hw *hw, u16 *data)
1843 DEBUGFUNC("e1000_valid_led_default_82571");
1845 ret_val = hw->nvm.ops.read(hw, NVM_ID_LED_SETTINGS, 1, data);
1847 DEBUGOUT("NVM Read Error\n");
1851 switch (hw->mac.type) {
1855 if (*data == ID_LED_RESERVED_F746)
1856 *data = ID_LED_DEFAULT_82573;
1859 if (*data == ID_LED_RESERVED_0000 ||
1860 *data == ID_LED_RESERVED_FFFF)
1861 *data = ID_LED_DEFAULT;
1870 * e1000_get_laa_state_82571 - Get locally administered address state
1871 * @hw: pointer to the HW structure
1873 * Retrieve and return the current locally administered address state.
1875 bool e1000_get_laa_state_82571(struct e1000_hw *hw)
1877 DEBUGFUNC("e1000_get_laa_state_82571");
1879 if (hw->mac.type != e1000_82571)
1882 return hw->dev_spec._82571.laa_is_present;
1886 * e1000_set_laa_state_82571 - Set locally administered address state
1887 * @hw: pointer to the HW structure
1888 * @state: enable/disable locally administered address
1890 * Enable/Disable the current locally administered address state.
1892 void e1000_set_laa_state_82571(struct e1000_hw *hw, bool state)
1894 DEBUGFUNC("e1000_set_laa_state_82571");
1896 if (hw->mac.type != e1000_82571)
1899 hw->dev_spec._82571.laa_is_present = state;
1901 /* If workaround is activated... */
1904 * Hold a copy of the LAA in RAR[14] This is done so that
1905 * between the time RAR[0] gets clobbered and the time it
1906 * gets fixed, the actual LAA is in one of the RARs and no
1907 * incoming packets directed to this port are dropped.
1908 * Eventually the LAA will be in RAR[0] and RAR[14].
1910 hw->mac.ops.rar_set(hw, hw->mac.addr,
1911 hw->mac.rar_entry_count - 1);
1916 * e1000_fix_nvm_checksum_82571 - Fix EEPROM checksum
1917 * @hw: pointer to the HW structure
1919 * Verifies that the EEPROM has completed the update. After updating the
1920 * EEPROM, we need to check bit 15 in work 0x23 for the checksum fix. If
1921 * the checksum fix is not implemented, we need to set the bit and update
1922 * the checksum. Otherwise, if bit 15 is set and the checksum is incorrect,
1923 * we need to return bad checksum.
1925 static s32 e1000_fix_nvm_checksum_82571(struct e1000_hw *hw)
1927 struct e1000_nvm_info *nvm = &hw->nvm;
1928 s32 ret_val = E1000_SUCCESS;
1931 DEBUGFUNC("e1000_fix_nvm_checksum_82571");
1933 if (nvm->type != e1000_nvm_flash_hw)
1937 * Check bit 4 of word 10h. If it is 0, firmware is done updating
1938 * 10h-12h. Checksum may need to be fixed.
1940 ret_val = nvm->ops.read(hw, 0x10, 1, &data);
1944 if (!(data & 0x10)) {
1946 * Read 0x23 and check bit 15. This bit is a 1
1947 * when the checksum has already been fixed. If
1948 * the checksum is still wrong and this bit is a
1949 * 1, we need to return bad checksum. Otherwise,
1950 * we need to set this bit to a 1 and update the
1953 ret_val = nvm->ops.read(hw, 0x23, 1, &data);
1957 if (!(data & 0x8000)) {
1959 ret_val = nvm->ops.write(hw, 0x23, 1, &data);
1962 ret_val = nvm->ops.update(hw);
1972 * e1000_read_mac_addr_82571 - Read device MAC address
1973 * @hw: pointer to the HW structure
1975 static s32 e1000_read_mac_addr_82571(struct e1000_hw *hw)
1977 s32 ret_val = E1000_SUCCESS;
1979 DEBUGFUNC("e1000_read_mac_addr_82571");
1981 if (hw->mac.type == e1000_82571) {
1983 * If there's an alternate MAC address place it in RAR0
1984 * so that it will override the Si installed default perm
1987 ret_val = e1000_check_alt_mac_addr_generic(hw);
1992 ret_val = e1000_read_mac_addr_generic(hw);
1999 * e1000_power_down_phy_copper_82571 - Remove link during PHY power down
2000 * @hw: pointer to the HW structure
2002 * In the case of a PHY power down to save power, or to turn off link during a
2003 * driver unload, or wake on lan is not enabled, remove the link.
2005 static void e1000_power_down_phy_copper_82571(struct e1000_hw *hw)
2007 struct e1000_phy_info *phy = &hw->phy;
2008 struct e1000_mac_info *mac = &hw->mac;
2010 if (!(phy->ops.check_reset_block))
2013 /* If the management interface is not enabled, then power down */
2014 if (!(mac->ops.check_mng_mode(hw) || phy->ops.check_reset_block(hw)))
2015 e1000_power_down_phy_copper(hw);
2021 * e1000_clear_hw_cntrs_82571 - Clear device specific hardware counters
2022 * @hw: pointer to the HW structure
2024 * Clears the hardware counters by reading the counter registers.
2026 static void e1000_clear_hw_cntrs_82571(struct e1000_hw *hw)
2028 DEBUGFUNC("e1000_clear_hw_cntrs_82571");
2030 e1000_clear_hw_cntrs_base_generic(hw);
2032 E1000_READ_REG(hw, E1000_PRC64);
2033 E1000_READ_REG(hw, E1000_PRC127);
2034 E1000_READ_REG(hw, E1000_PRC255);
2035 E1000_READ_REG(hw, E1000_PRC511);
2036 E1000_READ_REG(hw, E1000_PRC1023);
2037 E1000_READ_REG(hw, E1000_PRC1522);
2038 E1000_READ_REG(hw, E1000_PTC64);
2039 E1000_READ_REG(hw, E1000_PTC127);
2040 E1000_READ_REG(hw, E1000_PTC255);
2041 E1000_READ_REG(hw, E1000_PTC511);
2042 E1000_READ_REG(hw, E1000_PTC1023);
2043 E1000_READ_REG(hw, E1000_PTC1522);
2045 E1000_READ_REG(hw, E1000_ALGNERRC);
2046 E1000_READ_REG(hw, E1000_RXERRC);
2047 E1000_READ_REG(hw, E1000_TNCRS);
2048 E1000_READ_REG(hw, E1000_CEXTERR);
2049 E1000_READ_REG(hw, E1000_TSCTC);
2050 E1000_READ_REG(hw, E1000_TSCTFC);
2052 E1000_READ_REG(hw, E1000_MGTPRC);
2053 E1000_READ_REG(hw, E1000_MGTPDC);
2054 E1000_READ_REG(hw, E1000_MGTPTC);
2056 E1000_READ_REG(hw, E1000_IAC);
2057 E1000_READ_REG(hw, E1000_ICRXOC);
2059 E1000_READ_REG(hw, E1000_ICRXPTC);
2060 E1000_READ_REG(hw, E1000_ICRXATC);
2061 E1000_READ_REG(hw, E1000_ICTXPTC);
2062 E1000_READ_REG(hw, E1000_ICTXATC);
2063 E1000_READ_REG(hw, E1000_ICTXQEC);
2064 E1000_READ_REG(hw, E1000_ICTXQMTC);
2065 E1000_READ_REG(hw, E1000_ICRXDMTC);