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