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