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