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