1 /****************************************************************************** 2 SPDX-License-Identifier: BSD-3-Clause 3 4 Copyright (c) 2001-2020, Intel Corporation 5 All rights reserved. 6 7 Redistribution and use in source and binary forms, with or without 8 modification, are permitted provided that the following conditions are met: 9 10 1. Redistributions of source code must retain the above copyright notice, 11 this list of conditions and the following disclaimer. 12 13 2. Redistributions in binary form must reproduce the above copyright 14 notice, this list of conditions and the following disclaimer in the 15 documentation and/or other materials provided with the distribution. 16 17 3. Neither the name of the Intel Corporation nor the names of its 18 contributors may be used to endorse or promote products derived from 19 this software without specific prior written permission. 20 21 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 22 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 25 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 26 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 27 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 28 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 30 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 31 POSSIBILITY OF SUCH DAMAGE. 32 33 ******************************************************************************/ 34 35 /* 36 * 82575EB Gigabit Network Connection 37 * 82575EB Gigabit Backplane Connection 38 * 82575GB Gigabit Network Connection 39 * 82576 Gigabit Network Connection 40 * 82576 Quad Port Gigabit Mezzanine Adapter 41 * 82580 Gigabit Network Connection 42 * I350 Gigabit Network Connection 43 */ 44 45 #include "e1000_api.h" 46 #include "e1000_i210.h" 47 48 static s32 e1000_init_phy_params_82575(struct e1000_hw *hw); 49 static s32 e1000_init_mac_params_82575(struct e1000_hw *hw); 50 static s32 e1000_acquire_nvm_82575(struct e1000_hw *hw); 51 static void e1000_release_nvm_82575(struct e1000_hw *hw); 52 static s32 e1000_check_for_link_82575(struct e1000_hw *hw); 53 static s32 e1000_check_for_link_media_swap(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_phy_hw_reset_sgmii_82575(struct e1000_hw *hw); 58 static s32 e1000_read_phy_reg_sgmii_82575(struct e1000_hw *hw, u32 offset, 59 u16 *data); 60 static s32 e1000_reset_hw_82575(struct e1000_hw *hw); 61 static s32 e1000_init_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_82580(struct e1000_hw *hw, 68 bool active); 69 static s32 e1000_set_d3_lplu_state_82580(struct e1000_hw *hw, 70 bool active); 71 static s32 e1000_set_d0_lplu_state_82575(struct e1000_hw *hw, 72 bool active); 73 static s32 e1000_setup_copper_link_82575(struct e1000_hw *hw); 74 static s32 e1000_setup_serdes_link_82575(struct e1000_hw *hw); 75 static s32 e1000_get_media_type_82575(struct e1000_hw *hw); 76 static s32 e1000_set_sfp_media_type_82575(struct e1000_hw *hw); 77 static s32 e1000_valid_led_default_82575(struct e1000_hw *hw, u16 *data); 78 static s32 e1000_write_phy_reg_sgmii_82575(struct e1000_hw *hw, 79 u32 offset, u16 data); 80 static void e1000_clear_hw_cntrs_82575(struct e1000_hw *hw); 81 static s32 e1000_get_pcs_speed_and_duplex_82575(struct e1000_hw *hw, 82 u16 *speed, u16 *duplex); 83 static s32 e1000_get_phy_id_82575(struct e1000_hw *hw); 84 static bool e1000_sgmii_active_82575(struct e1000_hw *hw); 85 static s32 e1000_read_mac_addr_82575(struct e1000_hw *hw); 86 static void e1000_config_collision_dist_82575(struct e1000_hw *hw); 87 static void e1000_shutdown_serdes_link_82575(struct e1000_hw *hw); 88 static void e1000_power_up_serdes_link_82575(struct e1000_hw *hw); 89 static s32 e1000_set_pcie_completion_timeout(struct e1000_hw *hw); 90 static s32 e1000_reset_mdicnfg_82580(struct e1000_hw *hw); 91 static s32 e1000_validate_nvm_checksum_82580(struct e1000_hw *hw); 92 static s32 e1000_update_nvm_checksum_82580(struct e1000_hw *hw); 93 static s32 e1000_update_nvm_checksum_with_offset(struct e1000_hw *hw, 94 u16 offset); 95 static s32 e1000_validate_nvm_checksum_with_offset(struct e1000_hw *hw, 96 u16 offset); 97 static s32 e1000_validate_nvm_checksum_i350(struct e1000_hw *hw); 98 static s32 e1000_update_nvm_checksum_i350(struct e1000_hw *hw); 99 static void e1000_clear_vfta_i350(struct e1000_hw *hw); 100 101 static void e1000_i2c_start(struct e1000_hw *hw); 102 static void e1000_i2c_stop(struct e1000_hw *hw); 103 static void e1000_clock_in_i2c_byte(struct e1000_hw *hw, u8 *data); 104 static s32 e1000_clock_out_i2c_byte(struct e1000_hw *hw, u8 data); 105 static s32 e1000_get_i2c_ack(struct e1000_hw *hw); 106 static void e1000_clock_in_i2c_bit(struct e1000_hw *hw, bool *data); 107 static s32 e1000_clock_out_i2c_bit(struct e1000_hw *hw, bool data); 108 static void e1000_raise_i2c_clk(struct e1000_hw *hw, u32 *i2cctl); 109 static void e1000_lower_i2c_clk(struct e1000_hw *hw, u32 *i2cctl); 110 static s32 e1000_set_i2c_data(struct e1000_hw *hw, u32 *i2cctl, bool data); 111 static bool e1000_get_i2c_data(u32 *i2cctl); 112 113 static const u16 e1000_82580_rxpbs_table[] = { 114 36, 72, 144, 1, 2, 4, 8, 16, 35, 70, 140 }; 115 #define E1000_82580_RXPBS_TABLE_SIZE \ 116 (sizeof(e1000_82580_rxpbs_table) / \ 117 sizeof(e1000_82580_rxpbs_table[0])) 118 119 120 /** 121 * e1000_sgmii_uses_mdio_82575 - Determine if I2C pins are for external MDIO 122 * @hw: pointer to the HW structure 123 * 124 * Called to determine if the I2C pins are being used for I2C or as an 125 * external MDIO interface since the two options are mutually exclusive. 126 **/ 127 static bool e1000_sgmii_uses_mdio_82575(struct e1000_hw *hw) 128 { 129 u32 reg = 0; 130 bool ext_mdio = false; 131 132 DEBUGFUNC("e1000_sgmii_uses_mdio_82575"); 133 134 switch (hw->mac.type) { 135 case e1000_82575: 136 case e1000_82576: 137 reg = E1000_READ_REG(hw, E1000_MDIC); 138 ext_mdio = !!(reg & E1000_MDIC_DEST); 139 break; 140 case e1000_82580: 141 case e1000_i350: 142 case e1000_i354: 143 case e1000_i210: 144 case e1000_i211: 145 reg = E1000_READ_REG(hw, E1000_MDICNFG); 146 ext_mdio = !!(reg & E1000_MDICNFG_EXT_MDIO); 147 break; 148 default: 149 break; 150 } 151 return ext_mdio; 152 } 153 154 /** 155 * e1000_init_phy_params_82575 - Initialize PHY function ptrs 156 * @hw: pointer to the HW structure 157 **/ 158 static s32 e1000_init_phy_params_82575(struct e1000_hw *hw) 159 { 160 struct e1000_phy_info *phy = &hw->phy; 161 s32 ret_val = E1000_SUCCESS; 162 u32 ctrl_ext; 163 164 DEBUGFUNC("e1000_init_phy_params_82575"); 165 166 phy->ops.read_i2c_byte = e1000_read_i2c_byte_generic; 167 phy->ops.write_i2c_byte = e1000_write_i2c_byte_generic; 168 169 if (hw->phy.media_type != e1000_media_type_copper) { 170 phy->type = e1000_phy_none; 171 goto out; 172 } 173 174 phy->ops.power_up = e1000_power_up_phy_copper; 175 phy->ops.power_down = e1000_power_down_phy_copper_base; 176 177 phy->autoneg_mask = AUTONEG_ADVERTISE_SPEED_DEFAULT; 178 phy->reset_delay_us = 100; 179 180 phy->ops.acquire = e1000_acquire_phy_base; 181 phy->ops.check_reset_block = e1000_check_reset_block_generic; 182 phy->ops.commit = e1000_phy_sw_reset_generic; 183 phy->ops.get_cfg_done = e1000_get_cfg_done_82575; 184 phy->ops.release = e1000_release_phy_base; 185 186 ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT); 187 188 if (e1000_sgmii_active_82575(hw)) { 189 phy->ops.reset = e1000_phy_hw_reset_sgmii_82575; 190 ctrl_ext |= E1000_CTRL_I2C_ENA; 191 } else { 192 phy->ops.reset = e1000_phy_hw_reset_generic; 193 ctrl_ext &= ~E1000_CTRL_I2C_ENA; 194 } 195 196 E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext); 197 e1000_reset_mdicnfg_82580(hw); 198 199 if (e1000_sgmii_active_82575(hw) && !e1000_sgmii_uses_mdio_82575(hw)) { 200 phy->ops.read_reg = e1000_read_phy_reg_sgmii_82575; 201 phy->ops.write_reg = e1000_write_phy_reg_sgmii_82575; 202 } else { 203 switch (hw->mac.type) { 204 case e1000_82580: 205 case e1000_i350: 206 case e1000_i354: 207 phy->ops.read_reg = e1000_read_phy_reg_82580; 208 phy->ops.write_reg = e1000_write_phy_reg_82580; 209 break; 210 case e1000_i210: 211 case e1000_i211: 212 phy->ops.read_reg = e1000_read_phy_reg_gs40g; 213 phy->ops.write_reg = e1000_write_phy_reg_gs40g; 214 break; 215 default: 216 phy->ops.read_reg = e1000_read_phy_reg_igp; 217 phy->ops.write_reg = e1000_write_phy_reg_igp; 218 } 219 } 220 221 /* Set phy->phy_addr and phy->id. */ 222 ret_val = e1000_get_phy_id_82575(hw); 223 224 /* Verify phy id and set remaining function pointers */ 225 switch (phy->id) { 226 case M88E1543_E_PHY_ID: 227 case M88E1512_E_PHY_ID: 228 case I347AT4_E_PHY_ID: 229 case M88E1112_E_PHY_ID: 230 case M88E1340M_E_PHY_ID: 231 phy->type = e1000_phy_m88; 232 phy->ops.check_polarity = e1000_check_polarity_m88; 233 phy->ops.get_info = e1000_get_phy_info_m88; 234 phy->ops.get_cable_length = e1000_get_cable_length_m88_gen2; 235 phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_m88; 236 break; 237 case M88E1111_I_PHY_ID: 238 phy->type = e1000_phy_m88; 239 phy->ops.check_polarity = e1000_check_polarity_m88; 240 phy->ops.get_info = e1000_get_phy_info_m88; 241 phy->ops.get_cable_length = e1000_get_cable_length_m88; 242 phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_m88; 243 break; 244 case IGP03E1000_E_PHY_ID: 245 case IGP04E1000_E_PHY_ID: 246 phy->type = e1000_phy_igp_3; 247 phy->ops.check_polarity = e1000_check_polarity_igp; 248 phy->ops.get_info = e1000_get_phy_info_igp; 249 phy->ops.get_cable_length = e1000_get_cable_length_igp_2; 250 phy->ops.set_d0_lplu_state = e1000_set_d0_lplu_state_82575; 251 phy->ops.set_d3_lplu_state = e1000_set_d3_lplu_state_generic; 252 phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_igp; 253 break; 254 case I82580_I_PHY_ID: 255 case I350_I_PHY_ID: 256 phy->type = e1000_phy_82580; 257 phy->ops.check_polarity = e1000_check_polarity_82577; 258 phy->ops.get_info = e1000_get_phy_info_82577; 259 phy->ops.get_cable_length = e1000_get_cable_length_82577; 260 phy->ops.set_d0_lplu_state = e1000_set_d0_lplu_state_82580; 261 phy->ops.set_d3_lplu_state = e1000_set_d3_lplu_state_82580; 262 phy->ops.force_speed_duplex = 263 e1000_phy_force_speed_duplex_82577; 264 break; 265 case I210_I_PHY_ID: 266 phy->type = e1000_phy_i210; 267 phy->ops.check_polarity = e1000_check_polarity_m88; 268 phy->ops.get_info = e1000_get_phy_info_m88; 269 phy->ops.get_cable_length = e1000_get_cable_length_m88_gen2; 270 phy->ops.set_d0_lplu_state = e1000_set_d0_lplu_state_82580; 271 phy->ops.set_d3_lplu_state = e1000_set_d3_lplu_state_82580; 272 phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_m88; 273 break; 274 default: 275 ret_val = -E1000_ERR_PHY; 276 goto out; 277 } 278 279 /* Check if this PHY is configured for media swap. */ 280 switch (phy->id) { 281 case M88E1112_E_PHY_ID: 282 { 283 u16 data; 284 285 ret_val = phy->ops.write_reg(hw, E1000_M88E1112_PAGE_ADDR, 2); 286 if (ret_val) 287 goto out; 288 ret_val = phy->ops.read_reg(hw, E1000_M88E1112_MAC_CTRL_1, 289 &data); 290 if (ret_val) 291 goto out; 292 293 data = (data & E1000_M88E1112_MAC_CTRL_1_MODE_MASK) >> 294 E1000_M88E1112_MAC_CTRL_1_MODE_SHIFT; 295 if (data == E1000_M88E1112_AUTO_COPPER_SGMII || 296 data == E1000_M88E1112_AUTO_COPPER_BASEX) 297 hw->mac.ops.check_for_link = 298 e1000_check_for_link_media_swap; 299 break; 300 } 301 case M88E1512_E_PHY_ID: 302 { 303 ret_val = e1000_initialize_M88E1512_phy(hw); 304 break; 305 } 306 case M88E1543_E_PHY_ID: 307 { 308 ret_val = e1000_initialize_M88E1543_phy(hw); 309 break; 310 } 311 default: 312 goto out; 313 } 314 315 out: 316 return ret_val; 317 } 318 319 /** 320 * e1000_init_mac_params_82575 - Init MAC func ptrs. 321 * @hw: pointer to the HW structure 322 **/ 323 static s32 e1000_init_mac_params_82575(struct e1000_hw *hw) 324 { 325 struct e1000_mac_info *mac = &hw->mac; 326 struct e1000_dev_spec_82575 *dev_spec = &hw->dev_spec._82575; 327 328 DEBUGFUNC("e1000_init_mac_params_82575"); 329 330 /* Initialize function pointer */ 331 e1000_init_mac_ops_generic(hw); 332 333 /* Derives media type */ 334 e1000_get_media_type_82575(hw); 335 /* Set MTA register count */ 336 mac->mta_reg_count = 128; 337 /* Set UTA register count */ 338 mac->uta_reg_count = (hw->mac.type == e1000_82575) ? 0 : 128; 339 /* Set RAR entry count */ 340 mac->rar_entry_count = E1000_RAR_ENTRIES_82575; 341 if (mac->type == e1000_82576) 342 mac->rar_entry_count = E1000_RAR_ENTRIES_82576; 343 if (mac->type == e1000_82580) 344 mac->rar_entry_count = E1000_RAR_ENTRIES_82580; 345 if (mac->type == e1000_i350 || mac->type == e1000_i354) 346 mac->rar_entry_count = E1000_RAR_ENTRIES_I350; 347 348 /* Enable EEE default settings for EEE supported devices */ 349 if (mac->type >= e1000_i350) 350 dev_spec->eee_disable = false; 351 352 /* Allow a single clear of the SW semaphore on I210 and newer */ 353 if (mac->type >= e1000_i210) 354 dev_spec->clear_semaphore_once = true; 355 356 /* Set if part includes ASF firmware */ 357 mac->asf_firmware_present = true; 358 /* FWSM register */ 359 mac->has_fwsm = true; 360 /* ARC supported; valid only if manageability features are enabled. */ 361 mac->arc_subsystem_valid = 362 !!(E1000_READ_REG(hw, E1000_FWSM) & E1000_FWSM_MODE_MASK); 363 364 /* Function pointers */ 365 366 /* bus type/speed/width */ 367 mac->ops.get_bus_info = e1000_get_bus_info_pcie_generic; 368 /* reset */ 369 if (mac->type >= e1000_82580) 370 mac->ops.reset_hw = e1000_reset_hw_82580; 371 else 372 mac->ops.reset_hw = e1000_reset_hw_82575; 373 /* HW initialization */ 374 if ((mac->type == e1000_i210) || (mac->type == e1000_i211)) 375 mac->ops.init_hw = e1000_init_hw_i210; 376 else 377 mac->ops.init_hw = e1000_init_hw_82575; 378 /* link setup */ 379 mac->ops.setup_link = e1000_setup_link_generic; 380 /* physical interface link setup */ 381 mac->ops.setup_physical_interface = 382 (hw->phy.media_type == e1000_media_type_copper) 383 ? e1000_setup_copper_link_82575 : e1000_setup_serdes_link_82575; 384 /* physical interface shutdown */ 385 mac->ops.shutdown_serdes = e1000_shutdown_serdes_link_82575; 386 /* physical interface power up */ 387 mac->ops.power_up_serdes = e1000_power_up_serdes_link_82575; 388 /* check for link */ 389 mac->ops.check_for_link = e1000_check_for_link_82575; 390 /* read mac address */ 391 mac->ops.read_mac_addr = e1000_read_mac_addr_82575; 392 /* configure collision distance */ 393 mac->ops.config_collision_dist = e1000_config_collision_dist_82575; 394 /* multicast address update */ 395 mac->ops.update_mc_addr_list = e1000_update_mc_addr_list_generic; 396 if (hw->mac.type == e1000_i350 || mac->type == e1000_i354) { 397 /* writing VFTA */ 398 mac->ops.write_vfta = e1000_write_vfta_i350; 399 /* clearing VFTA */ 400 mac->ops.clear_vfta = e1000_clear_vfta_i350; 401 } else { 402 /* writing VFTA */ 403 mac->ops.write_vfta = e1000_write_vfta_generic; 404 /* clearing VFTA */ 405 mac->ops.clear_vfta = e1000_clear_vfta_generic; 406 } 407 if (hw->mac.type >= e1000_82580) 408 mac->ops.validate_mdi_setting = 409 e1000_validate_mdi_setting_crossover_generic; 410 /* ID LED init */ 411 mac->ops.id_led_init = e1000_id_led_init_generic; 412 /* blink LED */ 413 mac->ops.blink_led = e1000_blink_led_generic; 414 /* setup LED */ 415 mac->ops.setup_led = e1000_setup_led_generic; 416 /* cleanup LED */ 417 mac->ops.cleanup_led = e1000_cleanup_led_generic; 418 /* turn on/off LED */ 419 mac->ops.led_on = e1000_led_on_generic; 420 mac->ops.led_off = e1000_led_off_generic; 421 /* clear hardware counters */ 422 mac->ops.clear_hw_cntrs = e1000_clear_hw_cntrs_82575; 423 /* link info */ 424 mac->ops.get_link_up_info = e1000_get_link_up_info_82575; 425 /* acquire SW_FW sync */ 426 mac->ops.acquire_swfw_sync = e1000_acquire_swfw_sync; 427 /* release SW_FW sync */ 428 mac->ops.release_swfw_sync = e1000_release_swfw_sync; 429 430 /* set lan id for port to determine which phy lock to use */ 431 hw->mac.ops.set_lan_id(hw); 432 433 return E1000_SUCCESS; 434 } 435 436 /** 437 * e1000_init_nvm_params_82575 - Initialize NVM function ptrs 438 * @hw: pointer to the HW structure 439 **/ 440 s32 e1000_init_nvm_params_82575(struct e1000_hw *hw) 441 { 442 struct e1000_nvm_info *nvm = &hw->nvm; 443 u32 eecd = E1000_READ_REG(hw, E1000_EECD); 444 u16 size; 445 446 DEBUGFUNC("e1000_init_nvm_params_82575"); 447 448 size = (u16)((eecd & E1000_EECD_SIZE_EX_MASK) >> 449 E1000_EECD_SIZE_EX_SHIFT); 450 /* Added to a constant, "size" becomes the left-shift value 451 * for setting word_size. 452 */ 453 size += NVM_WORD_SIZE_BASE_SHIFT; 454 455 /* Just in case size is out of range, cap it to the largest 456 * EEPROM size supported 457 */ 458 if (size > 15) 459 size = 15; 460 461 nvm->word_size = 1 << size; 462 if (hw->mac.type < e1000_i210) { 463 nvm->opcode_bits = 8; 464 nvm->delay_usec = 1; 465 466 switch (nvm->override) { 467 case e1000_nvm_override_spi_large: 468 nvm->page_size = 32; 469 nvm->address_bits = 16; 470 break; 471 case e1000_nvm_override_spi_small: 472 nvm->page_size = 8; 473 nvm->address_bits = 8; 474 break; 475 default: 476 nvm->page_size = eecd & E1000_EECD_ADDR_BITS ? 32 : 8; 477 nvm->address_bits = eecd & E1000_EECD_ADDR_BITS ? 478 16 : 8; 479 break; 480 } 481 if (nvm->word_size == (1 << 15)) 482 nvm->page_size = 128; 483 484 nvm->type = e1000_nvm_eeprom_spi; 485 } else { 486 nvm->type = e1000_nvm_flash_hw; 487 } 488 489 /* Function Pointers */ 490 nvm->ops.acquire = e1000_acquire_nvm_82575; 491 nvm->ops.release = e1000_release_nvm_82575; 492 if (nvm->word_size < (1 << 15)) 493 nvm->ops.read = e1000_read_nvm_eerd; 494 else 495 nvm->ops.read = e1000_read_nvm_spi; 496 497 nvm->ops.write = e1000_write_nvm_spi; 498 nvm->ops.validate = e1000_validate_nvm_checksum_generic; 499 nvm->ops.update = e1000_update_nvm_checksum_generic; 500 nvm->ops.valid_led_default = e1000_valid_led_default_82575; 501 502 /* override generic family function pointers for specific descendants */ 503 switch (hw->mac.type) { 504 case e1000_82580: 505 nvm->ops.validate = e1000_validate_nvm_checksum_82580; 506 nvm->ops.update = e1000_update_nvm_checksum_82580; 507 break; 508 case e1000_i350: 509 nvm->ops.validate = e1000_validate_nvm_checksum_i350; 510 nvm->ops.update = e1000_update_nvm_checksum_i350; 511 break; 512 default: 513 break; 514 } 515 516 return E1000_SUCCESS; 517 } 518 519 /** 520 * e1000_init_function_pointers_82575 - Init func ptrs. 521 * @hw: pointer to the HW structure 522 * 523 * Called to initialize all function pointers and parameters. 524 **/ 525 void e1000_init_function_pointers_82575(struct e1000_hw *hw) 526 { 527 DEBUGFUNC("e1000_init_function_pointers_82575"); 528 529 hw->mac.ops.init_params = e1000_init_mac_params_82575; 530 hw->nvm.ops.init_params = e1000_init_nvm_params_82575; 531 hw->phy.ops.init_params = e1000_init_phy_params_82575; 532 hw->mbx.ops.init_params = e1000_init_mbx_params_pf; 533 } 534 535 /** 536 * e1000_read_phy_reg_sgmii_82575 - Read PHY register using sgmii 537 * @hw: pointer to the HW structure 538 * @offset: register offset to be read 539 * @data: pointer to the read data 540 * 541 * Reads the PHY register at offset using the serial gigabit media independent 542 * interface and stores the retrieved information in data. 543 **/ 544 static s32 e1000_read_phy_reg_sgmii_82575(struct e1000_hw *hw, u32 offset, 545 u16 *data) 546 { 547 s32 ret_val = -E1000_ERR_PARAM; 548 549 DEBUGFUNC("e1000_read_phy_reg_sgmii_82575"); 550 551 if (offset > E1000_MAX_SGMII_PHY_REG_ADDR) { 552 DEBUGOUT1("PHY Address %u is out of range\n", offset); 553 goto out; 554 } 555 556 ret_val = hw->phy.ops.acquire(hw); 557 if (ret_val) 558 goto out; 559 560 ret_val = e1000_read_phy_reg_i2c(hw, offset, data); 561 562 hw->phy.ops.release(hw); 563 564 out: 565 return ret_val; 566 } 567 568 /** 569 * e1000_write_phy_reg_sgmii_82575 - Write PHY register using sgmii 570 * @hw: pointer to the HW structure 571 * @offset: register offset to write to 572 * @data: data to write at register offset 573 * 574 * Writes the data to PHY register at the offset using the serial gigabit 575 * media independent interface. 576 **/ 577 static s32 e1000_write_phy_reg_sgmii_82575(struct e1000_hw *hw, u32 offset, 578 u16 data) 579 { 580 s32 ret_val = -E1000_ERR_PARAM; 581 582 DEBUGFUNC("e1000_write_phy_reg_sgmii_82575"); 583 584 if (offset > E1000_MAX_SGMII_PHY_REG_ADDR) { 585 DEBUGOUT1("PHY Address %d is out of range\n", offset); 586 goto out; 587 } 588 589 ret_val = hw->phy.ops.acquire(hw); 590 if (ret_val) 591 goto out; 592 593 ret_val = e1000_write_phy_reg_i2c(hw, offset, data); 594 595 hw->phy.ops.release(hw); 596 597 out: 598 return ret_val; 599 } 600 601 /** 602 * e1000_get_phy_id_82575 - Retrieve PHY addr and id 603 * @hw: pointer to the HW structure 604 * 605 * Retrieves the PHY address and ID for both PHY's which do and do not use 606 * sgmi interface. 607 **/ 608 static s32 e1000_get_phy_id_82575(struct e1000_hw *hw) 609 { 610 struct e1000_phy_info *phy = &hw->phy; 611 s32 ret_val = E1000_SUCCESS; 612 u16 phy_id; 613 u32 ctrl_ext; 614 u32 mdic; 615 616 DEBUGFUNC("e1000_get_phy_id_82575"); 617 618 /* some i354 devices need an extra read for phy id */ 619 if (hw->mac.type == e1000_i354) 620 e1000_get_phy_id(hw); 621 622 /* 623 * For SGMII PHYs, we try the list of possible addresses until 624 * we find one that works. For non-SGMII PHYs 625 * (e.g. integrated copper PHYs), an address of 1 should 626 * work. The result of this function should mean phy->phy_addr 627 * and phy->id are set correctly. 628 */ 629 if (!e1000_sgmii_active_82575(hw)) { 630 phy->addr = 1; 631 ret_val = e1000_get_phy_id(hw); 632 goto out; 633 } 634 635 if (e1000_sgmii_uses_mdio_82575(hw)) { 636 switch (hw->mac.type) { 637 case e1000_82575: 638 case e1000_82576: 639 mdic = E1000_READ_REG(hw, E1000_MDIC); 640 mdic &= E1000_MDIC_PHY_MASK; 641 phy->addr = mdic >> E1000_MDIC_PHY_SHIFT; 642 break; 643 case e1000_82580: 644 case e1000_i350: 645 case e1000_i354: 646 case e1000_i210: 647 case e1000_i211: 648 mdic = E1000_READ_REG(hw, E1000_MDICNFG); 649 mdic &= E1000_MDICNFG_PHY_MASK; 650 phy->addr = mdic >> E1000_MDICNFG_PHY_SHIFT; 651 break; 652 default: 653 ret_val = -E1000_ERR_PHY; 654 goto out; 655 break; 656 } 657 ret_val = e1000_get_phy_id(hw); 658 goto out; 659 } 660 661 /* Power on sgmii phy if it is disabled */ 662 ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT); 663 E1000_WRITE_REG(hw, E1000_CTRL_EXT, 664 ctrl_ext & ~E1000_CTRL_EXT_SDP3_DATA); 665 E1000_WRITE_FLUSH(hw); 666 msec_delay(300); 667 668 /* 669 * The address field in the I2CCMD register is 3 bits and 0 is invalid. 670 * Therefore, we need to test 1-7 671 */ 672 for (phy->addr = 1; phy->addr < 8; phy->addr++) { 673 ret_val = e1000_read_phy_reg_sgmii_82575(hw, PHY_ID1, &phy_id); 674 if (ret_val == E1000_SUCCESS) { 675 DEBUGOUT2("Vendor ID 0x%08X read at address %u\n", 676 phy_id, phy->addr); 677 /* 678 * At the time of this writing, The M88 part is 679 * the only supported SGMII PHY product. 680 */ 681 if (phy_id == M88_VENDOR) 682 break; 683 } else { 684 DEBUGOUT1("PHY address %u was unreadable\n", 685 phy->addr); 686 } 687 } 688 689 /* A valid PHY type couldn't be found. */ 690 if (phy->addr == 8) { 691 phy->addr = 0; 692 ret_val = -E1000_ERR_PHY; 693 } else { 694 ret_val = e1000_get_phy_id(hw); 695 } 696 697 /* restore previous sfp cage power state */ 698 E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext); 699 700 out: 701 return ret_val; 702 } 703 704 /** 705 * e1000_phy_hw_reset_sgmii_82575 - Performs a PHY reset 706 * @hw: pointer to the HW structure 707 * 708 * Resets the PHY using the serial gigabit media independent interface. 709 **/ 710 static s32 e1000_phy_hw_reset_sgmii_82575(struct e1000_hw *hw) 711 { 712 s32 ret_val = E1000_SUCCESS; 713 struct e1000_phy_info *phy = &hw->phy; 714 715 DEBUGFUNC("e1000_phy_hw_reset_sgmii_82575"); 716 717 /* 718 * This isn't a true "hard" reset, but is the only reset 719 * available to us at this time. 720 */ 721 722 DEBUGOUT("Soft resetting SGMII attached PHY...\n"); 723 724 if (!(hw->phy.ops.write_reg)) 725 goto out; 726 727 /* 728 * SFP documentation requires the following to configure the SPF module 729 * to work on SGMII. No further documentation is given. 730 */ 731 ret_val = hw->phy.ops.write_reg(hw, 0x1B, 0x8084); 732 if (ret_val) 733 goto out; 734 735 ret_val = hw->phy.ops.commit(hw); 736 if (ret_val) 737 goto out; 738 739 if (phy->id == M88E1512_E_PHY_ID) 740 ret_val = e1000_initialize_M88E1512_phy(hw); 741 out: 742 return ret_val; 743 } 744 745 /** 746 * e1000_set_d0_lplu_state_82575 - Set Low Power Linkup D0 state 747 * @hw: pointer to the HW structure 748 * @active: true to enable LPLU, false to disable 749 * 750 * Sets the LPLU D0 state according to the active flag. When 751 * activating LPLU this function also disables smart speed 752 * and vice versa. LPLU will not be activated unless the 753 * device autonegotiation advertisement meets standards of 754 * either 10 or 10/100 or 10/100/1000 at all duplexes. 755 * This is a function pointer entry point only called by 756 * PHY setup routines. 757 **/ 758 static s32 e1000_set_d0_lplu_state_82575(struct e1000_hw *hw, bool active) 759 { 760 struct e1000_phy_info *phy = &hw->phy; 761 s32 ret_val = E1000_SUCCESS; 762 u16 data; 763 764 DEBUGFUNC("e1000_set_d0_lplu_state_82575"); 765 766 if (!(hw->phy.ops.read_reg)) 767 goto out; 768 769 ret_val = phy->ops.read_reg(hw, IGP02E1000_PHY_POWER_MGMT, &data); 770 if (ret_val) 771 goto out; 772 773 if (active) { 774 data |= IGP02E1000_PM_D0_LPLU; 775 ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT, 776 data); 777 if (ret_val) 778 goto out; 779 780 /* When LPLU is enabled, we should disable SmartSpeed */ 781 ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CONFIG, 782 &data); 783 data &= ~IGP01E1000_PSCFR_SMART_SPEED; 784 ret_val = phy->ops.write_reg(hw, IGP01E1000_PHY_PORT_CONFIG, 785 data); 786 if (ret_val) 787 goto out; 788 } else { 789 data &= ~IGP02E1000_PM_D0_LPLU; 790 ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT, 791 data); 792 /* 793 * LPLU and SmartSpeed are mutually exclusive. LPLU is used 794 * during Dx states where the power conservation is most 795 * important. During driver activity we should enable 796 * SmartSpeed, so performance is maintained. 797 */ 798 if (phy->smart_speed == e1000_smart_speed_on) { 799 ret_val = phy->ops.read_reg(hw, 800 IGP01E1000_PHY_PORT_CONFIG, 801 &data); 802 if (ret_val) 803 goto out; 804 805 data |= IGP01E1000_PSCFR_SMART_SPEED; 806 ret_val = phy->ops.write_reg(hw, 807 IGP01E1000_PHY_PORT_CONFIG, 808 data); 809 if (ret_val) 810 goto out; 811 } else if (phy->smart_speed == e1000_smart_speed_off) { 812 ret_val = phy->ops.read_reg(hw, 813 IGP01E1000_PHY_PORT_CONFIG, 814 &data); 815 if (ret_val) 816 goto out; 817 818 data &= ~IGP01E1000_PSCFR_SMART_SPEED; 819 ret_val = phy->ops.write_reg(hw, 820 IGP01E1000_PHY_PORT_CONFIG, 821 data); 822 if (ret_val) 823 goto out; 824 } 825 } 826 827 out: 828 return ret_val; 829 } 830 831 /** 832 * e1000_set_d0_lplu_state_82580 - Set Low Power Linkup D0 state 833 * @hw: pointer to the HW structure 834 * @active: true to enable LPLU, false to disable 835 * 836 * Sets the LPLU D0 state according to the active flag. When 837 * activating LPLU this function also disables smart speed 838 * and vice versa. LPLU will not be activated unless the 839 * device autonegotiation advertisement meets standards of 840 * either 10 or 10/100 or 10/100/1000 at all duplexes. 841 * This is a function pointer entry point only called by 842 * PHY setup routines. 843 **/ 844 static s32 e1000_set_d0_lplu_state_82580(struct e1000_hw *hw, bool active) 845 { 846 struct e1000_phy_info *phy = &hw->phy; 847 u32 data; 848 849 DEBUGFUNC("e1000_set_d0_lplu_state_82580"); 850 851 data = E1000_READ_REG(hw, E1000_82580_PHY_POWER_MGMT); 852 853 if (active) { 854 data |= E1000_82580_PM_D0_LPLU; 855 856 /* When LPLU is enabled, we should disable SmartSpeed */ 857 data &= ~E1000_82580_PM_SPD; 858 } else { 859 data &= ~E1000_82580_PM_D0_LPLU; 860 861 /* 862 * LPLU and SmartSpeed are mutually exclusive. LPLU is used 863 * during Dx states where the power conservation is most 864 * important. During driver activity we should enable 865 * SmartSpeed, so performance is maintained. 866 */ 867 if (phy->smart_speed == e1000_smart_speed_on) 868 data |= E1000_82580_PM_SPD; 869 else if (phy->smart_speed == e1000_smart_speed_off) 870 data &= ~E1000_82580_PM_SPD; 871 } 872 873 E1000_WRITE_REG(hw, E1000_82580_PHY_POWER_MGMT, data); 874 return E1000_SUCCESS; 875 } 876 877 /** 878 * e1000_set_d3_lplu_state_82580 - Sets low power link up state for D3 879 * @hw: pointer to the HW structure 880 * @active: boolean used to enable/disable lplu 881 * 882 * Success returns 0, Failure returns 1 883 * 884 * The low power link up (lplu) state is set to the power management level D3 885 * and SmartSpeed is disabled when active is true, else clear lplu for D3 886 * and enable Smartspeed. LPLU and Smartspeed are mutually exclusive. LPLU 887 * is used during Dx states where the power conservation is most important. 888 * During driver activity, SmartSpeed should be enabled so performance is 889 * maintained. 890 **/ 891 s32 e1000_set_d3_lplu_state_82580(struct e1000_hw *hw, bool active) 892 { 893 struct e1000_phy_info *phy = &hw->phy; 894 u32 data; 895 896 DEBUGFUNC("e1000_set_d3_lplu_state_82580"); 897 898 data = E1000_READ_REG(hw, E1000_82580_PHY_POWER_MGMT); 899 900 if (!active) { 901 data &= ~E1000_82580_PM_D3_LPLU; 902 /* 903 * LPLU and SmartSpeed are mutually exclusive. LPLU is used 904 * during Dx states where the power conservation is most 905 * important. During driver activity we should enable 906 * SmartSpeed, so performance is maintained. 907 */ 908 if (phy->smart_speed == e1000_smart_speed_on) 909 data |= E1000_82580_PM_SPD; 910 else if (phy->smart_speed == e1000_smart_speed_off) 911 data &= ~E1000_82580_PM_SPD; 912 } else if ((phy->autoneg_advertised == E1000_ALL_SPEED_DUPLEX) || 913 (phy->autoneg_advertised == E1000_ALL_NOT_GIG) || 914 (phy->autoneg_advertised == E1000_ALL_10_SPEED)) { 915 data |= E1000_82580_PM_D3_LPLU; 916 /* When LPLU is enabled, we should disable SmartSpeed */ 917 data &= ~E1000_82580_PM_SPD; 918 } 919 920 E1000_WRITE_REG(hw, E1000_82580_PHY_POWER_MGMT, data); 921 return E1000_SUCCESS; 922 } 923 924 /** 925 * e1000_acquire_nvm_82575 - Request for access to EEPROM 926 * @hw: pointer to the HW structure 927 * 928 * Acquire the necessary semaphores for exclusive access to the EEPROM. 929 * Set the EEPROM access request bit and wait for EEPROM access grant bit. 930 * Return successful if access grant bit set, else clear the request for 931 * EEPROM access and return -E1000_ERR_NVM (-1). 932 **/ 933 static s32 e1000_acquire_nvm_82575(struct e1000_hw *hw) 934 { 935 s32 ret_val = E1000_SUCCESS; 936 937 DEBUGFUNC("e1000_acquire_nvm_82575"); 938 939 ret_val = e1000_acquire_swfw_sync(hw, E1000_SWFW_EEP_SM); 940 if (ret_val) 941 goto out; 942 943 /* 944 * Check if there is some access 945 * error this access may hook on 946 */ 947 if (hw->mac.type == e1000_i350) { 948 u32 eecd = E1000_READ_REG(hw, E1000_EECD); 949 if (eecd & (E1000_EECD_BLOCKED | E1000_EECD_ABORT | 950 E1000_EECD_TIMEOUT)) { 951 /* Clear all access error flags */ 952 E1000_WRITE_REG(hw, E1000_EECD, eecd | 953 E1000_EECD_ERROR_CLR); 954 DEBUGOUT("Nvm bit banging access error detected and cleared.\n"); 955 } 956 } 957 958 if (hw->mac.type == e1000_82580) { 959 u32 eecd = E1000_READ_REG(hw, E1000_EECD); 960 if (eecd & E1000_EECD_BLOCKED) { 961 /* Clear access error flag */ 962 E1000_WRITE_REG(hw, E1000_EECD, eecd | 963 E1000_EECD_BLOCKED); 964 DEBUGOUT("Nvm bit banging access error detected and cleared.\n"); 965 } 966 } 967 968 ret_val = e1000_acquire_nvm_generic(hw); 969 if (ret_val) 970 e1000_release_swfw_sync(hw, E1000_SWFW_EEP_SM); 971 972 out: 973 return ret_val; 974 } 975 976 /** 977 * e1000_release_nvm_82575 - Release exclusive access to EEPROM 978 * @hw: pointer to the HW structure 979 * 980 * Stop any current commands to the EEPROM and clear the EEPROM request bit, 981 * then release the semaphores acquired. 982 **/ 983 static void e1000_release_nvm_82575(struct e1000_hw *hw) 984 { 985 DEBUGFUNC("e1000_release_nvm_82575"); 986 987 e1000_release_nvm_generic(hw); 988 989 e1000_release_swfw_sync(hw, E1000_SWFW_EEP_SM); 990 } 991 992 /** 993 * e1000_get_cfg_done_82575 - Read config done bit 994 * @hw: pointer to the HW structure 995 * 996 * Read the management control register for the config done bit for 997 * completion status. NOTE: silicon which is EEPROM-less will fail trying 998 * to read the config done bit, so an error is *ONLY* logged and returns 999 * E1000_SUCCESS. If we were to return with error, EEPROM-less silicon 1000 * would not be able to be reset or change link. 1001 **/ 1002 static s32 e1000_get_cfg_done_82575(struct e1000_hw *hw) 1003 { 1004 s32 timeout = PHY_CFG_TIMEOUT; 1005 u32 mask = E1000_NVM_CFG_DONE_PORT_0; 1006 1007 DEBUGFUNC("e1000_get_cfg_done_82575"); 1008 1009 if (hw->bus.func == E1000_FUNC_1) 1010 mask = E1000_NVM_CFG_DONE_PORT_1; 1011 else if (hw->bus.func == E1000_FUNC_2) 1012 mask = E1000_NVM_CFG_DONE_PORT_2; 1013 else if (hw->bus.func == E1000_FUNC_3) 1014 mask = E1000_NVM_CFG_DONE_PORT_3; 1015 while (timeout) { 1016 if (E1000_READ_REG(hw, E1000_EEMNGCTL) & mask) 1017 break; 1018 msec_delay(1); 1019 timeout--; 1020 } 1021 if (!timeout) 1022 DEBUGOUT("MNG configuration cycle has not completed.\n"); 1023 1024 /* If EEPROM is not marked present, init the PHY manually */ 1025 if (!(E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_PRES) && 1026 (hw->phy.type == e1000_phy_igp_3)) 1027 e1000_phy_init_script_igp3(hw); 1028 1029 return E1000_SUCCESS; 1030 } 1031 1032 /** 1033 * e1000_get_link_up_info_82575 - Get link speed/duplex info 1034 * @hw: pointer to the HW structure 1035 * @speed: stores the current speed 1036 * @duplex: stores the current duplex 1037 * 1038 * This is a wrapper function, if using the serial gigabit media independent 1039 * interface, use PCS to retrieve the link speed and duplex information. 1040 * Otherwise, use the generic function to get the link speed and duplex info. 1041 **/ 1042 static s32 e1000_get_link_up_info_82575(struct e1000_hw *hw, u16 *speed, 1043 u16 *duplex) 1044 { 1045 s32 ret_val; 1046 1047 DEBUGFUNC("e1000_get_link_up_info_82575"); 1048 1049 if (hw->phy.media_type != e1000_media_type_copper) 1050 ret_val = e1000_get_pcs_speed_and_duplex_82575(hw, speed, 1051 duplex); 1052 else 1053 ret_val = e1000_get_speed_and_duplex_copper_generic(hw, speed, 1054 duplex); 1055 1056 return ret_val; 1057 } 1058 1059 /** 1060 * e1000_check_for_link_82575 - Check for link 1061 * @hw: pointer to the HW structure 1062 * 1063 * If sgmii is enabled, then use the pcs register to determine link, otherwise 1064 * use the generic interface for determining link. 1065 **/ 1066 static s32 e1000_check_for_link_82575(struct e1000_hw *hw) 1067 { 1068 s32 ret_val; 1069 u16 speed, duplex; 1070 1071 DEBUGFUNC("e1000_check_for_link_82575"); 1072 1073 if (hw->phy.media_type != e1000_media_type_copper) { 1074 ret_val = e1000_get_pcs_speed_and_duplex_82575(hw, &speed, 1075 &duplex); 1076 /* 1077 * Use this flag to determine if link needs to be checked or 1078 * not. If we have link clear the flag so that we do not 1079 * continue to check for link. 1080 */ 1081 hw->mac.get_link_status = !hw->mac.serdes_has_link; 1082 1083 /* 1084 * Configure Flow Control now that Auto-Neg has completed. 1085 * First, we need to restore the desired flow control 1086 * settings because we may have had to re-autoneg with a 1087 * different link partner. 1088 */ 1089 ret_val = e1000_config_fc_after_link_up_generic(hw); 1090 if (ret_val) 1091 DEBUGOUT("Error configuring flow control\n"); 1092 } else { 1093 ret_val = e1000_check_for_copper_link_generic(hw); 1094 } 1095 1096 return ret_val; 1097 } 1098 1099 /** 1100 * e1000_check_for_link_media_swap - Check which M88E1112 interface linked 1101 * @hw: pointer to the HW structure 1102 * 1103 * Poll the M88E1112 interfaces to see which interface achieved link. 1104 */ 1105 static s32 e1000_check_for_link_media_swap(struct e1000_hw *hw) 1106 { 1107 struct e1000_phy_info *phy = &hw->phy; 1108 s32 ret_val; 1109 u16 data; 1110 u8 port = 0; 1111 1112 DEBUGFUNC("e1000_check_for_link_media_swap"); 1113 1114 /* Check for copper. */ 1115 ret_val = phy->ops.write_reg(hw, E1000_M88E1112_PAGE_ADDR, 0); 1116 if (ret_val) 1117 return ret_val; 1118 1119 ret_val = phy->ops.read_reg(hw, E1000_M88E1112_STATUS, &data); 1120 if (ret_val) 1121 return ret_val; 1122 1123 if (data & E1000_M88E1112_STATUS_LINK) 1124 port = E1000_MEDIA_PORT_COPPER; 1125 1126 /* Check for other. */ 1127 ret_val = phy->ops.write_reg(hw, E1000_M88E1112_PAGE_ADDR, 1); 1128 if (ret_val) 1129 return ret_val; 1130 1131 ret_val = phy->ops.read_reg(hw, E1000_M88E1112_STATUS, &data); 1132 if (ret_val) 1133 return ret_val; 1134 1135 if (data & E1000_M88E1112_STATUS_LINK) 1136 port = E1000_MEDIA_PORT_OTHER; 1137 1138 /* Determine if a swap needs to happen. */ 1139 if (port && (hw->dev_spec._82575.media_port != port)) { 1140 hw->dev_spec._82575.media_port = port; 1141 hw->dev_spec._82575.media_changed = true; 1142 } 1143 1144 if (port == E1000_MEDIA_PORT_COPPER) { 1145 /* reset page to 0 */ 1146 ret_val = phy->ops.write_reg(hw, E1000_M88E1112_PAGE_ADDR, 0); 1147 if (ret_val) 1148 return ret_val; 1149 e1000_check_for_link_82575(hw); 1150 } else { 1151 e1000_check_for_link_82575(hw); 1152 /* reset page to 0 */ 1153 ret_val = phy->ops.write_reg(hw, E1000_M88E1112_PAGE_ADDR, 0); 1154 if (ret_val) 1155 return ret_val; 1156 } 1157 1158 return E1000_SUCCESS; 1159 } 1160 1161 /** 1162 * e1000_power_up_serdes_link_82575 - Power up the serdes link after shutdown 1163 * @hw: pointer to the HW structure 1164 **/ 1165 static void e1000_power_up_serdes_link_82575(struct e1000_hw *hw) 1166 { 1167 u32 reg; 1168 1169 DEBUGFUNC("e1000_power_up_serdes_link_82575"); 1170 1171 if ((hw->phy.media_type != e1000_media_type_internal_serdes) && 1172 !e1000_sgmii_active_82575(hw)) 1173 return; 1174 1175 /* Enable PCS to turn on link */ 1176 reg = E1000_READ_REG(hw, E1000_PCS_CFG0); 1177 reg |= E1000_PCS_CFG_PCS_EN; 1178 E1000_WRITE_REG(hw, E1000_PCS_CFG0, reg); 1179 1180 /* Power up the laser */ 1181 reg = E1000_READ_REG(hw, E1000_CTRL_EXT); 1182 reg &= ~E1000_CTRL_EXT_SDP3_DATA; 1183 E1000_WRITE_REG(hw, E1000_CTRL_EXT, reg); 1184 1185 /* flush the write to verify completion */ 1186 E1000_WRITE_FLUSH(hw); 1187 msec_delay(1); 1188 } 1189 1190 /** 1191 * e1000_get_pcs_speed_and_duplex_82575 - Retrieve current speed/duplex 1192 * @hw: pointer to the HW structure 1193 * @speed: stores the current speed 1194 * @duplex: stores the current duplex 1195 * 1196 * Using the physical coding sub-layer (PCS), retrieve the current speed and 1197 * duplex, then store the values in the pointers provided. 1198 **/ 1199 static s32 e1000_get_pcs_speed_and_duplex_82575(struct e1000_hw *hw, 1200 u16 *speed, u16 *duplex) 1201 { 1202 struct e1000_mac_info *mac = &hw->mac; 1203 u32 pcs; 1204 u32 status; 1205 1206 DEBUGFUNC("e1000_get_pcs_speed_and_duplex_82575"); 1207 1208 /* 1209 * Read the PCS Status register for link state. For non-copper mode, 1210 * the status register is not accurate. The PCS status register is 1211 * used instead. 1212 */ 1213 pcs = E1000_READ_REG(hw, E1000_PCS_LSTAT); 1214 1215 /* 1216 * The link up bit determines when link is up on autoneg. 1217 */ 1218 if (pcs & E1000_PCS_LSTS_LINK_OK) { 1219 mac->serdes_has_link = true; 1220 1221 /* Detect and store PCS speed */ 1222 if (pcs & E1000_PCS_LSTS_SPEED_1000) 1223 *speed = SPEED_1000; 1224 else if (pcs & E1000_PCS_LSTS_SPEED_100) 1225 *speed = SPEED_100; 1226 else 1227 *speed = SPEED_10; 1228 1229 /* Detect and store PCS duplex */ 1230 if (pcs & E1000_PCS_LSTS_DUPLEX_FULL) 1231 *duplex = FULL_DUPLEX; 1232 else 1233 *duplex = HALF_DUPLEX; 1234 1235 /* Check if it is an I354 2.5Gb backplane connection. */ 1236 if (mac->type == e1000_i354) { 1237 status = E1000_READ_REG(hw, E1000_STATUS); 1238 if ((status & E1000_STATUS_2P5_SKU) && 1239 !(status & E1000_STATUS_2P5_SKU_OVER)) { 1240 *speed = SPEED_2500; 1241 *duplex = FULL_DUPLEX; 1242 DEBUGOUT("2500 Mbs, "); 1243 DEBUGOUT("Full Duplex\n"); 1244 } 1245 } 1246 1247 } else { 1248 mac->serdes_has_link = false; 1249 *speed = 0; 1250 *duplex = 0; 1251 } 1252 1253 return E1000_SUCCESS; 1254 } 1255 1256 /** 1257 * e1000_shutdown_serdes_link_82575 - Remove link during power down 1258 * @hw: pointer to the HW structure 1259 * 1260 * In the case of serdes shut down sfp and PCS on driver unload 1261 * when management pass thru is not enabled. 1262 **/ 1263 void e1000_shutdown_serdes_link_82575(struct e1000_hw *hw) 1264 { 1265 u32 reg; 1266 1267 DEBUGFUNC("e1000_shutdown_serdes_link_82575"); 1268 1269 if ((hw->phy.media_type != e1000_media_type_internal_serdes) && 1270 !e1000_sgmii_active_82575(hw)) 1271 return; 1272 1273 if (!e1000_enable_mng_pass_thru(hw)) { 1274 /* Disable PCS to turn off link */ 1275 reg = E1000_READ_REG(hw, E1000_PCS_CFG0); 1276 reg &= ~E1000_PCS_CFG_PCS_EN; 1277 E1000_WRITE_REG(hw, E1000_PCS_CFG0, reg); 1278 1279 /* shutdown the laser */ 1280 reg = E1000_READ_REG(hw, E1000_CTRL_EXT); 1281 reg |= E1000_CTRL_EXT_SDP3_DATA; 1282 E1000_WRITE_REG(hw, E1000_CTRL_EXT, reg); 1283 1284 /* flush the write to verify completion */ 1285 E1000_WRITE_FLUSH(hw); 1286 msec_delay(1); 1287 } 1288 1289 return; 1290 } 1291 1292 /** 1293 * e1000_reset_hw_82575 - Reset hardware 1294 * @hw: pointer to the HW structure 1295 * 1296 * This resets the hardware into a known state. 1297 **/ 1298 static s32 e1000_reset_hw_82575(struct e1000_hw *hw) 1299 { 1300 u32 ctrl; 1301 s32 ret_val; 1302 1303 DEBUGFUNC("e1000_reset_hw_82575"); 1304 1305 /* 1306 * Prevent the PCI-E bus from sticking if there is no TLP connection 1307 * on the last TLP read/write transaction when MAC is reset. 1308 */ 1309 ret_val = e1000_disable_pcie_master_generic(hw); 1310 if (ret_val) 1311 DEBUGOUT("PCI-E Master disable polling has failed.\n"); 1312 1313 /* set the completion timeout for interface */ 1314 ret_val = e1000_set_pcie_completion_timeout(hw); 1315 if (ret_val) 1316 DEBUGOUT("PCI-E Set completion timeout has failed.\n"); 1317 1318 DEBUGOUT("Masking off all interrupts\n"); 1319 E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff); 1320 1321 E1000_WRITE_REG(hw, E1000_RCTL, 0); 1322 E1000_WRITE_REG(hw, E1000_TCTL, E1000_TCTL_PSP); 1323 E1000_WRITE_FLUSH(hw); 1324 1325 msec_delay(10); 1326 1327 ctrl = E1000_READ_REG(hw, E1000_CTRL); 1328 1329 DEBUGOUT("Issuing a global reset to MAC\n"); 1330 E1000_WRITE_REG(hw, E1000_CTRL, ctrl | E1000_CTRL_RST); 1331 1332 ret_val = e1000_get_auto_rd_done_generic(hw); 1333 if (ret_val) { 1334 /* 1335 * When auto config read does not complete, do not 1336 * return with an error. This can happen in situations 1337 * where there is no eeprom and prevents getting link. 1338 */ 1339 DEBUGOUT("Auto Read Done did not complete\n"); 1340 } 1341 1342 /* If EEPROM is not present, run manual init scripts */ 1343 if (!(E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_PRES)) 1344 e1000_reset_init_script_82575(hw); 1345 1346 /* Clear any pending interrupt events. */ 1347 E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff); 1348 E1000_READ_REG(hw, E1000_ICR); 1349 1350 /* Install any alternate MAC address into RAR0 */ 1351 ret_val = e1000_check_alt_mac_addr_generic(hw); 1352 1353 return ret_val; 1354 } 1355 1356 /** 1357 * e1000_init_hw_82575 - Initialize hardware 1358 * @hw: pointer to the HW structure 1359 * 1360 * This inits the hardware readying it for operation. 1361 **/ 1362 static s32 e1000_init_hw_82575(struct e1000_hw *hw) 1363 { 1364 struct e1000_mac_info *mac = &hw->mac; 1365 s32 ret_val; 1366 1367 DEBUGFUNC("e1000_init_hw_82575"); 1368 1369 /* Initialize identification LED */ 1370 ret_val = mac->ops.id_led_init(hw); 1371 if (ret_val) { 1372 DEBUGOUT("Error initializing identification LED\n"); 1373 /* This is not fatal and we should not stop init due to this */ 1374 } 1375 1376 /* Disabling VLAN filtering */ 1377 DEBUGOUT("Initializing the IEEE VLAN\n"); 1378 mac->ops.clear_vfta(hw); 1379 1380 ret_val = e1000_init_hw_base(hw); 1381 1382 /* Set the default MTU size */ 1383 hw->dev_spec._82575.mtu = 1500; 1384 1385 /* Clear all of the statistics registers (clear on read). It is 1386 * important that we do this after we have tried to establish link 1387 * because the symbol error count will increment wildly if there 1388 * is no link. 1389 */ 1390 e1000_clear_hw_cntrs_82575(hw); 1391 1392 return ret_val; 1393 } 1394 /** 1395 * e1000_setup_copper_link_82575 - Configure copper link settings 1396 * @hw: pointer to the HW structure 1397 * 1398 * Configures the link for auto-neg or forced speed and duplex. Then we check 1399 * for link, once link is established calls to configure collision distance 1400 * and flow control are called. 1401 **/ 1402 static s32 e1000_setup_copper_link_82575(struct e1000_hw *hw) 1403 { 1404 u32 phpm_reg; 1405 u32 ctrl; 1406 s32 ret_val; 1407 1408 DEBUGFUNC("e1000_setup_copper_link_82575"); 1409 1410 ctrl = E1000_READ_REG(hw, E1000_CTRL); 1411 ctrl |= E1000_CTRL_SLU; 1412 ctrl &= ~(E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX); 1413 E1000_WRITE_REG(hw, E1000_CTRL, ctrl); 1414 1415 /* Clear Go Link Disconnect bit on supported devices */ 1416 switch (hw->mac.type) { 1417 case e1000_82580: 1418 case e1000_i350: 1419 case e1000_i210: 1420 case e1000_i211: 1421 phpm_reg = E1000_READ_REG(hw, E1000_82580_PHY_POWER_MGMT); 1422 phpm_reg &= ~E1000_82580_PM_GO_LINKD; 1423 E1000_WRITE_REG(hw, E1000_82580_PHY_POWER_MGMT, phpm_reg); 1424 break; 1425 default: 1426 break; 1427 } 1428 1429 ret_val = e1000_setup_serdes_link_82575(hw); 1430 if (ret_val) 1431 goto out; 1432 1433 if (e1000_sgmii_active_82575(hw)) { 1434 /* allow time for SFP cage time to power up phy */ 1435 msec_delay(300); 1436 1437 ret_val = hw->phy.ops.reset(hw); 1438 if (ret_val) { 1439 DEBUGOUT("Error resetting the PHY.\n"); 1440 goto out; 1441 } 1442 } 1443 switch (hw->phy.type) { 1444 case e1000_phy_i210: 1445 /* FALLTHROUGH */ 1446 case e1000_phy_m88: 1447 switch (hw->phy.id) { 1448 case I347AT4_E_PHY_ID: 1449 /* FALLTHROUGH */ 1450 case M88E1112_E_PHY_ID: 1451 /* FALLTHROUGH */ 1452 case M88E1340M_E_PHY_ID: 1453 /* FALLTHROUGH */ 1454 case M88E1543_E_PHY_ID: 1455 /* FALLTHROUGH */ 1456 case M88E1512_E_PHY_ID: 1457 /* FALLTHROUGH */ 1458 case I210_I_PHY_ID: 1459 ret_val = e1000_copper_link_setup_m88_gen2(hw); 1460 break; 1461 default: 1462 ret_val = e1000_copper_link_setup_m88(hw); 1463 break; 1464 } 1465 break; 1466 case e1000_phy_igp_3: 1467 ret_val = e1000_copper_link_setup_igp(hw); 1468 break; 1469 case e1000_phy_82580: 1470 ret_val = e1000_copper_link_setup_82577(hw); 1471 break; 1472 default: 1473 ret_val = -E1000_ERR_PHY; 1474 break; 1475 } 1476 1477 if (ret_val) 1478 goto out; 1479 1480 ret_val = e1000_setup_copper_link_generic(hw); 1481 out: 1482 return ret_val; 1483 } 1484 1485 /** 1486 * e1000_setup_serdes_link_82575 - Setup link for serdes 1487 * @hw: pointer to the HW structure 1488 * 1489 * Configure the physical coding sub-layer (PCS) link. The PCS link is 1490 * used on copper connections where the serialized gigabit media independent 1491 * interface (sgmii), or serdes fiber is being used. Configures the link 1492 * for auto-negotiation or forces speed/duplex. 1493 **/ 1494 static s32 e1000_setup_serdes_link_82575(struct e1000_hw *hw) 1495 { 1496 u32 ctrl_ext, ctrl_reg, reg, anadv_reg; 1497 bool pcs_autoneg; 1498 s32 ret_val = E1000_SUCCESS; 1499 u16 data; 1500 1501 DEBUGFUNC("e1000_setup_serdes_link_82575"); 1502 1503 if ((hw->phy.media_type != e1000_media_type_internal_serdes) && 1504 !e1000_sgmii_active_82575(hw)) 1505 return ret_val; 1506 1507 /* 1508 * On the 82575, SerDes loopback mode persists until it is 1509 * explicitly turned off or a power cycle is performed. A read to 1510 * the register does not indicate its status. Therefore, we ensure 1511 * loopback mode is disabled during initialization. 1512 */ 1513 E1000_WRITE_REG(hw, E1000_SCTL, E1000_SCTL_DISABLE_SERDES_LOOPBACK); 1514 1515 /* power on the sfp cage if present */ 1516 ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT); 1517 ctrl_ext &= ~E1000_CTRL_EXT_SDP3_DATA; 1518 E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext); 1519 1520 ctrl_reg = E1000_READ_REG(hw, E1000_CTRL); 1521 ctrl_reg |= E1000_CTRL_SLU; 1522 1523 /* set both sw defined pins on 82575/82576*/ 1524 if (hw->mac.type == e1000_82575 || hw->mac.type == e1000_82576) 1525 ctrl_reg |= E1000_CTRL_SWDPIN0 | E1000_CTRL_SWDPIN1; 1526 1527 reg = E1000_READ_REG(hw, E1000_PCS_LCTL); 1528 1529 /* default pcs_autoneg to the same setting as mac autoneg */ 1530 pcs_autoneg = hw->mac.autoneg; 1531 1532 switch (ctrl_ext & E1000_CTRL_EXT_LINK_MODE_MASK) { 1533 case E1000_CTRL_EXT_LINK_MODE_SGMII: 1534 /* sgmii mode lets the phy handle forcing speed/duplex */ 1535 pcs_autoneg = true; 1536 /* autoneg time out should be disabled for SGMII mode */ 1537 reg &= ~(E1000_PCS_LCTL_AN_TIMEOUT); 1538 break; 1539 case E1000_CTRL_EXT_LINK_MODE_1000BASE_KX: 1540 /* disable PCS autoneg and support parallel detect only */ 1541 pcs_autoneg = false; 1542 /* FALLTHROUGH */ 1543 default: 1544 if (hw->mac.type == e1000_82575 || 1545 hw->mac.type == e1000_82576) { 1546 ret_val = hw->nvm.ops.read(hw, NVM_COMPAT, 1, &data); 1547 if (ret_val) { 1548 DEBUGOUT("NVM Read Error\n"); 1549 return ret_val; 1550 } 1551 1552 if (data & E1000_EEPROM_PCS_AUTONEG_DISABLE_BIT) 1553 pcs_autoneg = false; 1554 } 1555 1556 /* 1557 * non-SGMII modes only supports a speed of 1000/Full for the 1558 * link so it is best to just force the MAC and let the pcs 1559 * link either autoneg or be forced to 1000/Full 1560 */ 1561 ctrl_reg |= E1000_CTRL_SPD_1000 | E1000_CTRL_FRCSPD | 1562 E1000_CTRL_FD | E1000_CTRL_FRCDPX; 1563 1564 /* set speed of 1000/Full if speed/duplex is forced */ 1565 reg |= E1000_PCS_LCTL_FSV_1000 | E1000_PCS_LCTL_FDV_FULL; 1566 break; 1567 } 1568 1569 E1000_WRITE_REG(hw, E1000_CTRL, ctrl_reg); 1570 1571 /* 1572 * New SerDes mode allows for forcing speed or autonegotiating speed 1573 * at 1gb. Autoneg should be default set by most drivers. This is the 1574 * mode that will be compatible with older link partners and switches. 1575 * However, both are supported by the hardware and some drivers/tools. 1576 */ 1577 reg &= ~(E1000_PCS_LCTL_AN_ENABLE | E1000_PCS_LCTL_FLV_LINK_UP | 1578 E1000_PCS_LCTL_FSD | E1000_PCS_LCTL_FORCE_LINK); 1579 1580 if (pcs_autoneg) { 1581 /* Set PCS register for autoneg */ 1582 reg |= E1000_PCS_LCTL_AN_ENABLE | /* Enable Autoneg */ 1583 E1000_PCS_LCTL_AN_RESTART; /* Restart autoneg */ 1584 1585 /* Disable force flow control for autoneg */ 1586 reg &= ~E1000_PCS_LCTL_FORCE_FCTRL; 1587 1588 /* Configure flow control advertisement for autoneg */ 1589 anadv_reg = E1000_READ_REG(hw, E1000_PCS_ANADV); 1590 anadv_reg &= ~(E1000_TXCW_ASM_DIR | E1000_TXCW_PAUSE); 1591 1592 switch (hw->fc.requested_mode) { 1593 case e1000_fc_full: 1594 case e1000_fc_rx_pause: 1595 anadv_reg |= E1000_TXCW_ASM_DIR; 1596 anadv_reg |= E1000_TXCW_PAUSE; 1597 break; 1598 case e1000_fc_tx_pause: 1599 anadv_reg |= E1000_TXCW_ASM_DIR; 1600 break; 1601 default: 1602 break; 1603 } 1604 1605 E1000_WRITE_REG(hw, E1000_PCS_ANADV, anadv_reg); 1606 1607 DEBUGOUT1("Configuring Autoneg:PCS_LCTL=0x%08X\n", reg); 1608 } else { 1609 /* Set PCS register for forced link */ 1610 reg |= E1000_PCS_LCTL_FSD; /* Force Speed */ 1611 1612 /* Force flow control for forced link */ 1613 reg |= E1000_PCS_LCTL_FORCE_FCTRL; 1614 1615 DEBUGOUT1("Configuring Forced Link:PCS_LCTL=0x%08X\n", reg); 1616 } 1617 1618 E1000_WRITE_REG(hw, E1000_PCS_LCTL, reg); 1619 1620 if (!pcs_autoneg && !e1000_sgmii_active_82575(hw)) 1621 e1000_force_mac_fc_generic(hw); 1622 1623 return ret_val; 1624 } 1625 1626 /** 1627 * e1000_get_media_type_82575 - derives current media type. 1628 * @hw: pointer to the HW structure 1629 * 1630 * The media type is chosen reflecting few settings. 1631 * The following are taken into account: 1632 * - link mode set in the current port Init Control Word #3 1633 * - current link mode settings in CSR register 1634 * - MDIO vs. I2C PHY control interface chosen 1635 * - SFP module media type 1636 **/ 1637 static s32 e1000_get_media_type_82575(struct e1000_hw *hw) 1638 { 1639 struct e1000_dev_spec_82575 *dev_spec = &hw->dev_spec._82575; 1640 s32 ret_val = E1000_SUCCESS; 1641 u32 ctrl_ext = 0; 1642 u32 link_mode = 0; 1643 1644 /* Set internal phy as default */ 1645 dev_spec->sgmii_active = false; 1646 dev_spec->module_plugged = false; 1647 1648 /* Get CSR setting */ 1649 ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT); 1650 1651 /* extract link mode setting */ 1652 link_mode = ctrl_ext & E1000_CTRL_EXT_LINK_MODE_MASK; 1653 1654 switch (link_mode) { 1655 case E1000_CTRL_EXT_LINK_MODE_1000BASE_KX: 1656 hw->phy.media_type = e1000_media_type_internal_serdes; 1657 break; 1658 case E1000_CTRL_EXT_LINK_MODE_GMII: 1659 hw->phy.media_type = e1000_media_type_copper; 1660 break; 1661 case E1000_CTRL_EXT_LINK_MODE_SGMII: 1662 /* Get phy control interface type set (MDIO vs. I2C)*/ 1663 if (e1000_sgmii_uses_mdio_82575(hw)) { 1664 hw->phy.media_type = e1000_media_type_copper; 1665 dev_spec->sgmii_active = true; 1666 break; 1667 } 1668 /* fall through for I2C based SGMII */ 1669 /* FALLTHROUGH */ 1670 case E1000_CTRL_EXT_LINK_MODE_PCIE_SERDES: 1671 /* read media type from SFP EEPROM */ 1672 ret_val = e1000_set_sfp_media_type_82575(hw); 1673 if ((ret_val != E1000_SUCCESS) || 1674 (hw->phy.media_type == e1000_media_type_unknown)) { 1675 /* 1676 * If media type was not identified then return media 1677 * type defined by the CTRL_EXT settings. 1678 */ 1679 hw->phy.media_type = e1000_media_type_internal_serdes; 1680 1681 if (link_mode == E1000_CTRL_EXT_LINK_MODE_SGMII) { 1682 hw->phy.media_type = e1000_media_type_copper; 1683 dev_spec->sgmii_active = true; 1684 } 1685 1686 break; 1687 } 1688 1689 /* do not change link mode for 100BaseFX */ 1690 if (dev_spec->eth_flags.e100_base_fx) 1691 break; 1692 1693 /* change current link mode setting */ 1694 ctrl_ext &= ~E1000_CTRL_EXT_LINK_MODE_MASK; 1695 1696 if (hw->phy.media_type == e1000_media_type_copper) 1697 ctrl_ext |= E1000_CTRL_EXT_LINK_MODE_SGMII; 1698 else 1699 ctrl_ext |= E1000_CTRL_EXT_LINK_MODE_PCIE_SERDES; 1700 1701 E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext); 1702 1703 break; 1704 } 1705 1706 return ret_val; 1707 } 1708 1709 /** 1710 * e1000_set_sfp_media_type_82575 - derives SFP module media type. 1711 * @hw: pointer to the HW structure 1712 * 1713 * The media type is chosen based on SFP module. 1714 * compatibility flags retrieved from SFP ID EEPROM. 1715 **/ 1716 static s32 e1000_set_sfp_media_type_82575(struct e1000_hw *hw) 1717 { 1718 s32 ret_val = E1000_ERR_CONFIG; 1719 u32 ctrl_ext = 0; 1720 struct e1000_dev_spec_82575 *dev_spec = &hw->dev_spec._82575; 1721 struct sfp_e1000_flags *eth_flags = &dev_spec->eth_flags; 1722 u8 tranceiver_type = 0; 1723 s32 timeout = 3; 1724 1725 /* Turn I2C interface ON and power on sfp cage */ 1726 ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT); 1727 ctrl_ext &= ~E1000_CTRL_EXT_SDP3_DATA; 1728 E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext | E1000_CTRL_I2C_ENA); 1729 1730 E1000_WRITE_FLUSH(hw); 1731 1732 /* Read SFP module data */ 1733 while (timeout) { 1734 ret_val = e1000_read_sfp_data_byte(hw, 1735 E1000_I2CCMD_SFP_DATA_ADDR(E1000_SFF_IDENTIFIER_OFFSET), 1736 &tranceiver_type); 1737 if (ret_val == E1000_SUCCESS) 1738 break; 1739 msec_delay(100); 1740 timeout--; 1741 } 1742 if (ret_val != E1000_SUCCESS) 1743 goto out; 1744 1745 ret_val = e1000_read_sfp_data_byte(hw, 1746 E1000_I2CCMD_SFP_DATA_ADDR(E1000_SFF_ETH_FLAGS_OFFSET), 1747 (u8 *)eth_flags); 1748 if (ret_val != E1000_SUCCESS) 1749 goto out; 1750 1751 /* Check if there is some SFP module plugged and powered */ 1752 if ((tranceiver_type == E1000_SFF_IDENTIFIER_SFP) || 1753 (tranceiver_type == E1000_SFF_IDENTIFIER_SFF)) { 1754 dev_spec->module_plugged = true; 1755 if (eth_flags->e1000_base_lx || eth_flags->e1000_base_sx) { 1756 hw->phy.media_type = e1000_media_type_internal_serdes; 1757 } else if (eth_flags->e100_base_fx) { 1758 dev_spec->sgmii_active = true; 1759 hw->phy.media_type = e1000_media_type_internal_serdes; 1760 } else if (eth_flags->e1000_base_t) { 1761 dev_spec->sgmii_active = true; 1762 hw->phy.media_type = e1000_media_type_copper; 1763 } else { 1764 hw->phy.media_type = e1000_media_type_unknown; 1765 DEBUGOUT("PHY module has not been recognized\n"); 1766 goto out; 1767 } 1768 } else { 1769 hw->phy.media_type = e1000_media_type_unknown; 1770 } 1771 ret_val = E1000_SUCCESS; 1772 out: 1773 /* Restore I2C interface setting */ 1774 E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext); 1775 return ret_val; 1776 } 1777 1778 /** 1779 * e1000_valid_led_default_82575 - Verify a valid default LED config 1780 * @hw: pointer to the HW structure 1781 * @data: pointer to the NVM (EEPROM) 1782 * 1783 * Read the EEPROM for the current default LED configuration. If the 1784 * LED configuration is not valid, set to a valid LED configuration. 1785 **/ 1786 static s32 e1000_valid_led_default_82575(struct e1000_hw *hw, u16 *data) 1787 { 1788 s32 ret_val; 1789 1790 DEBUGFUNC("e1000_valid_led_default_82575"); 1791 1792 ret_val = hw->nvm.ops.read(hw, NVM_ID_LED_SETTINGS, 1, data); 1793 if (ret_val) { 1794 DEBUGOUT("NVM Read Error\n"); 1795 goto out; 1796 } 1797 1798 if (*data == ID_LED_RESERVED_0000 || *data == ID_LED_RESERVED_FFFF) { 1799 switch (hw->phy.media_type) { 1800 case e1000_media_type_internal_serdes: 1801 *data = ID_LED_DEFAULT_82575_SERDES; 1802 break; 1803 case e1000_media_type_copper: 1804 default: 1805 *data = ID_LED_DEFAULT; 1806 break; 1807 } 1808 } 1809 out: 1810 return ret_val; 1811 } 1812 1813 /** 1814 * e1000_sgmii_active_82575 - Return sgmii state 1815 * @hw: pointer to the HW structure 1816 * 1817 * 82575 silicon has a serialized gigabit media independent interface (sgmii) 1818 * which can be enabled for use in the embedded applications. Simply 1819 * return the current state of the sgmii interface. 1820 **/ 1821 static bool e1000_sgmii_active_82575(struct e1000_hw *hw) 1822 { 1823 struct e1000_dev_spec_82575 *dev_spec = &hw->dev_spec._82575; 1824 return dev_spec->sgmii_active; 1825 } 1826 1827 /** 1828 * e1000_reset_init_script_82575 - Inits HW defaults after reset 1829 * @hw: pointer to the HW structure 1830 * 1831 * Inits recommended HW defaults after a reset when there is no EEPROM 1832 * detected. This is only for the 82575. 1833 **/ 1834 s32 e1000_reset_init_script_82575(struct e1000_hw *hw) 1835 { 1836 DEBUGFUNC("e1000_reset_init_script_82575"); 1837 1838 if (hw->mac.type == e1000_82575) { 1839 DEBUGOUT("Running reset init script for 82575\n"); 1840 /* SerDes configuration via SERDESCTRL */ 1841 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCTL, 0x00, 0x0C); 1842 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCTL, 0x01, 0x78); 1843 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCTL, 0x1B, 0x23); 1844 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCTL, 0x23, 0x15); 1845 1846 /* CCM configuration via CCMCTL register */ 1847 e1000_write_8bit_ctrl_reg_generic(hw, E1000_CCMCTL, 0x14, 0x00); 1848 e1000_write_8bit_ctrl_reg_generic(hw, E1000_CCMCTL, 0x10, 0x00); 1849 1850 /* PCIe lanes configuration */ 1851 e1000_write_8bit_ctrl_reg_generic(hw, E1000_GIOCTL, 0x00, 0xEC); 1852 e1000_write_8bit_ctrl_reg_generic(hw, E1000_GIOCTL, 0x61, 0xDF); 1853 e1000_write_8bit_ctrl_reg_generic(hw, E1000_GIOCTL, 0x34, 0x05); 1854 e1000_write_8bit_ctrl_reg_generic(hw, E1000_GIOCTL, 0x2F, 0x81); 1855 1856 /* PCIe PLL Configuration */ 1857 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCCTL, 0x02, 0x47); 1858 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCCTL, 0x14, 0x00); 1859 e1000_write_8bit_ctrl_reg_generic(hw, E1000_SCCTL, 0x10, 0x00); 1860 } 1861 1862 return E1000_SUCCESS; 1863 } 1864 1865 /** 1866 * e1000_read_mac_addr_82575 - Read device MAC address 1867 * @hw: pointer to the HW structure 1868 **/ 1869 static s32 e1000_read_mac_addr_82575(struct e1000_hw *hw) 1870 { 1871 s32 ret_val; 1872 1873 DEBUGFUNC("e1000_read_mac_addr_82575"); 1874 1875 /* 1876 * If there's an alternate MAC address place it in RAR0 1877 * so that it will override the Si installed default perm 1878 * address. 1879 */ 1880 ret_val = e1000_check_alt_mac_addr_generic(hw); 1881 if (ret_val) 1882 goto out; 1883 1884 ret_val = e1000_read_mac_addr_generic(hw); 1885 1886 out: 1887 return ret_val; 1888 } 1889 1890 /** 1891 * e1000_config_collision_dist_82575 - Configure collision distance 1892 * @hw: pointer to the HW structure 1893 * 1894 * Configures the collision distance to the default value and is used 1895 * during link setup. 1896 **/ 1897 static void e1000_config_collision_dist_82575(struct e1000_hw *hw) 1898 { 1899 u32 tctl_ext; 1900 1901 DEBUGFUNC("e1000_config_collision_dist_82575"); 1902 1903 tctl_ext = E1000_READ_REG(hw, E1000_TCTL_EXT); 1904 1905 tctl_ext &= ~E1000_TCTL_EXT_COLD; 1906 tctl_ext |= E1000_COLLISION_DISTANCE << E1000_TCTL_EXT_COLD_SHIFT; 1907 1908 E1000_WRITE_REG(hw, E1000_TCTL_EXT, tctl_ext); 1909 E1000_WRITE_FLUSH(hw); 1910 } 1911 1912 /** 1913 * e1000_clear_hw_cntrs_82575 - Clear device specific hardware counters 1914 * @hw: pointer to the HW structure 1915 * 1916 * Clears the hardware counters by reading the counter registers. 1917 **/ 1918 static void e1000_clear_hw_cntrs_82575(struct e1000_hw *hw) 1919 { 1920 DEBUGFUNC("e1000_clear_hw_cntrs_82575"); 1921 1922 e1000_clear_hw_cntrs_base_generic(hw); 1923 1924 E1000_READ_REG(hw, E1000_PRC64); 1925 E1000_READ_REG(hw, E1000_PRC127); 1926 E1000_READ_REG(hw, E1000_PRC255); 1927 E1000_READ_REG(hw, E1000_PRC511); 1928 E1000_READ_REG(hw, E1000_PRC1023); 1929 E1000_READ_REG(hw, E1000_PRC1522); 1930 E1000_READ_REG(hw, E1000_PTC64); 1931 E1000_READ_REG(hw, E1000_PTC127); 1932 E1000_READ_REG(hw, E1000_PTC255); 1933 E1000_READ_REG(hw, E1000_PTC511); 1934 E1000_READ_REG(hw, E1000_PTC1023); 1935 E1000_READ_REG(hw, E1000_PTC1522); 1936 1937 E1000_READ_REG(hw, E1000_ALGNERRC); 1938 E1000_READ_REG(hw, E1000_RXERRC); 1939 E1000_READ_REG(hw, E1000_TNCRS); 1940 E1000_READ_REG(hw, E1000_CEXTERR); 1941 E1000_READ_REG(hw, E1000_TSCTC); 1942 E1000_READ_REG(hw, E1000_TSCTFC); 1943 1944 E1000_READ_REG(hw, E1000_MGTPRC); 1945 E1000_READ_REG(hw, E1000_MGTPDC); 1946 E1000_READ_REG(hw, E1000_MGTPTC); 1947 1948 E1000_READ_REG(hw, E1000_IAC); 1949 E1000_READ_REG(hw, E1000_ICRXOC); 1950 1951 E1000_READ_REG(hw, E1000_ICRXPTC); 1952 E1000_READ_REG(hw, E1000_ICRXATC); 1953 E1000_READ_REG(hw, E1000_ICTXPTC); 1954 E1000_READ_REG(hw, E1000_ICTXATC); 1955 E1000_READ_REG(hw, E1000_ICTXQEC); 1956 E1000_READ_REG(hw, E1000_ICTXQMTC); 1957 E1000_READ_REG(hw, E1000_ICRXDMTC); 1958 1959 E1000_READ_REG(hw, E1000_CBTMPC); 1960 E1000_READ_REG(hw, E1000_HTDPMC); 1961 E1000_READ_REG(hw, E1000_CBRMPC); 1962 E1000_READ_REG(hw, E1000_RPTHC); 1963 E1000_READ_REG(hw, E1000_HGPTC); 1964 E1000_READ_REG(hw, E1000_HTCBDPC); 1965 E1000_READ_REG(hw, E1000_HGORCL); 1966 E1000_READ_REG(hw, E1000_HGORCH); 1967 E1000_READ_REG(hw, E1000_HGOTCL); 1968 E1000_READ_REG(hw, E1000_HGOTCH); 1969 E1000_READ_REG(hw, E1000_LENERRS); 1970 1971 /* This register should not be read in copper configurations */ 1972 if ((hw->phy.media_type == e1000_media_type_internal_serdes) || 1973 e1000_sgmii_active_82575(hw)) 1974 E1000_READ_REG(hw, E1000_SCVPC); 1975 } 1976 1977 /** 1978 * e1000_set_pcie_completion_timeout - set pci-e completion timeout 1979 * @hw: pointer to the HW structure 1980 * 1981 * The defaults for 82575 and 82576 should be in the range of 50us to 50ms, 1982 * however the hardware default for these parts is 500us to 1ms which is less 1983 * than the 10ms recommended by the pci-e spec. To address this we need to 1984 * increase the value to either 10ms to 200ms for capability version 1 config, 1985 * or 16ms to 55ms for version 2. 1986 **/ 1987 static s32 e1000_set_pcie_completion_timeout(struct e1000_hw *hw) 1988 { 1989 u32 gcr = E1000_READ_REG(hw, E1000_GCR); 1990 s32 ret_val = E1000_SUCCESS; 1991 u16 pcie_devctl2; 1992 1993 /* only take action if timeout value is defaulted to 0 */ 1994 if (gcr & E1000_GCR_CMPL_TMOUT_MASK) 1995 goto out; 1996 1997 /* 1998 * if capababilities version is type 1 we can write the 1999 * timeout of 10ms to 200ms through the GCR register 2000 */ 2001 if (!(gcr & E1000_GCR_CAP_VER2)) { 2002 gcr |= E1000_GCR_CMPL_TMOUT_10ms; 2003 goto out; 2004 } 2005 2006 /* 2007 * for version 2 capabilities we need to write the config space 2008 * directly in order to set the completion timeout value for 2009 * 16ms to 55ms 2010 */ 2011 ret_val = e1000_read_pcie_cap_reg(hw, PCIE_DEVICE_CONTROL2, 2012 &pcie_devctl2); 2013 if (ret_val) 2014 goto out; 2015 2016 pcie_devctl2 |= PCIE_DEVICE_CONTROL2_16ms; 2017 2018 ret_val = e1000_write_pcie_cap_reg(hw, PCIE_DEVICE_CONTROL2, 2019 &pcie_devctl2); 2020 out: 2021 /* disable completion timeout resend */ 2022 gcr &= ~E1000_GCR_CMPL_TMOUT_RESEND; 2023 2024 E1000_WRITE_REG(hw, E1000_GCR, gcr); 2025 return ret_val; 2026 } 2027 2028 /** 2029 * e1000_vmdq_set_anti_spoofing_pf - enable or disable anti-spoofing 2030 * @hw: pointer to the hardware struct 2031 * @enable: state to enter, either enabled or disabled 2032 * @pf: Physical Function pool - do not set anti-spoofing for the PF 2033 * 2034 * enables/disables L2 switch anti-spoofing functionality. 2035 **/ 2036 void e1000_vmdq_set_anti_spoofing_pf(struct e1000_hw *hw, bool enable, int pf) 2037 { 2038 u32 reg_val, reg_offset; 2039 2040 switch (hw->mac.type) { 2041 case e1000_82576: 2042 reg_offset = E1000_DTXSWC; 2043 break; 2044 case e1000_i350: 2045 case e1000_i354: 2046 reg_offset = E1000_TXSWC; 2047 break; 2048 default: 2049 return; 2050 } 2051 2052 reg_val = E1000_READ_REG(hw, reg_offset); 2053 if (enable) { 2054 reg_val |= (E1000_DTXSWC_MAC_SPOOF_MASK | 2055 E1000_DTXSWC_VLAN_SPOOF_MASK); 2056 /* The PF can spoof - it has to in order to 2057 * support emulation mode NICs 2058 */ 2059 reg_val ^= (1 << pf | 1 << (pf + MAX_NUM_VFS)); 2060 } else { 2061 reg_val &= ~(E1000_DTXSWC_MAC_SPOOF_MASK | 2062 E1000_DTXSWC_VLAN_SPOOF_MASK); 2063 } 2064 E1000_WRITE_REG(hw, reg_offset, reg_val); 2065 } 2066 2067 /** 2068 * e1000_vmdq_set_loopback_pf - enable or disable vmdq loopback 2069 * @hw: pointer to the hardware struct 2070 * @enable: state to enter, either enabled or disabled 2071 * 2072 * enables/disables L2 switch loopback functionality. 2073 **/ 2074 void e1000_vmdq_set_loopback_pf(struct e1000_hw *hw, bool enable) 2075 { 2076 u32 dtxswc; 2077 2078 switch (hw->mac.type) { 2079 case e1000_82576: 2080 dtxswc = E1000_READ_REG(hw, E1000_DTXSWC); 2081 if (enable) 2082 dtxswc |= E1000_DTXSWC_VMDQ_LOOPBACK_EN; 2083 else 2084 dtxswc &= ~E1000_DTXSWC_VMDQ_LOOPBACK_EN; 2085 E1000_WRITE_REG(hw, E1000_DTXSWC, dtxswc); 2086 break; 2087 case e1000_i350: 2088 case e1000_i354: 2089 dtxswc = E1000_READ_REG(hw, E1000_TXSWC); 2090 if (enable) 2091 dtxswc |= E1000_DTXSWC_VMDQ_LOOPBACK_EN; 2092 else 2093 dtxswc &= ~E1000_DTXSWC_VMDQ_LOOPBACK_EN; 2094 E1000_WRITE_REG(hw, E1000_TXSWC, dtxswc); 2095 break; 2096 default: 2097 /* Currently no other hardware supports loopback */ 2098 break; 2099 } 2100 2101 2102 } 2103 2104 /** 2105 * e1000_vmdq_set_replication_pf - enable or disable vmdq replication 2106 * @hw: pointer to the hardware struct 2107 * @enable: state to enter, either enabled or disabled 2108 * 2109 * enables/disables replication of packets across multiple pools. 2110 **/ 2111 void e1000_vmdq_set_replication_pf(struct e1000_hw *hw, bool enable) 2112 { 2113 u32 vt_ctl = E1000_READ_REG(hw, E1000_VT_CTL); 2114 2115 if (enable) 2116 vt_ctl |= E1000_VT_CTL_VM_REPL_EN; 2117 else 2118 vt_ctl &= ~E1000_VT_CTL_VM_REPL_EN; 2119 2120 E1000_WRITE_REG(hw, E1000_VT_CTL, vt_ctl); 2121 } 2122 2123 /** 2124 * e1000_read_phy_reg_82580 - Read 82580 MDI control register 2125 * @hw: pointer to the HW structure 2126 * @offset: register offset to be read 2127 * @data: pointer to the read data 2128 * 2129 * Reads the MDI control register in the PHY at offset and stores the 2130 * information read to data. 2131 **/ 2132 static s32 e1000_read_phy_reg_82580(struct e1000_hw *hw, u32 offset, u16 *data) 2133 { 2134 s32 ret_val; 2135 2136 DEBUGFUNC("e1000_read_phy_reg_82580"); 2137 2138 ret_val = hw->phy.ops.acquire(hw); 2139 if (ret_val) 2140 goto out; 2141 2142 ret_val = e1000_read_phy_reg_mdic(hw, offset, data); 2143 2144 hw->phy.ops.release(hw); 2145 2146 out: 2147 return ret_val; 2148 } 2149 2150 /** 2151 * e1000_write_phy_reg_82580 - Write 82580 MDI control register 2152 * @hw: pointer to the HW structure 2153 * @offset: register offset to write to 2154 * @data: data to write to register at offset 2155 * 2156 * Writes data to MDI control register in the PHY at offset. 2157 **/ 2158 static s32 e1000_write_phy_reg_82580(struct e1000_hw *hw, u32 offset, u16 data) 2159 { 2160 s32 ret_val; 2161 2162 DEBUGFUNC("e1000_write_phy_reg_82580"); 2163 2164 ret_val = hw->phy.ops.acquire(hw); 2165 if (ret_val) 2166 goto out; 2167 2168 ret_val = e1000_write_phy_reg_mdic(hw, offset, data); 2169 2170 hw->phy.ops.release(hw); 2171 2172 out: 2173 return ret_val; 2174 } 2175 2176 /** 2177 * e1000_reset_mdicnfg_82580 - Reset MDICNFG destination and com_mdio bits 2178 * @hw: pointer to the HW structure 2179 * 2180 * This resets the MDICNFG.Destination and MDICNFG.Com_MDIO bits based on 2181 * the values found in the EEPROM. This addresses an issue in which these 2182 * bits are not restored from EEPROM after reset. 2183 **/ 2184 static s32 e1000_reset_mdicnfg_82580(struct e1000_hw *hw) 2185 { 2186 s32 ret_val = E1000_SUCCESS; 2187 u32 mdicnfg; 2188 u16 nvm_data = 0; 2189 2190 DEBUGFUNC("e1000_reset_mdicnfg_82580"); 2191 2192 if (hw->mac.type != e1000_82580) 2193 goto out; 2194 if (!e1000_sgmii_active_82575(hw)) 2195 goto out; 2196 2197 ret_val = hw->nvm.ops.read(hw, NVM_INIT_CONTROL3_PORT_A + 2198 NVM_82580_LAN_FUNC_OFFSET(hw->bus.func), 1, 2199 &nvm_data); 2200 if (ret_val) { 2201 DEBUGOUT("NVM Read Error\n"); 2202 goto out; 2203 } 2204 2205 mdicnfg = E1000_READ_REG(hw, E1000_MDICNFG); 2206 if (nvm_data & NVM_WORD24_EXT_MDIO) 2207 mdicnfg |= E1000_MDICNFG_EXT_MDIO; 2208 if (nvm_data & NVM_WORD24_COM_MDIO) 2209 mdicnfg |= E1000_MDICNFG_COM_MDIO; 2210 E1000_WRITE_REG(hw, E1000_MDICNFG, mdicnfg); 2211 out: 2212 return ret_val; 2213 } 2214 2215 /** 2216 * e1000_reset_hw_82580 - Reset hardware 2217 * @hw: pointer to the HW structure 2218 * 2219 * This resets function or entire device (all ports, etc.) 2220 * to a known state. 2221 **/ 2222 static s32 e1000_reset_hw_82580(struct e1000_hw *hw) 2223 { 2224 s32 ret_val = E1000_SUCCESS; 2225 /* BH SW mailbox bit in SW_FW_SYNC */ 2226 u16 swmbsw_mask = E1000_SW_SYNCH_MB; 2227 u32 ctrl; 2228 bool global_device_reset = hw->dev_spec._82575.global_device_reset; 2229 2230 DEBUGFUNC("e1000_reset_hw_82580"); 2231 2232 hw->dev_spec._82575.global_device_reset = false; 2233 2234 /* 82580 does not reliably do global_device_reset due to hw errata */ 2235 if (hw->mac.type == e1000_82580) 2236 global_device_reset = false; 2237 2238 /* Get current control state. */ 2239 ctrl = E1000_READ_REG(hw, E1000_CTRL); 2240 2241 /* 2242 * Prevent the PCI-E bus from sticking if there is no TLP connection 2243 * on the last TLP read/write transaction when MAC is reset. 2244 */ 2245 ret_val = e1000_disable_pcie_master_generic(hw); 2246 if (ret_val) 2247 DEBUGOUT("PCI-E Master disable polling has failed.\n"); 2248 2249 DEBUGOUT("Masking off all interrupts\n"); 2250 E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff); 2251 E1000_WRITE_REG(hw, E1000_RCTL, 0); 2252 E1000_WRITE_REG(hw, E1000_TCTL, E1000_TCTL_PSP); 2253 E1000_WRITE_FLUSH(hw); 2254 2255 msec_delay(10); 2256 2257 /* Determine whether or not a global dev reset is requested */ 2258 if (global_device_reset && hw->mac.ops.acquire_swfw_sync(hw, 2259 swmbsw_mask)) 2260 global_device_reset = false; 2261 2262 if (global_device_reset && !(E1000_READ_REG(hw, E1000_STATUS) & 2263 E1000_STAT_DEV_RST_SET)) 2264 ctrl |= E1000_CTRL_DEV_RST; 2265 else 2266 ctrl |= E1000_CTRL_RST; 2267 2268 E1000_WRITE_REG(hw, E1000_CTRL, ctrl); 2269 2270 switch (hw->device_id) { 2271 case E1000_DEV_ID_DH89XXCC_SGMII: 2272 break; 2273 default: 2274 E1000_WRITE_FLUSH(hw); 2275 break; 2276 } 2277 2278 /* Add delay to insure DEV_RST or RST has time to complete */ 2279 msec_delay(5); 2280 2281 ret_val = e1000_get_auto_rd_done_generic(hw); 2282 if (ret_val) { 2283 /* 2284 * When auto config read does not complete, do not 2285 * return with an error. This can happen in situations 2286 * where there is no eeprom and prevents getting link. 2287 */ 2288 DEBUGOUT("Auto Read Done did not complete\n"); 2289 } 2290 2291 /* clear global device reset status bit */ 2292 E1000_WRITE_REG(hw, E1000_STATUS, E1000_STAT_DEV_RST_SET); 2293 2294 /* Clear any pending interrupt events. */ 2295 E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff); 2296 E1000_READ_REG(hw, E1000_ICR); 2297 2298 ret_val = e1000_reset_mdicnfg_82580(hw); 2299 if (ret_val) 2300 DEBUGOUT("Could not reset MDICNFG based on EEPROM\n"); 2301 2302 /* Install any alternate MAC address into RAR0 */ 2303 ret_val = e1000_check_alt_mac_addr_generic(hw); 2304 2305 /* Release semaphore */ 2306 if (global_device_reset) 2307 hw->mac.ops.release_swfw_sync(hw, swmbsw_mask); 2308 2309 return ret_val; 2310 } 2311 2312 /** 2313 * e1000_rxpbs_adjust_82580 - adjust RXPBS value to reflect actual Rx PBA size 2314 * @data: data received by reading RXPBS register 2315 * 2316 * The 82580 uses a table based approach for packet buffer allocation sizes. 2317 * This function converts the retrieved value into the correct table value 2318 * 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 2319 * 0x0 36 72 144 1 2 4 8 16 2320 * 0x8 35 70 140 rsv rsv rsv rsv rsv 2321 */ 2322 u16 e1000_rxpbs_adjust_82580(u32 data) 2323 { 2324 u16 ret_val = 0; 2325 2326 if (data < E1000_82580_RXPBS_TABLE_SIZE) 2327 ret_val = e1000_82580_rxpbs_table[data]; 2328 2329 return ret_val; 2330 } 2331 2332 /** 2333 * e1000_validate_nvm_checksum_with_offset - Validate EEPROM 2334 * checksum 2335 * @hw: pointer to the HW structure 2336 * @offset: offset in words of the checksum protected region 2337 * 2338 * Calculates the EEPROM checksum by reading/adding each word of the EEPROM 2339 * and then verifies that the sum of the EEPROM is equal to 0xBABA. 2340 **/ 2341 s32 e1000_validate_nvm_checksum_with_offset(struct e1000_hw *hw, u16 offset) 2342 { 2343 s32 ret_val = E1000_SUCCESS; 2344 u16 checksum = 0; 2345 u16 i, nvm_data; 2346 2347 DEBUGFUNC("e1000_validate_nvm_checksum_with_offset"); 2348 2349 for (i = offset; i < ((NVM_CHECKSUM_REG + offset) + 1); i++) { 2350 ret_val = hw->nvm.ops.read(hw, i, 1, &nvm_data); 2351 if (ret_val) { 2352 DEBUGOUT("NVM Read Error\n"); 2353 goto out; 2354 } 2355 checksum += nvm_data; 2356 } 2357 2358 if (checksum != (u16) NVM_SUM) { 2359 DEBUGOUT("NVM Checksum Invalid\n"); 2360 ret_val = -E1000_ERR_NVM; 2361 goto out; 2362 } 2363 2364 out: 2365 return ret_val; 2366 } 2367 2368 /** 2369 * e1000_update_nvm_checksum_with_offset - Update EEPROM 2370 * checksum 2371 * @hw: pointer to the HW structure 2372 * @offset: offset in words of the checksum protected region 2373 * 2374 * Updates the EEPROM checksum by reading/adding each word of the EEPROM 2375 * up to the checksum. Then calculates the EEPROM checksum and writes the 2376 * value to the EEPROM. 2377 **/ 2378 s32 e1000_update_nvm_checksum_with_offset(struct e1000_hw *hw, u16 offset) 2379 { 2380 s32 ret_val; 2381 u16 checksum = 0; 2382 u16 i, nvm_data; 2383 2384 DEBUGFUNC("e1000_update_nvm_checksum_with_offset"); 2385 2386 for (i = offset; i < (NVM_CHECKSUM_REG + offset); i++) { 2387 ret_val = hw->nvm.ops.read(hw, i, 1, &nvm_data); 2388 if (ret_val) { 2389 DEBUGOUT("NVM Read Error while updating checksum.\n"); 2390 goto out; 2391 } 2392 checksum += nvm_data; 2393 } 2394 checksum = (u16) NVM_SUM - checksum; 2395 ret_val = hw->nvm.ops.write(hw, (NVM_CHECKSUM_REG + offset), 1, 2396 &checksum); 2397 if (ret_val) 2398 DEBUGOUT("NVM Write Error while updating checksum.\n"); 2399 2400 out: 2401 return ret_val; 2402 } 2403 2404 /** 2405 * e1000_validate_nvm_checksum_82580 - Validate EEPROM checksum 2406 * @hw: pointer to the HW structure 2407 * 2408 * Calculates the EEPROM section checksum by reading/adding each word of 2409 * the EEPROM and then verifies that the sum of the EEPROM is 2410 * equal to 0xBABA. 2411 **/ 2412 static s32 e1000_validate_nvm_checksum_82580(struct e1000_hw *hw) 2413 { 2414 s32 ret_val; 2415 u16 eeprom_regions_count = 1; 2416 u16 j, nvm_data; 2417 u16 nvm_offset; 2418 2419 DEBUGFUNC("e1000_validate_nvm_checksum_82580"); 2420 2421 ret_val = hw->nvm.ops.read(hw, NVM_COMPATIBILITY_REG_3, 1, &nvm_data); 2422 if (ret_val) { 2423 DEBUGOUT("NVM Read Error\n"); 2424 goto out; 2425 } 2426 2427 if (nvm_data & NVM_COMPATIBILITY_BIT_MASK) { 2428 /* if chekcsums compatibility bit is set validate checksums 2429 * for all 4 ports. */ 2430 eeprom_regions_count = 4; 2431 } 2432 2433 for (j = 0; j < eeprom_regions_count; j++) { 2434 nvm_offset = NVM_82580_LAN_FUNC_OFFSET(j); 2435 ret_val = e1000_validate_nvm_checksum_with_offset(hw, 2436 nvm_offset); 2437 if (ret_val != E1000_SUCCESS) 2438 goto out; 2439 } 2440 2441 out: 2442 return ret_val; 2443 } 2444 2445 /** 2446 * e1000_update_nvm_checksum_82580 - Update EEPROM checksum 2447 * @hw: pointer to the HW structure 2448 * 2449 * Updates the EEPROM section checksums for all 4 ports by reading/adding 2450 * each word of the EEPROM up to the checksum. Then calculates the EEPROM 2451 * checksum and writes the value to the EEPROM. 2452 **/ 2453 static s32 e1000_update_nvm_checksum_82580(struct e1000_hw *hw) 2454 { 2455 s32 ret_val; 2456 u16 j, nvm_data; 2457 u16 nvm_offset; 2458 2459 DEBUGFUNC("e1000_update_nvm_checksum_82580"); 2460 2461 ret_val = hw->nvm.ops.read(hw, NVM_COMPATIBILITY_REG_3, 1, &nvm_data); 2462 if (ret_val) { 2463 DEBUGOUT("NVM Read Error while updating checksum compatibility bit.\n"); 2464 goto out; 2465 } 2466 2467 if (!(nvm_data & NVM_COMPATIBILITY_BIT_MASK)) { 2468 /* set compatibility bit to validate checksums appropriately */ 2469 nvm_data = nvm_data | NVM_COMPATIBILITY_BIT_MASK; 2470 ret_val = hw->nvm.ops.write(hw, NVM_COMPATIBILITY_REG_3, 1, 2471 &nvm_data); 2472 if (ret_val) { 2473 DEBUGOUT("NVM Write Error while updating checksum compatibility bit.\n"); 2474 goto out; 2475 } 2476 } 2477 2478 for (j = 0; j < 4; j++) { 2479 nvm_offset = NVM_82580_LAN_FUNC_OFFSET(j); 2480 ret_val = e1000_update_nvm_checksum_with_offset(hw, nvm_offset); 2481 if (ret_val) 2482 goto out; 2483 } 2484 2485 out: 2486 return ret_val; 2487 } 2488 2489 /** 2490 * e1000_validate_nvm_checksum_i350 - Validate EEPROM checksum 2491 * @hw: pointer to the HW structure 2492 * 2493 * Calculates the EEPROM section checksum by reading/adding each word of 2494 * the EEPROM and then verifies that the sum of the EEPROM is 2495 * equal to 0xBABA. 2496 **/ 2497 static s32 e1000_validate_nvm_checksum_i350(struct e1000_hw *hw) 2498 { 2499 s32 ret_val = E1000_SUCCESS; 2500 u16 j; 2501 u16 nvm_offset; 2502 2503 DEBUGFUNC("e1000_validate_nvm_checksum_i350"); 2504 2505 for (j = 0; j < 4; j++) { 2506 nvm_offset = NVM_82580_LAN_FUNC_OFFSET(j); 2507 ret_val = e1000_validate_nvm_checksum_with_offset(hw, 2508 nvm_offset); 2509 if (ret_val != E1000_SUCCESS) 2510 goto out; 2511 } 2512 2513 out: 2514 return ret_val; 2515 } 2516 2517 /** 2518 * e1000_update_nvm_checksum_i350 - Update EEPROM checksum 2519 * @hw: pointer to the HW structure 2520 * 2521 * Updates the EEPROM section checksums for all 4 ports by reading/adding 2522 * each word of the EEPROM up to the checksum. Then calculates the EEPROM 2523 * checksum and writes the value to the EEPROM. 2524 **/ 2525 static s32 e1000_update_nvm_checksum_i350(struct e1000_hw *hw) 2526 { 2527 s32 ret_val = E1000_SUCCESS; 2528 u16 j; 2529 u16 nvm_offset; 2530 2531 DEBUGFUNC("e1000_update_nvm_checksum_i350"); 2532 2533 for (j = 0; j < 4; j++) { 2534 nvm_offset = NVM_82580_LAN_FUNC_OFFSET(j); 2535 ret_val = e1000_update_nvm_checksum_with_offset(hw, nvm_offset); 2536 if (ret_val != E1000_SUCCESS) 2537 goto out; 2538 } 2539 2540 out: 2541 return ret_val; 2542 } 2543 2544 /** 2545 * __e1000_access_emi_reg - Read/write EMI register 2546 * @hw: pointer to the HW structure 2547 * @address: EMI address to program 2548 * @data: pointer to value to read/write from/to the EMI address 2549 * @read: boolean flag to indicate read or write 2550 **/ 2551 static s32 __e1000_access_emi_reg(struct e1000_hw *hw, u16 address, 2552 u16 *data, bool read) 2553 { 2554 s32 ret_val; 2555 2556 DEBUGFUNC("__e1000_access_emi_reg"); 2557 2558 ret_val = hw->phy.ops.write_reg(hw, E1000_EMIADD, address); 2559 if (ret_val) 2560 return ret_val; 2561 2562 if (read) 2563 ret_val = hw->phy.ops.read_reg(hw, E1000_EMIDATA, data); 2564 else 2565 ret_val = hw->phy.ops.write_reg(hw, E1000_EMIDATA, *data); 2566 2567 return ret_val; 2568 } 2569 2570 /** 2571 * e1000_read_emi_reg - Read Extended Management Interface register 2572 * @hw: pointer to the HW structure 2573 * @addr: EMI address to program 2574 * @data: value to be read from the EMI address 2575 **/ 2576 s32 e1000_read_emi_reg(struct e1000_hw *hw, u16 addr, u16 *data) 2577 { 2578 DEBUGFUNC("e1000_read_emi_reg"); 2579 2580 return __e1000_access_emi_reg(hw, addr, data, true); 2581 } 2582 2583 /** 2584 * e1000_initialize_M88E1512_phy - Initialize M88E1512 PHY 2585 * @hw: pointer to the HW structure 2586 * 2587 * Initialize Marvell 1512 to work correctly with Avoton. 2588 **/ 2589 s32 e1000_initialize_M88E1512_phy(struct e1000_hw *hw) 2590 { 2591 struct e1000_phy_info *phy = &hw->phy; 2592 s32 ret_val = E1000_SUCCESS; 2593 2594 DEBUGFUNC("e1000_initialize_M88E1512_phy"); 2595 2596 /* Check if this is correct PHY. */ 2597 if (phy->id != M88E1512_E_PHY_ID) 2598 goto out; 2599 2600 /* Switch to PHY page 0xFF. */ 2601 ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0x00FF); 2602 if (ret_val) 2603 goto out; 2604 2605 ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_2, 0x214B); 2606 if (ret_val) 2607 goto out; 2608 2609 ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_1, 0x2144); 2610 if (ret_val) 2611 goto out; 2612 2613 ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_2, 0x0C28); 2614 if (ret_val) 2615 goto out; 2616 2617 ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_1, 0x2146); 2618 if (ret_val) 2619 goto out; 2620 2621 ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_2, 0xB233); 2622 if (ret_val) 2623 goto out; 2624 2625 ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_1, 0x214D); 2626 if (ret_val) 2627 goto out; 2628 2629 ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_2, 0xCC0C); 2630 if (ret_val) 2631 goto out; 2632 2633 ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_1, 0x2159); 2634 if (ret_val) 2635 goto out; 2636 2637 /* Switch to PHY page 0xFB. */ 2638 ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0x00FB); 2639 if (ret_val) 2640 goto out; 2641 2642 ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_3, 0x000D); 2643 if (ret_val) 2644 goto out; 2645 2646 /* Switch to PHY page 0x12. */ 2647 ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0x12); 2648 if (ret_val) 2649 goto out; 2650 2651 /* Change mode to SGMII-to-Copper */ 2652 ret_val = phy->ops.write_reg(hw, E1000_M88E1512_MODE, 0x8001); 2653 if (ret_val) 2654 goto out; 2655 2656 /* Return the PHY to page 0. */ 2657 ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0); 2658 if (ret_val) 2659 goto out; 2660 2661 ret_val = phy->ops.commit(hw); 2662 if (ret_val) { 2663 DEBUGOUT("Error committing the PHY changes\n"); 2664 return ret_val; 2665 } 2666 2667 msec_delay(1000); 2668 out: 2669 return ret_val; 2670 } 2671 2672 /** 2673 * e1000_initialize_M88E1543_phy - Initialize M88E1543 PHY 2674 * @hw: pointer to the HW structure 2675 * 2676 * Initialize Marvell 1543 to work correctly with Avoton. 2677 **/ 2678 s32 e1000_initialize_M88E1543_phy(struct e1000_hw *hw) 2679 { 2680 struct e1000_phy_info *phy = &hw->phy; 2681 s32 ret_val = E1000_SUCCESS; 2682 2683 DEBUGFUNC("e1000_initialize_M88E1543_phy"); 2684 2685 /* Check if this is correct PHY. */ 2686 if (phy->id != M88E1543_E_PHY_ID) 2687 goto out; 2688 2689 /* Switch to PHY page 0xFF. */ 2690 ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0x00FF); 2691 if (ret_val) 2692 goto out; 2693 2694 ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_2, 0x214B); 2695 if (ret_val) 2696 goto out; 2697 2698 ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_1, 0x2144); 2699 if (ret_val) 2700 goto out; 2701 2702 ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_2, 0x0C28); 2703 if (ret_val) 2704 goto out; 2705 2706 ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_1, 0x2146); 2707 if (ret_val) 2708 goto out; 2709 2710 ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_2, 0xB233); 2711 if (ret_val) 2712 goto out; 2713 2714 ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_1, 0x214D); 2715 if (ret_val) 2716 goto out; 2717 2718 ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_2, 0xDC0C); 2719 if (ret_val) 2720 goto out; 2721 2722 ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_1, 0x2159); 2723 if (ret_val) 2724 goto out; 2725 2726 /* Switch to PHY page 0xFB. */ 2727 ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0x00FB); 2728 if (ret_val) 2729 goto out; 2730 2731 ret_val = phy->ops.write_reg(hw, E1000_M88E1512_CFG_REG_3, 0xC00D); 2732 if (ret_val) 2733 goto out; 2734 2735 /* Switch to PHY page 0x12. */ 2736 ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0x12); 2737 if (ret_val) 2738 goto out; 2739 2740 /* Change mode to SGMII-to-Copper */ 2741 ret_val = phy->ops.write_reg(hw, E1000_M88E1512_MODE, 0x8001); 2742 if (ret_val) 2743 goto out; 2744 2745 /* Switch to PHY page 1. */ 2746 ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0x1); 2747 if (ret_val) 2748 goto out; 2749 2750 /* Change mode to 1000BASE-X/SGMII and autoneg enable; reset */ 2751 ret_val = phy->ops.write_reg(hw, E1000_M88E1543_FIBER_CTRL, 0x9140); 2752 if (ret_val) 2753 goto out; 2754 2755 /* Return the PHY to page 0. */ 2756 ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0); 2757 if (ret_val) 2758 goto out; 2759 2760 ret_val = phy->ops.commit(hw); 2761 if (ret_val) { 2762 DEBUGOUT("Error committing the PHY changes\n"); 2763 return ret_val; 2764 } 2765 2766 msec_delay(1000); 2767 out: 2768 return ret_val; 2769 } 2770 2771 /** 2772 * e1000_set_eee_i350 - Enable/disable EEE support 2773 * @hw: pointer to the HW structure 2774 * @adv1G: boolean flag enabling 1G EEE advertisement 2775 * @adv100M: boolean flag enabling 100M EEE advertisement 2776 * 2777 * Enable/disable EEE based on setting in dev_spec structure. 2778 * 2779 **/ 2780 s32 e1000_set_eee_i350(struct e1000_hw *hw, bool adv1G, bool adv100M) 2781 { 2782 u32 ipcnfg, eeer; 2783 2784 DEBUGFUNC("e1000_set_eee_i350"); 2785 2786 if ((hw->mac.type < e1000_i350) || 2787 (hw->phy.media_type != e1000_media_type_copper)) 2788 goto out; 2789 ipcnfg = E1000_READ_REG(hw, E1000_IPCNFG); 2790 eeer = E1000_READ_REG(hw, E1000_EEER); 2791 2792 /* enable or disable per user setting */ 2793 if (!(hw->dev_spec._82575.eee_disable)) { 2794 u32 eee_su = E1000_READ_REG(hw, E1000_EEE_SU); 2795 2796 if (adv100M) 2797 ipcnfg |= E1000_IPCNFG_EEE_100M_AN; 2798 else 2799 ipcnfg &= ~E1000_IPCNFG_EEE_100M_AN; 2800 2801 if (adv1G) 2802 ipcnfg |= E1000_IPCNFG_EEE_1G_AN; 2803 else 2804 ipcnfg &= ~E1000_IPCNFG_EEE_1G_AN; 2805 2806 eeer |= (E1000_EEER_TX_LPI_EN | E1000_EEER_RX_LPI_EN | 2807 E1000_EEER_LPI_FC); 2808 2809 /* This bit should not be set in normal operation. */ 2810 if (eee_su & E1000_EEE_SU_LPI_CLK_STP) 2811 DEBUGOUT("LPI Clock Stop Bit should not be set!\n"); 2812 } else { 2813 ipcnfg &= ~(E1000_IPCNFG_EEE_1G_AN | E1000_IPCNFG_EEE_100M_AN); 2814 eeer &= ~(E1000_EEER_TX_LPI_EN | E1000_EEER_RX_LPI_EN | 2815 E1000_EEER_LPI_FC); 2816 } 2817 E1000_WRITE_REG(hw, E1000_IPCNFG, ipcnfg); 2818 E1000_WRITE_REG(hw, E1000_EEER, eeer); 2819 E1000_READ_REG(hw, E1000_IPCNFG); 2820 E1000_READ_REG(hw, E1000_EEER); 2821 out: 2822 2823 return E1000_SUCCESS; 2824 } 2825 2826 /** 2827 * e1000_set_eee_i354 - Enable/disable EEE support 2828 * @hw: pointer to the HW structure 2829 * @adv1G: boolean flag enabling 1G EEE advertisement 2830 * @adv100M: boolean flag enabling 100M EEE advertisement 2831 * 2832 * Enable/disable EEE legacy mode based on setting in dev_spec structure. 2833 * 2834 **/ 2835 s32 e1000_set_eee_i354(struct e1000_hw *hw, bool adv1G, bool adv100M) 2836 { 2837 struct e1000_phy_info *phy = &hw->phy; 2838 s32 ret_val = E1000_SUCCESS; 2839 u16 phy_data; 2840 2841 DEBUGFUNC("e1000_set_eee_i354"); 2842 2843 if ((hw->phy.media_type != e1000_media_type_copper) || 2844 ((phy->id != M88E1543_E_PHY_ID) && 2845 (phy->id != M88E1512_E_PHY_ID))) 2846 goto out; 2847 2848 if (!hw->dev_spec._82575.eee_disable) { 2849 /* Switch to PHY page 18. */ 2850 ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 18); 2851 if (ret_val) 2852 goto out; 2853 2854 ret_val = phy->ops.read_reg(hw, E1000_M88E1543_EEE_CTRL_1, 2855 &phy_data); 2856 if (ret_val) 2857 goto out; 2858 2859 phy_data |= E1000_M88E1543_EEE_CTRL_1_MS; 2860 ret_val = phy->ops.write_reg(hw, E1000_M88E1543_EEE_CTRL_1, 2861 phy_data); 2862 if (ret_val) 2863 goto out; 2864 2865 /* Return the PHY to page 0. */ 2866 ret_val = phy->ops.write_reg(hw, E1000_M88E1543_PAGE_ADDR, 0); 2867 if (ret_val) 2868 goto out; 2869 2870 /* Turn on EEE advertisement. */ 2871 ret_val = e1000_read_xmdio_reg(hw, E1000_EEE_ADV_ADDR_I354, 2872 E1000_EEE_ADV_DEV_I354, 2873 &phy_data); 2874 if (ret_val) 2875 goto out; 2876 2877 if (adv100M) 2878 phy_data |= E1000_EEE_ADV_100_SUPPORTED; 2879 else 2880 phy_data &= ~E1000_EEE_ADV_100_SUPPORTED; 2881 2882 if (adv1G) 2883 phy_data |= E1000_EEE_ADV_1000_SUPPORTED; 2884 else 2885 phy_data &= ~E1000_EEE_ADV_1000_SUPPORTED; 2886 2887 ret_val = e1000_write_xmdio_reg(hw, E1000_EEE_ADV_ADDR_I354, 2888 E1000_EEE_ADV_DEV_I354, 2889 phy_data); 2890 } else { 2891 /* Turn off EEE advertisement. */ 2892 ret_val = e1000_read_xmdio_reg(hw, E1000_EEE_ADV_ADDR_I354, 2893 E1000_EEE_ADV_DEV_I354, 2894 &phy_data); 2895 if (ret_val) 2896 goto out; 2897 2898 phy_data &= ~(E1000_EEE_ADV_100_SUPPORTED | 2899 E1000_EEE_ADV_1000_SUPPORTED); 2900 ret_val = e1000_write_xmdio_reg(hw, E1000_EEE_ADV_ADDR_I354, 2901 E1000_EEE_ADV_DEV_I354, 2902 phy_data); 2903 } 2904 2905 out: 2906 return ret_val; 2907 } 2908 2909 /** 2910 * e1000_get_eee_status_i354 - Get EEE status 2911 * @hw: pointer to the HW structure 2912 * @status: EEE status 2913 * 2914 * Get EEE status by guessing based on whether Tx or Rx LPI indications have 2915 * been received. 2916 **/ 2917 s32 e1000_get_eee_status_i354(struct e1000_hw *hw, bool *status) 2918 { 2919 struct e1000_phy_info *phy = &hw->phy; 2920 s32 ret_val = E1000_SUCCESS; 2921 u16 phy_data; 2922 2923 DEBUGFUNC("e1000_get_eee_status_i354"); 2924 2925 /* Check if EEE is supported on this device. */ 2926 if ((hw->phy.media_type != e1000_media_type_copper) || 2927 ((phy->id != M88E1543_E_PHY_ID) && 2928 (phy->id != M88E1512_E_PHY_ID))) 2929 goto out; 2930 2931 ret_val = e1000_read_xmdio_reg(hw, E1000_PCS_STATUS_ADDR_I354, 2932 E1000_PCS_STATUS_DEV_I354, 2933 &phy_data); 2934 if (ret_val) 2935 goto out; 2936 2937 *status = phy_data & (E1000_PCS_STATUS_TX_LPI_RCVD | 2938 E1000_PCS_STATUS_RX_LPI_RCVD) ? true : false; 2939 2940 out: 2941 return ret_val; 2942 } 2943 2944 /* Due to a hw errata, if the host tries to configure the VFTA register 2945 * while performing queries from the BMC or DMA, then the VFTA in some 2946 * cases won't be written. 2947 */ 2948 2949 /** 2950 * e1000_clear_vfta_i350 - Clear VLAN filter table 2951 * @hw: pointer to the HW structure 2952 * 2953 * Clears the register array which contains the VLAN filter table by 2954 * setting all the values to 0. 2955 **/ 2956 void e1000_clear_vfta_i350(struct e1000_hw *hw) 2957 { 2958 u32 offset; 2959 int i; 2960 2961 DEBUGFUNC("e1000_clear_vfta_350"); 2962 2963 for (offset = 0; offset < E1000_VLAN_FILTER_TBL_SIZE; offset++) { 2964 for (i = 0; i < 10; i++) 2965 E1000_WRITE_REG_ARRAY(hw, E1000_VFTA, offset, 0); 2966 2967 E1000_WRITE_FLUSH(hw); 2968 } 2969 } 2970 2971 /** 2972 * e1000_write_vfta_i350 - Write value to VLAN filter table 2973 * @hw: pointer to the HW structure 2974 * @offset: register offset in VLAN filter table 2975 * @value: register value written to VLAN filter table 2976 * 2977 * Writes value at the given offset in the register array which stores 2978 * the VLAN filter table. 2979 **/ 2980 void e1000_write_vfta_i350(struct e1000_hw *hw, u32 offset, u32 value) 2981 { 2982 int i; 2983 2984 DEBUGFUNC("e1000_write_vfta_350"); 2985 2986 for (i = 0; i < 10; i++) 2987 E1000_WRITE_REG_ARRAY(hw, E1000_VFTA, offset, value); 2988 2989 E1000_WRITE_FLUSH(hw); 2990 } 2991 2992 2993 /** 2994 * e1000_set_i2c_bb - Enable I2C bit-bang 2995 * @hw: pointer to the HW structure 2996 * 2997 * Enable I2C bit-bang interface 2998 * 2999 **/ 3000 s32 e1000_set_i2c_bb(struct e1000_hw *hw) 3001 { 3002 s32 ret_val = E1000_SUCCESS; 3003 u32 ctrl_ext, i2cparams; 3004 3005 DEBUGFUNC("e1000_set_i2c_bb"); 3006 3007 ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT); 3008 ctrl_ext |= E1000_CTRL_I2C_ENA; 3009 E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext); 3010 E1000_WRITE_FLUSH(hw); 3011 3012 i2cparams = E1000_READ_REG(hw, E1000_I2CPARAMS); 3013 i2cparams |= E1000_I2CBB_EN; 3014 i2cparams |= E1000_I2C_DATA_OE_N; 3015 i2cparams |= E1000_I2C_CLK_OE_N; 3016 E1000_WRITE_REG(hw, E1000_I2CPARAMS, i2cparams); 3017 E1000_WRITE_FLUSH(hw); 3018 3019 return ret_val; 3020 } 3021 3022 /** 3023 * e1000_read_i2c_byte_generic - Reads 8 bit word over I2C 3024 * @hw: pointer to hardware structure 3025 * @byte_offset: byte offset to read 3026 * @dev_addr: device address 3027 * @data: value read 3028 * 3029 * Performs byte read operation over I2C interface at 3030 * a specified device address. 3031 **/ 3032 s32 e1000_read_i2c_byte_generic(struct e1000_hw *hw, u8 byte_offset, 3033 u8 dev_addr, u8 *data) 3034 { 3035 s32 status = E1000_SUCCESS; 3036 u32 max_retry = 10; 3037 u32 retry = 1; 3038 u16 swfw_mask = 0; 3039 3040 bool nack = true; 3041 3042 DEBUGFUNC("e1000_read_i2c_byte_generic"); 3043 3044 swfw_mask = E1000_SWFW_PHY0_SM; 3045 3046 do { 3047 if (hw->mac.ops.acquire_swfw_sync(hw, swfw_mask) 3048 != E1000_SUCCESS) { 3049 status = E1000_ERR_SWFW_SYNC; 3050 goto read_byte_out; 3051 } 3052 3053 e1000_i2c_start(hw); 3054 3055 /* Device Address and write indication */ 3056 status = e1000_clock_out_i2c_byte(hw, dev_addr); 3057 if (status != E1000_SUCCESS) 3058 goto fail; 3059 3060 status = e1000_get_i2c_ack(hw); 3061 if (status != E1000_SUCCESS) 3062 goto fail; 3063 3064 status = e1000_clock_out_i2c_byte(hw, byte_offset); 3065 if (status != E1000_SUCCESS) 3066 goto fail; 3067 3068 status = e1000_get_i2c_ack(hw); 3069 if (status != E1000_SUCCESS) 3070 goto fail; 3071 3072 e1000_i2c_start(hw); 3073 3074 /* Device Address and read indication */ 3075 status = e1000_clock_out_i2c_byte(hw, (dev_addr | 0x1)); 3076 if (status != E1000_SUCCESS) 3077 goto fail; 3078 3079 status = e1000_get_i2c_ack(hw); 3080 if (status != E1000_SUCCESS) 3081 goto fail; 3082 3083 e1000_clock_in_i2c_byte(hw, data); 3084 3085 status = e1000_clock_out_i2c_bit(hw, nack); 3086 if (status != E1000_SUCCESS) 3087 goto fail; 3088 3089 e1000_i2c_stop(hw); 3090 break; 3091 3092 fail: 3093 hw->mac.ops.release_swfw_sync(hw, swfw_mask); 3094 msec_delay(100); 3095 e1000_i2c_bus_clear(hw); 3096 retry++; 3097 if (retry < max_retry) 3098 DEBUGOUT("I2C byte read error - Retrying.\n"); 3099 else 3100 DEBUGOUT("I2C byte read error.\n"); 3101 3102 } while (retry < max_retry); 3103 3104 hw->mac.ops.release_swfw_sync(hw, swfw_mask); 3105 3106 read_byte_out: 3107 3108 return status; 3109 } 3110 3111 /** 3112 * e1000_write_i2c_byte_generic - Writes 8 bit word over I2C 3113 * @hw: pointer to hardware structure 3114 * @byte_offset: byte offset to write 3115 * @dev_addr: device address 3116 * @data: value to write 3117 * 3118 * Performs byte write operation over I2C interface at 3119 * a specified device address. 3120 **/ 3121 s32 e1000_write_i2c_byte_generic(struct e1000_hw *hw, u8 byte_offset, 3122 u8 dev_addr, u8 data) 3123 { 3124 s32 status = E1000_SUCCESS; 3125 u32 max_retry = 1; 3126 u32 retry = 0; 3127 u16 swfw_mask = 0; 3128 3129 DEBUGFUNC("e1000_write_i2c_byte_generic"); 3130 3131 swfw_mask = E1000_SWFW_PHY0_SM; 3132 3133 if (hw->mac.ops.acquire_swfw_sync(hw, swfw_mask) != E1000_SUCCESS) { 3134 status = E1000_ERR_SWFW_SYNC; 3135 goto write_byte_out; 3136 } 3137 3138 do { 3139 e1000_i2c_start(hw); 3140 3141 status = e1000_clock_out_i2c_byte(hw, dev_addr); 3142 if (status != E1000_SUCCESS) 3143 goto fail; 3144 3145 status = e1000_get_i2c_ack(hw); 3146 if (status != E1000_SUCCESS) 3147 goto fail; 3148 3149 status = e1000_clock_out_i2c_byte(hw, byte_offset); 3150 if (status != E1000_SUCCESS) 3151 goto fail; 3152 3153 status = e1000_get_i2c_ack(hw); 3154 if (status != E1000_SUCCESS) 3155 goto fail; 3156 3157 status = e1000_clock_out_i2c_byte(hw, data); 3158 if (status != E1000_SUCCESS) 3159 goto fail; 3160 3161 status = e1000_get_i2c_ack(hw); 3162 if (status != E1000_SUCCESS) 3163 goto fail; 3164 3165 e1000_i2c_stop(hw); 3166 break; 3167 3168 fail: 3169 e1000_i2c_bus_clear(hw); 3170 retry++; 3171 if (retry < max_retry) 3172 DEBUGOUT("I2C byte write error - Retrying.\n"); 3173 else 3174 DEBUGOUT("I2C byte write error.\n"); 3175 } while (retry < max_retry); 3176 3177 hw->mac.ops.release_swfw_sync(hw, swfw_mask); 3178 3179 write_byte_out: 3180 3181 return status; 3182 } 3183 3184 /** 3185 * e1000_i2c_start - Sets I2C start condition 3186 * @hw: pointer to hardware structure 3187 * 3188 * Sets I2C start condition (High -> Low on SDA while SCL is High) 3189 **/ 3190 static void e1000_i2c_start(struct e1000_hw *hw) 3191 { 3192 u32 i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS); 3193 3194 DEBUGFUNC("e1000_i2c_start"); 3195 3196 /* Start condition must begin with data and clock high */ 3197 e1000_set_i2c_data(hw, &i2cctl, 1); 3198 e1000_raise_i2c_clk(hw, &i2cctl); 3199 3200 /* Setup time for start condition (4.7us) */ 3201 usec_delay(E1000_I2C_T_SU_STA); 3202 3203 e1000_set_i2c_data(hw, &i2cctl, 0); 3204 3205 /* Hold time for start condition (4us) */ 3206 usec_delay(E1000_I2C_T_HD_STA); 3207 3208 e1000_lower_i2c_clk(hw, &i2cctl); 3209 3210 /* Minimum low period of clock is 4.7 us */ 3211 usec_delay(E1000_I2C_T_LOW); 3212 3213 } 3214 3215 /** 3216 * e1000_i2c_stop - Sets I2C stop condition 3217 * @hw: pointer to hardware structure 3218 * 3219 * Sets I2C stop condition (Low -> High on SDA while SCL is High) 3220 **/ 3221 static void e1000_i2c_stop(struct e1000_hw *hw) 3222 { 3223 u32 i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS); 3224 3225 DEBUGFUNC("e1000_i2c_stop"); 3226 3227 /* Stop condition must begin with data low and clock high */ 3228 e1000_set_i2c_data(hw, &i2cctl, 0); 3229 e1000_raise_i2c_clk(hw, &i2cctl); 3230 3231 /* Setup time for stop condition (4us) */ 3232 usec_delay(E1000_I2C_T_SU_STO); 3233 3234 e1000_set_i2c_data(hw, &i2cctl, 1); 3235 3236 /* bus free time between stop and start (4.7us)*/ 3237 usec_delay(E1000_I2C_T_BUF); 3238 } 3239 3240 /** 3241 * e1000_clock_in_i2c_byte - Clocks in one byte via I2C 3242 * @hw: pointer to hardware structure 3243 * @data: data byte to clock in 3244 * 3245 * Clocks in one byte data via I2C data/clock 3246 **/ 3247 static void e1000_clock_in_i2c_byte(struct e1000_hw *hw, u8 *data) 3248 { 3249 s32 i; 3250 bool bit = 0; 3251 3252 DEBUGFUNC("e1000_clock_in_i2c_byte"); 3253 3254 *data = 0; 3255 for (i = 7; i >= 0; i--) { 3256 e1000_clock_in_i2c_bit(hw, &bit); 3257 *data |= bit << i; 3258 } 3259 } 3260 3261 /** 3262 * e1000_clock_out_i2c_byte - Clocks out one byte via I2C 3263 * @hw: pointer to hardware structure 3264 * @data: data byte clocked out 3265 * 3266 * Clocks out one byte data via I2C data/clock 3267 **/ 3268 static s32 e1000_clock_out_i2c_byte(struct e1000_hw *hw, u8 data) 3269 { 3270 s32 status = E1000_SUCCESS; 3271 s32 i; 3272 u32 i2cctl; 3273 bool bit = 0; 3274 3275 DEBUGFUNC("e1000_clock_out_i2c_byte"); 3276 3277 for (i = 7; i >= 0; i--) { 3278 bit = (data >> i) & 0x1; 3279 status = e1000_clock_out_i2c_bit(hw, bit); 3280 3281 if (status != E1000_SUCCESS) 3282 break; 3283 } 3284 3285 /* Release SDA line (set high) */ 3286 i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS); 3287 3288 i2cctl |= E1000_I2C_DATA_OE_N; 3289 E1000_WRITE_REG(hw, E1000_I2CPARAMS, i2cctl); 3290 E1000_WRITE_FLUSH(hw); 3291 3292 return status; 3293 } 3294 3295 /** 3296 * e1000_get_i2c_ack - Polls for I2C ACK 3297 * @hw: pointer to hardware structure 3298 * 3299 * Clocks in/out one bit via I2C data/clock 3300 **/ 3301 static s32 e1000_get_i2c_ack(struct e1000_hw *hw) 3302 { 3303 s32 status = E1000_SUCCESS; 3304 u32 i = 0; 3305 u32 i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS); 3306 u32 timeout = 10; 3307 bool ack = true; 3308 3309 DEBUGFUNC("e1000_get_i2c_ack"); 3310 3311 e1000_raise_i2c_clk(hw, &i2cctl); 3312 3313 /* Minimum high period of clock is 4us */ 3314 usec_delay(E1000_I2C_T_HIGH); 3315 3316 /* Wait until SCL returns high */ 3317 for (i = 0; i < timeout; i++) { 3318 usec_delay(1); 3319 i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS); 3320 if (i2cctl & E1000_I2C_CLK_IN) 3321 break; 3322 } 3323 if (!(i2cctl & E1000_I2C_CLK_IN)) 3324 return E1000_ERR_I2C; 3325 3326 ack = e1000_get_i2c_data(&i2cctl); 3327 if (ack) { 3328 DEBUGOUT("I2C ack was not received.\n"); 3329 status = E1000_ERR_I2C; 3330 } 3331 3332 e1000_lower_i2c_clk(hw, &i2cctl); 3333 3334 /* Minimum low period of clock is 4.7 us */ 3335 usec_delay(E1000_I2C_T_LOW); 3336 3337 return status; 3338 } 3339 3340 /** 3341 * e1000_clock_in_i2c_bit - Clocks in one bit via I2C data/clock 3342 * @hw: pointer to hardware structure 3343 * @data: read data value 3344 * 3345 * Clocks in one bit via I2C data/clock 3346 **/ 3347 static void e1000_clock_in_i2c_bit(struct e1000_hw *hw, bool *data) 3348 { 3349 u32 i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS); 3350 3351 DEBUGFUNC("e1000_clock_in_i2c_bit"); 3352 3353 e1000_raise_i2c_clk(hw, &i2cctl); 3354 3355 /* Minimum high period of clock is 4us */ 3356 usec_delay(E1000_I2C_T_HIGH); 3357 3358 i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS); 3359 *data = e1000_get_i2c_data(&i2cctl); 3360 3361 e1000_lower_i2c_clk(hw, &i2cctl); 3362 3363 /* Minimum low period of clock is 4.7 us */ 3364 usec_delay(E1000_I2C_T_LOW); 3365 } 3366 3367 /** 3368 * e1000_clock_out_i2c_bit - Clocks in/out one bit via I2C data/clock 3369 * @hw: pointer to hardware structure 3370 * @data: data value to write 3371 * 3372 * Clocks out one bit via I2C data/clock 3373 **/ 3374 static s32 e1000_clock_out_i2c_bit(struct e1000_hw *hw, bool data) 3375 { 3376 s32 status; 3377 u32 i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS); 3378 3379 DEBUGFUNC("e1000_clock_out_i2c_bit"); 3380 3381 status = e1000_set_i2c_data(hw, &i2cctl, data); 3382 if (status == E1000_SUCCESS) { 3383 e1000_raise_i2c_clk(hw, &i2cctl); 3384 3385 /* Minimum high period of clock is 4us */ 3386 usec_delay(E1000_I2C_T_HIGH); 3387 3388 e1000_lower_i2c_clk(hw, &i2cctl); 3389 3390 /* Minimum low period of clock is 4.7 us. 3391 * This also takes care of the data hold time. 3392 */ 3393 usec_delay(E1000_I2C_T_LOW); 3394 } else { 3395 status = E1000_ERR_I2C; 3396 DEBUGOUT1("I2C data was not set to %X\n", data); 3397 } 3398 3399 return status; 3400 } 3401 /** 3402 * e1000_raise_i2c_clk - Raises the I2C SCL clock 3403 * @hw: pointer to hardware structure 3404 * @i2cctl: Current value of I2CCTL register 3405 * 3406 * Raises the I2C clock line '0'->'1' 3407 **/ 3408 static void e1000_raise_i2c_clk(struct e1000_hw *hw, u32 *i2cctl) 3409 { 3410 DEBUGFUNC("e1000_raise_i2c_clk"); 3411 3412 *i2cctl |= E1000_I2C_CLK_OUT; 3413 *i2cctl &= ~E1000_I2C_CLK_OE_N; 3414 E1000_WRITE_REG(hw, E1000_I2CPARAMS, *i2cctl); 3415 E1000_WRITE_FLUSH(hw); 3416 3417 /* SCL rise time (1000ns) */ 3418 usec_delay(E1000_I2C_T_RISE); 3419 } 3420 3421 /** 3422 * e1000_lower_i2c_clk - Lowers the I2C SCL clock 3423 * @hw: pointer to hardware structure 3424 * @i2cctl: Current value of I2CCTL register 3425 * 3426 * Lowers the I2C clock line '1'->'0' 3427 **/ 3428 static void e1000_lower_i2c_clk(struct e1000_hw *hw, u32 *i2cctl) 3429 { 3430 3431 DEBUGFUNC("e1000_lower_i2c_clk"); 3432 3433 *i2cctl &= ~E1000_I2C_CLK_OUT; 3434 *i2cctl &= ~E1000_I2C_CLK_OE_N; 3435 E1000_WRITE_REG(hw, E1000_I2CPARAMS, *i2cctl); 3436 E1000_WRITE_FLUSH(hw); 3437 3438 /* SCL fall time (300ns) */ 3439 usec_delay(E1000_I2C_T_FALL); 3440 } 3441 3442 /** 3443 * e1000_set_i2c_data - Sets the I2C data bit 3444 * @hw: pointer to hardware structure 3445 * @i2cctl: Current value of I2CCTL register 3446 * @data: I2C data value (0 or 1) to set 3447 * 3448 * Sets the I2C data bit 3449 **/ 3450 static s32 e1000_set_i2c_data(struct e1000_hw *hw, u32 *i2cctl, bool data) 3451 { 3452 s32 status = E1000_SUCCESS; 3453 3454 DEBUGFUNC("e1000_set_i2c_data"); 3455 3456 if (data) 3457 *i2cctl |= E1000_I2C_DATA_OUT; 3458 else 3459 *i2cctl &= ~E1000_I2C_DATA_OUT; 3460 3461 *i2cctl &= ~E1000_I2C_DATA_OE_N; 3462 *i2cctl |= E1000_I2C_CLK_OE_N; 3463 E1000_WRITE_REG(hw, E1000_I2CPARAMS, *i2cctl); 3464 E1000_WRITE_FLUSH(hw); 3465 3466 /* Data rise/fall (1000ns/300ns) and set-up time (250ns) */ 3467 usec_delay(E1000_I2C_T_RISE + E1000_I2C_T_FALL + E1000_I2C_T_SU_DATA); 3468 3469 *i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS); 3470 if (data != e1000_get_i2c_data(i2cctl)) { 3471 status = E1000_ERR_I2C; 3472 DEBUGOUT1("Error - I2C data was not set to %X.\n", data); 3473 } 3474 3475 return status; 3476 } 3477 3478 /** 3479 * e1000_get_i2c_data - Reads the I2C SDA data bit 3480 * @i2cctl: Current value of I2CCTL register 3481 * 3482 * Returns the I2C data bit value 3483 **/ 3484 static bool e1000_get_i2c_data(u32 *i2cctl) 3485 { 3486 bool data; 3487 3488 DEBUGFUNC("e1000_get_i2c_data"); 3489 3490 if (*i2cctl & E1000_I2C_DATA_IN) 3491 data = 1; 3492 else 3493 data = 0; 3494 3495 return data; 3496 } 3497 3498 /** 3499 * e1000_i2c_bus_clear - Clears the I2C bus 3500 * @hw: pointer to hardware structure 3501 * 3502 * Clears the I2C bus by sending nine clock pulses. 3503 * Used when data line is stuck low. 3504 **/ 3505 void e1000_i2c_bus_clear(struct e1000_hw *hw) 3506 { 3507 u32 i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS); 3508 u32 i; 3509 3510 DEBUGFUNC("e1000_i2c_bus_clear"); 3511 3512 e1000_i2c_start(hw); 3513 3514 e1000_set_i2c_data(hw, &i2cctl, 1); 3515 3516 for (i = 0; i < 9; i++) { 3517 e1000_raise_i2c_clk(hw, &i2cctl); 3518 3519 /* Min high period of clock is 4us */ 3520 usec_delay(E1000_I2C_T_HIGH); 3521 3522 e1000_lower_i2c_clk(hw, &i2cctl); 3523 3524 /* Min low period of clock is 4.7us*/ 3525 usec_delay(E1000_I2C_T_LOW); 3526 } 3527 3528 e1000_i2c_start(hw); 3529 3530 /* Put the i2c bus back to default state */ 3531 e1000_i2c_stop(hw); 3532 } 3533 3534