1 /****************************************************************************** 2 3 Copyright (c) 2001-2010, Intel Corporation 4 All rights reserved. 5 6 Redistribution and use in source and binary forms, with or without 7 modification, are permitted provided that the following conditions are met: 8 9 1. Redistributions of source code must retain the above copyright notice, 10 this list of conditions and the following disclaimer. 11 12 2. Redistributions in binary form must reproduce the above copyright 13 notice, this list of conditions and the following disclaimer in the 14 documentation and/or other materials provided with the distribution. 15 16 3. Neither the name of the Intel Corporation nor the names of its 17 contributors may be used to endorse or promote products derived from 18 this software without specific prior written permission. 19 20 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 24 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 25 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30 POSSIBILITY OF SUCH DAMAGE. 31 32 ******************************************************************************/ 33 /*$FreeBSD$*/ 34 35 /* 36 * 82575EB Gigabit Network Connection 37 * 82575EB Gigabit Backplane Connection 38 * 82575GB Gigabit Network Connection 39 * 82575GB Gigabit Network Connection 40 * 82576 Gigabit Network Connection 41 * 82576 Quad Port Gigabit Mezzanine Adapter 42 */ 43 44 #include "e1000_api.h" 45 46 static s32 e1000_init_phy_params_82575(struct e1000_hw *hw); 47 static s32 e1000_init_nvm_params_82575(struct e1000_hw *hw); 48 static s32 e1000_init_mac_params_82575(struct e1000_hw *hw); 49 static s32 e1000_acquire_phy_82575(struct e1000_hw *hw); 50 static void e1000_release_phy_82575(struct e1000_hw *hw); 51 static s32 e1000_acquire_nvm_82575(struct e1000_hw *hw); 52 static void e1000_release_nvm_82575(struct e1000_hw *hw); 53 static s32 e1000_check_for_link_82575(struct e1000_hw *hw); 54 static s32 e1000_get_cfg_done_82575(struct e1000_hw *hw); 55 static s32 e1000_get_link_up_info_82575(struct e1000_hw *hw, u16 *speed, 56 u16 *duplex); 57 static s32 e1000_init_hw_82575(struct e1000_hw *hw); 58 static s32 e1000_phy_hw_reset_sgmii_82575(struct e1000_hw *hw); 59 static s32 e1000_read_phy_reg_sgmii_82575(struct e1000_hw *hw, u32 offset, 60 u16 *data); 61 static s32 e1000_reset_hw_82575(struct e1000_hw *hw); 62 static s32 e1000_reset_hw_82580(struct e1000_hw *hw); 63 static s32 e1000_read_phy_reg_82580(struct e1000_hw *hw, 64 u32 offset, u16 *data); 65 static s32 e1000_write_phy_reg_82580(struct e1000_hw *hw, 66 u32 offset, u16 data); 67 static s32 e1000_set_d0_lplu_state_82575(struct e1000_hw *hw, 68 bool active); 69 static s32 e1000_setup_copper_link_82575(struct e1000_hw *hw); 70 static s32 e1000_setup_serdes_link_82575(struct e1000_hw *hw); 71 static s32 e1000_valid_led_default_82575(struct e1000_hw *hw, u16 *data); 72 static s32 e1000_write_phy_reg_sgmii_82575(struct e1000_hw *hw, 73 u32 offset, u16 data); 74 static void e1000_clear_hw_cntrs_82575(struct e1000_hw *hw); 75 static s32 e1000_acquire_swfw_sync_82575(struct e1000_hw *hw, u16 mask); 76 static s32 e1000_get_pcs_speed_and_duplex_82575(struct e1000_hw *hw, 77 u16 *speed, u16 *duplex); 78 static s32 e1000_get_phy_id_82575(struct e1000_hw *hw); 79 static void e1000_release_swfw_sync_82575(struct e1000_hw *hw, u16 mask); 80 static bool e1000_sgmii_active_82575(struct e1000_hw *hw); 81 static s32 e1000_reset_init_script_82575(struct e1000_hw *hw); 82 static s32 e1000_read_mac_addr_82575(struct e1000_hw *hw); 83 static void e1000_config_collision_dist_82575(struct e1000_hw *hw); 84 static void e1000_power_down_phy_copper_82575(struct e1000_hw *hw); 85 static void e1000_shutdown_serdes_link_82575(struct e1000_hw *hw); 86 static void e1000_power_up_serdes_link_82575(struct e1000_hw *hw); 87 static s32 e1000_set_pcie_completion_timeout(struct e1000_hw *hw); 88 static s32 e1000_reset_mdicnfg_82580(struct e1000_hw *hw); 89 90 static const u16 e1000_82580_rxpbs_table[] = 91 { 36, 72, 144, 1, 2, 4, 8, 16, 92 35, 70, 140 }; 93 #define E1000_82580_RXPBS_TABLE_SIZE \ 94 (sizeof(e1000_82580_rxpbs_table)/sizeof(u16)) 95 96 97 /** 98 * e1000_sgmii_uses_mdio_82575 - Determine if I2C pins are for external MDIO 99 * @hw: pointer to the HW structure 100 * 101 * Called to determine if the I2C pins are being used for I2C or as an 102 * external MDIO interface since the two options are mutually exclusive. 103 **/ 104 static bool e1000_sgmii_uses_mdio_82575(struct e1000_hw *hw) 105 { 106 u32 reg = 0; 107 bool ext_mdio = FALSE; 108 109 DEBUGFUNC("e1000_sgmii_uses_mdio_82575"); 110 111 switch (hw->mac.type) { 112 case e1000_82575: 113 case e1000_82576: 114 reg = E1000_READ_REG(hw, E1000_MDIC); 115 ext_mdio = !!(reg & E1000_MDIC_DEST); 116 break; 117 case e1000_82580: 118 reg = E1000_READ_REG(hw, E1000_MDICNFG); 119 ext_mdio = !!(reg & E1000_MDICNFG_EXT_MDIO); 120 break; 121 default: 122 break; 123 } 124 return ext_mdio; 125 } 126 127 /** 128 * e1000_init_phy_params_82575 - Init PHY func ptrs. 129 * @hw: pointer to the HW structure 130 **/ 131 static s32 e1000_init_phy_params_82575(struct e1000_hw *hw) 132 { 133 struct e1000_phy_info *phy = &hw->phy; 134 s32 ret_val = E1000_SUCCESS; 135 u32 ctrl_ext; 136 137 DEBUGFUNC("e1000_init_phy_params_82575"); 138 139 if (hw->phy.media_type != e1000_media_type_copper) { 140 phy->type = e1000_phy_none; 141 goto out; 142 } 143 144 phy->ops.power_up = e1000_power_up_phy_copper; 145 phy->ops.power_down = e1000_power_down_phy_copper_82575; 146 147 phy->autoneg_mask = AUTONEG_ADVERTISE_SPEED_DEFAULT; 148 phy->reset_delay_us = 100; 149 150 phy->ops.acquire = e1000_acquire_phy_82575; 151 phy->ops.check_reset_block = e1000_check_reset_block_generic; 152 phy->ops.commit = e1000_phy_sw_reset_generic; 153 phy->ops.get_cfg_done = e1000_get_cfg_done_82575; 154 phy->ops.release = e1000_release_phy_82575; 155 156 ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT); 157 158 if (e1000_sgmii_active_82575(hw)) { 159 phy->ops.reset = e1000_phy_hw_reset_sgmii_82575; 160 ctrl_ext |= E1000_CTRL_I2C_ENA; 161 } else { 162 phy->ops.reset = e1000_phy_hw_reset_generic; 163 ctrl_ext &= ~E1000_CTRL_I2C_ENA; 164 } 165 166 E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext); 167 e1000_reset_mdicnfg_82580(hw); 168 169 if (e1000_sgmii_active_82575(hw) && !e1000_sgmii_uses_mdio_82575(hw)) { 170 phy->ops.read_reg = e1000_read_phy_reg_sgmii_82575; 171 phy->ops.write_reg = e1000_write_phy_reg_sgmii_82575; 172 } else if (hw->mac.type >= e1000_82580) { 173 phy->ops.read_reg = e1000_read_phy_reg_82580; 174 phy->ops.write_reg = e1000_write_phy_reg_82580; 175 } else { 176 phy->ops.read_reg = e1000_read_phy_reg_igp; 177 phy->ops.write_reg = e1000_write_phy_reg_igp; 178 } 179 180 /* Set phy->phy_addr and phy->id. */ 181 ret_val = e1000_get_phy_id_82575(hw); 182 183 /* Verify phy id and set remaining function pointers */ 184 switch (phy->id) { 185 case M88E1111_I_PHY_ID: 186 phy->type = e1000_phy_m88; 187 phy->ops.check_polarity = e1000_check_polarity_m88; 188 phy->ops.get_info = e1000_get_phy_info_m88; 189 phy->ops.get_cable_length = e1000_get_cable_length_m88; 190 phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_m88; 191 break; 192 case IGP03E1000_E_PHY_ID: 193 case IGP04E1000_E_PHY_ID: 194 phy->type = e1000_phy_igp_3; 195 phy->ops.check_polarity = e1000_check_polarity_igp; 196 phy->ops.get_info = e1000_get_phy_info_igp; 197 phy->ops.get_cable_length = e1000_get_cable_length_igp_2; 198 phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_igp; 199 phy->ops.set_d0_lplu_state = e1000_set_d0_lplu_state_82575; 200 phy->ops.set_d3_lplu_state = e1000_set_d3_lplu_state_generic; 201 break; 202 case I82580_I_PHY_ID: 203 phy->type = e1000_phy_82580; 204 phy->ops.check_polarity = e1000_check_polarity_82577; 205 phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_82577; 206 phy->ops.get_cable_length = e1000_get_cable_length_82577; 207 phy->ops.get_info = e1000_get_phy_info_82577; 208 break; 209 default: 210 ret_val = -E1000_ERR_PHY; 211 goto out; 212 } 213 214 out: 215 return ret_val; 216 } 217 218 /** 219 * e1000_init_nvm_params_82575 - Init NVM func ptrs. 220 * @hw: pointer to the HW structure 221 **/ 222 static s32 e1000_init_nvm_params_82575(struct e1000_hw *hw) 223 { 224 struct e1000_nvm_info *nvm = &hw->nvm; 225 u32 eecd = E1000_READ_REG(hw, E1000_EECD); 226 u16 size; 227 228 DEBUGFUNC("e1000_init_nvm_params_82575"); 229 230 nvm->opcode_bits = 8; 231 nvm->delay_usec = 1; 232 switch (nvm->override) { 233 case e1000_nvm_override_spi_large: 234 nvm->page_size = 32; 235 nvm->address_bits = 16; 236 break; 237 case e1000_nvm_override_spi_small: 238 nvm->page_size = 8; 239 nvm->address_bits = 8; 240 break; 241 default: 242 nvm->page_size = eecd & E1000_EECD_ADDR_BITS ? 32 : 8; 243 nvm->address_bits = eecd & E1000_EECD_ADDR_BITS ? 16 : 8; 244 break; 245 } 246 247 nvm->type = e1000_nvm_eeprom_spi; 248 249 size = (u16)((eecd & E1000_EECD_SIZE_EX_MASK) >> 250 E1000_EECD_SIZE_EX_SHIFT); 251 252 /* 253 * Added to a constant, "size" becomes the left-shift value 254 * for setting word_size. 255 */ 256 size += NVM_WORD_SIZE_BASE_SHIFT; 257 258 /* EEPROM access above 16k is unsupported */ 259 if (size > 14) 260 size = 14; 261 nvm->word_size = 1 << size; 262 263 /* Function Pointers */ 264 nvm->ops.acquire = e1000_acquire_nvm_82575; 265 nvm->ops.read = e1000_read_nvm_eerd; 266 nvm->ops.release = e1000_release_nvm_82575; 267 nvm->ops.update = e1000_update_nvm_checksum_generic; 268 nvm->ops.valid_led_default = e1000_valid_led_default_82575; 269 nvm->ops.validate = e1000_validate_nvm_checksum_generic; 270 nvm->ops.write = e1000_write_nvm_spi; 271 272 return E1000_SUCCESS; 273 } 274 275 /** 276 * e1000_init_mac_params_82575 - Init MAC func ptrs. 277 * @hw: pointer to the HW structure 278 **/ 279 static s32 e1000_init_mac_params_82575(struct e1000_hw *hw) 280 { 281 struct e1000_mac_info *mac = &hw->mac; 282 struct e1000_dev_spec_82575 *dev_spec = &hw->dev_spec._82575; 283 u32 ctrl_ext = 0; 284 285 DEBUGFUNC("e1000_init_mac_params_82575"); 286 287 /* Set media type */ 288 /* 289 * The 82575 uses bits 22:23 for link mode. The mode can be changed 290 * based on the EEPROM. We cannot rely upon device ID. There 291 * is no distinguishable difference between fiber and internal 292 * SerDes mode on the 82575. There can be an external PHY attached 293 * on the SGMII interface. For this, we'll set sgmii_active to TRUE. 294 */ 295 hw->phy.media_type = e1000_media_type_copper; 296 dev_spec->sgmii_active = FALSE; 297 298 ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT); 299 switch (ctrl_ext & E1000_CTRL_EXT_LINK_MODE_MASK) { 300 case E1000_CTRL_EXT_LINK_MODE_SGMII: 301 dev_spec->sgmii_active = TRUE; 302 break; 303 case E1000_CTRL_EXT_LINK_MODE_1000BASE_KX: 304 case E1000_CTRL_EXT_LINK_MODE_PCIE_SERDES: 305 hw->phy.media_type = e1000_media_type_internal_serdes; 306 break; 307 default: 308 break; 309 } 310 311 /* Set mta register count */ 312 mac->mta_reg_count = 128; 313 /* Set uta register count */ 314 mac->uta_reg_count = (hw->mac.type == e1000_82575) ? 0 : 128; 315 /* Set rar entry count */ 316 mac->rar_entry_count = E1000_RAR_ENTRIES_82575; 317 if (mac->type == e1000_82576) 318 mac->rar_entry_count = E1000_RAR_ENTRIES_82576; 319 if (mac->type == e1000_82580) 320 mac->rar_entry_count = E1000_RAR_ENTRIES_82580; 321 /* Set if part includes ASF firmware */ 322 mac->asf_firmware_present = TRUE; 323 /* FWSM register */ 324 mac->has_fwsm = TRUE; 325 /* ARC supported; valid only if manageability features are enabled. */ 326 mac->arc_subsystem_valid = 327 (E1000_READ_REG(hw, E1000_FWSM) & E1000_FWSM_MODE_MASK) 328 ? TRUE : FALSE; 329 330 /* Function pointers */ 331 332 /* bus type/speed/width */ 333 mac->ops.get_bus_info = e1000_get_bus_info_pcie_generic; 334 /* reset */ 335 if (mac->type >= e1000_82580) 336 mac->ops.reset_hw = e1000_reset_hw_82580; 337 else 338 mac->ops.reset_hw = e1000_reset_hw_82575; 339 /* hw initialization */ 340 mac->ops.init_hw = e1000_init_hw_82575; 341 /* link setup */ 342 mac->ops.setup_link = e1000_setup_link_generic; 343 /* physical interface link setup */ 344 mac->ops.setup_physical_interface = 345 (hw->phy.media_type == e1000_media_type_copper) 346 ? e1000_setup_copper_link_82575 347 : e1000_setup_serdes_link_82575; 348 /* physical interface shutdown */ 349 mac->ops.shutdown_serdes = e1000_shutdown_serdes_link_82575; 350 /* physical interface power up */ 351 mac->ops.power_up_serdes = e1000_power_up_serdes_link_82575; 352 /* check for link */ 353 mac->ops.check_for_link = e1000_check_for_link_82575; 354 /* receive address register setting */ 355 mac->ops.rar_set = e1000_rar_set_generic; 356 /* read mac address */ 357 mac->ops.read_mac_addr = e1000_read_mac_addr_82575; 358 /* configure collision distance */ 359 mac->ops.config_collision_dist = e1000_config_collision_dist_82575; 360 /* multicast address update */ 361 mac->ops.update_mc_addr_list = e1000_update_mc_addr_list_generic; 362 /* writing VFTA */ 363 mac->ops.write_vfta = e1000_write_vfta_generic; 364 /* clearing VFTA */ 365 mac->ops.clear_vfta = e1000_clear_vfta_generic; 366 /* ID LED init */ 367 mac->ops.id_led_init = e1000_id_led_init_generic; 368 /* blink LED */ 369 mac->ops.blink_led = e1000_blink_led_generic; 370 /* setup LED */ 371 mac->ops.setup_led = e1000_setup_led_generic; 372 /* cleanup LED */ 373 mac->ops.cleanup_led = e1000_cleanup_led_generic; 374 /* turn on/off LED */ 375 mac->ops.led_on = e1000_led_on_generic; 376 mac->ops.led_off = e1000_led_off_generic; 377 /* clear hardware counters */ 378 mac->ops.clear_hw_cntrs = e1000_clear_hw_cntrs_82575; 379 /* link info */ 380 mac->ops.get_link_up_info = e1000_get_link_up_info_82575; 381 382 /* set lan id for port to determine which phy lock to use */ 383 hw->mac.ops.set_lan_id(hw); 384 385 return E1000_SUCCESS; 386 } 387 388 /** 389 * e1000_init_function_pointers_82575 - Init func ptrs. 390 * @hw: pointer to the HW structure 391 * 392 * Called to initialize all function pointers and parameters. 393 **/ 394 void e1000_init_function_pointers_82575(struct e1000_hw *hw) 395 { 396 DEBUGFUNC("e1000_init_function_pointers_82575"); 397 398 hw->mac.ops.init_params = e1000_init_mac_params_82575; 399 hw->nvm.ops.init_params = e1000_init_nvm_params_82575; 400 hw->phy.ops.init_params = e1000_init_phy_params_82575; 401 hw->mbx.ops.init_params = e1000_init_mbx_params_pf; 402 } 403 404 /** 405 * e1000_acquire_phy_82575 - Acquire rights to access PHY 406 * @hw: pointer to the HW structure 407 * 408 * Acquire access rights to the correct PHY. 409 **/ 410 static s32 e1000_acquire_phy_82575(struct e1000_hw *hw) 411 { 412 u16 mask = E1000_SWFW_PHY0_SM; 413 414 DEBUGFUNC("e1000_acquire_phy_82575"); 415 416 if (hw->bus.func == E1000_FUNC_1) 417 mask = E1000_SWFW_PHY1_SM; 418 else if (hw->bus.func == E1000_FUNC_2) 419 mask = E1000_SWFW_PHY2_SM; 420 else if (hw->bus.func == E1000_FUNC_3) 421 mask = E1000_SWFW_PHY3_SM; 422 423 return e1000_acquire_swfw_sync_82575(hw, mask); 424 } 425 426 /** 427 * e1000_release_phy_82575 - Release rights to access PHY 428 * @hw: pointer to the HW structure 429 * 430 * A wrapper to release access rights to the correct PHY. 431 **/ 432 static void e1000_release_phy_82575(struct e1000_hw *hw) 433 { 434 u16 mask = E1000_SWFW_PHY0_SM; 435 436 DEBUGFUNC("e1000_release_phy_82575"); 437 438 if (hw->bus.func == E1000_FUNC_1) 439 mask = E1000_SWFW_PHY1_SM; 440 else if (hw->bus.func == E1000_FUNC_2) 441 mask = E1000_SWFW_PHY2_SM; 442 else if (hw->bus.func == E1000_FUNC_3) 443 mask = E1000_SWFW_PHY3_SM; 444 445 e1000_release_swfw_sync_82575(hw, mask); 446 } 447 448 /** 449 * e1000_read_phy_reg_sgmii_82575 - Read PHY register using sgmii 450 * @hw: pointer to the HW structure 451 * @offset: register offset to be read 452 * @data: pointer to the read data 453 * 454 * Reads the PHY register at offset using the serial gigabit media independent 455 * interface and stores the retrieved information in data. 456 **/ 457 static s32 e1000_read_phy_reg_sgmii_82575(struct e1000_hw *hw, u32 offset, 458 u16 *data) 459 { 460 s32 ret_val = -E1000_ERR_PARAM; 461 462 DEBUGFUNC("e1000_read_phy_reg_sgmii_82575"); 463 464 if (offset > E1000_MAX_SGMII_PHY_REG_ADDR) { 465 DEBUGOUT1("PHY Address %u is out of range\n", offset); 466 goto out; 467 } 468 469 ret_val = hw->phy.ops.acquire(hw); 470 if (ret_val) 471 goto out; 472 473 ret_val = e1000_read_phy_reg_i2c(hw, offset, data); 474 475 hw->phy.ops.release(hw); 476 477 out: 478 return ret_val; 479 } 480 481 /** 482 * e1000_write_phy_reg_sgmii_82575 - Write PHY register using sgmii 483 * @hw: pointer to the HW structure 484 * @offset: register offset to write to 485 * @data: data to write at register offset 486 * 487 * Writes the data to PHY register at the offset using the serial gigabit 488 * media independent interface. 489 **/ 490 static s32 e1000_write_phy_reg_sgmii_82575(struct e1000_hw *hw, u32 offset, 491 u16 data) 492 { 493 s32 ret_val = -E1000_ERR_PARAM; 494 495 DEBUGFUNC("e1000_write_phy_reg_sgmii_82575"); 496 497 if (offset > E1000_MAX_SGMII_PHY_REG_ADDR) { 498 DEBUGOUT1("PHY Address %d is out of range\n", offset); 499 goto out; 500 } 501 502 ret_val = hw->phy.ops.acquire(hw); 503 if (ret_val) 504 goto out; 505 506 ret_val = e1000_write_phy_reg_i2c(hw, offset, data); 507 508 hw->phy.ops.release(hw); 509 510 out: 511 return ret_val; 512 } 513 514 /** 515 * e1000_get_phy_id_82575 - Retrieve PHY addr and id 516 * @hw: pointer to the HW structure 517 * 518 * Retrieves the PHY address and ID for both PHY's which do and do not use 519 * sgmi interface. 520 **/ 521 static s32 e1000_get_phy_id_82575(struct e1000_hw *hw) 522 { 523 struct e1000_phy_info *phy = &hw->phy; 524 s32 ret_val = E1000_SUCCESS; 525 u16 phy_id; 526 u32 ctrl_ext; 527 u32 mdic; 528 529 DEBUGFUNC("e1000_get_phy_id_82575"); 530 531 /* 532 * For SGMII PHYs, we try the list of possible addresses until 533 * we find one that works. For non-SGMII PHYs 534 * (e.g. integrated copper PHYs), an address of 1 should 535 * work. The result of this function should mean phy->phy_addr 536 * and phy->id are set correctly. 537 */ 538 if (!e1000_sgmii_active_82575(hw)) { 539 phy->addr = 1; 540 ret_val = e1000_get_phy_id(hw); 541 goto out; 542 } 543 544 if (e1000_sgmii_uses_mdio_82575(hw)) { 545 switch (hw->mac.type) { 546 case e1000_82575: 547 case e1000_82576: 548 mdic = E1000_READ_REG(hw, E1000_MDIC); 549 mdic &= E1000_MDIC_PHY_MASK; 550 phy->addr = mdic >> E1000_MDIC_PHY_SHIFT; 551 break; 552 case e1000_82580: 553 mdic = E1000_READ_REG(hw, E1000_MDICNFG); 554 mdic &= E1000_MDICNFG_PHY_MASK; 555 phy->addr = mdic >> E1000_MDICNFG_PHY_SHIFT; 556 break; 557 default: 558 ret_val = -E1000_ERR_PHY; 559 goto out; 560 break; 561 } 562 ret_val = e1000_get_phy_id(hw); 563 goto out; 564 } 565 566 /* Power on sgmii phy if it is disabled */ 567 ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT); 568 E1000_WRITE_REG(hw, E1000_CTRL_EXT, 569 ctrl_ext & ~E1000_CTRL_EXT_SDP3_DATA); 570 E1000_WRITE_FLUSH(hw); 571 msec_delay(300); 572 573 /* 574 * The address field in the I2CCMD register is 3 bits and 0 is invalid. 575 * Therefore, we need to test 1-7 576 */ 577 for (phy->addr = 1; phy->addr < 8; phy->addr++) { 578 ret_val = e1000_read_phy_reg_sgmii_82575(hw, PHY_ID1, &phy_id); 579 if (ret_val == E1000_SUCCESS) { 580 DEBUGOUT2("Vendor ID 0x%08X read at address %u\n", 581 phy_id, 582 phy->addr); 583 /* 584 * At the time of this writing, The M88 part is 585 * the only supported SGMII PHY product. 586 */ 587 if (phy_id == M88_VENDOR) 588 break; 589 } else { 590 DEBUGOUT1("PHY address %u was unreadable\n", 591 phy->addr); 592 } 593 } 594 595 /* A valid PHY type couldn't be found. */ 596 if (phy->addr == 8) { 597 phy->addr = 0; 598 ret_val = -E1000_ERR_PHY; 599 } else { 600 ret_val = e1000_get_phy_id(hw); 601 } 602 603 /* restore previous sfp cage power state */ 604 E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext); 605 606 out: 607 return ret_val; 608 } 609 610 /** 611 * e1000_phy_hw_reset_sgmii_82575 - Performs a PHY reset 612 * @hw: pointer to the HW structure 613 * 614 * Resets the PHY using the serial gigabit media independent interface. 615 **/ 616 static s32 e1000_phy_hw_reset_sgmii_82575(struct e1000_hw *hw) 617 { 618 s32 ret_val = E1000_SUCCESS; 619 620 DEBUGFUNC("e1000_phy_hw_reset_sgmii_82575"); 621 622 /* 623 * This isn't a TRUE "hard" reset, but is the only reset 624 * available to us at this time. 625 */ 626 627 DEBUGOUT("Soft resetting SGMII attached PHY...\n"); 628 629 if (!(hw->phy.ops.write_reg)) 630 goto out; 631 632 /* 633 * SFP documentation requires the following to configure the SPF module 634 * to work on SGMII. No further documentation is given. 635 */ 636 ret_val = hw->phy.ops.write_reg(hw, 0x1B, 0x8084); 637 if (ret_val) 638 goto out; 639 640 ret_val = hw->phy.ops.commit(hw); 641 642 out: 643 return ret_val; 644 } 645 646 /** 647 * e1000_set_d0_lplu_state_82575 - Set Low Power Linkup D0 state 648 * @hw: pointer to the HW structure 649 * @active: TRUE to enable LPLU, FALSE to disable 650 * 651 * Sets the LPLU D0 state according to the active flag. When 652 * activating LPLU this function also disables smart speed 653 * and vice versa. LPLU will not be activated unless the 654 * device autonegotiation advertisement meets standards of 655 * either 10 or 10/100 or 10/100/1000 at all duplexes. 656 * This is a function pointer entry point only called by 657 * PHY setup routines. 658 **/ 659 static s32 e1000_set_d0_lplu_state_82575(struct e1000_hw *hw, bool active) 660 { 661 struct e1000_phy_info *phy = &hw->phy; 662 s32 ret_val = E1000_SUCCESS; 663 u16 data; 664 665 DEBUGFUNC("e1000_set_d0_lplu_state_82575"); 666 667 if (!(hw->phy.ops.read_reg)) 668 goto out; 669 670 ret_val = phy->ops.read_reg(hw, IGP02E1000_PHY_POWER_MGMT, &data); 671 if (ret_val) 672 goto out; 673 674 if (active) { 675 data |= IGP02E1000_PM_D0_LPLU; 676 ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT, 677 data); 678 if (ret_val) 679 goto out; 680 681 /* When LPLU is enabled, we should disable SmartSpeed */ 682 ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CONFIG, 683 &data); 684 data &= ~IGP01E1000_PSCFR_SMART_SPEED; 685 ret_val = phy->ops.write_reg(hw, IGP01E1000_PHY_PORT_CONFIG, 686 data); 687 if (ret_val) 688 goto out; 689 } else { 690 data &= ~IGP02E1000_PM_D0_LPLU; 691 ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT, 692 data); 693 /* 694 * LPLU and SmartSpeed are mutually exclusive. LPLU is used 695 * during Dx states where the power conservation is most 696 * important. During driver activity we should enable 697 * SmartSpeed, so performance is maintained. 698 */ 699 if (phy->smart_speed == e1000_smart_speed_on) { 700 ret_val = phy->ops.read_reg(hw, 701 IGP01E1000_PHY_PORT_CONFIG, 702 &data); 703 if (ret_val) 704 goto out; 705 706 data |= IGP01E1000_PSCFR_SMART_SPEED; 707 ret_val = phy->ops.write_reg(hw, 708 IGP01E1000_PHY_PORT_CONFIG, 709 data); 710 if (ret_val) 711 goto out; 712 } else if (phy->smart_speed == e1000_smart_speed_off) { 713 ret_val = phy->ops.read_reg(hw, 714 IGP01E1000_PHY_PORT_CONFIG, 715 &data); 716 if (ret_val) 717 goto out; 718 719 data &= ~IGP01E1000_PSCFR_SMART_SPEED; 720 ret_val = phy->ops.write_reg(hw, 721 IGP01E1000_PHY_PORT_CONFIG, 722 data); 723 if (ret_val) 724 goto out; 725 } 726 } 727 728 out: 729 return ret_val; 730 } 731 732 /** 733 * e1000_acquire_nvm_82575 - Request for access to EEPROM 734 * @hw: pointer to the HW structure 735 * 736 * Acquire the necessary semaphores for exclusive access to the EEPROM. 737 * Set the EEPROM access request bit and wait for EEPROM access grant bit. 738 * Return successful if access grant bit set, else clear the request for 739 * EEPROM access and return -E1000_ERR_NVM (-1). 740 **/ 741 static s32 e1000_acquire_nvm_82575(struct e1000_hw *hw) 742 { 743 s32 ret_val; 744 745 DEBUGFUNC("e1000_acquire_nvm_82575"); 746 747 ret_val = e1000_acquire_swfw_sync_82575(hw, E1000_SWFW_EEP_SM); 748 if (ret_val) 749 goto out; 750 751 ret_val = e1000_acquire_nvm_generic(hw); 752 753 if (ret_val) 754 e1000_release_swfw_sync_82575(hw, E1000_SWFW_EEP_SM); 755 756 out: 757 return ret_val; 758 } 759 760 /** 761 * e1000_release_nvm_82575 - Release exclusive access to EEPROM 762 * @hw: pointer to the HW structure 763 * 764 * Stop any current commands to the EEPROM and clear the EEPROM request bit, 765 * then release the semaphores acquired. 766 **/ 767 static void e1000_release_nvm_82575(struct e1000_hw *hw) 768 { 769 DEBUGFUNC("e1000_release_nvm_82575"); 770 771 e1000_release_nvm_generic(hw); 772 e1000_release_swfw_sync_82575(hw, E1000_SWFW_EEP_SM); 773 } 774 775 /** 776 * e1000_acquire_swfw_sync_82575 - Acquire SW/FW semaphore 777 * @hw: pointer to the HW structure 778 * @mask: specifies which semaphore to acquire 779 * 780 * Acquire the SW/FW semaphore to access the PHY or NVM. The mask 781 * will also specify which port we're acquiring the lock for. 782 **/ 783 static s32 e1000_acquire_swfw_sync_82575(struct e1000_hw *hw, u16 mask) 784 { 785 u32 swfw_sync; 786 u32 swmask = mask; 787 u32 fwmask = mask << 16; 788 s32 ret_val = E1000_SUCCESS; 789 s32 i = 0, timeout = 200; /* FIXME: find real value to use here */ 790 791 DEBUGFUNC("e1000_acquire_swfw_sync_82575"); 792 793 while (i < timeout) { 794 if (e1000_get_hw_semaphore_generic(hw)) { 795 ret_val = -E1000_ERR_SWFW_SYNC; 796 goto out; 797 } 798 799 swfw_sync = E1000_READ_REG(hw, E1000_SW_FW_SYNC); 800 if (!(swfw_sync & (fwmask | swmask))) 801 break; 802 803 /* 804 * Firmware currently using resource (fwmask) 805 * or other software thread using resource (swmask) 806 */ 807 e1000_put_hw_semaphore_generic(hw); 808 msec_delay_irq(5); 809 i++; 810 } 811 812 if (i == timeout) { 813 DEBUGOUT("Driver can't access resource, SW_FW_SYNC timeout.\n"); 814 ret_val = -E1000_ERR_SWFW_SYNC; 815 goto out; 816 } 817 818 swfw_sync |= swmask; 819 E1000_WRITE_REG(hw, E1000_SW_FW_SYNC, swfw_sync); 820 821 e1000_put_hw_semaphore_generic(hw); 822 823 out: 824 return ret_val; 825 } 826 827 /** 828 * e1000_release_swfw_sync_82575 - Release SW/FW semaphore 829 * @hw: pointer to the HW structure 830 * @mask: specifies which semaphore to acquire 831 * 832 * Release the SW/FW semaphore used to access the PHY or NVM. The mask 833 * will also specify which port we're releasing the lock for. 834 **/ 835 static void e1000_release_swfw_sync_82575(struct e1000_hw *hw, u16 mask) 836 { 837 u32 swfw_sync; 838 839 DEBUGFUNC("e1000_release_swfw_sync_82575"); 840 841 while (e1000_get_hw_semaphore_generic(hw) != E1000_SUCCESS); 842 /* Empty */ 843 844 swfw_sync = E1000_READ_REG(hw, E1000_SW_FW_SYNC); 845 swfw_sync &= ~mask; 846 E1000_WRITE_REG(hw, E1000_SW_FW_SYNC, swfw_sync); 847 848 e1000_put_hw_semaphore_generic(hw); 849 } 850 851 /** 852 * e1000_get_cfg_done_82575 - Read config done bit 853 * @hw: pointer to the HW structure 854 * 855 * Read the management control register for the config done bit for 856 * completion status. NOTE: silicon which is EEPROM-less will fail trying 857 * to read the config done bit, so an error is *ONLY* logged and returns 858 * E1000_SUCCESS. If we were to return with error, EEPROM-less silicon 859 * would not be able to be reset or change link. 860 **/ 861 static s32 e1000_get_cfg_done_82575(struct e1000_hw *hw) 862 { 863 s32 timeout = PHY_CFG_TIMEOUT; 864 s32 ret_val = E1000_SUCCESS; 865 u32 mask = E1000_NVM_CFG_DONE_PORT_0; 866 867 DEBUGFUNC("e1000_get_cfg_done_82575"); 868 869 if (hw->bus.func == E1000_FUNC_1) 870 mask = E1000_NVM_CFG_DONE_PORT_1; 871 else if (hw->bus.func == E1000_FUNC_2) 872 mask = E1000_NVM_CFG_DONE_PORT_2; 873 else if (hw->bus.func == E1000_FUNC_3) 874 mask = E1000_NVM_CFG_DONE_PORT_3; 875 while (timeout) { 876 if (E1000_READ_REG(hw, E1000_EEMNGCTL) & mask) 877 break; 878 msec_delay(1); 879 timeout--; 880 } 881 if (!timeout) 882 DEBUGOUT("MNG configuration cycle has not completed.\n"); 883 884 /* If EEPROM is not marked present, init the PHY manually */ 885 if (((E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_PRES) == 0) && 886 (hw->phy.type == e1000_phy_igp_3)) 887 e1000_phy_init_script_igp3(hw); 888 889 return ret_val; 890 } 891 892 /** 893 * e1000_get_link_up_info_82575 - Get link speed/duplex info 894 * @hw: pointer to the HW structure 895 * @speed: stores the current speed 896 * @duplex: stores the current duplex 897 * 898 * This is a wrapper function, if using the serial gigabit media independent 899 * interface, use PCS to retrieve the link speed and duplex information. 900 * Otherwise, use the generic function to get the link speed and duplex info. 901 **/ 902 static s32 e1000_get_link_up_info_82575(struct e1000_hw *hw, u16 *speed, 903 u16 *duplex) 904 { 905 s32 ret_val; 906 907 DEBUGFUNC("e1000_get_link_up_info_82575"); 908 909 if (hw->phy.media_type != e1000_media_type_copper) 910 ret_val = e1000_get_pcs_speed_and_duplex_82575(hw, speed, 911 duplex); 912 else 913 ret_val = e1000_get_speed_and_duplex_copper_generic(hw, speed, 914 duplex); 915 916 return ret_val; 917 } 918 919 /** 920 * e1000_check_for_link_82575 - Check for link 921 * @hw: pointer to the HW structure 922 * 923 * If sgmii is enabled, then use the pcs register to determine link, otherwise 924 * use the generic interface for determining link. 925 **/ 926 static s32 e1000_check_for_link_82575(struct e1000_hw *hw) 927 { 928 s32 ret_val; 929 u16 speed, duplex; 930 931 DEBUGFUNC("e1000_check_for_link_82575"); 932 933 if (hw->phy.media_type != e1000_media_type_copper) { 934 ret_val = e1000_get_pcs_speed_and_duplex_82575(hw, &speed, 935 &duplex); 936 /* 937 * Use this flag to determine if link needs to be checked or 938 * not. If we have link clear the flag so that we do not 939 * continue to check for link. 940 */ 941 hw->mac.get_link_status = !hw->mac.serdes_has_link; 942 } else { 943 ret_val = e1000_check_for_copper_link_generic(hw); 944 } 945 946 return ret_val; 947 } 948 949 /** 950 * e1000_power_up_serdes_link_82575 - Power up the serdes link after shutdown 951 * @hw: pointer to the HW structure 952 **/ 953 static void e1000_power_up_serdes_link_82575(struct e1000_hw *hw) 954 { 955 u32 reg; 956 957 DEBUGFUNC("e1000_power_up_serdes_link_82575"); 958 959 if ((hw->phy.media_type != e1000_media_type_internal_serdes) && 960 !e1000_sgmii_active_82575(hw)) 961 return; 962 963 /* Enable PCS to turn on link */ 964 reg = E1000_READ_REG(hw, E1000_PCS_CFG0); 965 reg |= E1000_PCS_CFG_PCS_EN; 966 E1000_WRITE_REG(hw, E1000_PCS_CFG0, reg); 967 968 /* Power up the laser */ 969 reg = E1000_READ_REG(hw, E1000_CTRL_EXT); 970 reg &= ~E1000_CTRL_EXT_SDP3_DATA; 971 E1000_WRITE_REG(hw, E1000_CTRL_EXT, reg); 972 973 /* flush the write to verify completion */ 974 E1000_WRITE_FLUSH(hw); 975 msec_delay(1); 976 } 977 978 /** 979 * e1000_get_pcs_speed_and_duplex_82575 - Retrieve current speed/duplex 980 * @hw: pointer to the HW structure 981 * @speed: stores the current speed 982 * @duplex: stores the current duplex 983 * 984 * Using the physical coding sub-layer (PCS), retrieve the current speed and 985 * duplex, then store the values in the pointers provided. 986 **/ 987 static s32 e1000_get_pcs_speed_and_duplex_82575(struct e1000_hw *hw, 988 u16 *speed, u16 *duplex) 989 { 990 struct e1000_mac_info *mac = &hw->mac; 991 u32 pcs; 992 993 DEBUGFUNC("e1000_get_pcs_speed_and_duplex_82575"); 994 995 /* Set up defaults for the return values of this function */ 996 mac->serdes_has_link = FALSE; 997 *speed = 0; 998 *duplex = 0; 999 1000 /* 1001 * Read the PCS Status register for link state. For non-copper mode, 1002 * the status register is not accurate. The PCS status register is 1003 * used instead. 1004 */ 1005 pcs = E1000_READ_REG(hw, E1000_PCS_LSTAT); 1006 1007 /* 1008 * The link up bit determines when link is up on autoneg. The sync ok 1009 * gets set once both sides sync up and agree upon link. Stable link 1010 * can be determined by checking for both link up and link sync ok 1011 */ 1012 if ((pcs & E1000_PCS_LSTS_LINK_OK) && (pcs & E1000_PCS_LSTS_SYNK_OK)) { 1013 mac->serdes_has_link = TRUE; 1014 1015 /* Detect and store PCS speed */ 1016 if (pcs & E1000_PCS_LSTS_SPEED_1000) { 1017 *speed = SPEED_1000; 1018 } else if (pcs & E1000_PCS_LSTS_SPEED_100) { 1019 *speed = SPEED_100; 1020 } else { 1021 *speed = SPEED_10; 1022 } 1023 1024 /* Detect and store PCS duplex */ 1025 if (pcs & E1000_PCS_LSTS_DUPLEX_FULL) { 1026 *duplex = FULL_DUPLEX; 1027 } else { 1028 *duplex = HALF_DUPLEX; 1029 } 1030 } 1031 1032 return E1000_SUCCESS; 1033 } 1034 1035 /** 1036 * e1000_shutdown_serdes_link_82575 - Remove link during power down 1037 * @hw: pointer to the HW structure 1038 * 1039 * In the case of serdes shut down sfp and PCS on driver unload 1040 * when management pass thru is not enabled. 1041 **/ 1042 void e1000_shutdown_serdes_link_82575(struct e1000_hw *hw) 1043 { 1044 u32 reg; 1045 1046 DEBUGFUNC("e1000_shutdown_serdes_link_82575"); 1047 1048 if ((hw->phy.media_type != e1000_media_type_internal_serdes) && 1049 !e1000_sgmii_active_82575(hw)) 1050 return; 1051 1052 if (!e1000_enable_mng_pass_thru(hw)) { 1053 /* Disable PCS to turn off link */ 1054 reg = E1000_READ_REG(hw, E1000_PCS_CFG0); 1055 reg &= ~E1000_PCS_CFG_PCS_EN; 1056 E1000_WRITE_REG(hw, E1000_PCS_CFG0, reg); 1057 1058 /* shutdown the laser */ 1059 reg = E1000_READ_REG(hw, E1000_CTRL_EXT); 1060 reg |= E1000_CTRL_EXT_SDP3_DATA; 1061 E1000_WRITE_REG(hw, E1000_CTRL_EXT, reg); 1062 1063 /* flush the write to verify completion */ 1064 E1000_WRITE_FLUSH(hw); 1065 msec_delay(1); 1066 } 1067 1068 return; 1069 } 1070 1071 /** 1072 * e1000_reset_hw_82575 - Reset hardware 1073 * @hw: pointer to the HW structure 1074 * 1075 * This resets the hardware into a known state. 1076 **/ 1077 static s32 e1000_reset_hw_82575(struct e1000_hw *hw) 1078 { 1079 u32 ctrl, icr; 1080 s32 ret_val; 1081 1082 DEBUGFUNC("e1000_reset_hw_82575"); 1083 1084 /* 1085 * Prevent the PCI-E bus from sticking if there is no TLP connection 1086 * on the last TLP read/write transaction when MAC is reset. 1087 */ 1088 ret_val = e1000_disable_pcie_master_generic(hw); 1089 if (ret_val) { 1090 DEBUGOUT("PCI-E Master disable polling has failed.\n"); 1091 } 1092 1093 /* set the completion timeout for interface */ 1094 ret_val = e1000_set_pcie_completion_timeout(hw); 1095 if (ret_val) { 1096 DEBUGOUT("PCI-E Set completion timeout has failed.\n"); 1097 } 1098 1099 DEBUGOUT("Masking off all interrupts\n"); 1100 E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff); 1101 1102 E1000_WRITE_REG(hw, E1000_RCTL, 0); 1103 E1000_WRITE_REG(hw, E1000_TCTL, E1000_TCTL_PSP); 1104 E1000_WRITE_FLUSH(hw); 1105 1106 msec_delay(10); 1107 1108 ctrl = E1000_READ_REG(hw, E1000_CTRL); 1109 1110 DEBUGOUT("Issuing a global reset to MAC\n"); 1111 E1000_WRITE_REG(hw, E1000_CTRL, ctrl | E1000_CTRL_RST); 1112 1113 ret_val = e1000_get_auto_rd_done_generic(hw); 1114 if (ret_val) { 1115 /* 1116 * When auto config read does not complete, do not 1117 * return with an error. This can happen in situations 1118 * where there is no eeprom and prevents getting link. 1119 */ 1120 DEBUGOUT("Auto Read Done did not complete\n"); 1121 } 1122 1123 /* If EEPROM is not present, run manual init scripts */ 1124 if ((E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_PRES) == 0) 1125 e1000_reset_init_script_82575(hw); 1126 1127 /* Clear any pending interrupt events. */ 1128 E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff); 1129 icr = E1000_READ_REG(hw, E1000_ICR); 1130 1131 /* Install any alternate MAC address into RAR0 */ 1132 ret_val = e1000_check_alt_mac_addr_generic(hw); 1133 1134 return ret_val; 1135 } 1136 1137 /** 1138 * e1000_init_hw_82575 - Initialize hardware 1139 * @hw: pointer to the HW structure 1140 * 1141 * This inits the hardware readying it for operation. 1142 **/ 1143 static s32 e1000_init_hw_82575(struct e1000_hw *hw) 1144 { 1145 struct e1000_mac_info *mac = &hw->mac; 1146 s32 ret_val; 1147 u16 i, rar_count = mac->rar_entry_count; 1148 1149 DEBUGFUNC("e1000_init_hw_82575"); 1150 1151 /* Initialize identification LED */ 1152 ret_val = mac->ops.id_led_init(hw); 1153 if (ret_val) { 1154 DEBUGOUT("Error initializing identification LED\n"); 1155 /* This is not fatal and we should not stop init due to this */ 1156 } 1157 1158 /* Disabling VLAN filtering */ 1159 DEBUGOUT("Initializing the IEEE VLAN\n"); 1160 mac->ops.clear_vfta(hw); 1161 1162 /* Setup the receive address */ 1163 e1000_init_rx_addrs_generic(hw, rar_count); 1164 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 /* Zero out the Unicast HASH table */ 1171 DEBUGOUT("Zeroing the UTA\n"); 1172 for (i = 0; i < mac->uta_reg_count; i++) 1173 E1000_WRITE_REG_ARRAY(hw, E1000_UTA, i, 0); 1174 1175 /* Setup link and flow control */ 1176 ret_val = mac->ops.setup_link(hw); 1177 1178 /* 1179 * Clear all of the statistics registers (clear on read). It is 1180 * important that we do this after we have tried to establish link 1181 * because the symbol error count will increment wildly if there 1182 * is no link. 1183 */ 1184 e1000_clear_hw_cntrs_82575(hw); 1185 1186 return ret_val; 1187 } 1188 1189 /** 1190 * e1000_setup_copper_link_82575 - Configure copper link settings 1191 * @hw: pointer to the HW structure 1192 * 1193 * Configures the link for auto-neg or forced speed and duplex. Then we check 1194 * for link, once link is established calls to configure collision distance 1195 * and flow control are called. 1196 **/ 1197 static s32 e1000_setup_copper_link_82575(struct e1000_hw *hw) 1198 { 1199 u32 ctrl; 1200 s32 ret_val; 1201 1202 DEBUGFUNC("e1000_setup_copper_link_82575"); 1203 1204 ctrl = E1000_READ_REG(hw, E1000_CTRL); 1205 ctrl |= E1000_CTRL_SLU; 1206 ctrl &= ~(E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX); 1207 E1000_WRITE_REG(hw, E1000_CTRL, ctrl); 1208 1209 ret_val = e1000_setup_serdes_link_82575(hw); 1210 if (ret_val) 1211 goto out; 1212 1213 if (e1000_sgmii_active_82575(hw) && !hw->phy.reset_disable) { 1214 /* allow time for SFP cage time to power up phy */ 1215 msec_delay(300); 1216 1217 ret_val = hw->phy.ops.reset(hw); 1218 if (ret_val) { 1219 DEBUGOUT("Error resetting the PHY.\n"); 1220 goto out; 1221 } 1222 } 1223 switch (hw->phy.type) { 1224 case e1000_phy_m88: 1225 ret_val = e1000_copper_link_setup_m88(hw); 1226 break; 1227 case e1000_phy_igp_3: 1228 ret_val = e1000_copper_link_setup_igp(hw); 1229 break; 1230 case e1000_phy_82580: 1231 ret_val = e1000_copper_link_setup_82577(hw); 1232 break; 1233 default: 1234 ret_val = -E1000_ERR_PHY; 1235 break; 1236 } 1237 1238 if (ret_val) 1239 goto out; 1240 1241 ret_val = e1000_setup_copper_link_generic(hw); 1242 out: 1243 return ret_val; 1244 } 1245 1246 /** 1247 * e1000_setup_serdes_link_82575 - Setup link for serdes 1248 * @hw: pointer to the HW structure 1249 * 1250 * Configure the physical coding sub-layer (PCS) link. The PCS link is 1251 * used on copper connections where the serialized gigabit media independent 1252 * interface (sgmii), or serdes fiber is being used. Configures the link 1253 * for auto-negotiation or forces speed/duplex. 1254 **/ 1255 static s32 e1000_setup_serdes_link_82575(struct e1000_hw *hw) 1256 { 1257 u32 ctrl_ext, ctrl_reg, reg; 1258 bool pcs_autoneg; 1259 1260 DEBUGFUNC("e1000_setup_serdes_link_82575"); 1261 1262 if ((hw->phy.media_type != e1000_media_type_internal_serdes) && 1263 !e1000_sgmii_active_82575(hw)) 1264 return E1000_SUCCESS; 1265 1266 /* 1267 * On the 82575, SerDes loopback mode persists until it is 1268 * explicitly turned off or a power cycle is performed. A read to 1269 * the register does not indicate its status. Therefore, we ensure 1270 * loopback mode is disabled during initialization. 1271 */ 1272 E1000_WRITE_REG(hw, E1000_SCTL, E1000_SCTL_DISABLE_SERDES_LOOPBACK); 1273 1274 /* power on the sfp cage if present */ 1275 ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT); 1276 ctrl_ext &= ~E1000_CTRL_EXT_SDP3_DATA; 1277 E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext); 1278 1279 ctrl_reg = E1000_READ_REG(hw, E1000_CTRL); 1280 ctrl_reg |= E1000_CTRL_SLU; 1281 1282 /* set both sw defined pins on 82575/82576*/ 1283 if (hw->mac.type == e1000_82575 || hw->mac.type == e1000_82576) 1284 ctrl_reg |= E1000_CTRL_SWDPIN0 | E1000_CTRL_SWDPIN1; 1285 1286 reg = E1000_READ_REG(hw, E1000_PCS_LCTL); 1287 1288 /* default pcs_autoneg to the same setting as mac autoneg */ 1289 pcs_autoneg = hw->mac.autoneg; 1290 1291 switch (ctrl_ext & E1000_CTRL_EXT_LINK_MODE_MASK) { 1292 case E1000_CTRL_EXT_LINK_MODE_SGMII: 1293 /* sgmii mode lets the phy handle forcing speed/duplex */ 1294 pcs_autoneg = TRUE; 1295 /* autoneg time out should be disabled for SGMII mode */ 1296 reg &= ~(E1000_PCS_LCTL_AN_TIMEOUT); 1297 break; 1298 case E1000_CTRL_EXT_LINK_MODE_1000BASE_KX: 1299 /* disable PCS autoneg and support parallel detect only */ 1300 pcs_autoneg = FALSE; 1301 /* fall through to default case */ 1302 default: 1303 /* 1304 * non-SGMII modes only supports a speed of 1000/Full for the 1305 * link so it is best to just force the MAC and let the pcs 1306 * link either autoneg or be forced to 1000/Full 1307 */ 1308 ctrl_reg |= E1000_CTRL_SPD_1000 | E1000_CTRL_FRCSPD | 1309 E1000_CTRL_FD | E1000_CTRL_FRCDPX; 1310 1311 /* set speed of 1000/Full if speed/duplex is forced */ 1312 reg |= E1000_PCS_LCTL_FSV_1000 | E1000_PCS_LCTL_FDV_FULL; 1313 break; 1314 } 1315 1316 E1000_WRITE_REG(hw, E1000_CTRL, ctrl_reg); 1317 1318 /* 1319 * New SerDes mode allows for forcing speed or autonegotiating speed 1320 * at 1gb. Autoneg should be default set by most drivers. This is the 1321 * mode that will be compatible with older link partners and switches. 1322 * However, both are supported by the hardware and some drivers/tools. 1323 */ 1324 reg &= ~(E1000_PCS_LCTL_AN_ENABLE | E1000_PCS_LCTL_FLV_LINK_UP | 1325 E1000_PCS_LCTL_FSD | E1000_PCS_LCTL_FORCE_LINK); 1326 1327 /* 1328 * We force flow control to prevent the CTRL register values from being 1329 * overwritten by the autonegotiated flow control values 1330 */ 1331 reg |= E1000_PCS_LCTL_FORCE_FCTRL; 1332 1333 if (pcs_autoneg) { 1334 /* Set PCS register for autoneg */ 1335 reg |= E1000_PCS_LCTL_AN_ENABLE | /* Enable Autoneg */ 1336 E1000_PCS_LCTL_AN_RESTART; /* Restart autoneg */ 1337 DEBUGOUT1("Configuring Autoneg:PCS_LCTL=0x%08X\n", reg); 1338 } else { 1339 /* Set PCS register for forced link */ 1340 reg |= E1000_PCS_LCTL_FSD; /* Force Speed */ 1341 DEBUGOUT1("Configuring Forced Link:PCS_LCTL=0x%08X\n", reg); 1342 } 1343 1344 E1000_WRITE_REG(hw, E1000_PCS_LCTL, reg); 1345 1346 if (!e1000_sgmii_active_82575(hw)) 1347 e1000_force_mac_fc_generic(hw); 1348 1349 return E1000_SUCCESS; 1350 } 1351 1352 /** 1353 * e1000_valid_led_default_82575 - Verify a valid default LED config 1354 * @hw: pointer to the HW structure 1355 * @data: pointer to the NVM (EEPROM) 1356 * 1357 * Read the EEPROM for the current default LED configuration. If the 1358 * LED configuration is not valid, set to a valid LED configuration. 1359 **/ 1360 static s32 e1000_valid_led_default_82575(struct e1000_hw *hw, u16 *data) 1361 { 1362 s32 ret_val; 1363 1364 DEBUGFUNC("e1000_valid_led_default_82575"); 1365 1366 ret_val = hw->nvm.ops.read(hw, NVM_ID_LED_SETTINGS, 1, data); 1367 if (ret_val) { 1368 DEBUGOUT("NVM Read Error\n"); 1369 goto out; 1370 } 1371 1372 if (*data == ID_LED_RESERVED_0000 || *data == ID_LED_RESERVED_FFFF) { 1373 switch(hw->phy.media_type) { 1374 case e1000_media_type_internal_serdes: 1375 *data = ID_LED_DEFAULT_82575_SERDES; 1376 break; 1377 case e1000_media_type_copper: 1378 default: 1379 *data = ID_LED_DEFAULT; 1380 break; 1381 } 1382 } 1383 out: 1384 return ret_val; 1385 } 1386 1387 /** 1388 * e1000_sgmii_active_82575 - Return sgmii state 1389 * @hw: pointer to the HW structure 1390 * 1391 * 82575 silicon has a serialized gigabit media independent interface (sgmii) 1392 * which can be enabled for use in the embedded applications. Simply 1393 * return the current state of the sgmii interface. 1394 **/ 1395 static bool e1000_sgmii_active_82575(struct e1000_hw *hw) 1396 { 1397 struct e1000_dev_spec_82575 *dev_spec = &hw->dev_spec._82575; 1398 return dev_spec->sgmii_active; 1399 } 1400 1401 /** 1402 * e1000_reset_init_script_82575 - Inits HW defaults after reset 1403 * @hw: pointer to the HW structure 1404 * 1405 * Inits recommended HW defaults after a reset when there is no EEPROM 1406 * detected. This is only for the 82575. 1407 **/ 1408 static s32 e1000_reset_init_script_82575(struct e1000_hw* hw) 1409 { 1410 DEBUGFUNC("e1000_reset_init_script_82575"); 1411 1412 if (hw->mac.type == e1000_82575) { 1413 DEBUGOUT("Running reset init script for 82575\n"); 1414 /* SerDes configuration via SERDESCTRL */ 1415 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCTL, 0x00, 0x0C); 1416 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCTL, 0x01, 0x78); 1417 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCTL, 0x1B, 0x23); 1418 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCTL, 0x23, 0x15); 1419 1420 /* CCM configuration via CCMCTL register */ 1421 e1000_write_8bit_ctrl_reg_generic(hw, E1000_CCMCTL, 0x14, 0x00); 1422 e1000_write_8bit_ctrl_reg_generic(hw, E1000_CCMCTL, 0x10, 0x00); 1423 1424 /* PCIe lanes configuration */ 1425 e1000_write_8bit_ctrl_reg_generic(hw, E1000_GIOCTL, 0x00, 0xEC); 1426 e1000_write_8bit_ctrl_reg_generic(hw, E1000_GIOCTL, 0x61, 0xDF); 1427 e1000_write_8bit_ctrl_reg_generic(hw, E1000_GIOCTL, 0x34, 0x05); 1428 e1000_write_8bit_ctrl_reg_generic(hw, E1000_GIOCTL, 0x2F, 0x81); 1429 1430 /* PCIe PLL Configuration */ 1431 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCCTL, 0x02, 0x47); 1432 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCCTL, 0x14, 0x00); 1433 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCCTL, 0x10, 0x00); 1434 } 1435 1436 return E1000_SUCCESS; 1437 } 1438 1439 /** 1440 * e1000_read_mac_addr_82575 - Read device MAC address 1441 * @hw: pointer to the HW structure 1442 **/ 1443 static s32 e1000_read_mac_addr_82575(struct e1000_hw *hw) 1444 { 1445 s32 ret_val = E1000_SUCCESS; 1446 1447 DEBUGFUNC("e1000_read_mac_addr_82575"); 1448 1449 /* 1450 * If there's an alternate MAC address place it in RAR0 1451 * so that it will override the Si installed default perm 1452 * address. 1453 */ 1454 ret_val = e1000_check_alt_mac_addr_generic(hw); 1455 if (ret_val) 1456 goto out; 1457 1458 ret_val = e1000_read_mac_addr_generic(hw); 1459 1460 out: 1461 return ret_val; 1462 } 1463 1464 /** 1465 * e1000_config_collision_dist_82575 - Configure collision distance 1466 * @hw: pointer to the HW structure 1467 * 1468 * Configures the collision distance to the default value and is used 1469 * during link setup. 1470 **/ 1471 static void e1000_config_collision_dist_82575(struct e1000_hw *hw) 1472 { 1473 u32 tctl_ext; 1474 1475 DEBUGFUNC("e1000_config_collision_dist_82575"); 1476 1477 tctl_ext = E1000_READ_REG(hw, E1000_TCTL_EXT); 1478 1479 tctl_ext &= ~E1000_TCTL_EXT_COLD; 1480 tctl_ext |= E1000_COLLISION_DISTANCE << E1000_TCTL_EXT_COLD_SHIFT; 1481 1482 E1000_WRITE_REG(hw, E1000_TCTL_EXT, tctl_ext); 1483 E1000_WRITE_FLUSH(hw); 1484 } 1485 1486 /** 1487 * e1000_power_down_phy_copper_82575 - Remove link during PHY power down 1488 * @hw: pointer to the HW structure 1489 * 1490 * In the case of a PHY power down to save power, or to turn off link during a 1491 * driver unload, or wake on lan is not enabled, remove the link. 1492 **/ 1493 static void e1000_power_down_phy_copper_82575(struct e1000_hw *hw) 1494 { 1495 struct e1000_phy_info *phy = &hw->phy; 1496 1497 if (!(phy->ops.check_reset_block)) 1498 return; 1499 1500 /* If the management interface is not enabled, then power down */ 1501 if (!(e1000_enable_mng_pass_thru(hw) || phy->ops.check_reset_block(hw))) 1502 e1000_power_down_phy_copper(hw); 1503 1504 return; 1505 } 1506 1507 /** 1508 * e1000_clear_hw_cntrs_82575 - Clear device specific hardware counters 1509 * @hw: pointer to the HW structure 1510 * 1511 * Clears the hardware counters by reading the counter registers. 1512 **/ 1513 static void e1000_clear_hw_cntrs_82575(struct e1000_hw *hw) 1514 { 1515 DEBUGFUNC("e1000_clear_hw_cntrs_82575"); 1516 1517 e1000_clear_hw_cntrs_base_generic(hw); 1518 1519 E1000_READ_REG(hw, E1000_PRC64); 1520 E1000_READ_REG(hw, E1000_PRC127); 1521 E1000_READ_REG(hw, E1000_PRC255); 1522 E1000_READ_REG(hw, E1000_PRC511); 1523 E1000_READ_REG(hw, E1000_PRC1023); 1524 E1000_READ_REG(hw, E1000_PRC1522); 1525 E1000_READ_REG(hw, E1000_PTC64); 1526 E1000_READ_REG(hw, E1000_PTC127); 1527 E1000_READ_REG(hw, E1000_PTC255); 1528 E1000_READ_REG(hw, E1000_PTC511); 1529 E1000_READ_REG(hw, E1000_PTC1023); 1530 E1000_READ_REG(hw, E1000_PTC1522); 1531 1532 E1000_READ_REG(hw, E1000_ALGNERRC); 1533 E1000_READ_REG(hw, E1000_RXERRC); 1534 E1000_READ_REG(hw, E1000_TNCRS); 1535 E1000_READ_REG(hw, E1000_CEXTERR); 1536 E1000_READ_REG(hw, E1000_TSCTC); 1537 E1000_READ_REG(hw, E1000_TSCTFC); 1538 1539 E1000_READ_REG(hw, E1000_MGTPRC); 1540 E1000_READ_REG(hw, E1000_MGTPDC); 1541 E1000_READ_REG(hw, E1000_MGTPTC); 1542 1543 E1000_READ_REG(hw, E1000_IAC); 1544 E1000_READ_REG(hw, E1000_ICRXOC); 1545 1546 E1000_READ_REG(hw, E1000_ICRXPTC); 1547 E1000_READ_REG(hw, E1000_ICRXATC); 1548 E1000_READ_REG(hw, E1000_ICTXPTC); 1549 E1000_READ_REG(hw, E1000_ICTXATC); 1550 E1000_READ_REG(hw, E1000_ICTXQEC); 1551 E1000_READ_REG(hw, E1000_ICTXQMTC); 1552 E1000_READ_REG(hw, E1000_ICRXDMTC); 1553 1554 E1000_READ_REG(hw, E1000_CBTMPC); 1555 E1000_READ_REG(hw, E1000_HTDPMC); 1556 E1000_READ_REG(hw, E1000_CBRMPC); 1557 E1000_READ_REG(hw, E1000_RPTHC); 1558 E1000_READ_REG(hw, E1000_HGPTC); 1559 E1000_READ_REG(hw, E1000_HTCBDPC); 1560 E1000_READ_REG(hw, E1000_HGORCL); 1561 E1000_READ_REG(hw, E1000_HGORCH); 1562 E1000_READ_REG(hw, E1000_HGOTCL); 1563 E1000_READ_REG(hw, E1000_HGOTCH); 1564 E1000_READ_REG(hw, E1000_LENERRS); 1565 1566 /* This register should not be read in copper configurations */ 1567 if ((hw->phy.media_type == e1000_media_type_internal_serdes) || 1568 e1000_sgmii_active_82575(hw)) 1569 E1000_READ_REG(hw, E1000_SCVPC); 1570 } 1571 1572 /** 1573 * e1000_rx_fifo_flush_82575 - Clean rx fifo after RX enable 1574 * @hw: pointer to the HW structure 1575 * 1576 * After rx enable if managability is enabled then there is likely some 1577 * bad data at the start of the fifo and possibly in the DMA fifo. This 1578 * function clears the fifos and flushes any packets that came in as rx was 1579 * being enabled. 1580 **/ 1581 void e1000_rx_fifo_flush_82575(struct e1000_hw *hw) 1582 { 1583 u32 rctl, rlpml, rxdctl[4], rfctl, temp_rctl, rx_enabled; 1584 int i, ms_wait; 1585 1586 DEBUGFUNC("e1000_rx_fifo_workaround_82575"); 1587 if (hw->mac.type != e1000_82575 || 1588 !(E1000_READ_REG(hw, E1000_MANC) & E1000_MANC_RCV_TCO_EN)) 1589 return; 1590 1591 /* Disable all RX queues */ 1592 for (i = 0; i < 4; i++) { 1593 rxdctl[i] = E1000_READ_REG(hw, E1000_RXDCTL(i)); 1594 E1000_WRITE_REG(hw, E1000_RXDCTL(i), 1595 rxdctl[i] & ~E1000_RXDCTL_QUEUE_ENABLE); 1596 } 1597 /* Poll all queues to verify they have shut down */ 1598 for (ms_wait = 0; ms_wait < 10; ms_wait++) { 1599 msec_delay(1); 1600 rx_enabled = 0; 1601 for (i = 0; i < 4; i++) 1602 rx_enabled |= E1000_READ_REG(hw, E1000_RXDCTL(i)); 1603 if (!(rx_enabled & E1000_RXDCTL_QUEUE_ENABLE)) 1604 break; 1605 } 1606 1607 if (ms_wait == 10) 1608 DEBUGOUT("Queue disable timed out after 10ms\n"); 1609 1610 /* Clear RLPML, RCTL.SBP, RFCTL.LEF, and set RCTL.LPE so that all 1611 * incoming packets are rejected. Set enable and wait 2ms so that 1612 * any packet that was coming in as RCTL.EN was set is flushed 1613 */ 1614 rfctl = E1000_READ_REG(hw, E1000_RFCTL); 1615 E1000_WRITE_REG(hw, E1000_RFCTL, rfctl & ~E1000_RFCTL_LEF); 1616 1617 rlpml = E1000_READ_REG(hw, E1000_RLPML); 1618 E1000_WRITE_REG(hw, E1000_RLPML, 0); 1619 1620 rctl = E1000_READ_REG(hw, E1000_RCTL); 1621 temp_rctl = rctl & ~(E1000_RCTL_EN | E1000_RCTL_SBP); 1622 temp_rctl |= E1000_RCTL_LPE; 1623 1624 E1000_WRITE_REG(hw, E1000_RCTL, temp_rctl); 1625 E1000_WRITE_REG(hw, E1000_RCTL, temp_rctl | E1000_RCTL_EN); 1626 E1000_WRITE_FLUSH(hw); 1627 msec_delay(2); 1628 1629 /* Enable RX queues that were previously enabled and restore our 1630 * previous state 1631 */ 1632 for (i = 0; i < 4; i++) 1633 E1000_WRITE_REG(hw, E1000_RXDCTL(i), rxdctl[i]); 1634 E1000_WRITE_REG(hw, E1000_RCTL, rctl); 1635 E1000_WRITE_FLUSH(hw); 1636 1637 E1000_WRITE_REG(hw, E1000_RLPML, rlpml); 1638 E1000_WRITE_REG(hw, E1000_RFCTL, rfctl); 1639 1640 /* Flush receive errors generated by workaround */ 1641 E1000_READ_REG(hw, E1000_ROC); 1642 E1000_READ_REG(hw, E1000_RNBC); 1643 E1000_READ_REG(hw, E1000_MPC); 1644 } 1645 1646 /** 1647 * e1000_set_pcie_completion_timeout - set pci-e completion timeout 1648 * @hw: pointer to the HW structure 1649 * 1650 * The defaults for 82575 and 82576 should be in the range of 50us to 50ms, 1651 * however the hardware default for these parts is 500us to 1ms which is less 1652 * than the 10ms recommended by the pci-e spec. To address this we need to 1653 * increase the value to either 10ms to 200ms for capability version 1 config, 1654 * or 16ms to 55ms for version 2. 1655 **/ 1656 static s32 e1000_set_pcie_completion_timeout(struct e1000_hw *hw) 1657 { 1658 u32 gcr = E1000_READ_REG(hw, E1000_GCR); 1659 s32 ret_val = E1000_SUCCESS; 1660 u16 pcie_devctl2; 1661 1662 /* only take action if timeout value is defaulted to 0 */ 1663 if (gcr & E1000_GCR_CMPL_TMOUT_MASK) 1664 goto out; 1665 1666 /* 1667 * if capababilities version is type 1 we can write the 1668 * timeout of 10ms to 200ms through the GCR register 1669 */ 1670 if (!(gcr & E1000_GCR_CAP_VER2)) { 1671 gcr |= E1000_GCR_CMPL_TMOUT_10ms; 1672 goto out; 1673 } 1674 1675 /* 1676 * for version 2 capabilities we need to write the config space 1677 * directly in order to set the completion timeout value for 1678 * 16ms to 55ms 1679 */ 1680 ret_val = e1000_read_pcie_cap_reg(hw, PCIE_DEVICE_CONTROL2, 1681 &pcie_devctl2); 1682 if (ret_val) 1683 goto out; 1684 1685 pcie_devctl2 |= PCIE_DEVICE_CONTROL2_16ms; 1686 1687 ret_val = e1000_write_pcie_cap_reg(hw, PCIE_DEVICE_CONTROL2, 1688 &pcie_devctl2); 1689 out: 1690 /* disable completion timeout resend */ 1691 gcr &= ~E1000_GCR_CMPL_TMOUT_RESEND; 1692 1693 E1000_WRITE_REG(hw, E1000_GCR, gcr); 1694 return ret_val; 1695 } 1696 1697 1698 /** 1699 * e1000_vmdq_set_anti_spoofing_pf - enable or disable anti-spoofing 1700 * @hw: pointer to the hardware struct 1701 * @enable: state to enter, either enabled or disabled 1702 * @pf: Physical Function pool - do not set anti-spoofing for the PF 1703 * 1704 * enables/disables L2 switch anti-spoofing functionality. 1705 **/ 1706 void e1000_vmdq_set_anti_spoofing_pf(struct e1000_hw *hw, bool enable, int pf) 1707 { 1708 u32 dtxswc; 1709 1710 switch (hw->mac.type) { 1711 case e1000_82576: 1712 dtxswc = E1000_READ_REG(hw, E1000_DTXSWC); 1713 if (enable) { 1714 dtxswc |= (E1000_DTXSWC_MAC_SPOOF_MASK | 1715 E1000_DTXSWC_VLAN_SPOOF_MASK); 1716 /* The PF can spoof - it has to in order to 1717 * support emulation mode NICs */ 1718 dtxswc ^= (1 << pf | 1 << (pf + MAX_NUM_VFS)); 1719 } else { 1720 dtxswc &= ~(E1000_DTXSWC_MAC_SPOOF_MASK | 1721 E1000_DTXSWC_VLAN_SPOOF_MASK); 1722 } 1723 E1000_WRITE_REG(hw, E1000_DTXSWC, dtxswc); 1724 break; 1725 default: 1726 break; 1727 } 1728 } 1729 1730 /** 1731 * e1000_vmdq_set_loopback_pf - enable or disable vmdq loopback 1732 * @hw: pointer to the hardware struct 1733 * @enable: state to enter, either enabled or disabled 1734 * 1735 * enables/disables L2 switch loopback functionality. 1736 **/ 1737 void e1000_vmdq_set_loopback_pf(struct e1000_hw *hw, bool enable) 1738 { 1739 u32 dtxswc; 1740 1741 switch (hw->mac.type) { 1742 case e1000_82576: 1743 dtxswc = E1000_READ_REG(hw, E1000_DTXSWC); 1744 if (enable) 1745 dtxswc |= E1000_DTXSWC_VMDQ_LOOPBACK_EN; 1746 else 1747 dtxswc &= ~E1000_DTXSWC_VMDQ_LOOPBACK_EN; 1748 E1000_WRITE_REG(hw, E1000_DTXSWC, dtxswc); 1749 break; 1750 default: 1751 /* Currently no other hardware supports loopback */ 1752 break; 1753 } 1754 1755 1756 } 1757 1758 /** 1759 * e1000_vmdq_set_replication_pf - enable or disable vmdq replication 1760 * @hw: pointer to the hardware struct 1761 * @enable: state to enter, either enabled or disabled 1762 * 1763 * enables/disables replication of packets across multiple pools. 1764 **/ 1765 void e1000_vmdq_set_replication_pf(struct e1000_hw *hw, bool enable) 1766 { 1767 u32 vt_ctl = E1000_READ_REG(hw, E1000_VT_CTL); 1768 1769 if (enable) 1770 vt_ctl |= E1000_VT_CTL_VM_REPL_EN; 1771 else 1772 vt_ctl &= ~E1000_VT_CTL_VM_REPL_EN; 1773 1774 E1000_WRITE_REG(hw, E1000_VT_CTL, vt_ctl); 1775 } 1776 1777 /** 1778 * e1000_read_phy_reg_82580 - Read 82580 MDI control register 1779 * @hw: pointer to the HW structure 1780 * @offset: register offset to be read 1781 * @data: pointer to the read data 1782 * 1783 * Reads the MDI control register in the PHY at offset and stores the 1784 * information read to data. 1785 **/ 1786 static s32 e1000_read_phy_reg_82580(struct e1000_hw *hw, u32 offset, u16 *data) 1787 { 1788 s32 ret_val; 1789 1790 DEBUGFUNC("e1000_read_phy_reg_82580"); 1791 1792 ret_val = hw->phy.ops.acquire(hw); 1793 if (ret_val) 1794 goto out; 1795 1796 ret_val = e1000_read_phy_reg_mdic(hw, offset, data); 1797 1798 hw->phy.ops.release(hw); 1799 1800 out: 1801 return ret_val; 1802 } 1803 1804 /** 1805 * e1000_write_phy_reg_82580 - Write 82580 MDI control register 1806 * @hw: pointer to the HW structure 1807 * @offset: register offset to write to 1808 * @data: data to write to register at offset 1809 * 1810 * Writes data to MDI control register in the PHY at offset. 1811 **/ 1812 static s32 e1000_write_phy_reg_82580(struct e1000_hw *hw, u32 offset, u16 data) 1813 { 1814 s32 ret_val; 1815 1816 DEBUGFUNC("e1000_write_phy_reg_82580"); 1817 1818 ret_val = hw->phy.ops.acquire(hw); 1819 if (ret_val) 1820 goto out; 1821 1822 ret_val = e1000_write_phy_reg_mdic(hw, offset, data); 1823 1824 hw->phy.ops.release(hw); 1825 1826 out: 1827 return ret_val; 1828 } 1829 1830 /** 1831 * e1000_reset_mdicnfg_82580 - Reset MDICNFG destination and com_mdio bits 1832 * @hw: pointer to the HW structure 1833 * 1834 * This resets the the MDICNFG.Destination and MDICNFG.Com_MDIO bits based on 1835 * the values found in the EEPROM. This addresses an issue in which these 1836 * bits are not restored from EEPROM after reset. 1837 **/ 1838 static s32 e1000_reset_mdicnfg_82580(struct e1000_hw *hw) 1839 { 1840 s32 ret_val = E1000_SUCCESS; 1841 u32 mdicnfg; 1842 u16 nvm_data; 1843 1844 DEBUGFUNC("e1000_reset_mdicnfg_82580"); 1845 1846 if (hw->mac.type != e1000_82580) 1847 goto out; 1848 if (!e1000_sgmii_active_82575(hw)) 1849 goto out; 1850 1851 ret_val = hw->nvm.ops.read(hw, NVM_INIT_CONTROL3_PORT_A + 1852 NVM_82580_LAN_FUNC_OFFSET(hw->bus.func), 1, 1853 &nvm_data); 1854 if (ret_val) { 1855 DEBUGOUT("NVM Read Error\n"); 1856 goto out; 1857 } 1858 1859 mdicnfg = E1000_READ_REG(hw, E1000_MDICNFG); 1860 if (nvm_data & NVM_WORD24_EXT_MDIO) 1861 mdicnfg |= E1000_MDICNFG_EXT_MDIO; 1862 if (nvm_data & NVM_WORD24_COM_MDIO) 1863 mdicnfg |= E1000_MDICNFG_COM_MDIO; 1864 E1000_WRITE_REG(hw, E1000_MDICNFG, mdicnfg); 1865 out: 1866 return ret_val; 1867 } 1868 1869 /** 1870 * e1000_reset_hw_82580 - Reset hardware 1871 * @hw: pointer to the HW structure 1872 * 1873 * This resets function or entire device (all ports, etc.) 1874 * to a known state. 1875 **/ 1876 static s32 e1000_reset_hw_82580(struct e1000_hw *hw) 1877 { 1878 s32 ret_val = E1000_SUCCESS; 1879 /* BH SW mailbox bit in SW_FW_SYNC */ 1880 u16 swmbsw_mask = E1000_SW_SYNCH_MB; 1881 u32 ctrl, icr; 1882 bool global_device_reset = hw->dev_spec._82575.global_device_reset; 1883 1884 DEBUGFUNC("e1000_reset_hw_82580"); 1885 1886 hw->dev_spec._82575.global_device_reset = FALSE; 1887 1888 /* Get current control state. */ 1889 ctrl = E1000_READ_REG(hw, E1000_CTRL); 1890 1891 /* 1892 * Prevent the PCI-E bus from sticking if there is no TLP connection 1893 * on the last TLP read/write transaction when MAC is reset. 1894 */ 1895 ret_val = e1000_disable_pcie_master_generic(hw); 1896 if (ret_val) 1897 DEBUGOUT("PCI-E Master disable polling has failed.\n"); 1898 1899 DEBUGOUT("Masking off all interrupts\n"); 1900 E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff); 1901 E1000_WRITE_REG(hw, E1000_RCTL, 0); 1902 E1000_WRITE_REG(hw, E1000_TCTL, E1000_TCTL_PSP); 1903 E1000_WRITE_FLUSH(hw); 1904 1905 msec_delay(10); 1906 1907 /* Determine whether or not a global dev reset is requested */ 1908 if (global_device_reset && 1909 e1000_acquire_swfw_sync_82575(hw, swmbsw_mask)) 1910 global_device_reset = FALSE; 1911 1912 if (global_device_reset && 1913 !(E1000_READ_REG(hw, E1000_STATUS) & E1000_STAT_DEV_RST_SET)) 1914 ctrl |= E1000_CTRL_DEV_RST; 1915 else 1916 ctrl |= E1000_CTRL_RST; 1917 1918 E1000_WRITE_REG(hw, E1000_CTRL, ctrl); 1919 1920 /* Add delay to insure DEV_RST has time to complete */ 1921 if (global_device_reset) 1922 msec_delay(5); 1923 1924 ret_val = e1000_get_auto_rd_done_generic(hw); 1925 if (ret_val) { 1926 /* 1927 * When auto config read does not complete, do not 1928 * return with an error. This can happen in situations 1929 * where there is no eeprom and prevents getting link. 1930 */ 1931 DEBUGOUT("Auto Read Done did not complete\n"); 1932 } 1933 1934 /* If EEPROM is not present, run manual init scripts */ 1935 if ((E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_PRES) == 0) 1936 e1000_reset_init_script_82575(hw); 1937 1938 /* clear global device reset status bit */ 1939 E1000_WRITE_REG(hw, E1000_STATUS, E1000_STAT_DEV_RST_SET); 1940 1941 /* Clear any pending interrupt events. */ 1942 E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff); 1943 icr = E1000_READ_REG(hw, E1000_ICR); 1944 1945 ret_val = e1000_reset_mdicnfg_82580(hw); 1946 if (ret_val) 1947 DEBUGOUT("Could not reset MDICNFG based on EEPROM\n"); 1948 1949 /* Install any alternate MAC address into RAR0 */ 1950 ret_val = e1000_check_alt_mac_addr_generic(hw); 1951 1952 /* Release semaphore */ 1953 if (global_device_reset) 1954 e1000_release_swfw_sync_82575(hw, swmbsw_mask); 1955 1956 return ret_val; 1957 } 1958 1959 /** 1960 * e1000_rxpbs_adjust_82580 - adjust RXPBS value to reflect actual RX PBA size 1961 * @data: data received by reading RXPBS register 1962 * 1963 * The 82580 uses a table based approach for packet buffer allocation sizes. 1964 * This function converts the retrieved value into the correct table value 1965 * 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 1966 * 0x0 36 72 144 1 2 4 8 16 1967 * 0x8 35 70 140 rsv rsv rsv rsv rsv 1968 */ 1969 u16 e1000_rxpbs_adjust_82580(u32 data) 1970 { 1971 u16 ret_val = 0; 1972 1973 if (data < E1000_82580_RXPBS_TABLE_SIZE) 1974 ret_val = e1000_82580_rxpbs_table[data]; 1975 1976 return ret_val; 1977 } 1978