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