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