1 /****************************************************************************** 2 3 Copyright (c) 2001-2010, Intel Corporation 4 All rights reserved. 5 6 Redistribution and use in source and binary forms, with or without 7 modification, are permitted provided that the following conditions are met: 8 9 1. Redistributions of source code must retain the above copyright notice, 10 this list of conditions and the following disclaimer. 11 12 2. Redistributions in binary form must reproduce the above copyright 13 notice, this list of conditions and the following disclaimer in the 14 documentation and/or other materials provided with the distribution. 15 16 3. Neither the name of the Intel Corporation nor the names of its 17 contributors may be used to endorse or promote products derived from 18 this software without specific prior written permission. 19 20 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 24 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 25 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30 POSSIBILITY OF SUCH DAMAGE. 31 32 ******************************************************************************/ 33 /*$FreeBSD$*/ 34 35 #include "ixgbe_type.h" 36 #include "ixgbe_api.h" 37 #include "ixgbe_common.h" 38 #include "ixgbe_phy.h" 39 40 u32 ixgbe_get_pcie_msix_count_82598(struct ixgbe_hw *hw); 41 s32 ixgbe_init_ops_82598(struct ixgbe_hw *hw); 42 static s32 ixgbe_get_link_capabilities_82598(struct ixgbe_hw *hw, 43 ixgbe_link_speed *speed, 44 bool *autoneg); 45 static enum ixgbe_media_type ixgbe_get_media_type_82598(struct ixgbe_hw *hw); 46 s32 ixgbe_fc_enable_82598(struct ixgbe_hw *hw, s32 packetbuf_num); 47 static s32 ixgbe_start_mac_link_82598(struct ixgbe_hw *hw, 48 bool autoneg_wait_to_complete); 49 static s32 ixgbe_check_mac_link_82598(struct ixgbe_hw *hw, 50 ixgbe_link_speed *speed, bool *link_up, 51 bool link_up_wait_to_complete); 52 static s32 ixgbe_setup_mac_link_82598(struct ixgbe_hw *hw, 53 ixgbe_link_speed speed, 54 bool autoneg, 55 bool autoneg_wait_to_complete); 56 static s32 ixgbe_setup_copper_link_82598(struct ixgbe_hw *hw, 57 ixgbe_link_speed speed, 58 bool autoneg, 59 bool autoneg_wait_to_complete); 60 static s32 ixgbe_reset_hw_82598(struct ixgbe_hw *hw); 61 s32 ixgbe_start_hw_82598(struct ixgbe_hw *hw); 62 void ixgbe_enable_relaxed_ordering_82598(struct ixgbe_hw *hw); 63 s32 ixgbe_set_vmdq_82598(struct ixgbe_hw *hw, u32 rar, u32 vmdq); 64 static s32 ixgbe_clear_vmdq_82598(struct ixgbe_hw *hw, u32 rar, u32 vmdq); 65 s32 ixgbe_set_vfta_82598(struct ixgbe_hw *hw, u32 vlan, 66 u32 vind, bool vlan_on); 67 static s32 ixgbe_clear_vfta_82598(struct ixgbe_hw *hw); 68 s32 ixgbe_read_analog_reg8_82598(struct ixgbe_hw *hw, u32 reg, u8 *val); 69 s32 ixgbe_write_analog_reg8_82598(struct ixgbe_hw *hw, u32 reg, u8 val); 70 s32 ixgbe_read_i2c_eeprom_82598(struct ixgbe_hw *hw, u8 byte_offset, 71 u8 *eeprom_data); 72 u32 ixgbe_get_supported_physical_layer_82598(struct ixgbe_hw *hw); 73 s32 ixgbe_init_phy_ops_82598(struct ixgbe_hw *hw); 74 void ixgbe_set_lan_id_multi_port_pcie_82598(struct ixgbe_hw *hw); 75 void ixgbe_set_pcie_completion_timeout(struct ixgbe_hw *hw); 76 static s32 ixgbe_validate_link_ready(struct ixgbe_hw *hw); 77 78 /** 79 * ixgbe_set_pcie_completion_timeout - set pci-e completion timeout 80 * @hw: pointer to the HW structure 81 * 82 * The defaults for 82598 should be in the range of 50us to 50ms, 83 * however the hardware default for these parts is 500us to 1ms which is less 84 * than the 10ms recommended by the pci-e spec. To address this we need to 85 * increase the value to either 10ms to 250ms for capability version 1 config, 86 * or 16ms to 55ms for version 2. 87 **/ 88 void ixgbe_set_pcie_completion_timeout(struct ixgbe_hw *hw) 89 { 90 u32 gcr = IXGBE_READ_REG(hw, IXGBE_GCR); 91 u16 pcie_devctl2; 92 93 /* only take action if timeout value is defaulted to 0 */ 94 if (gcr & IXGBE_GCR_CMPL_TMOUT_MASK) 95 goto out; 96 97 /* 98 * if capababilities version is type 1 we can write the 99 * timeout of 10ms to 250ms through the GCR register 100 */ 101 if (!(gcr & IXGBE_GCR_CAP_VER2)) { 102 gcr |= IXGBE_GCR_CMPL_TMOUT_10ms; 103 goto out; 104 } 105 106 /* 107 * for version 2 capabilities we need to write the config space 108 * directly in order to set the completion timeout value for 109 * 16ms to 55ms 110 */ 111 pcie_devctl2 = IXGBE_READ_PCIE_WORD(hw, IXGBE_PCI_DEVICE_CONTROL2); 112 pcie_devctl2 |= IXGBE_PCI_DEVICE_CONTROL2_16ms; 113 IXGBE_WRITE_PCIE_WORD(hw, IXGBE_PCI_DEVICE_CONTROL2, pcie_devctl2); 114 out: 115 /* disable completion timeout resend */ 116 gcr &= ~IXGBE_GCR_CMPL_TMOUT_RESEND; 117 IXGBE_WRITE_REG(hw, IXGBE_GCR, gcr); 118 } 119 120 /** 121 * ixgbe_get_pcie_msix_count_82598 - Gets MSI-X vector count 122 * @hw: pointer to hardware structure 123 * 124 * Read PCIe configuration space, and get the MSI-X vector count from 125 * the capabilities table. 126 **/ 127 u32 ixgbe_get_pcie_msix_count_82598(struct ixgbe_hw *hw) 128 { 129 u32 msix_count = 18; 130 131 DEBUGFUNC("ixgbe_get_pcie_msix_count_82598"); 132 133 if (hw->mac.msix_vectors_from_pcie) { 134 msix_count = IXGBE_READ_PCIE_WORD(hw, 135 IXGBE_PCIE_MSIX_82598_CAPS); 136 msix_count &= IXGBE_PCIE_MSIX_TBL_SZ_MASK; 137 138 /* MSI-X count is zero-based in HW, so increment to give 139 * proper value */ 140 msix_count++; 141 } 142 return msix_count; 143 } 144 145 /** 146 * ixgbe_init_ops_82598 - Inits func ptrs and MAC type 147 * @hw: pointer to hardware structure 148 * 149 * Initialize the function pointers and assign the MAC type for 82598. 150 * Does not touch the hardware. 151 **/ 152 s32 ixgbe_init_ops_82598(struct ixgbe_hw *hw) 153 { 154 struct ixgbe_mac_info *mac = &hw->mac; 155 struct ixgbe_phy_info *phy = &hw->phy; 156 s32 ret_val; 157 158 DEBUGFUNC("ixgbe_init_ops_82598"); 159 160 ret_val = ixgbe_init_phy_ops_generic(hw); 161 ret_val = ixgbe_init_ops_generic(hw); 162 163 /* PHY */ 164 phy->ops.init = &ixgbe_init_phy_ops_82598; 165 166 /* MAC */ 167 mac->ops.start_hw = &ixgbe_start_hw_82598; 168 mac->ops.enable_relaxed_ordering = &ixgbe_enable_relaxed_ordering_82598; 169 mac->ops.reset_hw = &ixgbe_reset_hw_82598; 170 mac->ops.get_media_type = &ixgbe_get_media_type_82598; 171 mac->ops.get_supported_physical_layer = 172 &ixgbe_get_supported_physical_layer_82598; 173 mac->ops.read_analog_reg8 = &ixgbe_read_analog_reg8_82598; 174 mac->ops.write_analog_reg8 = &ixgbe_write_analog_reg8_82598; 175 mac->ops.set_lan_id = &ixgbe_set_lan_id_multi_port_pcie_82598; 176 177 /* RAR, Multicast, VLAN */ 178 mac->ops.set_vmdq = &ixgbe_set_vmdq_82598; 179 mac->ops.clear_vmdq = &ixgbe_clear_vmdq_82598; 180 mac->ops.set_vfta = &ixgbe_set_vfta_82598; 181 mac->ops.clear_vfta = &ixgbe_clear_vfta_82598; 182 183 /* Flow Control */ 184 mac->ops.fc_enable = &ixgbe_fc_enable_82598; 185 186 mac->mcft_size = 128; 187 mac->vft_size = 128; 188 mac->num_rar_entries = 16; 189 mac->max_tx_queues = 32; 190 mac->max_rx_queues = 64; 191 mac->max_msix_vectors = ixgbe_get_pcie_msix_count_82598(hw); 192 193 /* SFP+ Module */ 194 phy->ops.read_i2c_eeprom = &ixgbe_read_i2c_eeprom_82598; 195 196 /* Link */ 197 mac->ops.check_link = &ixgbe_check_mac_link_82598; 198 mac->ops.setup_link = &ixgbe_setup_mac_link_82598; 199 mac->ops.get_link_capabilities = 200 &ixgbe_get_link_capabilities_82598; 201 202 return ret_val; 203 } 204 205 /** 206 * ixgbe_init_phy_ops_82598 - PHY/SFP specific init 207 * @hw: pointer to hardware structure 208 * 209 * Initialize any function pointers that were not able to be 210 * set during init_shared_code because the PHY/SFP type was 211 * not known. Perform the SFP init if necessary. 212 * 213 **/ 214 s32 ixgbe_init_phy_ops_82598(struct ixgbe_hw *hw) 215 { 216 struct ixgbe_mac_info *mac = &hw->mac; 217 struct ixgbe_phy_info *phy = &hw->phy; 218 s32 ret_val = IXGBE_SUCCESS; 219 u16 list_offset, data_offset; 220 221 DEBUGFUNC("ixgbe_init_phy_ops_82598"); 222 223 /* Identify the PHY */ 224 phy->ops.identify(hw); 225 226 /* Overwrite the link function pointers if copper PHY */ 227 if (mac->ops.get_media_type(hw) == ixgbe_media_type_copper) { 228 mac->ops.setup_link = &ixgbe_setup_copper_link_82598; 229 mac->ops.get_link_capabilities = 230 &ixgbe_get_copper_link_capabilities_generic; 231 } 232 233 switch (hw->phy.type) { 234 case ixgbe_phy_tn: 235 phy->ops.setup_link = &ixgbe_setup_phy_link_tnx; 236 phy->ops.check_link = &ixgbe_check_phy_link_tnx; 237 phy->ops.get_firmware_version = 238 &ixgbe_get_phy_firmware_version_tnx; 239 break; 240 case ixgbe_phy_aq: 241 phy->ops.get_firmware_version = 242 &ixgbe_get_phy_firmware_version_generic; 243 break; 244 case ixgbe_phy_nl: 245 phy->ops.reset = &ixgbe_reset_phy_nl; 246 247 /* Call SFP+ identify routine to get the SFP+ module type */ 248 ret_val = phy->ops.identify_sfp(hw); 249 if (ret_val != IXGBE_SUCCESS) 250 goto out; 251 else if (hw->phy.sfp_type == ixgbe_sfp_type_unknown) { 252 ret_val = IXGBE_ERR_SFP_NOT_SUPPORTED; 253 goto out; 254 } 255 256 /* Check to see if SFP+ module is supported */ 257 ret_val = ixgbe_get_sfp_init_sequence_offsets(hw, 258 &list_offset, 259 &data_offset); 260 if (ret_val != IXGBE_SUCCESS) { 261 ret_val = IXGBE_ERR_SFP_NOT_SUPPORTED; 262 goto out; 263 } 264 break; 265 default: 266 break; 267 } 268 269 out: 270 return ret_val; 271 } 272 273 /** 274 * ixgbe_start_hw_82598 - Prepare hardware for Tx/Rx 275 * @hw: pointer to hardware structure 276 * 277 * Starts the hardware using the generic start_hw function. 278 * Disables relaxed ordering Then set pcie completion timeout 279 * 280 **/ 281 s32 ixgbe_start_hw_82598(struct ixgbe_hw *hw) 282 { 283 u32 regval; 284 u32 i; 285 s32 ret_val = IXGBE_SUCCESS; 286 287 DEBUGFUNC("ixgbe_start_hw_82598"); 288 289 ret_val = ixgbe_start_hw_generic(hw); 290 291 /* Disable relaxed ordering */ 292 for (i = 0; ((i < hw->mac.max_tx_queues) && 293 (i < IXGBE_DCA_MAX_QUEUES_82598)); i++) { 294 regval = IXGBE_READ_REG(hw, IXGBE_DCA_TXCTRL(i)); 295 regval &= ~IXGBE_DCA_TXCTRL_TX_WB_RO_EN; 296 IXGBE_WRITE_REG(hw, IXGBE_DCA_TXCTRL(i), regval); 297 } 298 299 for (i = 0; ((i < hw->mac.max_rx_queues) && 300 (i < IXGBE_DCA_MAX_QUEUES_82598)); i++) { 301 regval = IXGBE_READ_REG(hw, IXGBE_DCA_RXCTRL(i)); 302 regval &= ~(IXGBE_DCA_RXCTRL_DESC_WRO_EN | 303 IXGBE_DCA_RXCTRL_DESC_HSRO_EN); 304 IXGBE_WRITE_REG(hw, IXGBE_DCA_RXCTRL(i), regval); 305 } 306 307 /* set the completion timeout for interface */ 308 if (ret_val == IXGBE_SUCCESS) 309 ixgbe_set_pcie_completion_timeout(hw); 310 311 return ret_val; 312 } 313 314 /** 315 * ixgbe_get_link_capabilities_82598 - Determines link capabilities 316 * @hw: pointer to hardware structure 317 * @speed: pointer to link speed 318 * @autoneg: boolean auto-negotiation value 319 * 320 * Determines the link capabilities by reading the AUTOC register. 321 **/ 322 static s32 ixgbe_get_link_capabilities_82598(struct ixgbe_hw *hw, 323 ixgbe_link_speed *speed, 324 bool *autoneg) 325 { 326 s32 status = IXGBE_SUCCESS; 327 u32 autoc = 0; 328 329 DEBUGFUNC("ixgbe_get_link_capabilities_82598"); 330 331 /* 332 * Determine link capabilities based on the stored value of AUTOC, 333 * which represents EEPROM defaults. If AUTOC value has not been 334 * stored, use the current register value. 335 */ 336 if (hw->mac.orig_link_settings_stored) 337 autoc = hw->mac.orig_autoc; 338 else 339 autoc = IXGBE_READ_REG(hw, IXGBE_AUTOC); 340 341 switch (autoc & IXGBE_AUTOC_LMS_MASK) { 342 case IXGBE_AUTOC_LMS_1G_LINK_NO_AN: 343 *speed = IXGBE_LINK_SPEED_1GB_FULL; 344 *autoneg = FALSE; 345 break; 346 347 case IXGBE_AUTOC_LMS_10G_LINK_NO_AN: 348 *speed = IXGBE_LINK_SPEED_10GB_FULL; 349 *autoneg = FALSE; 350 break; 351 352 case IXGBE_AUTOC_LMS_1G_AN: 353 *speed = IXGBE_LINK_SPEED_1GB_FULL; 354 *autoneg = TRUE; 355 break; 356 357 case IXGBE_AUTOC_LMS_KX4_AN: 358 case IXGBE_AUTOC_LMS_KX4_AN_1G_AN: 359 *speed = IXGBE_LINK_SPEED_UNKNOWN; 360 if (autoc & IXGBE_AUTOC_KX4_SUPP) 361 *speed |= IXGBE_LINK_SPEED_10GB_FULL; 362 if (autoc & IXGBE_AUTOC_KX_SUPP) 363 *speed |= IXGBE_LINK_SPEED_1GB_FULL; 364 *autoneg = TRUE; 365 break; 366 367 default: 368 status = IXGBE_ERR_LINK_SETUP; 369 break; 370 } 371 372 return status; 373 } 374 375 /** 376 * ixgbe_get_media_type_82598 - Determines media type 377 * @hw: pointer to hardware structure 378 * 379 * Returns the media type (fiber, copper, backplane) 380 **/ 381 static enum ixgbe_media_type ixgbe_get_media_type_82598(struct ixgbe_hw *hw) 382 { 383 enum ixgbe_media_type media_type; 384 385 DEBUGFUNC("ixgbe_get_media_type_82598"); 386 387 /* Detect if there is a copper PHY attached. */ 388 if (hw->phy.type == ixgbe_phy_cu_unknown || 389 hw->phy.type == ixgbe_phy_tn || 390 hw->phy.type == ixgbe_phy_aq) { 391 media_type = ixgbe_media_type_copper; 392 goto out; 393 } 394 395 /* Media type for I82598 is based on device ID */ 396 switch (hw->device_id) { 397 case IXGBE_DEV_ID_82598: 398 case IXGBE_DEV_ID_82598_BX: 399 /* Default device ID is mezzanine card KX/KX4 */ 400 media_type = ixgbe_media_type_backplane; 401 break; 402 case IXGBE_DEV_ID_82598AF_DUAL_PORT: 403 case IXGBE_DEV_ID_82598AF_SINGLE_PORT: 404 case IXGBE_DEV_ID_82598_DA_DUAL_PORT: 405 case IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM: 406 case IXGBE_DEV_ID_82598EB_XF_LR: 407 case IXGBE_DEV_ID_82598EB_SFP_LOM: 408 media_type = ixgbe_media_type_fiber; 409 break; 410 case IXGBE_DEV_ID_82598EB_CX4: 411 case IXGBE_DEV_ID_82598_CX4_DUAL_PORT: 412 media_type = ixgbe_media_type_cx4; 413 break; 414 case IXGBE_DEV_ID_82598AT: 415 case IXGBE_DEV_ID_82598AT2: 416 media_type = ixgbe_media_type_copper; 417 break; 418 default: 419 media_type = ixgbe_media_type_unknown; 420 break; 421 } 422 out: 423 return media_type; 424 } 425 426 /** 427 * ixgbe_fc_enable_82598 - Enable flow control 428 * @hw: pointer to hardware structure 429 * @packetbuf_num: packet buffer number (0-7) 430 * 431 * Enable flow control according to the current settings. 432 **/ 433 s32 ixgbe_fc_enable_82598(struct ixgbe_hw *hw, s32 packetbuf_num) 434 { 435 s32 ret_val = IXGBE_SUCCESS; 436 u32 fctrl_reg; 437 u32 rmcs_reg; 438 u32 reg; 439 u32 link_speed = 0; 440 bool link_up; 441 442 DEBUGFUNC("ixgbe_fc_enable_82598"); 443 444 /* 445 * On 82598 having Rx FC on causes resets while doing 1G 446 * so if it's on turn it off once we know link_speed. For 447 * more details see 82598 Specification update. 448 */ 449 hw->mac.ops.check_link(hw, &link_speed, &link_up, FALSE); 450 if (link_up && link_speed == IXGBE_LINK_SPEED_1GB_FULL) { 451 switch (hw->fc.requested_mode) { 452 case ixgbe_fc_full: 453 hw->fc.requested_mode = ixgbe_fc_tx_pause; 454 break; 455 case ixgbe_fc_rx_pause: 456 hw->fc.requested_mode = ixgbe_fc_none; 457 break; 458 default: 459 /* no change */ 460 break; 461 } 462 } 463 464 /* Negotiate the fc mode to use */ 465 ret_val = ixgbe_fc_autoneg(hw); 466 if (ret_val) 467 goto out; 468 469 /* Disable any previous flow control settings */ 470 fctrl_reg = IXGBE_READ_REG(hw, IXGBE_FCTRL); 471 fctrl_reg &= ~(IXGBE_FCTRL_RFCE | IXGBE_FCTRL_RPFCE); 472 473 rmcs_reg = IXGBE_READ_REG(hw, IXGBE_RMCS); 474 rmcs_reg &= ~(IXGBE_RMCS_TFCE_PRIORITY | IXGBE_RMCS_TFCE_802_3X); 475 476 /* 477 * The possible values of fc.current_mode are: 478 * 0: Flow control is completely disabled 479 * 1: Rx flow control is enabled (we can receive pause frames, 480 * but not send pause frames). 481 * 2: Tx flow control is enabled (we can send pause frames but 482 * we do not support receiving pause frames). 483 * 3: Both Rx and Tx flow control (symmetric) are enabled. 484 * other: Invalid. 485 */ 486 switch (hw->fc.current_mode) { 487 case ixgbe_fc_none: 488 /* Flow control is disabled by software override or autoneg. 489 * The code below will actually disable it in the HW. 490 */ 491 break; 492 case ixgbe_fc_rx_pause: 493 /* 494 * Rx Flow control is enabled and Tx Flow control is 495 * disabled by software override. Since there really 496 * isn't a way to advertise that we are capable of RX 497 * Pause ONLY, we will advertise that we support both 498 * symmetric and asymmetric Rx PAUSE. Later, we will 499 * disable the adapter's ability to send PAUSE frames. 500 */ 501 fctrl_reg |= IXGBE_FCTRL_RFCE; 502 break; 503 case ixgbe_fc_tx_pause: 504 /* 505 * Tx Flow control is enabled, and Rx Flow control is 506 * disabled by software override. 507 */ 508 rmcs_reg |= IXGBE_RMCS_TFCE_802_3X; 509 break; 510 case ixgbe_fc_full: 511 /* Flow control (both Rx and Tx) is enabled by SW override. */ 512 fctrl_reg |= IXGBE_FCTRL_RFCE; 513 rmcs_reg |= IXGBE_RMCS_TFCE_802_3X; 514 break; 515 default: 516 DEBUGOUT("Flow control param set incorrectly\n"); 517 ret_val = IXGBE_ERR_CONFIG; 518 goto out; 519 break; 520 } 521 522 /* Set 802.3x based flow control settings. */ 523 fctrl_reg |= IXGBE_FCTRL_DPF; 524 IXGBE_WRITE_REG(hw, IXGBE_FCTRL, fctrl_reg); 525 IXGBE_WRITE_REG(hw, IXGBE_RMCS, rmcs_reg); 526 527 /* Set up and enable Rx high/low water mark thresholds, enable XON. */ 528 if (hw->fc.current_mode & ixgbe_fc_tx_pause) { 529 if (hw->fc.send_xon) { 530 IXGBE_WRITE_REG(hw, IXGBE_FCRTL(packetbuf_num), 531 (hw->fc.low_water | IXGBE_FCRTL_XONE)); 532 } else { 533 IXGBE_WRITE_REG(hw, IXGBE_FCRTL(packetbuf_num), 534 hw->fc.low_water); 535 } 536 537 IXGBE_WRITE_REG(hw, IXGBE_FCRTH(packetbuf_num), 538 (hw->fc.high_water | IXGBE_FCRTH_FCEN)); 539 } 540 541 /* Configure pause time (2 TCs per register) */ 542 reg = IXGBE_READ_REG(hw, IXGBE_FCTTV(packetbuf_num / 2)); 543 if ((packetbuf_num & 1) == 0) 544 reg = (reg & 0xFFFF0000) | hw->fc.pause_time; 545 else 546 reg = (reg & 0x0000FFFF) | (hw->fc.pause_time << 16); 547 IXGBE_WRITE_REG(hw, IXGBE_FCTTV(packetbuf_num / 2), reg); 548 549 IXGBE_WRITE_REG(hw, IXGBE_FCRTV, (hw->fc.pause_time >> 1)); 550 551 out: 552 return ret_val; 553 } 554 555 /** 556 * ixgbe_start_mac_link_82598 - Configures MAC link settings 557 * @hw: pointer to hardware structure 558 * 559 * Configures link settings based on values in the ixgbe_hw struct. 560 * Restarts the link. Performs autonegotiation if needed. 561 **/ 562 static s32 ixgbe_start_mac_link_82598(struct ixgbe_hw *hw, 563 bool autoneg_wait_to_complete) 564 { 565 u32 autoc_reg; 566 u32 links_reg; 567 u32 i; 568 s32 status = IXGBE_SUCCESS; 569 570 DEBUGFUNC("ixgbe_start_mac_link_82598"); 571 572 /* Restart link */ 573 autoc_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC); 574 autoc_reg |= IXGBE_AUTOC_AN_RESTART; 575 IXGBE_WRITE_REG(hw, IXGBE_AUTOC, autoc_reg); 576 577 /* Only poll for autoneg to complete if specified to do so */ 578 if (autoneg_wait_to_complete) { 579 if ((autoc_reg & IXGBE_AUTOC_LMS_MASK) == 580 IXGBE_AUTOC_LMS_KX4_AN || 581 (autoc_reg & IXGBE_AUTOC_LMS_MASK) == 582 IXGBE_AUTOC_LMS_KX4_AN_1G_AN) { 583 links_reg = 0; /* Just in case Autoneg time = 0 */ 584 for (i = 0; i < IXGBE_AUTO_NEG_TIME; i++) { 585 links_reg = IXGBE_READ_REG(hw, IXGBE_LINKS); 586 if (links_reg & IXGBE_LINKS_KX_AN_COMP) 587 break; 588 msec_delay(100); 589 } 590 if (!(links_reg & IXGBE_LINKS_KX_AN_COMP)) { 591 status = IXGBE_ERR_AUTONEG_NOT_COMPLETE; 592 DEBUGOUT("Autonegotiation did not complete.\n"); 593 } 594 } 595 } 596 597 /* Add delay to filter out noises during initial link setup */ 598 msec_delay(50); 599 600 return status; 601 } 602 603 /** 604 * ixgbe_check_mac_link_82598 - Get link/speed status 605 * @hw: pointer to hardware structure 606 * @speed: pointer to link speed 607 * @link_up: TRUE is link is up, FALSE otherwise 608 * @link_up_wait_to_complete: bool used to wait for link up or not 609 * 610 * Reads the links register to determine if link is up and the current speed 611 **/ 612 static s32 ixgbe_check_mac_link_82598(struct ixgbe_hw *hw, 613 ixgbe_link_speed *speed, bool *link_up, 614 bool link_up_wait_to_complete) 615 { 616 u32 links_reg; 617 u32 i; 618 u16 link_reg, adapt_comp_reg; 619 620 DEBUGFUNC("ixgbe_check_mac_link_82598"); 621 622 /* 623 * SERDES PHY requires us to read link status from undocumented 624 * register 0xC79F. Bit 0 set indicates link is up/ready; clear 625 * indicates link down. OxC00C is read to check that the XAUI lanes 626 * are active. Bit 0 clear indicates active; set indicates inactive. 627 */ 628 if (hw->phy.type == ixgbe_phy_nl) { 629 hw->phy.ops.read_reg(hw, 0xC79F, IXGBE_TWINAX_DEV, &link_reg); 630 hw->phy.ops.read_reg(hw, 0xC79F, IXGBE_TWINAX_DEV, &link_reg); 631 hw->phy.ops.read_reg(hw, 0xC00C, IXGBE_TWINAX_DEV, 632 &adapt_comp_reg); 633 if (link_up_wait_to_complete) { 634 for (i = 0; i < IXGBE_LINK_UP_TIME; i++) { 635 if ((link_reg & 1) && 636 ((adapt_comp_reg & 1) == 0)) { 637 *link_up = TRUE; 638 break; 639 } else { 640 *link_up = FALSE; 641 } 642 msec_delay(100); 643 hw->phy.ops.read_reg(hw, 0xC79F, 644 IXGBE_TWINAX_DEV, 645 &link_reg); 646 hw->phy.ops.read_reg(hw, 0xC00C, 647 IXGBE_TWINAX_DEV, 648 &adapt_comp_reg); 649 } 650 } else { 651 if ((link_reg & 1) && 652 ((adapt_comp_reg & 1) == 0)) 653 *link_up = TRUE; 654 else 655 *link_up = FALSE; 656 } 657 658 if (*link_up == FALSE) 659 goto out; 660 } 661 662 links_reg = IXGBE_READ_REG(hw, IXGBE_LINKS); 663 if (link_up_wait_to_complete) { 664 for (i = 0; i < IXGBE_LINK_UP_TIME; i++) { 665 if (links_reg & IXGBE_LINKS_UP) { 666 *link_up = TRUE; 667 break; 668 } else { 669 *link_up = FALSE; 670 } 671 msec_delay(100); 672 links_reg = IXGBE_READ_REG(hw, IXGBE_LINKS); 673 } 674 } else { 675 if (links_reg & IXGBE_LINKS_UP) 676 *link_up = TRUE; 677 else 678 *link_up = FALSE; 679 } 680 681 if (links_reg & IXGBE_LINKS_SPEED) 682 *speed = IXGBE_LINK_SPEED_10GB_FULL; 683 else 684 *speed = IXGBE_LINK_SPEED_1GB_FULL; 685 686 if ((hw->device_id == IXGBE_DEV_ID_82598AT2) && (*link_up == TRUE) && 687 (ixgbe_validate_link_ready(hw) != IXGBE_SUCCESS)) 688 *link_up = FALSE; 689 690 /* if link is down, zero out the current_mode */ 691 if (*link_up == FALSE) { 692 hw->fc.current_mode = ixgbe_fc_none; 693 hw->fc.fc_was_autonegged = FALSE; 694 } 695 696 out: 697 return IXGBE_SUCCESS; 698 } 699 700 /** 701 * ixgbe_setup_mac_link_82598 - Set MAC link speed 702 * @hw: pointer to hardware structure 703 * @speed: new link speed 704 * @autoneg: TRUE if autonegotiation enabled 705 * @autoneg_wait_to_complete: TRUE when waiting for completion is needed 706 * 707 * Set the link speed in the AUTOC register and restarts link. 708 **/ 709 static s32 ixgbe_setup_mac_link_82598(struct ixgbe_hw *hw, 710 ixgbe_link_speed speed, bool autoneg, 711 bool autoneg_wait_to_complete) 712 { 713 s32 status = IXGBE_SUCCESS; 714 ixgbe_link_speed link_capabilities = IXGBE_LINK_SPEED_UNKNOWN; 715 u32 curr_autoc = IXGBE_READ_REG(hw, IXGBE_AUTOC); 716 u32 autoc = curr_autoc; 717 u32 link_mode = autoc & IXGBE_AUTOC_LMS_MASK; 718 719 DEBUGFUNC("ixgbe_setup_mac_link_82598"); 720 721 /* Check to see if speed passed in is supported. */ 722 ixgbe_get_link_capabilities(hw, &link_capabilities, &autoneg); 723 speed &= link_capabilities; 724 725 if (speed == IXGBE_LINK_SPEED_UNKNOWN) 726 status = IXGBE_ERR_LINK_SETUP; 727 728 /* Set KX4/KX support according to speed requested */ 729 else if (link_mode == IXGBE_AUTOC_LMS_KX4_AN || 730 link_mode == IXGBE_AUTOC_LMS_KX4_AN_1G_AN) { 731 autoc &= ~IXGBE_AUTOC_KX4_KX_SUPP_MASK; 732 if (speed & IXGBE_LINK_SPEED_10GB_FULL) 733 autoc |= IXGBE_AUTOC_KX4_SUPP; 734 if (speed & IXGBE_LINK_SPEED_1GB_FULL) 735 autoc |= IXGBE_AUTOC_KX_SUPP; 736 if (autoc != curr_autoc) 737 IXGBE_WRITE_REG(hw, IXGBE_AUTOC, autoc); 738 } 739 740 if (status == IXGBE_SUCCESS) { 741 /* 742 * Setup and restart the link based on the new values in 743 * ixgbe_hw This will write the AUTOC register based on the new 744 * stored values 745 */ 746 status = ixgbe_start_mac_link_82598(hw, 747 autoneg_wait_to_complete); 748 } 749 750 return status; 751 } 752 753 754 /** 755 * ixgbe_setup_copper_link_82598 - Set the PHY autoneg advertised field 756 * @hw: pointer to hardware structure 757 * @speed: new link speed 758 * @autoneg: TRUE if autonegotiation enabled 759 * @autoneg_wait_to_complete: TRUE if waiting is needed to complete 760 * 761 * Sets the link speed in the AUTOC register in the MAC and restarts link. 762 **/ 763 static s32 ixgbe_setup_copper_link_82598(struct ixgbe_hw *hw, 764 ixgbe_link_speed speed, 765 bool autoneg, 766 bool autoneg_wait_to_complete) 767 { 768 s32 status; 769 770 DEBUGFUNC("ixgbe_setup_copper_link_82598"); 771 772 /* Setup the PHY according to input speed */ 773 status = hw->phy.ops.setup_link_speed(hw, speed, autoneg, 774 autoneg_wait_to_complete); 775 /* Set up MAC */ 776 ixgbe_start_mac_link_82598(hw, autoneg_wait_to_complete); 777 778 return status; 779 } 780 781 /** 782 * ixgbe_reset_hw_82598 - Performs hardware reset 783 * @hw: pointer to hardware structure 784 * 785 * Resets the hardware by resetting the transmit and receive units, masks and 786 * clears all interrupts, performing a PHY reset, and performing a link (MAC) 787 * reset. 788 **/ 789 static s32 ixgbe_reset_hw_82598(struct ixgbe_hw *hw) 790 { 791 s32 status = IXGBE_SUCCESS; 792 s32 phy_status = IXGBE_SUCCESS; 793 u32 ctrl; 794 u32 gheccr; 795 u32 i; 796 u32 autoc; 797 u8 analog_val; 798 799 DEBUGFUNC("ixgbe_reset_hw_82598"); 800 801 /* Call adapter stop to disable tx/rx and clear interrupts */ 802 hw->mac.ops.stop_adapter(hw); 803 804 /* 805 * Power up the Atlas Tx lanes if they are currently powered down. 806 * Atlas Tx lanes are powered down for MAC loopback tests, but 807 * they are not automatically restored on reset. 808 */ 809 hw->mac.ops.read_analog_reg8(hw, IXGBE_ATLAS_PDN_LPBK, &analog_val); 810 if (analog_val & IXGBE_ATLAS_PDN_TX_REG_EN) { 811 /* Enable Tx Atlas so packets can be transmitted again */ 812 hw->mac.ops.read_analog_reg8(hw, IXGBE_ATLAS_PDN_LPBK, 813 &analog_val); 814 analog_val &= ~IXGBE_ATLAS_PDN_TX_REG_EN; 815 hw->mac.ops.write_analog_reg8(hw, IXGBE_ATLAS_PDN_LPBK, 816 analog_val); 817 818 hw->mac.ops.read_analog_reg8(hw, IXGBE_ATLAS_PDN_10G, 819 &analog_val); 820 analog_val &= ~IXGBE_ATLAS_PDN_TX_10G_QL_ALL; 821 hw->mac.ops.write_analog_reg8(hw, IXGBE_ATLAS_PDN_10G, 822 analog_val); 823 824 hw->mac.ops.read_analog_reg8(hw, IXGBE_ATLAS_PDN_1G, 825 &analog_val); 826 analog_val &= ~IXGBE_ATLAS_PDN_TX_1G_QL_ALL; 827 hw->mac.ops.write_analog_reg8(hw, IXGBE_ATLAS_PDN_1G, 828 analog_val); 829 830 hw->mac.ops.read_analog_reg8(hw, IXGBE_ATLAS_PDN_AN, 831 &analog_val); 832 analog_val &= ~IXGBE_ATLAS_PDN_TX_AN_QL_ALL; 833 hw->mac.ops.write_analog_reg8(hw, IXGBE_ATLAS_PDN_AN, 834 analog_val); 835 } 836 837 /* Reset PHY */ 838 if (hw->phy.reset_disable == FALSE) { 839 /* PHY ops must be identified and initialized prior to reset */ 840 841 /* Init PHY and function pointers, perform SFP setup */ 842 phy_status = hw->phy.ops.init(hw); 843 if (phy_status == IXGBE_ERR_SFP_NOT_SUPPORTED) 844 goto reset_hw_out; 845 else if (phy_status == IXGBE_ERR_SFP_NOT_PRESENT) 846 goto no_phy_reset; 847 848 hw->phy.ops.reset(hw); 849 } 850 851 no_phy_reset: 852 /* 853 * Prevent the PCI-E bus from from hanging by disabling PCI-E master 854 * access and verify no pending requests before reset 855 */ 856 ixgbe_disable_pcie_master(hw); 857 858 mac_reset_top: 859 /* 860 * Issue global reset to the MAC. This needs to be a SW reset. 861 * If link reset is used, it might reset the MAC when mng is using it 862 */ 863 ctrl = IXGBE_READ_REG(hw, IXGBE_CTRL); 864 IXGBE_WRITE_REG(hw, IXGBE_CTRL, (ctrl | IXGBE_CTRL_RST)); 865 IXGBE_WRITE_FLUSH(hw); 866 867 /* Poll for reset bit to self-clear indicating reset is complete */ 868 for (i = 0; i < 10; i++) { 869 usec_delay(1); 870 ctrl = IXGBE_READ_REG(hw, IXGBE_CTRL); 871 if (!(ctrl & IXGBE_CTRL_RST)) 872 break; 873 } 874 if (ctrl & IXGBE_CTRL_RST) { 875 status = IXGBE_ERR_RESET_FAILED; 876 DEBUGOUT("Reset polling failed to complete.\n"); 877 } 878 879 /* 880 * Double resets are required for recovery from certain error 881 * conditions. Between resets, it is necessary to stall to allow time 882 * for any pending HW events to complete. We use 1usec since that is 883 * what is needed for ixgbe_disable_pcie_master(). The second reset 884 * then clears out any effects of those events. 885 */ 886 if (hw->mac.flags & IXGBE_FLAGS_DOUBLE_RESET_REQUIRED) { 887 hw->mac.flags &= ~IXGBE_FLAGS_DOUBLE_RESET_REQUIRED; 888 usec_delay(1); 889 goto mac_reset_top; 890 } 891 892 msec_delay(50); 893 894 gheccr = IXGBE_READ_REG(hw, IXGBE_GHECCR); 895 gheccr &= ~((1 << 21) | (1 << 18) | (1 << 9) | (1 << 6)); 896 IXGBE_WRITE_REG(hw, IXGBE_GHECCR, gheccr); 897 898 /* 899 * Store the original AUTOC value if it has not been 900 * stored off yet. Otherwise restore the stored original 901 * AUTOC value since the reset operation sets back to deaults. 902 */ 903 autoc = IXGBE_READ_REG(hw, IXGBE_AUTOC); 904 if (hw->mac.orig_link_settings_stored == FALSE) { 905 hw->mac.orig_autoc = autoc; 906 hw->mac.orig_link_settings_stored = TRUE; 907 } else if (autoc != hw->mac.orig_autoc) 908 IXGBE_WRITE_REG(hw, IXGBE_AUTOC, hw->mac.orig_autoc); 909 910 /* Store the permanent mac address */ 911 hw->mac.ops.get_mac_addr(hw, hw->mac.perm_addr); 912 913 /* 914 * Store MAC address from RAR0, clear receive address registers, and 915 * clear the multicast table 916 */ 917 hw->mac.ops.init_rx_addrs(hw); 918 919 920 921 reset_hw_out: 922 if (phy_status != IXGBE_SUCCESS) 923 status = phy_status; 924 return status; 925 } 926 927 /** 928 * ixgbe_set_vmdq_82598 - Associate a VMDq set index with a rx address 929 * @hw: pointer to hardware struct 930 * @rar: receive address register index to associate with a VMDq index 931 * @vmdq: VMDq set index 932 **/ 933 s32 ixgbe_set_vmdq_82598(struct ixgbe_hw *hw, u32 rar, u32 vmdq) 934 { 935 u32 rar_high; 936 937 DEBUGFUNC("ixgbe_set_vmdq_82598"); 938 939 rar_high = IXGBE_READ_REG(hw, IXGBE_RAH(rar)); 940 rar_high &= ~IXGBE_RAH_VIND_MASK; 941 rar_high |= ((vmdq << IXGBE_RAH_VIND_SHIFT) & IXGBE_RAH_VIND_MASK); 942 IXGBE_WRITE_REG(hw, IXGBE_RAH(rar), rar_high); 943 return IXGBE_SUCCESS; 944 } 945 946 /** 947 * ixgbe_clear_vmdq_82598 - Disassociate a VMDq set index from an rx address 948 * @hw: pointer to hardware struct 949 * @rar: receive address register index to associate with a VMDq index 950 * @vmdq: VMDq clear index (not used in 82598, but elsewhere) 951 **/ 952 static s32 ixgbe_clear_vmdq_82598(struct ixgbe_hw *hw, u32 rar, u32 vmdq) 953 { 954 u32 rar_high; 955 u32 rar_entries = hw->mac.num_rar_entries; 956 957 UNREFERENCED_PARAMETER(vmdq); 958 959 if (rar < rar_entries) { 960 rar_high = IXGBE_READ_REG(hw, IXGBE_RAH(rar)); 961 if (rar_high & IXGBE_RAH_VIND_MASK) { 962 rar_high &= ~IXGBE_RAH_VIND_MASK; 963 IXGBE_WRITE_REG(hw, IXGBE_RAH(rar), rar_high); 964 } 965 } else { 966 DEBUGOUT1("RAR index %d is out of range.\n", rar); 967 } 968 969 return IXGBE_SUCCESS; 970 } 971 972 /** 973 * ixgbe_set_vfta_82598 - Set VLAN filter table 974 * @hw: pointer to hardware structure 975 * @vlan: VLAN id to write to VLAN filter 976 * @vind: VMDq output index that maps queue to VLAN id in VFTA 977 * @vlan_on: boolean flag to turn on/off VLAN in VFTA 978 * 979 * Turn on/off specified VLAN in the VLAN filter table. 980 **/ 981 s32 ixgbe_set_vfta_82598(struct ixgbe_hw *hw, u32 vlan, u32 vind, 982 bool vlan_on) 983 { 984 u32 regindex; 985 u32 bitindex; 986 u32 bits; 987 u32 vftabyte; 988 989 DEBUGFUNC("ixgbe_set_vfta_82598"); 990 991 if (vlan > 4095) 992 return IXGBE_ERR_PARAM; 993 994 /* Determine 32-bit word position in array */ 995 regindex = (vlan >> 5) & 0x7F; /* upper seven bits */ 996 997 /* Determine the location of the (VMD) queue index */ 998 vftabyte = ((vlan >> 3) & 0x03); /* bits (4:3) indicating byte array */ 999 bitindex = (vlan & 0x7) << 2; /* lower 3 bits indicate nibble */ 1000 1001 /* Set the nibble for VMD queue index */ 1002 bits = IXGBE_READ_REG(hw, IXGBE_VFTAVIND(vftabyte, regindex)); 1003 bits &= (~(0x0F << bitindex)); 1004 bits |= (vind << bitindex); 1005 IXGBE_WRITE_REG(hw, IXGBE_VFTAVIND(vftabyte, regindex), bits); 1006 1007 /* Determine the location of the bit for this VLAN id */ 1008 bitindex = vlan & 0x1F; /* lower five bits */ 1009 1010 bits = IXGBE_READ_REG(hw, IXGBE_VFTA(regindex)); 1011 if (vlan_on) 1012 /* Turn on this VLAN id */ 1013 bits |= (1 << bitindex); 1014 else 1015 /* Turn off this VLAN id */ 1016 bits &= ~(1 << bitindex); 1017 IXGBE_WRITE_REG(hw, IXGBE_VFTA(regindex), bits); 1018 1019 return IXGBE_SUCCESS; 1020 } 1021 1022 /** 1023 * ixgbe_clear_vfta_82598 - Clear VLAN filter table 1024 * @hw: pointer to hardware structure 1025 * 1026 * Clears the VLAN filer table, and the VMDq index associated with the filter 1027 **/ 1028 static s32 ixgbe_clear_vfta_82598(struct ixgbe_hw *hw) 1029 { 1030 u32 offset; 1031 u32 vlanbyte; 1032 1033 DEBUGFUNC("ixgbe_clear_vfta_82598"); 1034 1035 for (offset = 0; offset < hw->mac.vft_size; offset++) 1036 IXGBE_WRITE_REG(hw, IXGBE_VFTA(offset), 0); 1037 1038 for (vlanbyte = 0; vlanbyte < 4; vlanbyte++) 1039 for (offset = 0; offset < hw->mac.vft_size; offset++) 1040 IXGBE_WRITE_REG(hw, IXGBE_VFTAVIND(vlanbyte, offset), 1041 0); 1042 1043 return IXGBE_SUCCESS; 1044 } 1045 1046 /** 1047 * ixgbe_read_analog_reg8_82598 - Reads 8 bit Atlas analog register 1048 * @hw: pointer to hardware structure 1049 * @reg: analog register to read 1050 * @val: read value 1051 * 1052 * Performs read operation to Atlas analog register specified. 1053 **/ 1054 s32 ixgbe_read_analog_reg8_82598(struct ixgbe_hw *hw, u32 reg, u8 *val) 1055 { 1056 u32 atlas_ctl; 1057 1058 DEBUGFUNC("ixgbe_read_analog_reg8_82598"); 1059 1060 IXGBE_WRITE_REG(hw, IXGBE_ATLASCTL, 1061 IXGBE_ATLASCTL_WRITE_CMD | (reg << 8)); 1062 IXGBE_WRITE_FLUSH(hw); 1063 usec_delay(10); 1064 atlas_ctl = IXGBE_READ_REG(hw, IXGBE_ATLASCTL); 1065 *val = (u8)atlas_ctl; 1066 1067 return IXGBE_SUCCESS; 1068 } 1069 1070 /** 1071 * ixgbe_write_analog_reg8_82598 - Writes 8 bit Atlas analog register 1072 * @hw: pointer to hardware structure 1073 * @reg: atlas register to write 1074 * @val: value to write 1075 * 1076 * Performs write operation to Atlas analog register specified. 1077 **/ 1078 s32 ixgbe_write_analog_reg8_82598(struct ixgbe_hw *hw, u32 reg, u8 val) 1079 { 1080 u32 atlas_ctl; 1081 1082 DEBUGFUNC("ixgbe_write_analog_reg8_82598"); 1083 1084 atlas_ctl = (reg << 8) | val; 1085 IXGBE_WRITE_REG(hw, IXGBE_ATLASCTL, atlas_ctl); 1086 IXGBE_WRITE_FLUSH(hw); 1087 usec_delay(10); 1088 1089 return IXGBE_SUCCESS; 1090 } 1091 1092 /** 1093 * ixgbe_read_i2c_eeprom_82598 - Reads 8 bit word over I2C interface. 1094 * @hw: pointer to hardware structure 1095 * @byte_offset: EEPROM byte offset to read 1096 * @eeprom_data: value read 1097 * 1098 * Performs 8 byte read operation to SFP module's EEPROM over I2C interface. 1099 **/ 1100 s32 ixgbe_read_i2c_eeprom_82598(struct ixgbe_hw *hw, u8 byte_offset, 1101 u8 *eeprom_data) 1102 { 1103 s32 status = IXGBE_SUCCESS; 1104 u16 sfp_addr = 0; 1105 u16 sfp_data = 0; 1106 u16 sfp_stat = 0; 1107 u32 i; 1108 1109 DEBUGFUNC("ixgbe_read_i2c_eeprom_82598"); 1110 1111 if (hw->phy.type == ixgbe_phy_nl) { 1112 /* 1113 * NetLogic phy SDA/SCL registers are at addresses 0xC30A to 1114 * 0xC30D. These registers are used to talk to the SFP+ 1115 * module's EEPROM through the SDA/SCL (I2C) interface. 1116 */ 1117 sfp_addr = (IXGBE_I2C_EEPROM_DEV_ADDR << 8) + byte_offset; 1118 sfp_addr = (sfp_addr | IXGBE_I2C_EEPROM_READ_MASK); 1119 hw->phy.ops.write_reg(hw, 1120 IXGBE_MDIO_PMA_PMD_SDA_SCL_ADDR, 1121 IXGBE_MDIO_PMA_PMD_DEV_TYPE, 1122 sfp_addr); 1123 1124 /* Poll status */ 1125 for (i = 0; i < 100; i++) { 1126 hw->phy.ops.read_reg(hw, 1127 IXGBE_MDIO_PMA_PMD_SDA_SCL_STAT, 1128 IXGBE_MDIO_PMA_PMD_DEV_TYPE, 1129 &sfp_stat); 1130 sfp_stat = sfp_stat & IXGBE_I2C_EEPROM_STATUS_MASK; 1131 if (sfp_stat != IXGBE_I2C_EEPROM_STATUS_IN_PROGRESS) 1132 break; 1133 msec_delay(10); 1134 } 1135 1136 if (sfp_stat != IXGBE_I2C_EEPROM_STATUS_PASS) { 1137 DEBUGOUT("EEPROM read did not pass.\n"); 1138 status = IXGBE_ERR_SFP_NOT_PRESENT; 1139 goto out; 1140 } 1141 1142 /* Read data */ 1143 hw->phy.ops.read_reg(hw, IXGBE_MDIO_PMA_PMD_SDA_SCL_DATA, 1144 IXGBE_MDIO_PMA_PMD_DEV_TYPE, &sfp_data); 1145 1146 *eeprom_data = (u8)(sfp_data >> 8); 1147 } else { 1148 status = IXGBE_ERR_PHY; 1149 goto out; 1150 } 1151 1152 out: 1153 return status; 1154 } 1155 1156 /** 1157 * ixgbe_get_supported_physical_layer_82598 - Returns physical layer type 1158 * @hw: pointer to hardware structure 1159 * 1160 * Determines physical layer capabilities of the current configuration. 1161 **/ 1162 u32 ixgbe_get_supported_physical_layer_82598(struct ixgbe_hw *hw) 1163 { 1164 u32 physical_layer = IXGBE_PHYSICAL_LAYER_UNKNOWN; 1165 u32 autoc = IXGBE_READ_REG(hw, IXGBE_AUTOC); 1166 u32 pma_pmd_10g = autoc & IXGBE_AUTOC_10G_PMA_PMD_MASK; 1167 u32 pma_pmd_1g = autoc & IXGBE_AUTOC_1G_PMA_PMD_MASK; 1168 u16 ext_ability = 0; 1169 1170 DEBUGFUNC("ixgbe_get_supported_physical_layer_82598"); 1171 1172 hw->phy.ops.identify(hw); 1173 1174 /* Copper PHY must be checked before AUTOC LMS to determine correct 1175 * physical layer because 10GBase-T PHYs use LMS = KX4/KX */ 1176 if (hw->phy.type == ixgbe_phy_tn || 1177 hw->phy.type == ixgbe_phy_cu_unknown) { 1178 hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_EXT_ABILITY, 1179 IXGBE_MDIO_PMA_PMD_DEV_TYPE, &ext_ability); 1180 if (ext_ability & IXGBE_MDIO_PHY_10GBASET_ABILITY) 1181 physical_layer |= IXGBE_PHYSICAL_LAYER_10GBASE_T; 1182 if (ext_ability & IXGBE_MDIO_PHY_1000BASET_ABILITY) 1183 physical_layer |= IXGBE_PHYSICAL_LAYER_1000BASE_T; 1184 if (ext_ability & IXGBE_MDIO_PHY_100BASETX_ABILITY) 1185 physical_layer |= IXGBE_PHYSICAL_LAYER_100BASE_TX; 1186 goto out; 1187 } 1188 1189 switch (autoc & IXGBE_AUTOC_LMS_MASK) { 1190 case IXGBE_AUTOC_LMS_1G_AN: 1191 case IXGBE_AUTOC_LMS_1G_LINK_NO_AN: 1192 if (pma_pmd_1g == IXGBE_AUTOC_1G_KX) 1193 physical_layer = IXGBE_PHYSICAL_LAYER_1000BASE_KX; 1194 else 1195 physical_layer = IXGBE_PHYSICAL_LAYER_1000BASE_BX; 1196 break; 1197 case IXGBE_AUTOC_LMS_10G_LINK_NO_AN: 1198 if (pma_pmd_10g == IXGBE_AUTOC_10G_CX4) 1199 physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_CX4; 1200 else if (pma_pmd_10g == IXGBE_AUTOC_10G_KX4) 1201 physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_KX4; 1202 else /* XAUI */ 1203 physical_layer = IXGBE_PHYSICAL_LAYER_UNKNOWN; 1204 break; 1205 case IXGBE_AUTOC_LMS_KX4_AN: 1206 case IXGBE_AUTOC_LMS_KX4_AN_1G_AN: 1207 if (autoc & IXGBE_AUTOC_KX_SUPP) 1208 physical_layer |= IXGBE_PHYSICAL_LAYER_1000BASE_KX; 1209 if (autoc & IXGBE_AUTOC_KX4_SUPP) 1210 physical_layer |= IXGBE_PHYSICAL_LAYER_10GBASE_KX4; 1211 break; 1212 default: 1213 break; 1214 } 1215 1216 if (hw->phy.type == ixgbe_phy_nl) { 1217 hw->phy.ops.identify_sfp(hw); 1218 1219 switch (hw->phy.sfp_type) { 1220 case ixgbe_sfp_type_da_cu: 1221 physical_layer = IXGBE_PHYSICAL_LAYER_SFP_PLUS_CU; 1222 break; 1223 case ixgbe_sfp_type_sr: 1224 physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_SR; 1225 break; 1226 case ixgbe_sfp_type_lr: 1227 physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_LR; 1228 break; 1229 default: 1230 physical_layer = IXGBE_PHYSICAL_LAYER_UNKNOWN; 1231 break; 1232 } 1233 } 1234 1235 switch (hw->device_id) { 1236 case IXGBE_DEV_ID_82598_DA_DUAL_PORT: 1237 physical_layer = IXGBE_PHYSICAL_LAYER_SFP_PLUS_CU; 1238 break; 1239 case IXGBE_DEV_ID_82598AF_DUAL_PORT: 1240 case IXGBE_DEV_ID_82598AF_SINGLE_PORT: 1241 case IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM: 1242 physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_SR; 1243 break; 1244 case IXGBE_DEV_ID_82598EB_XF_LR: 1245 physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_LR; 1246 break; 1247 default: 1248 break; 1249 } 1250 1251 out: 1252 return physical_layer; 1253 } 1254 1255 /** 1256 * ixgbe_set_lan_id_multi_port_pcie_82598 - Set LAN id for PCIe multiple 1257 * port devices. 1258 * @hw: pointer to the HW structure 1259 * 1260 * Calls common function and corrects issue with some single port devices 1261 * that enable LAN1 but not LAN0. 1262 **/ 1263 void ixgbe_set_lan_id_multi_port_pcie_82598(struct ixgbe_hw *hw) 1264 { 1265 struct ixgbe_bus_info *bus = &hw->bus; 1266 u16 pci_gen, pci_ctrl2; 1267 1268 DEBUGFUNC("ixgbe_set_lan_id_multi_port_pcie_82598"); 1269 1270 ixgbe_set_lan_id_multi_port_pcie(hw); 1271 1272 /* check if LAN0 is disabled */ 1273 hw->eeprom.ops.read(hw, IXGBE_PCIE_GENERAL_PTR, &pci_gen); 1274 if ((pci_gen != 0) && (pci_gen != 0xFFFF)) { 1275 1276 hw->eeprom.ops.read(hw, pci_gen + IXGBE_PCIE_CTRL2, &pci_ctrl2); 1277 1278 /* if LAN0 is completely disabled force function to 0 */ 1279 if ((pci_ctrl2 & IXGBE_PCIE_CTRL2_LAN_DISABLE) && 1280 !(pci_ctrl2 & IXGBE_PCIE_CTRL2_DISABLE_SELECT) && 1281 !(pci_ctrl2 & IXGBE_PCIE_CTRL2_DUMMY_ENABLE)) { 1282 1283 bus->func = 0; 1284 } 1285 } 1286 } 1287 1288 /** 1289 * ixgbe_validate_link_ready - Function looks for phy link 1290 * @hw: pointer to hardware structure 1291 * 1292 * Function indicates success when phy link is available. If phy is not ready 1293 * within 5 seconds of MAC indicating link, the function returns error. 1294 **/ 1295 static s32 ixgbe_validate_link_ready(struct ixgbe_hw *hw) 1296 { 1297 u32 timeout; 1298 u16 an_reg; 1299 1300 if (hw->device_id != IXGBE_DEV_ID_82598AT2) 1301 return IXGBE_SUCCESS; 1302 1303 for (timeout = 0; 1304 timeout < IXGBE_VALIDATE_LINK_READY_TIMEOUT; timeout++) { 1305 hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_STATUS, 1306 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, &an_reg); 1307 1308 if ((an_reg & IXGBE_MII_AUTONEG_COMPLETE) && 1309 (an_reg & IXGBE_MII_AUTONEG_LINK_UP)) 1310 break; 1311 1312 msec_delay(100); 1313 } 1314 1315 if (timeout == IXGBE_VALIDATE_LINK_READY_TIMEOUT) { 1316 DEBUGOUT("Link was indicated but link is down\n"); 1317 return IXGBE_ERR_LINK_SETUP; 1318 } 1319 1320 return IXGBE_SUCCESS; 1321 } 1322 1323 /** 1324 * ixgbe_enable_relaxed_ordering_82598 - enable relaxed ordering 1325 * @hw: pointer to hardware structure 1326 * 1327 **/ 1328 void ixgbe_enable_relaxed_ordering_82598(struct ixgbe_hw *hw) 1329 { 1330 u32 regval; 1331 u32 i; 1332 1333 DEBUGFUNC("ixgbe_enable_relaxed_ordering_82598"); 1334 1335 /* Enable relaxed ordering */ 1336 for (i = 0; ((i < hw->mac.max_tx_queues) && 1337 (i < IXGBE_DCA_MAX_QUEUES_82598)); i++) { 1338 regval = IXGBE_READ_REG(hw, IXGBE_DCA_TXCTRL(i)); 1339 regval |= IXGBE_DCA_TXCTRL_TX_WB_RO_EN; 1340 IXGBE_WRITE_REG(hw, IXGBE_DCA_TXCTRL(i), regval); 1341 } 1342 1343 for (i = 0; ((i < hw->mac.max_rx_queues) && 1344 (i < IXGBE_DCA_MAX_QUEUES_82598)); i++) { 1345 regval = IXGBE_READ_REG(hw, IXGBE_DCA_RXCTRL(i)); 1346 regval |= (IXGBE_DCA_RXCTRL_DESC_WRO_EN | 1347 IXGBE_DCA_RXCTRL_DESC_HSRO_EN); 1348 IXGBE_WRITE_REG(hw, IXGBE_DCA_RXCTRL(i), regval); 1349 } 1350 1351 } 1352