e1000_82575.c revision 183714
1/****************************************************************************** 2 3 Copyright (c) 2001-2008, 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: head/sys/dev/e1000/e1000_82575.c 183714 2008-10-09 02:25:18Z peter $*/ 34 35/* e1000_82575 36 * e1000_82576 37 */ 38 39#include "e1000_api.h" 40 41static s32 e1000_init_phy_params_82575(struct e1000_hw *hw); 42static s32 e1000_init_nvm_params_82575(struct e1000_hw *hw); 43static s32 e1000_init_mac_params_82575(struct e1000_hw *hw); 44static s32 e1000_acquire_phy_82575(struct e1000_hw *hw); 45static void e1000_release_phy_82575(struct e1000_hw *hw); 46static s32 e1000_acquire_nvm_82575(struct e1000_hw *hw); 47static void e1000_release_nvm_82575(struct e1000_hw *hw); 48static s32 e1000_check_for_link_82575(struct e1000_hw *hw); 49static s32 e1000_get_cfg_done_82575(struct e1000_hw *hw); 50static s32 e1000_get_link_up_info_82575(struct e1000_hw *hw, u16 *speed, 51 u16 *duplex); 52static s32 e1000_init_hw_82575(struct e1000_hw *hw); 53static s32 e1000_phy_hw_reset_sgmii_82575(struct e1000_hw *hw); 54static s32 e1000_read_phy_reg_sgmii_82575(struct e1000_hw *hw, u32 offset, 55 u16 *data); 56static s32 e1000_reset_hw_82575(struct e1000_hw *hw); 57static s32 e1000_set_d0_lplu_state_82575(struct e1000_hw *hw, 58 bool active); 59static s32 e1000_setup_copper_link_82575(struct e1000_hw *hw); 60static s32 e1000_setup_fiber_serdes_link_82575(struct e1000_hw *hw); 61static s32 e1000_valid_led_default_82575(struct e1000_hw *hw, u16 *data); 62static s32 e1000_write_phy_reg_sgmii_82575(struct e1000_hw *hw, 63 u32 offset, u16 data); 64static void e1000_clear_hw_cntrs_82575(struct e1000_hw *hw); 65static s32 e1000_acquire_swfw_sync_82575(struct e1000_hw *hw, u16 mask); 66static s32 e1000_configure_pcs_link_82575(struct e1000_hw *hw); 67static s32 e1000_get_pcs_speed_and_duplex_82575(struct e1000_hw *hw, 68 u16 *speed, u16 *duplex); 69static s32 e1000_get_phy_id_82575(struct e1000_hw *hw); 70static void e1000_release_swfw_sync_82575(struct e1000_hw *hw, u16 mask); 71static bool e1000_sgmii_active_82575(struct e1000_hw *hw); 72static s32 e1000_reset_init_script_82575(struct e1000_hw *hw); 73static s32 e1000_read_mac_addr_82575(struct e1000_hw *hw); 74static void e1000_power_down_phy_copper_82575(struct e1000_hw *hw); 75 76static void e1000_init_rx_addrs_82575(struct e1000_hw *hw, u16 rar_count); 77static void e1000_update_mc_addr_list_82575(struct e1000_hw *hw, 78 u8 *mc_addr_list, u32 mc_addr_count, 79 u32 rar_used_count, u32 rar_count); 80void e1000_remove_device_82575(struct e1000_hw *hw); 81void e1000_shutdown_fiber_serdes_link_82575(struct e1000_hw *hw); 82 83struct e1000_dev_spec_82575 { 84 bool sgmii_active; 85}; 86 87/** 88 * e1000_init_phy_params_82575 - Init PHY func ptrs. 89 * @hw: pointer to the HW structure 90 * 91 * This is a function pointer entry point called by the api module. 92 **/ 93static s32 e1000_init_phy_params_82575(struct e1000_hw *hw) 94{ 95 struct e1000_phy_info *phy = &hw->phy; 96 s32 ret_val = E1000_SUCCESS; 97 98 DEBUGFUNC("e1000_init_phy_params_82575"); 99 100 if (hw->phy.media_type != e1000_media_type_copper) { 101 phy->type = e1000_phy_none; 102 goto out; 103 } else { 104 phy->ops.power_up = e1000_power_up_phy_copper; 105 phy->ops.power_down = e1000_power_down_phy_copper_82575; 106 } 107 108 phy->autoneg_mask = AUTONEG_ADVERTISE_SPEED_DEFAULT; 109 phy->reset_delay_us = 100; 110 111 phy->ops.acquire = e1000_acquire_phy_82575; 112 phy->ops.check_reset_block = e1000_check_reset_block_generic; 113 phy->ops.commit = e1000_phy_sw_reset_generic; 114 phy->ops.get_cfg_done = e1000_get_cfg_done_82575; 115 phy->ops.release = e1000_release_phy_82575; 116 117 if (e1000_sgmii_active_82575(hw)) { 118 phy->ops.reset = e1000_phy_hw_reset_sgmii_82575; 119 phy->ops.read_reg = e1000_read_phy_reg_sgmii_82575; 120 phy->ops.write_reg = e1000_write_phy_reg_sgmii_82575; 121 } else { 122 phy->ops.reset = e1000_phy_hw_reset_generic; 123 phy->ops.read_reg = e1000_read_phy_reg_igp; 124 phy->ops.write_reg = e1000_write_phy_reg_igp; 125 } 126 127 /* Set phy->phy_addr and phy->id. */ 128 ret_val = e1000_get_phy_id_82575(hw); 129 130 /* Verify phy id and set remaining function pointers */ 131 switch (phy->id) { 132 case M88E1111_I_PHY_ID: 133 phy->type = e1000_phy_m88; 134 phy->ops.check_polarity = e1000_check_polarity_m88; 135 phy->ops.get_info = e1000_get_phy_info_m88; 136 phy->ops.get_cable_length = e1000_get_cable_length_m88; 137 phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_m88; 138 break; 139 case IGP03E1000_E_PHY_ID: 140 case IGP04E1000_E_PHY_ID: 141 phy->type = e1000_phy_igp_3; 142 phy->ops.check_polarity = e1000_check_polarity_igp; 143 phy->ops.get_info = e1000_get_phy_info_igp; 144 phy->ops.get_cable_length = e1000_get_cable_length_igp_2; 145 phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_igp; 146 phy->ops.set_d0_lplu_state = e1000_set_d0_lplu_state_82575; 147 phy->ops.set_d3_lplu_state = e1000_set_d3_lplu_state_generic; 148 break; 149 default: 150 ret_val = -E1000_ERR_PHY; 151 goto out; 152 } 153 154out: 155 return ret_val; 156} 157 158/** 159 * e1000_init_nvm_params_82575 - Init NVM func ptrs. 160 * @hw: pointer to the HW structure 161 * 162 * This is a function pointer entry point called by the api module. 163 **/ 164static s32 e1000_init_nvm_params_82575(struct e1000_hw *hw) 165{ 166 struct e1000_nvm_info *nvm = &hw->nvm; 167 u32 eecd = E1000_READ_REG(hw, E1000_EECD); 168 u16 size; 169 170 DEBUGFUNC("e1000_init_nvm_params_82575"); 171 172 nvm->opcode_bits = 8; 173 nvm->delay_usec = 1; 174 switch (nvm->override) { 175 case e1000_nvm_override_spi_large: 176 nvm->page_size = 32; 177 nvm->address_bits = 16; 178 break; 179 case e1000_nvm_override_spi_small: 180 nvm->page_size = 8; 181 nvm->address_bits = 8; 182 break; 183 default: 184 nvm->page_size = eecd & E1000_EECD_ADDR_BITS ? 32 : 8; 185 nvm->address_bits = eecd & E1000_EECD_ADDR_BITS ? 16 : 8; 186 break; 187 } 188 189 nvm->type = e1000_nvm_eeprom_spi; 190 191 size = (u16)((eecd & E1000_EECD_SIZE_EX_MASK) >> 192 E1000_EECD_SIZE_EX_SHIFT); 193 194 /* 195 * Added to a constant, "size" becomes the left-shift value 196 * for setting word_size. 197 */ 198 size += NVM_WORD_SIZE_BASE_SHIFT; 199 200 /* EEPROM access above 16k is unsupported */ 201 if (size > 14) 202 size = 14; 203 nvm->word_size = 1 << size; 204 205 /* Function Pointers */ 206 nvm->ops.acquire = e1000_acquire_nvm_82575; 207 nvm->ops.read = e1000_read_nvm_eerd; 208 nvm->ops.release = e1000_release_nvm_82575; 209 nvm->ops.update = e1000_update_nvm_checksum_generic; 210 nvm->ops.valid_led_default = e1000_valid_led_default_82575; 211 nvm->ops.validate = e1000_validate_nvm_checksum_generic; 212 nvm->ops.write = e1000_write_nvm_spi; 213 214 return E1000_SUCCESS; 215} 216 217/** 218 * e1000_init_mac_params_82575 - Init MAC func ptrs. 219 * @hw: pointer to the HW structure 220 * 221 * This is a function pointer entry point called by the api module. 222 **/ 223static s32 e1000_init_mac_params_82575(struct e1000_hw *hw) 224{ 225 struct e1000_mac_info *mac = &hw->mac; 226 struct e1000_dev_spec_82575 *dev_spec; 227 u32 ctrl_ext = 0; 228 s32 ret_val = E1000_SUCCESS; 229 230 DEBUGFUNC("e1000_init_mac_params_82575"); 231 232 hw->dev_spec_size = sizeof(struct e1000_dev_spec_82575); 233 234 /* Device-specific structure allocation */ 235 ret_val = e1000_alloc_zeroed_dev_spec_struct(hw, hw->dev_spec_size); 236 if (ret_val) 237 goto out; 238 239 dev_spec = (struct e1000_dev_spec_82575 *)hw->dev_spec; 240 241 /* Set media type */ 242 /* 243 * The 82575 uses bits 22:23 for link mode. The mode can be changed 244 * based on the EEPROM. We cannot rely upon device ID. There 245 * is no distinguishable difference between fiber and internal 246 * SerDes mode on the 82575. There can be an external PHY attached 247 * on the SGMII interface. For this, we'll set sgmii_active to TRUE. 248 */ 249 hw->phy.media_type = e1000_media_type_copper; 250 dev_spec->sgmii_active = FALSE; 251 252 ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT); 253 if ((ctrl_ext & E1000_CTRL_EXT_LINK_MODE_MASK) == 254 E1000_CTRL_EXT_LINK_MODE_PCIE_SERDES) { 255 hw->phy.media_type = e1000_media_type_internal_serdes; 256 ctrl_ext |= E1000_CTRL_I2C_ENA; 257 } else if (ctrl_ext & E1000_CTRL_EXT_LINK_MODE_SGMII) { 258 dev_spec->sgmii_active = TRUE; 259 ctrl_ext |= E1000_CTRL_I2C_ENA; 260 } else { 261 ctrl_ext &= ~E1000_CTRL_I2C_ENA; 262 } 263 E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext); 264 265 /* Set mta register count */ 266 mac->mta_reg_count = 128; 267 /* Set rar entry count */ 268 mac->rar_entry_count = E1000_RAR_ENTRIES_82575; 269 if (mac->type == e1000_82576) 270 mac->rar_entry_count = E1000_RAR_ENTRIES_82576; 271 /* Set if part includes ASF firmware */ 272 mac->asf_firmware_present = TRUE; 273 /* Set if manageability features are enabled. */ 274 mac->arc_subsystem_valid = 275 (E1000_READ_REG(hw, E1000_FWSM) & E1000_FWSM_MODE_MASK) 276 ? TRUE : FALSE; 277 278 /* Function pointers */ 279 280 /* bus type/speed/width */ 281 mac->ops.get_bus_info = e1000_get_bus_info_pcie_generic; 282 /* reset */ 283 mac->ops.reset_hw = e1000_reset_hw_82575; 284 /* hw initialization */ 285 mac->ops.init_hw = e1000_init_hw_82575; 286 /* link setup */ 287 mac->ops.setup_link = e1000_setup_link_generic; 288 /* physical interface link setup */ 289 mac->ops.setup_physical_interface = 290 (hw->phy.media_type == e1000_media_type_copper) 291 ? e1000_setup_copper_link_82575 292 : e1000_setup_fiber_serdes_link_82575; 293 /* physical interface shutdown */ 294 mac->ops.shutdown_serdes = e1000_shutdown_fiber_serdes_link_82575; 295 /* check for link */ 296 mac->ops.check_for_link = e1000_check_for_link_82575; 297 /* receive address register setting */ 298 mac->ops.rar_set = e1000_rar_set_generic; 299 /* read mac address */ 300 mac->ops.read_mac_addr = e1000_read_mac_addr_82575; 301 /* multicast address update */ 302 mac->ops.update_mc_addr_list = e1000_update_mc_addr_list_82575; 303 /* writing VFTA */ 304 mac->ops.write_vfta = e1000_write_vfta_generic; 305 /* clearing VFTA */ 306 mac->ops.clear_vfta = e1000_clear_vfta_generic; 307 /* setting MTA */ 308 mac->ops.mta_set = e1000_mta_set_generic; 309 /* blink LED */ 310 mac->ops.blink_led = e1000_blink_led_generic; 311 /* setup LED */ 312 mac->ops.setup_led = e1000_setup_led_generic; 313 /* cleanup LED */ 314 mac->ops.cleanup_led = e1000_cleanup_led_generic; 315 /* turn on/off LED */ 316 mac->ops.led_on = e1000_led_on_generic; 317 mac->ops.led_off = e1000_led_off_generic; 318 /* remove device */ 319 mac->ops.remove_device = e1000_remove_device_82575; 320 /* clear hardware counters */ 321 mac->ops.clear_hw_cntrs = e1000_clear_hw_cntrs_82575; 322 /* link info */ 323 mac->ops.get_link_up_info = e1000_get_link_up_info_82575; 324 325out: 326 return ret_val; 327} 328 329/** 330 * e1000_init_function_pointers_82575 - Init func ptrs. 331 * @hw: pointer to the HW structure 332 * 333 * The only function explicitly called by the api module to initialize 334 * all function pointers and parameters. 335 **/ 336void e1000_init_function_pointers_82575(struct e1000_hw *hw) 337{ 338 DEBUGFUNC("e1000_init_function_pointers_82575"); 339 340 hw->mac.ops.init_params = e1000_init_mac_params_82575; 341 hw->nvm.ops.init_params = e1000_init_nvm_params_82575; 342 hw->phy.ops.init_params = e1000_init_phy_params_82575; 343} 344 345/** 346 * e1000_acquire_phy_82575 - Acquire rights to access PHY 347 * @hw: pointer to the HW structure 348 * 349 * Acquire access rights to the correct PHY. This is a 350 * function pointer entry point called by the api module. 351 **/ 352static s32 e1000_acquire_phy_82575(struct e1000_hw *hw) 353{ 354 u16 mask; 355 356 DEBUGFUNC("e1000_acquire_phy_82575"); 357 358 mask = hw->bus.func ? E1000_SWFW_PHY1_SM : E1000_SWFW_PHY0_SM; 359 360 return e1000_acquire_swfw_sync_82575(hw, mask); 361} 362 363/** 364 * e1000_release_phy_82575 - Release rights to access PHY 365 * @hw: pointer to the HW structure 366 * 367 * A wrapper to release access rights to the correct PHY. This is a 368 * function pointer entry point called by the api module. 369 **/ 370static void e1000_release_phy_82575(struct e1000_hw *hw) 371{ 372 u16 mask; 373 374 DEBUGFUNC("e1000_release_phy_82575"); 375 376 mask = hw->bus.func ? E1000_SWFW_PHY1_SM : E1000_SWFW_PHY0_SM; 377 e1000_release_swfw_sync_82575(hw, mask); 378} 379 380/** 381 * e1000_read_phy_reg_sgmii_82575 - Read PHY register using sgmii 382 * @hw: pointer to the HW structure 383 * @offset: register offset to be read 384 * @data: pointer to the read data 385 * 386 * Reads the PHY register at offset using the serial gigabit media independent 387 * interface and stores the retrieved information in data. 388 **/ 389static s32 e1000_read_phy_reg_sgmii_82575(struct e1000_hw *hw, u32 offset, 390 u16 *data) 391{ 392 struct e1000_phy_info *phy = &hw->phy; 393 u32 i, i2ccmd = 0; 394 395 DEBUGFUNC("e1000_read_phy_reg_sgmii_82575"); 396 397 if (offset > E1000_MAX_SGMII_PHY_REG_ADDR) { 398 DEBUGOUT1("PHY Address %u is out of range\n", offset); 399 return -E1000_ERR_PARAM; 400 } 401 402 /* 403 * Set up Op-code, Phy Address, and register address in the I2CCMD 404 * register. The MAC will take care of interfacing with the 405 * PHY to retrieve the desired data. 406 */ 407 i2ccmd = ((offset << E1000_I2CCMD_REG_ADDR_SHIFT) | 408 (phy->addr << E1000_I2CCMD_PHY_ADDR_SHIFT) | 409 (E1000_I2CCMD_OPCODE_READ)); 410 411 E1000_WRITE_REG(hw, E1000_I2CCMD, i2ccmd); 412 413 /* Poll the ready bit to see if the I2C read completed */ 414 for (i = 0; i < E1000_I2CCMD_PHY_TIMEOUT; i++) { 415 usec_delay(50); 416 i2ccmd = E1000_READ_REG(hw, E1000_I2CCMD); 417 if (i2ccmd & E1000_I2CCMD_READY) 418 break; 419 } 420 if (!(i2ccmd & E1000_I2CCMD_READY)) { 421 DEBUGOUT("I2CCMD Read did not complete\n"); 422 return -E1000_ERR_PHY; 423 } 424 if (i2ccmd & E1000_I2CCMD_ERROR) { 425 DEBUGOUT("I2CCMD Error bit set\n"); 426 return -E1000_ERR_PHY; 427 } 428 429 /* Need to byte-swap the 16-bit value. */ 430 *data = ((i2ccmd >> 8) & 0x00FF) | ((i2ccmd << 8) & 0xFF00); 431 432 return E1000_SUCCESS; 433} 434 435/** 436 * e1000_write_phy_reg_sgmii_82575 - Write PHY register using sgmii 437 * @hw: pointer to the HW structure 438 * @offset: register offset to write to 439 * @data: data to write at register offset 440 * 441 * Writes the data to PHY register at the offset using the serial gigabit 442 * media independent interface. 443 **/ 444static s32 e1000_write_phy_reg_sgmii_82575(struct e1000_hw *hw, u32 offset, 445 u16 data) 446{ 447 struct e1000_phy_info *phy = &hw->phy; 448 u32 i, i2ccmd = 0; 449 u16 phy_data_swapped; 450 451 DEBUGFUNC("e1000_write_phy_reg_sgmii_82575"); 452 453 if (offset > E1000_MAX_SGMII_PHY_REG_ADDR) { 454 DEBUGOUT1("PHY Address %d is out of range\n", offset); 455 return -E1000_ERR_PARAM; 456 } 457 458 /* Swap the data bytes for the I2C interface */ 459 phy_data_swapped = ((data >> 8) & 0x00FF) | ((data << 8) & 0xFF00); 460 461 /* 462 * Set up Op-code, Phy Address, and register address in the I2CCMD 463 * register. The MAC will take care of interfacing with the 464 * PHY to retrieve the desired data. 465 */ 466 i2ccmd = ((offset << E1000_I2CCMD_REG_ADDR_SHIFT) | 467 (phy->addr << E1000_I2CCMD_PHY_ADDR_SHIFT) | 468 E1000_I2CCMD_OPCODE_WRITE | 469 phy_data_swapped); 470 471 E1000_WRITE_REG(hw, E1000_I2CCMD, i2ccmd); 472 473 /* Poll the ready bit to see if the I2C read completed */ 474 for (i = 0; i < E1000_I2CCMD_PHY_TIMEOUT; i++) { 475 usec_delay(50); 476 i2ccmd = E1000_READ_REG(hw, E1000_I2CCMD); 477 if (i2ccmd & E1000_I2CCMD_READY) 478 break; 479 } 480 if (!(i2ccmd & E1000_I2CCMD_READY)) { 481 DEBUGOUT("I2CCMD Write did not complete\n"); 482 return -E1000_ERR_PHY; 483 } 484 if (i2ccmd & E1000_I2CCMD_ERROR) { 485 DEBUGOUT("I2CCMD Error bit set\n"); 486 return -E1000_ERR_PHY; 487 } 488 489 return E1000_SUCCESS; 490} 491 492/** 493 * e1000_get_phy_id_82575 - Retrieve PHY addr and id 494 * @hw: pointer to the HW structure 495 * 496 * Retrieves the PHY address and ID for both PHY's which do and do not use 497 * sgmi interface. 498 **/ 499static s32 e1000_get_phy_id_82575(struct e1000_hw *hw) 500{ 501 struct e1000_phy_info *phy = &hw->phy; 502 s32 ret_val = E1000_SUCCESS; 503 u16 phy_id; 504 505 DEBUGFUNC("e1000_get_phy_id_82575"); 506 507 /* 508 * For SGMII PHYs, we try the list of possible addresses until 509 * we find one that works. For non-SGMII PHYs 510 * (e.g. integrated copper PHYs), an address of 1 should 511 * work. The result of this function should mean phy->phy_addr 512 * and phy->id are set correctly. 513 */ 514 if (!(e1000_sgmii_active_82575(hw))) { 515 phy->addr = 1; 516 ret_val = e1000_get_phy_id(hw); 517 goto out; 518 } 519 520 /* 521 * The address field in the I2CCMD register is 3 bits and 0 is invalid. 522 * Therefore, we need to test 1-7 523 */ 524 for (phy->addr = 1; phy->addr < 8; phy->addr++) { 525 ret_val = e1000_read_phy_reg_sgmii_82575(hw, PHY_ID1, &phy_id); 526 if (ret_val == E1000_SUCCESS) { 527 DEBUGOUT2("Vendor ID 0x%08X read at address %u\n", 528 phy_id, 529 phy->addr); 530 /* 531 * At the time of this writing, The M88 part is 532 * the only supported SGMII PHY product. 533 */ 534 if (phy_id == M88_VENDOR) 535 break; 536 } else { 537 DEBUGOUT1("PHY address %u was unreadable\n", 538 phy->addr); 539 } 540 } 541 542 /* A valid PHY type couldn't be found. */ 543 if (phy->addr == 8) { 544 phy->addr = 0; 545 ret_val = -E1000_ERR_PHY; 546 goto out; 547 } 548 549 ret_val = e1000_get_phy_id(hw); 550 551out: 552 return ret_val; 553} 554 555/** 556 * e1000_phy_hw_reset_sgmii_82575 - Performs a PHY reset 557 * @hw: pointer to the HW structure 558 * 559 * Resets the PHY using the serial gigabit media independent interface. 560 **/ 561static s32 e1000_phy_hw_reset_sgmii_82575(struct e1000_hw *hw) 562{ 563 s32 ret_val = E1000_SUCCESS; 564 565 DEBUGFUNC("e1000_phy_hw_reset_sgmii_82575"); 566 567 /* 568 * This isn't a TRUE "hard" reset, but is the only reset 569 * available to us at this time. 570 */ 571 572 DEBUGOUT("Soft resetting SGMII attached PHY...\n"); 573 574 if (!(hw->phy.ops.write_reg)) 575 goto out; 576 577 /* 578 * SFP documentation requires the following to configure the SPF module 579 * to work on SGMII. No further documentation is given. 580 */ 581 ret_val = hw->phy.ops.write_reg(hw, 0x1B, 0x8084); 582 if (ret_val) 583 goto out; 584 585 ret_val = hw->phy.ops.commit(hw); 586 587out: 588 return ret_val; 589} 590 591/** 592 * e1000_set_d0_lplu_state_82575 - Set Low Power Linkup D0 state 593 * @hw: pointer to the HW structure 594 * @active: TRUE to enable LPLU, FALSE to disable 595 * 596 * Sets the LPLU D0 state according to the active flag. When 597 * activating LPLU this function also disables smart speed 598 * and vice versa. LPLU will not be activated unless the 599 * device autonegotiation advertisement meets standards of 600 * either 10 or 10/100 or 10/100/1000 at all duplexes. 601 * This is a function pointer entry point only called by 602 * PHY setup routines. 603 **/ 604static s32 e1000_set_d0_lplu_state_82575(struct e1000_hw *hw, bool active) 605{ 606 struct e1000_phy_info *phy = &hw->phy; 607 s32 ret_val = E1000_SUCCESS; 608 u16 data; 609 610 DEBUGFUNC("e1000_set_d0_lplu_state_82575"); 611 612 if (!(hw->phy.ops.read_reg)) 613 goto out; 614 615 ret_val = phy->ops.read_reg(hw, IGP02E1000_PHY_POWER_MGMT, &data); 616 if (ret_val) 617 goto out; 618 619 if (active) { 620 data |= IGP02E1000_PM_D0_LPLU; 621 ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT, 622 data); 623 if (ret_val) 624 goto out; 625 626 /* When LPLU is enabled, we should disable SmartSpeed */ 627 ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CONFIG, 628 &data); 629 data &= ~IGP01E1000_PSCFR_SMART_SPEED; 630 ret_val = phy->ops.write_reg(hw, IGP01E1000_PHY_PORT_CONFIG, 631 data); 632 if (ret_val) 633 goto out; 634 } else { 635 data &= ~IGP02E1000_PM_D0_LPLU; 636 ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT, 637 data); 638 /* 639 * LPLU and SmartSpeed are mutually exclusive. LPLU is used 640 * during Dx states where the power conservation is most 641 * important. During driver activity we should enable 642 * SmartSpeed, so performance is maintained. 643 */ 644 if (phy->smart_speed == e1000_smart_speed_on) { 645 ret_val = phy->ops.read_reg(hw, 646 IGP01E1000_PHY_PORT_CONFIG, 647 &data); 648 if (ret_val) 649 goto out; 650 651 data |= IGP01E1000_PSCFR_SMART_SPEED; 652 ret_val = phy->ops.write_reg(hw, 653 IGP01E1000_PHY_PORT_CONFIG, 654 data); 655 if (ret_val) 656 goto out; 657 } else if (phy->smart_speed == e1000_smart_speed_off) { 658 ret_val = phy->ops.read_reg(hw, 659 IGP01E1000_PHY_PORT_CONFIG, 660 &data); 661 if (ret_val) 662 goto out; 663 664 data &= ~IGP01E1000_PSCFR_SMART_SPEED; 665 ret_val = phy->ops.write_reg(hw, 666 IGP01E1000_PHY_PORT_CONFIG, 667 data); 668 if (ret_val) 669 goto out; 670 } 671 } 672 673out: 674 return ret_val; 675} 676 677/** 678 * e1000_acquire_nvm_82575 - Request for access to EEPROM 679 * @hw: pointer to the HW structure 680 * 681 * Acquire the necessary semaphores for exclusive access to the EEPROM. 682 * Set the EEPROM access request bit and wait for EEPROM access grant bit. 683 * Return successful if access grant bit set, else clear the request for 684 * EEPROM access and return -E1000_ERR_NVM (-1). 685 **/ 686static s32 e1000_acquire_nvm_82575(struct e1000_hw *hw) 687{ 688 s32 ret_val; 689 690 DEBUGFUNC("e1000_acquire_nvm_82575"); 691 692 ret_val = e1000_acquire_swfw_sync_82575(hw, E1000_SWFW_EEP_SM); 693 if (ret_val) 694 goto out; 695 696 ret_val = e1000_acquire_nvm_generic(hw); 697 698 if (ret_val) 699 e1000_release_swfw_sync_82575(hw, E1000_SWFW_EEP_SM); 700 701out: 702 return ret_val; 703} 704 705/** 706 * e1000_release_nvm_82575 - Release exclusive access to EEPROM 707 * @hw: pointer to the HW structure 708 * 709 * Stop any current commands to the EEPROM and clear the EEPROM request bit, 710 * then release the semaphores acquired. 711 **/ 712static void e1000_release_nvm_82575(struct e1000_hw *hw) 713{ 714 DEBUGFUNC("e1000_release_nvm_82575"); 715 716 e1000_release_nvm_generic(hw); 717 e1000_release_swfw_sync_82575(hw, E1000_SWFW_EEP_SM); 718} 719 720/** 721 * e1000_acquire_swfw_sync_82575 - Acquire SW/FW semaphore 722 * @hw: pointer to the HW structure 723 * @mask: specifies which semaphore to acquire 724 * 725 * Acquire the SW/FW semaphore to access the PHY or NVM. The mask 726 * will also specify which port we're acquiring the lock for. 727 **/ 728static s32 e1000_acquire_swfw_sync_82575(struct e1000_hw *hw, u16 mask) 729{ 730 u32 swfw_sync; 731 u32 swmask = mask; 732 u32 fwmask = mask << 16; 733 s32 ret_val = E1000_SUCCESS; 734 s32 i = 0, timeout = 200; /* FIXME: find real value to use here */ 735 736 DEBUGFUNC("e1000_acquire_swfw_sync_82575"); 737 738 while (i < timeout) { 739 if (e1000_get_hw_semaphore_generic(hw)) { 740 ret_val = -E1000_ERR_SWFW_SYNC; 741 goto out; 742 } 743 744 swfw_sync = E1000_READ_REG(hw, E1000_SW_FW_SYNC); 745 if (!(swfw_sync & (fwmask | swmask))) 746 break; 747 748 /* 749 * Firmware currently using resource (fwmask) 750 * or other software thread using resource (swmask) 751 */ 752 e1000_put_hw_semaphore_generic(hw); 753 msec_delay_irq(5); 754 i++; 755 } 756 757 if (i == timeout) { 758 DEBUGOUT("Driver can't access resource, SW_FW_SYNC timeout.\n"); 759 ret_val = -E1000_ERR_SWFW_SYNC; 760 goto out; 761 } 762 763 swfw_sync |= swmask; 764 E1000_WRITE_REG(hw, E1000_SW_FW_SYNC, swfw_sync); 765 766 e1000_put_hw_semaphore_generic(hw); 767 768out: 769 return ret_val; 770} 771 772/** 773 * e1000_release_swfw_sync_82575 - Release SW/FW semaphore 774 * @hw: pointer to the HW structure 775 * @mask: specifies which semaphore to acquire 776 * 777 * Release the SW/FW semaphore used to access the PHY or NVM. The mask 778 * will also specify which port we're releasing the lock for. 779 **/ 780static void e1000_release_swfw_sync_82575(struct e1000_hw *hw, u16 mask) 781{ 782 u32 swfw_sync; 783 784 DEBUGFUNC("e1000_release_swfw_sync_82575"); 785 786 while (e1000_get_hw_semaphore_generic(hw) != E1000_SUCCESS); 787 /* Empty */ 788 789 swfw_sync = E1000_READ_REG(hw, E1000_SW_FW_SYNC); 790 swfw_sync &= ~mask; 791 E1000_WRITE_REG(hw, E1000_SW_FW_SYNC, swfw_sync); 792 793 e1000_put_hw_semaphore_generic(hw); 794} 795 796/** 797 * e1000_get_cfg_done_82575 - Read config done bit 798 * @hw: pointer to the HW structure 799 * 800 * Read the management control register for the config done bit for 801 * completion status. NOTE: silicon which is EEPROM-less will fail trying 802 * to read the config done bit, so an error is *ONLY* logged and returns 803 * E1000_SUCCESS. If we were to return with error, EEPROM-less silicon 804 * would not be able to be reset or change link. 805 **/ 806static s32 e1000_get_cfg_done_82575(struct e1000_hw *hw) 807{ 808 s32 timeout = PHY_CFG_TIMEOUT; 809 s32 ret_val = E1000_SUCCESS; 810 u32 mask = E1000_NVM_CFG_DONE_PORT_0; 811 812 DEBUGFUNC("e1000_get_cfg_done_82575"); 813 814 if (hw->bus.func == 1) 815 mask = E1000_NVM_CFG_DONE_PORT_1; 816 817 while (timeout) { 818 if (E1000_READ_REG(hw, E1000_EEMNGCTL) & mask) 819 break; 820 msec_delay(1); 821 timeout--; 822 } 823 if (!timeout) { 824 DEBUGOUT("MNG configuration cycle has not completed.\n"); 825 } 826 827 /* If EEPROM is not marked present, init the PHY manually */ 828 if (((E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_PRES) == 0) && 829 (hw->phy.type == e1000_phy_igp_3)) { 830 e1000_phy_init_script_igp3(hw); 831 } 832 833 return ret_val; 834} 835 836/** 837 * e1000_get_link_up_info_82575 - Get link speed/duplex info 838 * @hw: pointer to the HW structure 839 * @speed: stores the current speed 840 * @duplex: stores the current duplex 841 * 842 * This is a wrapper function, if using the serial gigabit media independent 843 * interface, use PCS to retrieve the link speed and duplex information. 844 * Otherwise, use the generic function to get the link speed and duplex info. 845 **/ 846static s32 e1000_get_link_up_info_82575(struct e1000_hw *hw, u16 *speed, 847 u16 *duplex) 848{ 849 s32 ret_val; 850 851 DEBUGFUNC("e1000_get_link_up_info_82575"); 852 853 if (hw->phy.media_type != e1000_media_type_copper || 854 e1000_sgmii_active_82575(hw)) { 855 ret_val = e1000_get_pcs_speed_and_duplex_82575(hw, speed, 856 duplex); 857 } else { 858 ret_val = e1000_get_speed_and_duplex_copper_generic(hw, speed, 859 duplex); 860 } 861 862 return ret_val; 863} 864 865/** 866 * e1000_check_for_link_82575 - Check for link 867 * @hw: pointer to the HW structure 868 * 869 * If sgmii is enabled, then use the pcs register to determine link, otherwise 870 * use the generic interface for determining link. 871 **/ 872static s32 e1000_check_for_link_82575(struct e1000_hw *hw) 873{ 874 s32 ret_val; 875 u16 speed, duplex; 876 877 DEBUGFUNC("e1000_check_for_link_82575"); 878 879 /* SGMII link check is done through the PCS register. */ 880 if ((hw->phy.media_type != e1000_media_type_copper) || 881 (e1000_sgmii_active_82575(hw))) 882 ret_val = e1000_get_pcs_speed_and_duplex_82575(hw, &speed, 883 &duplex); 884 else 885 ret_val = e1000_check_for_copper_link_generic(hw); 886 887 return ret_val; 888} 889 890/** 891 * e1000_get_pcs_speed_and_duplex_82575 - Retrieve current speed/duplex 892 * @hw: pointer to the HW structure 893 * @speed: stores the current speed 894 * @duplex: stores the current duplex 895 * 896 * Using the physical coding sub-layer (PCS), retrieve the current speed and 897 * duplex, then store the values in the pointers provided. 898 **/ 899static s32 e1000_get_pcs_speed_and_duplex_82575(struct e1000_hw *hw, 900 u16 *speed, u16 *duplex) 901{ 902 struct e1000_mac_info *mac = &hw->mac; 903 u32 pcs; 904 905 DEBUGFUNC("e1000_get_pcs_speed_and_duplex_82575"); 906 907 /* Set up defaults for the return values of this function */ 908 mac->serdes_has_link = FALSE; 909 *speed = 0; 910 *duplex = 0; 911 912 /* 913 * Read the PCS Status register for link state. For non-copper mode, 914 * the status register is not accurate. The PCS status register is 915 * used instead. 916 */ 917 pcs = E1000_READ_REG(hw, E1000_PCS_LSTAT); 918 919 /* 920 * The link up bit determines when link is up on autoneg. The sync ok 921 * gets set once both sides sync up and agree upon link. Stable link 922 * can be determined by checking for both link up and link sync ok 923 */ 924 if ((pcs & E1000_PCS_LSTS_LINK_OK) && (pcs & E1000_PCS_LSTS_SYNK_OK)) { 925 mac->serdes_has_link = TRUE; 926 927 /* Detect and store PCS speed */ 928 if (pcs & E1000_PCS_LSTS_SPEED_1000) { 929 *speed = SPEED_1000; 930 } else if (pcs & E1000_PCS_LSTS_SPEED_100) { 931 *speed = SPEED_100; 932 } else { 933 *speed = SPEED_10; 934 } 935 936 /* Detect and store PCS duplex */ 937 if (pcs & E1000_PCS_LSTS_DUPLEX_FULL) { 938 *duplex = FULL_DUPLEX; 939 } else { 940 *duplex = HALF_DUPLEX; 941 } 942 } 943 944 return E1000_SUCCESS; 945} 946 947/** 948 * e1000_init_rx_addrs_82575 - Initialize receive address's 949 * @hw: pointer to the HW structure 950 * @rar_count: receive address registers 951 * 952 * Setups the receive address registers by setting the base receive address 953 * register to the devices MAC address and clearing all the other receive 954 * address registers to 0. 955 **/ 956static void e1000_init_rx_addrs_82575(struct e1000_hw *hw, u16 rar_count) 957{ 958 u32 i; 959 u8 addr[6] = {0,0,0,0,0,0}; 960 /* 961 * This function is essentially the same as that of 962 * e1000_init_rx_addrs_generic. However it also takes care 963 * of the special case where the register offset of the 964 * second set of RARs begins elsewhere. This is implicitly taken care by 965 * function e1000_rar_set_generic. 966 */ 967 968 DEBUGFUNC("e1000_init_rx_addrs_82575"); 969 970 /* Setup the receive address */ 971 DEBUGOUT("Programming MAC Address into RAR[0]\n"); 972 hw->mac.ops.rar_set(hw, hw->mac.addr, 0); 973 974 /* Zero out the other (rar_entry_count - 1) receive addresses */ 975 DEBUGOUT1("Clearing RAR[1-%u]\n", rar_count-1); 976 for (i = 1; i < rar_count; i++) { 977 hw->mac.ops.rar_set(hw, addr, i); 978 } 979} 980 981/** 982 * e1000_update_mc_addr_list_82575 - Update Multicast addresses 983 * @hw: pointer to the HW structure 984 * @mc_addr_list: array of multicast addresses to program 985 * @mc_addr_count: number of multicast addresses to program 986 * @rar_used_count: the first RAR register free to program 987 * @rar_count: total number of supported Receive Address Registers 988 * 989 * Updates the Receive Address Registers and Multicast Table Array. 990 * The caller must have a packed mc_addr_list of multicast addresses. 991 * The parameter rar_count will usually be hw->mac.rar_entry_count 992 * unless there are workarounds that change this. 993 **/ 994static void e1000_update_mc_addr_list_82575(struct e1000_hw *hw, 995 u8 *mc_addr_list, u32 mc_addr_count, 996 u32 rar_used_count, u32 rar_count) 997{ 998 u32 hash_value; 999 u32 i; 1000 u8 addr[6] = {0,0,0,0,0,0}; 1001 /* 1002 * This function is essentially the same as that of 1003 * e1000_update_mc_addr_list_generic. However it also takes care 1004 * of the special case where the register offset of the 1005 * second set of RARs begins elsewhere. This is implicitly taken care by 1006 * function e1000_rar_set_generic. 1007 */ 1008 1009 DEBUGFUNC("e1000_update_mc_addr_list_82575"); 1010 1011 /* 1012 * Load the first set of multicast addresses into the exact 1013 * filters (RAR). If there are not enough to fill the RAR 1014 * array, clear the filters. 1015 */ 1016 for (i = rar_used_count; i < rar_count; i++) { 1017 if (mc_addr_count) { 1018 e1000_rar_set_generic(hw, mc_addr_list, i); 1019 mc_addr_count--; 1020 mc_addr_list += ETH_ADDR_LEN; 1021 } else { 1022 e1000_rar_set_generic(hw, addr, i); 1023 } 1024 } 1025 1026 /* Clear the old settings from the MTA */ 1027 DEBUGOUT("Clearing MTA\n"); 1028 for (i = 0; i < hw->mac.mta_reg_count; i++) { 1029 E1000_WRITE_REG_ARRAY(hw, E1000_MTA, i, 0); 1030 E1000_WRITE_FLUSH(hw); 1031 } 1032 1033 /* Load any remaining multicast addresses into the hash table. */ 1034 for (; mc_addr_count > 0; mc_addr_count--) { 1035 hash_value = e1000_hash_mc_addr_generic(hw, mc_addr_list); 1036 DEBUGOUT1("Hash value = 0x%03X\n", hash_value); 1037 hw->mac.ops.mta_set(hw, hash_value); 1038 mc_addr_list += ETH_ADDR_LEN; 1039 } 1040} 1041 1042/** 1043 * e1000_shutdown_fiber_serdes_link_82575 - Remove link during power down 1044 * @hw: pointer to the HW structure 1045 * 1046 * In the case of fiber serdes shut down optics and PCS on driver unload 1047 * when management pass thru is not enabled. 1048 **/ 1049void e1000_shutdown_fiber_serdes_link_82575(struct e1000_hw *hw) 1050{ 1051 u32 reg; 1052 1053 if (hw->mac.type != e1000_82576 || 1054 (hw->phy.media_type != e1000_media_type_fiber && 1055 hw->phy.media_type != e1000_media_type_internal_serdes)) 1056 return; 1057 1058 /* if the management interface is not enabled, then power down */ 1059 if (!e1000_enable_mng_pass_thru(hw)) { 1060 /* Disable PCS to turn off link */ 1061 reg = E1000_READ_REG(hw, E1000_PCS_CFG0); 1062 reg &= ~E1000_PCS_CFG_PCS_EN; 1063 E1000_WRITE_REG(hw, E1000_PCS_CFG0, reg); 1064 1065 /* shutdown the laser */ 1066 reg = E1000_READ_REG(hw, E1000_CTRL_EXT); 1067 reg |= E1000_CTRL_EXT_SDP7_DATA; 1068 E1000_WRITE_REG(hw, E1000_CTRL_EXT, reg); 1069 1070 /* flush the write to verfiy completion */ 1071 E1000_WRITE_FLUSH(hw); 1072 msec_delay(1); 1073 } 1074 1075 return; 1076} 1077 1078/** 1079 * e1000_reset_hw_82575 - Reset hardware 1080 * @hw: pointer to the HW structure 1081 * 1082 * This resets the hardware into a known state. This is a 1083 * function pointer entry point called by the api module. 1084 **/ 1085static s32 e1000_reset_hw_82575(struct e1000_hw *hw) 1086{ 1087 u32 ctrl, icr; 1088 s32 ret_val; 1089 1090 DEBUGFUNC("e1000_reset_hw_82575"); 1091 1092 /* 1093 * Prevent the PCI-E bus from sticking if there is no TLP connection 1094 * on the last TLP read/write transaction when MAC is reset. 1095 */ 1096 ret_val = e1000_disable_pcie_master_generic(hw); 1097 if (ret_val) { 1098 DEBUGOUT("PCI-E Master disable polling has failed.\n"); 1099 } 1100 1101 DEBUGOUT("Masking off all interrupts\n"); 1102 E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff); 1103 1104 E1000_WRITE_REG(hw, E1000_RCTL, 0); 1105 E1000_WRITE_REG(hw, E1000_TCTL, E1000_TCTL_PSP); 1106 E1000_WRITE_FLUSH(hw); 1107 1108 msec_delay(10); 1109 1110 ctrl = E1000_READ_REG(hw, E1000_CTRL); 1111 1112 DEBUGOUT("Issuing a global reset to MAC\n"); 1113 E1000_WRITE_REG(hw, E1000_CTRL, ctrl | E1000_CTRL_RST); 1114 1115 ret_val = e1000_get_auto_rd_done_generic(hw); 1116 if (ret_val) { 1117 /* 1118 * When auto config read does not complete, do not 1119 * return with an error. This can happen in situations 1120 * where there is no eeprom and prevents getting link. 1121 */ 1122 DEBUGOUT("Auto Read Done did not complete\n"); 1123 } 1124 1125 /* If EEPROM is not present, run manual init scripts */ 1126 if ((E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_PRES) == 0) 1127 e1000_reset_init_script_82575(hw); 1128 1129 /* Clear any pending interrupt events. */ 1130 E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff); 1131 icr = E1000_READ_REG(hw, E1000_ICR); 1132 1133 e1000_check_alt_mac_addr_generic(hw); 1134 1135 return ret_val; 1136} 1137 1138/** 1139 * e1000_init_hw_82575 - Initialize hardware 1140 * @hw: pointer to the HW structure 1141 * 1142 * This inits the hardware readying it for operation. 1143 **/ 1144static s32 e1000_init_hw_82575(struct e1000_hw *hw) 1145{ 1146 struct e1000_mac_info *mac = &hw->mac; 1147 s32 ret_val; 1148 u16 i, rar_count = mac->rar_entry_count; 1149 1150 DEBUGFUNC("e1000_init_hw_82575"); 1151 1152 /* Initialize identification LED */ 1153 ret_val = e1000_id_led_init_generic(hw); 1154 if (ret_val) { 1155 DEBUGOUT("Error initializing identification LED\n"); 1156 /* This is not fatal and we should not stop init due to this */ 1157 } 1158 1159 /* Disabling VLAN filtering */ 1160 DEBUGOUT("Initializing the IEEE VLAN\n"); 1161 mac->ops.clear_vfta(hw); 1162 1163 /* Setup the receive address */ 1164 e1000_init_rx_addrs_82575(hw, rar_count); 1165 /* Zero out the Multicast HASH table */ 1166 DEBUGOUT("Zeroing the MTA\n"); 1167 for (i = 0; i < mac->mta_reg_count; i++) 1168 E1000_WRITE_REG_ARRAY(hw, E1000_MTA, i, 0); 1169 1170 /* Setup link and flow control */ 1171 ret_val = mac->ops.setup_link(hw); 1172 1173 /* 1174 * Clear all of the statistics registers (clear on read). It is 1175 * important that we do this after we have tried to establish link 1176 * because the symbol error count will increment wildly if there 1177 * is no link. 1178 */ 1179 e1000_clear_hw_cntrs_82575(hw); 1180 1181 return ret_val; 1182} 1183 1184/** 1185 * e1000_setup_copper_link_82575 - Configure copper link settings 1186 * @hw: pointer to the HW structure 1187 * 1188 * Configures the link for auto-neg or forced speed and duplex. Then we check 1189 * for link, once link is established calls to configure collision distance 1190 * and flow control are called. 1191 **/ 1192static s32 e1000_setup_copper_link_82575(struct e1000_hw *hw) 1193{ 1194 u32 ctrl, led_ctrl; 1195 s32 ret_val; 1196 bool link; 1197 1198 DEBUGFUNC("e1000_setup_copper_link_82575"); 1199 1200 ctrl = E1000_READ_REG(hw, E1000_CTRL); 1201 ctrl |= E1000_CTRL_SLU; 1202 ctrl &= ~(E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX); 1203 E1000_WRITE_REG(hw, E1000_CTRL, ctrl); 1204 1205 switch (hw->phy.type) { 1206 case e1000_phy_m88: 1207 ret_val = e1000_copper_link_setup_m88(hw); 1208 break; 1209 case e1000_phy_igp_3: 1210 ret_val = e1000_copper_link_setup_igp(hw); 1211 /* Setup activity LED */ 1212 led_ctrl = E1000_READ_REG(hw, E1000_LEDCTL); 1213 led_ctrl &= IGP_ACTIVITY_LED_MASK; 1214 led_ctrl |= (IGP_ACTIVITY_LED_ENABLE | IGP_LED3_MODE); 1215 E1000_WRITE_REG(hw, E1000_LEDCTL, led_ctrl); 1216 break; 1217 default: 1218 ret_val = -E1000_ERR_PHY; 1219 break; 1220 } 1221 1222 if (ret_val) 1223 goto out; 1224 1225 if (hw->mac.autoneg) { 1226 /* 1227 * Setup autoneg and flow control advertisement 1228 * and perform autonegotiation. 1229 */ 1230 ret_val = e1000_copper_link_autoneg(hw); 1231 if (ret_val) 1232 goto out; 1233 } else { 1234 /* 1235 * PHY will be set to 10H, 10F, 100H or 100F 1236 * depending on user settings. 1237 */ 1238 DEBUGOUT("Forcing Speed and Duplex\n"); 1239 ret_val = hw->phy.ops.force_speed_duplex(hw); 1240 if (ret_val) { 1241 DEBUGOUT("Error Forcing Speed and Duplex\n"); 1242 goto out; 1243 } 1244 } 1245 1246 ret_val = e1000_configure_pcs_link_82575(hw); 1247 if (ret_val) 1248 goto out; 1249 1250 /* 1251 * Check link status. Wait up to 100 microseconds for link to become 1252 * valid. 1253 */ 1254 ret_val = e1000_phy_has_link_generic(hw, 1255 COPPER_LINK_UP_LIMIT, 1256 10, 1257 &link); 1258 if (ret_val) 1259 goto out; 1260 1261 if (link) { 1262 DEBUGOUT("Valid link established!!!\n"); 1263 /* Config the MAC and PHY after link is up */ 1264 e1000_config_collision_dist_generic(hw); 1265 ret_val = e1000_config_fc_after_link_up_generic(hw); 1266 } else { 1267 DEBUGOUT("Unable to establish link!!!\n"); 1268 } 1269 1270out: 1271 return ret_val; 1272} 1273 1274/** 1275 * e1000_setup_fiber_serdes_link_82575 - Setup link for fiber/serdes 1276 * @hw: pointer to the HW structure 1277 * 1278 * Configures speed and duplex for fiber and serdes links. 1279 **/ 1280static s32 e1000_setup_fiber_serdes_link_82575(struct e1000_hw *hw) 1281{ 1282 u32 reg; 1283 1284 DEBUGFUNC("e1000_setup_fiber_serdes_link_82575"); 1285 1286 /* 1287 * On the 82575, SerDes loopback mode persists until it is 1288 * explicitly turned off or a power cycle is performed. A read to 1289 * the register does not indicate its status. Therefore, we ensure 1290 * loopback mode is disabled during initialization. 1291 */ 1292 E1000_WRITE_REG(hw, E1000_SCTL, E1000_SCTL_DISABLE_SERDES_LOOPBACK); 1293 1294 /* Force link up, set 1gb, set both sw defined pins */ 1295 reg = E1000_READ_REG(hw, E1000_CTRL); 1296 reg |= E1000_CTRL_SLU | 1297 E1000_CTRL_SPD_1000 | 1298 E1000_CTRL_FRCSPD | 1299 E1000_CTRL_SWDPIN0 | 1300 E1000_CTRL_SWDPIN1; 1301 E1000_WRITE_REG(hw, E1000_CTRL, reg); 1302 1303 /* Power on phy for 82576 fiber adapters */ 1304 if (hw->mac.type == e1000_82576) { 1305 reg = E1000_READ_REG(hw, E1000_CTRL_EXT); 1306 reg &= ~E1000_CTRL_EXT_SDP7_DATA; 1307 E1000_WRITE_REG(hw, E1000_CTRL_EXT, reg); 1308 } 1309 1310 /* Set switch control to serdes energy detect */ 1311 reg = E1000_READ_REG(hw, E1000_CONNSW); 1312 reg |= E1000_CONNSW_ENRGSRC; 1313 E1000_WRITE_REG(hw, E1000_CONNSW, reg); 1314 1315 /* 1316 * New SerDes mode allows for forcing speed or autonegotiating speed 1317 * at 1gb. Autoneg should be default set by most drivers. This is the 1318 * mode that will be compatible with older link partners and switches. 1319 * However, both are supported by the hardware and some drivers/tools. 1320 */ 1321 reg = E1000_READ_REG(hw, E1000_PCS_LCTL); 1322 1323 reg &= ~(E1000_PCS_LCTL_AN_ENABLE | E1000_PCS_LCTL_FLV_LINK_UP | 1324 E1000_PCS_LCTL_FSD | E1000_PCS_LCTL_FORCE_LINK); 1325 1326 if (hw->mac.autoneg) { 1327 /* Set PCS register for autoneg */ 1328 reg |= E1000_PCS_LCTL_FSV_1000 | /* Force 1000 */ 1329 E1000_PCS_LCTL_FDV_FULL | /* SerDes Full duplex */ 1330 E1000_PCS_LCTL_AN_ENABLE | /* Enable Autoneg */ 1331 E1000_PCS_LCTL_AN_RESTART; /* Restart autoneg */ 1332 DEBUGOUT1("Configuring Autoneg; PCS_LCTL = 0x%08X\n", reg); 1333 } else { 1334 /* Set PCS register for forced speed */ 1335 reg |= E1000_PCS_LCTL_FLV_LINK_UP | /* Force link up */ 1336 E1000_PCS_LCTL_FSV_1000 | /* Force 1000 */ 1337 E1000_PCS_LCTL_FDV_FULL | /* SerDes Full duplex */ 1338 E1000_PCS_LCTL_FSD | /* Force Speed */ 1339 E1000_PCS_LCTL_FORCE_LINK; /* Force Link */ 1340 DEBUGOUT1("Configuring Forced Link; PCS_LCTL = 0x%08X\n", reg); 1341 } 1342 1343 if (hw->mac.type == e1000_82576) { 1344 reg |= E1000_PCS_LCTL_FORCE_FCTRL; 1345 e1000_force_mac_fc_generic(hw); 1346 } 1347 1348 E1000_WRITE_REG(hw, E1000_PCS_LCTL, reg); 1349 1350 return E1000_SUCCESS; 1351} 1352 1353/** 1354 * e1000_valid_led_default_82575 - Verify a valid default LED config 1355 * @hw: pointer to the HW structure 1356 * @data: pointer to the NVM (EEPROM) 1357 * 1358 * Read the EEPROM for the current default LED configuration. If the 1359 * LED configuration is not valid, set to a valid LED configuration. 1360 **/ 1361static s32 e1000_valid_led_default_82575(struct e1000_hw *hw, u16 *data) 1362{ 1363 s32 ret_val; 1364 1365 DEBUGFUNC("e1000_valid_led_default_82575"); 1366 1367 ret_val = hw->nvm.ops.read(hw, NVM_ID_LED_SETTINGS, 1, data); 1368 if (ret_val) { 1369 DEBUGOUT("NVM Read Error\n"); 1370 goto out; 1371 } 1372 1373 if (*data == ID_LED_RESERVED_0000 || *data == ID_LED_RESERVED_FFFF) { 1374 switch(hw->phy.media_type) { 1375 case e1000_media_type_fiber: 1376 case e1000_media_type_internal_serdes: 1377 *data = ID_LED_DEFAULT_82575_SERDES; 1378 break; 1379 case e1000_media_type_copper: 1380 default: 1381 *data = ID_LED_DEFAULT; 1382 break; 1383 } 1384 } 1385out: 1386 return ret_val; 1387} 1388 1389/** 1390 * e1000_configure_pcs_link_82575 - Configure PCS link 1391 * @hw: pointer to the HW structure 1392 * 1393 * Configure the physical coding sub-layer (PCS) link. The PCS link is 1394 * only used on copper connections where the serialized gigabit media 1395 * independent interface (sgmii) is being used. Configures the link 1396 * for auto-negotiation or forces speed/duplex. 1397 **/ 1398static s32 e1000_configure_pcs_link_82575(struct e1000_hw *hw) 1399{ 1400 struct e1000_mac_info *mac = &hw->mac; 1401 u32 reg = 0; 1402 1403 DEBUGFUNC("e1000_configure_pcs_link_82575"); 1404 1405 if (hw->phy.media_type != e1000_media_type_copper || 1406 !(e1000_sgmii_active_82575(hw))) 1407 goto out; 1408 1409 /* For SGMII, we need to issue a PCS autoneg restart */ 1410 reg = E1000_READ_REG(hw, E1000_PCS_LCTL); 1411 1412 /* AN time out should be disabled for SGMII mode */ 1413 reg &= ~(E1000_PCS_LCTL_AN_TIMEOUT); 1414 1415 if (mac->autoneg) { 1416 /* Make sure forced speed and force link are not set */ 1417 reg &= ~(E1000_PCS_LCTL_FSD | E1000_PCS_LCTL_FORCE_LINK); 1418 1419 /* 1420 * The PHY should be setup prior to calling this function. 1421 * All we need to do is restart autoneg and enable autoneg. 1422 */ 1423 reg |= E1000_PCS_LCTL_AN_RESTART | E1000_PCS_LCTL_AN_ENABLE; 1424 } else { 1425 /* Set PCS register for forced speed */ 1426 1427 /* Turn off bits for full duplex, speed, and autoneg */ 1428 reg &= ~(E1000_PCS_LCTL_FSV_1000 | 1429 E1000_PCS_LCTL_FSV_100 | 1430 E1000_PCS_LCTL_FDV_FULL | 1431 E1000_PCS_LCTL_AN_ENABLE); 1432 1433 /* Check for duplex first */ 1434 if (mac->forced_speed_duplex & E1000_ALL_FULL_DUPLEX) 1435 reg |= E1000_PCS_LCTL_FDV_FULL; 1436 1437 /* Now set speed */ 1438 if (mac->forced_speed_duplex & E1000_ALL_100_SPEED) 1439 reg |= E1000_PCS_LCTL_FSV_100; 1440 1441 /* Force speed and force link */ 1442 reg |= E1000_PCS_LCTL_FSD | 1443 E1000_PCS_LCTL_FORCE_LINK | 1444 E1000_PCS_LCTL_FLV_LINK_UP; 1445 1446 DEBUGOUT1("Wrote 0x%08X to PCS_LCTL to configure forced link\n", 1447 reg); 1448 } 1449 E1000_WRITE_REG(hw, E1000_PCS_LCTL, reg); 1450 1451out: 1452 return E1000_SUCCESS; 1453} 1454 1455/** 1456 * e1000_sgmii_active_82575 - Return sgmii state 1457 * @hw: pointer to the HW structure 1458 * 1459 * 82575 silicon has a serialized gigabit media independent interface (sgmii) 1460 * which can be enabled for use in the embedded applications. Simply 1461 * return the current state of the sgmii interface. 1462 **/ 1463static bool e1000_sgmii_active_82575(struct e1000_hw *hw) 1464{ 1465 struct e1000_dev_spec_82575 *dev_spec; 1466 bool ret_val; 1467 1468 DEBUGFUNC("e1000_sgmii_active_82575"); 1469 1470 if (hw->mac.type != e1000_82575 && hw->mac.type != e1000_82576) { 1471 ret_val = FALSE; 1472 goto out; 1473 } 1474 1475 dev_spec = (struct e1000_dev_spec_82575 *)hw->dev_spec; 1476 1477 ret_val = dev_spec->sgmii_active; 1478 1479out: 1480 return ret_val; 1481} 1482 1483/** 1484 * e1000_translate_register_82576 - Translate the proper register offset 1485 * @reg: e1000 register to be read 1486 * 1487 * Registers in 82576 are located in different offsets than other adapters 1488 * even though they function in the same manner. This function takes in 1489 * the name of the register to read and returns the correct offset for 1490 * 82576 silicon. 1491 **/ 1492u32 e1000_translate_register_82576(u32 reg) 1493{ 1494 /* 1495 * Some of the 82576 registers are located at different 1496 * offsets than they are in older adapters. 1497 * Despite the difference in location, the registers 1498 * function in the same manner. 1499 */ 1500 switch (reg) { 1501 case E1000_TDBAL(0): 1502 reg = 0x0E000; 1503 break; 1504 case E1000_TDBAH(0): 1505 reg = 0x0E004; 1506 break; 1507 case E1000_TDLEN(0): 1508 reg = 0x0E008; 1509 break; 1510 case E1000_TDH(0): 1511 reg = 0x0E010; 1512 break; 1513 case E1000_TDT(0): 1514 reg = 0x0E018; 1515 break; 1516 case E1000_TXDCTL(0): 1517 reg = 0x0E028; 1518 break; 1519 case E1000_RDBAL(0): 1520 reg = 0x0C000; 1521 break; 1522 case E1000_RDBAH(0): 1523 reg = 0x0C004; 1524 break; 1525 case E1000_RDLEN(0): 1526 reg = 0x0C008; 1527 break; 1528 case E1000_RDH(0): 1529 reg = 0x0C010; 1530 break; 1531 case E1000_RDT(0): 1532 reg = 0x0C018; 1533 break; 1534 case E1000_RXDCTL(0): 1535 reg = 0x0C028; 1536 break; 1537 case E1000_SRRCTL(0): 1538 reg = 0x0C00C; 1539 break; 1540 default: 1541 break; 1542 } 1543 1544 return reg; 1545} 1546 1547/** 1548 * e1000_reset_init_script_82575 - Inits HW defaults after reset 1549 * @hw: pointer to the HW structure 1550 * 1551 * Inits recommended HW defaults after a reset when there is no EEPROM 1552 * detected. This is only for the 82575. 1553 **/ 1554static s32 e1000_reset_init_script_82575(struct e1000_hw* hw) 1555{ 1556 DEBUGFUNC("e1000_reset_init_script_82575"); 1557 1558 if (hw->mac.type == e1000_82575) { 1559 DEBUGOUT("Running reset init script for 82575\n"); 1560 /* SerDes configuration via SERDESCTRL */ 1561 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCTL, 0x00, 0x0C); 1562 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCTL, 0x01, 0x78); 1563 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCTL, 0x1B, 0x23); 1564 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCTL, 0x23, 0x15); 1565 1566 /* CCM configuration via CCMCTL register */ 1567 e1000_write_8bit_ctrl_reg_generic(hw, E1000_CCMCTL, 0x14, 0x00); 1568 e1000_write_8bit_ctrl_reg_generic(hw, E1000_CCMCTL, 0x10, 0x00); 1569 1570 /* PCIe lanes configuration */ 1571 e1000_write_8bit_ctrl_reg_generic(hw, E1000_GIOCTL, 0x00, 0xEC); 1572 e1000_write_8bit_ctrl_reg_generic(hw, E1000_GIOCTL, 0x61, 0xDF); 1573 e1000_write_8bit_ctrl_reg_generic(hw, E1000_GIOCTL, 0x34, 0x05); 1574 e1000_write_8bit_ctrl_reg_generic(hw, E1000_GIOCTL, 0x2F, 0x81); 1575 1576 /* PCIe PLL Configuration */ 1577 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCCTL, 0x02, 0x47); 1578 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCCTL, 0x14, 0x00); 1579 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCCTL, 0x10, 0x00); 1580 } 1581 1582 return E1000_SUCCESS; 1583} 1584 1585/** 1586 * e1000_read_mac_addr_82575 - Read device MAC address 1587 * @hw: pointer to the HW structure 1588 **/ 1589static s32 e1000_read_mac_addr_82575(struct e1000_hw *hw) 1590{ 1591 s32 ret_val = E1000_SUCCESS; 1592 1593 DEBUGFUNC("e1000_read_mac_addr_82575"); 1594 if (e1000_check_alt_mac_addr_generic(hw)) 1595 ret_val = e1000_read_mac_addr_generic(hw); 1596 1597 return ret_val; 1598} 1599 1600/** 1601 * e1000_power_down_phy_copper_82575 - Remove link during PHY power down 1602 * @hw: pointer to the HW structure 1603 * 1604 * In the case of a PHY power down to save power, or to turn off link during a 1605 * driver unload, or wake on lan is not enabled, remove the link. 1606 **/ 1607static void e1000_power_down_phy_copper_82575(struct e1000_hw *hw) 1608{ 1609 struct e1000_phy_info *phy = &hw->phy; 1610 struct e1000_mac_info *mac = &hw->mac; 1611 1612 if (!(phy->ops.check_reset_block)) 1613 return; 1614 1615 /* If the management interface is not enabled, then power down */ 1616 if (!(mac->ops.check_mng_mode(hw) || phy->ops.check_reset_block(hw))) 1617 e1000_power_down_phy_copper(hw); 1618 1619 return; 1620} 1621 1622/** 1623 * e1000_remove_device_82575 - Free device specific structure 1624 * @hw: pointer to the HW structure 1625 * 1626 * If a device specific structure was allocated, this function will 1627 * free it after shutting down the serdes interface if available. 1628 **/ 1629void e1000_remove_device_82575(struct e1000_hw *hw) 1630{ 1631 u16 eeprom_data = 0; 1632 1633 /* 1634 * If APM is enabled in the EEPROM then leave the port on for fiber 1635 * serdes adapters. 1636 */ 1637 if (hw->bus.func == 0) 1638 hw->nvm.ops.read(hw, NVM_INIT_CONTROL3_PORT_A, 1, &eeprom_data); 1639 1640 if (!(eeprom_data & E1000_NVM_APME_82575)) 1641 e1000_shutdown_fiber_serdes_link_82575(hw); 1642 1643 e1000_remove_device_generic(hw); 1644} 1645 1646/** 1647 * e1000_clear_hw_cntrs_82575 - Clear device specific hardware counters 1648 * @hw: pointer to the HW structure 1649 * 1650 * Clears the hardware counters by reading the counter registers. 1651 **/ 1652static void e1000_clear_hw_cntrs_82575(struct e1000_hw *hw) 1653{ 1654 volatile u32 temp; 1655 1656 DEBUGFUNC("e1000_clear_hw_cntrs_82575"); 1657 1658 e1000_clear_hw_cntrs_base_generic(hw); 1659 1660 temp = E1000_READ_REG(hw, E1000_PRC64); 1661 temp = E1000_READ_REG(hw, E1000_PRC127); 1662 temp = E1000_READ_REG(hw, E1000_PRC255); 1663 temp = E1000_READ_REG(hw, E1000_PRC511); 1664 temp = E1000_READ_REG(hw, E1000_PRC1023); 1665 temp = E1000_READ_REG(hw, E1000_PRC1522); 1666 temp = E1000_READ_REG(hw, E1000_PTC64); 1667 temp = E1000_READ_REG(hw, E1000_PTC127); 1668 temp = E1000_READ_REG(hw, E1000_PTC255); 1669 temp = E1000_READ_REG(hw, E1000_PTC511); 1670 temp = E1000_READ_REG(hw, E1000_PTC1023); 1671 temp = E1000_READ_REG(hw, E1000_PTC1522); 1672 1673 temp = E1000_READ_REG(hw, E1000_ALGNERRC); 1674 temp = E1000_READ_REG(hw, E1000_RXERRC); 1675 temp = E1000_READ_REG(hw, E1000_TNCRS); 1676 temp = E1000_READ_REG(hw, E1000_CEXTERR); 1677 temp = E1000_READ_REG(hw, E1000_TSCTC); 1678 temp = E1000_READ_REG(hw, E1000_TSCTFC); 1679 1680 temp = E1000_READ_REG(hw, E1000_MGTPRC); 1681 temp = E1000_READ_REG(hw, E1000_MGTPDC); 1682 temp = E1000_READ_REG(hw, E1000_MGTPTC); 1683 1684 temp = E1000_READ_REG(hw, E1000_IAC); 1685 temp = E1000_READ_REG(hw, E1000_ICRXOC); 1686 1687 temp = E1000_READ_REG(hw, E1000_ICRXPTC); 1688 temp = E1000_READ_REG(hw, E1000_ICRXATC); 1689 temp = E1000_READ_REG(hw, E1000_ICTXPTC); 1690 temp = E1000_READ_REG(hw, E1000_ICTXATC); 1691 temp = E1000_READ_REG(hw, E1000_ICTXQEC); 1692 temp = E1000_READ_REG(hw, E1000_ICTXQMTC); 1693 temp = E1000_READ_REG(hw, E1000_ICRXDMTC); 1694 1695 temp = E1000_READ_REG(hw, E1000_CBTMPC); 1696 temp = E1000_READ_REG(hw, E1000_HTDPMC); 1697 temp = E1000_READ_REG(hw, E1000_CBRMPC); 1698 temp = E1000_READ_REG(hw, E1000_RPTHC); 1699 temp = E1000_READ_REG(hw, E1000_HGPTC); 1700 temp = E1000_READ_REG(hw, E1000_HTCBDPC); 1701 temp = E1000_READ_REG(hw, E1000_HGORCL); 1702 temp = E1000_READ_REG(hw, E1000_HGORCH); 1703 temp = E1000_READ_REG(hw, E1000_HGOTCL); 1704 temp = E1000_READ_REG(hw, E1000_HGOTCH); 1705 temp = E1000_READ_REG(hw, E1000_LENERRS); 1706 1707 /* This register should not be read in copper configurations */ 1708 if (hw->phy.media_type == e1000_media_type_internal_serdes) 1709 temp = E1000_READ_REG(hw, E1000_SCVPC); 1710} 1711/** 1712 * e1000_rx_fifo_flush_82575 - Clean rx fifo after RX enable 1713 * @hw: pointer to the HW structure 1714 * 1715 * After rx enable if managability is enabled then there is likely some 1716 * bad data at the start of the fifo and possibly in the DMA fifo. This 1717 * function clears the fifos and flushes any packets that came in as rx was 1718 * being enabled. 1719 **/ 1720void e1000_rx_fifo_flush_82575(struct e1000_hw *hw) 1721{ 1722 u32 rctl, rlpml, rxdctl[4], rfctl, temp_rctl, rx_enabled; 1723 int i, ms_wait; 1724 1725 DEBUGFUNC("e1000_rx_fifo_workaround_82575"); 1726 if (hw->mac.type != e1000_82575 || 1727 !(E1000_READ_REG(hw, E1000_MANC) & E1000_MANC_RCV_TCO_EN)) 1728 return; 1729 1730 /* Disable all RX queues */ 1731 for (i = 0; i < 4; i++) { 1732 rxdctl[i] = E1000_READ_REG(hw, E1000_RXDCTL(i)); 1733 E1000_WRITE_REG(hw, E1000_RXDCTL(i), 1734 rxdctl[i] & ~E1000_RXDCTL_QUEUE_ENABLE); 1735 } 1736 /* Poll all queues to verify they have shut down */ 1737 for (ms_wait = 0; ms_wait < 10; ms_wait++) { 1738 msec_delay(1); 1739 rx_enabled = 0; 1740 for (i = 0; i < 4; i++) 1741 rx_enabled |= E1000_READ_REG(hw, E1000_RXDCTL(i)); 1742 if (!(rx_enabled & E1000_RXDCTL_QUEUE_ENABLE)) 1743 break; 1744 } 1745 1746 if (ms_wait == 10) 1747 DEBUGOUT("Queue disable timed out after 10ms\n"); 1748 1749 /* Clear RLPML, RCTL.SBP, RFCTL.LEF, and set RCTL.LPE so that all 1750 * incoming packets are rejected. Set enable and wait 2ms so that 1751 * any packet that was coming in as RCTL.EN was set is flushed 1752 */ 1753 rfctl = E1000_READ_REG(hw, E1000_RFCTL); 1754 E1000_WRITE_REG(hw, E1000_RFCTL, rfctl & ~E1000_RFCTL_LEF); 1755 1756 rlpml = E1000_READ_REG(hw, E1000_RLPML); 1757 E1000_WRITE_REG(hw, E1000_RLPML, 0); 1758 1759 rctl = E1000_READ_REG(hw, E1000_RCTL); 1760 temp_rctl = rctl & ~(E1000_RCTL_EN | E1000_RCTL_SBP); 1761 temp_rctl |= E1000_RCTL_LPE; 1762 1763 E1000_WRITE_REG(hw, E1000_RCTL, temp_rctl); 1764 E1000_WRITE_REG(hw, E1000_RCTL, temp_rctl | E1000_RCTL_EN); 1765 E1000_WRITE_FLUSH(hw); 1766 msec_delay(2); 1767 1768 /* Enable RX queues that were previously enabled and restore our 1769 * previous state 1770 */ 1771 for (i = 0; i < 4; i++) 1772 E1000_WRITE_REG(hw, E1000_RXDCTL(i), rxdctl[i]); 1773 E1000_WRITE_REG(hw, E1000_RCTL, rctl); 1774 E1000_WRITE_FLUSH(hw); 1775 1776 E1000_WRITE_REG(hw, E1000_RLPML, rlpml); 1777 E1000_WRITE_REG(hw, E1000_RFCTL, rfctl); 1778 1779 /* Flush receive errors generated by workaround */ 1780 E1000_READ_REG(hw, E1000_ROC); 1781 E1000_READ_REG(hw, E1000_RNBC); 1782 E1000_READ_REG(hw, E1000_MPC); 1783} 1784