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 /*$FreeBSD$*/ 35 36 #include "ixgbe_api.h" 37 #include "ixgbe_common.h" 38 #include "ixgbe_phy.h" 39 40 static void ixgbe_i2c_start(struct ixgbe_hw *hw); 41 static void ixgbe_i2c_stop(struct ixgbe_hw *hw); 42 static void ixgbe_clock_in_i2c_byte(struct ixgbe_hw *hw, u8 *data); 43 static s32 ixgbe_clock_out_i2c_byte(struct ixgbe_hw *hw, u8 data); 44 static s32 ixgbe_get_i2c_ack(struct ixgbe_hw *hw); 45 static void ixgbe_clock_in_i2c_bit(struct ixgbe_hw *hw, bool *data); 46 static s32 ixgbe_clock_out_i2c_bit(struct ixgbe_hw *hw, bool data); 47 static void ixgbe_raise_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl); 48 static void ixgbe_lower_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl); 49 static s32 ixgbe_set_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl, bool data); 50 static bool ixgbe_get_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl); 51 static s32 ixgbe_read_i2c_sff8472_generic(struct ixgbe_hw *hw, u8 byte_offset, 52 u8 *sff8472_data); 53 54 /** 55 * ixgbe_out_i2c_byte_ack - Send I2C byte with ack 56 * @hw: pointer to the hardware structure 57 * @byte: byte to send 58 * 59 * Returns an error code on error. 60 */ 61 static s32 ixgbe_out_i2c_byte_ack(struct ixgbe_hw *hw, u8 byte) 62 { 63 s32 status; 64 65 status = ixgbe_clock_out_i2c_byte(hw, byte); 66 if (status) 67 return status; 68 return ixgbe_get_i2c_ack(hw); 69 } 70 71 /** 72 * ixgbe_in_i2c_byte_ack - Receive an I2C byte and send ack 73 * @hw: pointer to the hardware structure 74 * @byte: pointer to a u8 to receive the byte 75 * 76 * Returns an error code on error. 77 */ 78 static s32 ixgbe_in_i2c_byte_ack(struct ixgbe_hw *hw, u8 *byte) 79 { 80 ixgbe_clock_in_i2c_byte(hw, byte); 81 /* ACK */ 82 return ixgbe_clock_out_i2c_bit(hw, false); 83 } 84 85 /** 86 * ixgbe_ones_comp_byte_add - Perform one's complement addition 87 * @add1: addend 1 88 * @add2: addend 2 89 * 90 * Returns one's complement 8-bit sum. 91 */ 92 static u8 ixgbe_ones_comp_byte_add(u8 add1, u8 add2) 93 { 94 u16 sum = add1 + add2; 95 96 sum = (sum & 0xFF) + (sum >> 8); 97 return sum & 0xFF; 98 } 99 100 /** 101 * ixgbe_read_i2c_combined_generic_int - Perform I2C read combined operation 102 * @hw: pointer to the hardware structure 103 * @addr: I2C bus address to read from 104 * @reg: I2C device register to read from 105 * @val: pointer to location to receive read value 106 * @lock: true if to take and release semaphore 107 * 108 * Returns an error code on error. 109 */ 110 s32 ixgbe_read_i2c_combined_generic_int(struct ixgbe_hw *hw, u8 addr, u16 reg, 111 u16 *val, bool lock) 112 { 113 u32 swfw_mask = hw->phy.phy_semaphore_mask; 114 int max_retry = 3; 115 int retry = 0; 116 u8 csum_byte; 117 u8 high_bits; 118 u8 low_bits; 119 u8 reg_high; 120 u8 csum; 121 122 reg_high = ((reg >> 7) & 0xFE) | 1; /* Indicate read combined */ 123 csum = ixgbe_ones_comp_byte_add(reg_high, reg & 0xFF); 124 csum = ~csum; 125 do { 126 if (lock && hw->mac.ops.acquire_swfw_sync(hw, swfw_mask)) 127 return IXGBE_ERR_SWFW_SYNC; 128 ixgbe_i2c_start(hw); 129 /* Device Address and write indication */ 130 if (ixgbe_out_i2c_byte_ack(hw, addr)) 131 goto fail; 132 /* Write bits 14:8 */ 133 if (ixgbe_out_i2c_byte_ack(hw, reg_high)) 134 goto fail; 135 /* Write bits 7:0 */ 136 if (ixgbe_out_i2c_byte_ack(hw, reg & 0xFF)) 137 goto fail; 138 /* Write csum */ 139 if (ixgbe_out_i2c_byte_ack(hw, csum)) 140 goto fail; 141 /* Re-start condition */ 142 ixgbe_i2c_start(hw); 143 /* Device Address and read indication */ 144 if (ixgbe_out_i2c_byte_ack(hw, addr | 1)) 145 goto fail; 146 /* Get upper bits */ 147 if (ixgbe_in_i2c_byte_ack(hw, &high_bits)) 148 goto fail; 149 /* Get low bits */ 150 if (ixgbe_in_i2c_byte_ack(hw, &low_bits)) 151 goto fail; 152 /* Get csum */ 153 ixgbe_clock_in_i2c_byte(hw, &csum_byte); 154 /* NACK */ 155 if (ixgbe_clock_out_i2c_bit(hw, false)) 156 goto fail; 157 ixgbe_i2c_stop(hw); 158 if (lock) 159 hw->mac.ops.release_swfw_sync(hw, swfw_mask); 160 *val = (high_bits << 8) | low_bits; 161 return 0; 162 163 fail: 164 ixgbe_i2c_bus_clear(hw); 165 if (lock) 166 hw->mac.ops.release_swfw_sync(hw, swfw_mask); 167 if (retry < max_retry) 168 DEBUGOUT("I2C byte read combined error - Retrying.\n"); 169 else 170 DEBUGOUT("I2C byte read combined error.\n"); 171 retry++; 172 } while (retry <= max_retry); 173 174 return IXGBE_ERR_I2C; 175 } 176 177 /** 178 * ixgbe_write_i2c_combined_generic_int - Perform I2C write combined operation 179 * @hw: pointer to the hardware structure 180 * @addr: I2C bus address to write to 181 * @reg: I2C device register to write to 182 * @val: value to write 183 * @lock: true if to take and release semaphore 184 * 185 * Returns an error code on error. 186 */ 187 s32 ixgbe_write_i2c_combined_generic_int(struct ixgbe_hw *hw, u8 addr, u16 reg, 188 u16 val, bool lock) 189 { 190 u32 swfw_mask = hw->phy.phy_semaphore_mask; 191 int max_retry = 1; 192 int retry = 0; 193 u8 reg_high; 194 u8 csum; 195 196 reg_high = (reg >> 7) & 0xFE; /* Indicate write combined */ 197 csum = ixgbe_ones_comp_byte_add(reg_high, reg & 0xFF); 198 csum = ixgbe_ones_comp_byte_add(csum, val >> 8); 199 csum = ixgbe_ones_comp_byte_add(csum, val & 0xFF); 200 csum = ~csum; 201 do { 202 if (lock && hw->mac.ops.acquire_swfw_sync(hw, swfw_mask)) 203 return IXGBE_ERR_SWFW_SYNC; 204 ixgbe_i2c_start(hw); 205 /* Device Address and write indication */ 206 if (ixgbe_out_i2c_byte_ack(hw, addr)) 207 goto fail; 208 /* Write bits 14:8 */ 209 if (ixgbe_out_i2c_byte_ack(hw, reg_high)) 210 goto fail; 211 /* Write bits 7:0 */ 212 if (ixgbe_out_i2c_byte_ack(hw, reg & 0xFF)) 213 goto fail; 214 /* Write data 15:8 */ 215 if (ixgbe_out_i2c_byte_ack(hw, val >> 8)) 216 goto fail; 217 /* Write data 7:0 */ 218 if (ixgbe_out_i2c_byte_ack(hw, val & 0xFF)) 219 goto fail; 220 /* Write csum */ 221 if (ixgbe_out_i2c_byte_ack(hw, csum)) 222 goto fail; 223 ixgbe_i2c_stop(hw); 224 if (lock) 225 hw->mac.ops.release_swfw_sync(hw, swfw_mask); 226 return 0; 227 228 fail: 229 ixgbe_i2c_bus_clear(hw); 230 if (lock) 231 hw->mac.ops.release_swfw_sync(hw, swfw_mask); 232 if (retry < max_retry) 233 DEBUGOUT("I2C byte write combined error - Retrying.\n"); 234 else 235 DEBUGOUT("I2C byte write combined error.\n"); 236 retry++; 237 } while (retry <= max_retry); 238 239 return IXGBE_ERR_I2C; 240 } 241 242 /** 243 * ixgbe_init_phy_ops_generic - Inits PHY function ptrs 244 * @hw: pointer to the hardware structure 245 * 246 * Initialize the function pointers. 247 **/ 248 s32 ixgbe_init_phy_ops_generic(struct ixgbe_hw *hw) 249 { 250 struct ixgbe_phy_info *phy = &hw->phy; 251 252 DEBUGFUNC("ixgbe_init_phy_ops_generic"); 253 254 /* PHY */ 255 phy->ops.identify = ixgbe_identify_phy_generic; 256 phy->ops.reset = ixgbe_reset_phy_generic; 257 phy->ops.read_reg = ixgbe_read_phy_reg_generic; 258 phy->ops.write_reg = ixgbe_write_phy_reg_generic; 259 phy->ops.read_reg_mdi = ixgbe_read_phy_reg_mdi; 260 phy->ops.write_reg_mdi = ixgbe_write_phy_reg_mdi; 261 phy->ops.setup_link = ixgbe_setup_phy_link_generic; 262 phy->ops.setup_link_speed = ixgbe_setup_phy_link_speed_generic; 263 phy->ops.check_link = NULL; 264 phy->ops.get_firmware_version = ixgbe_get_phy_firmware_version_generic; 265 phy->ops.read_i2c_byte = ixgbe_read_i2c_byte_generic; 266 phy->ops.write_i2c_byte = ixgbe_write_i2c_byte_generic; 267 phy->ops.read_i2c_sff8472 = ixgbe_read_i2c_sff8472_generic; 268 phy->ops.read_i2c_eeprom = ixgbe_read_i2c_eeprom_generic; 269 phy->ops.write_i2c_eeprom = ixgbe_write_i2c_eeprom_generic; 270 phy->ops.i2c_bus_clear = ixgbe_i2c_bus_clear; 271 phy->ops.identify_sfp = ixgbe_identify_module_generic; 272 phy->sfp_type = ixgbe_sfp_type_unknown; 273 phy->ops.read_i2c_byte_unlocked = ixgbe_read_i2c_byte_generic_unlocked; 274 phy->ops.write_i2c_byte_unlocked = 275 ixgbe_write_i2c_byte_generic_unlocked; 276 phy->ops.check_overtemp = ixgbe_tn_check_overtemp; 277 return IXGBE_SUCCESS; 278 } 279 280 /** 281 * ixgbe_probe_phy - Probe a single address for a PHY 282 * @hw: pointer to hardware structure 283 * @phy_addr: PHY address to probe 284 * 285 * Returns true if PHY found 286 */ 287 static bool ixgbe_probe_phy(struct ixgbe_hw *hw, u16 phy_addr) 288 { 289 u16 ext_ability = 0; 290 291 if (!ixgbe_validate_phy_addr(hw, phy_addr)) { 292 DEBUGOUT1("Unable to validate PHY address 0x%04X\n", 293 phy_addr); 294 return false; 295 } 296 297 if (ixgbe_get_phy_id(hw)) 298 return false; 299 300 hw->phy.type = ixgbe_get_phy_type_from_id(hw->phy.id); 301 302 if (hw->phy.type == ixgbe_phy_unknown) { 303 hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_EXT_ABILITY, 304 IXGBE_MDIO_PMA_PMD_DEV_TYPE, &ext_ability); 305 if (ext_ability & 306 (IXGBE_MDIO_PHY_10GBASET_ABILITY | 307 IXGBE_MDIO_PHY_1000BASET_ABILITY)) 308 hw->phy.type = ixgbe_phy_cu_unknown; 309 else 310 hw->phy.type = ixgbe_phy_generic; 311 } 312 313 return true; 314 } 315 316 /** 317 * ixgbe_identify_phy_generic - Get physical layer module 318 * @hw: pointer to hardware structure 319 * 320 * Determines the physical layer module found on the current adapter. 321 **/ 322 s32 ixgbe_identify_phy_generic(struct ixgbe_hw *hw) 323 { 324 s32 status = IXGBE_ERR_PHY_ADDR_INVALID; 325 u16 phy_addr; 326 327 DEBUGFUNC("ixgbe_identify_phy_generic"); 328 329 if (!hw->phy.phy_semaphore_mask) { 330 if (hw->bus.lan_id) 331 hw->phy.phy_semaphore_mask = IXGBE_GSSR_PHY1_SM; 332 else 333 hw->phy.phy_semaphore_mask = IXGBE_GSSR_PHY0_SM; 334 } 335 336 if (hw->phy.type != ixgbe_phy_unknown) 337 return IXGBE_SUCCESS; 338 339 if (hw->phy.nw_mng_if_sel) { 340 phy_addr = (hw->phy.nw_mng_if_sel & 341 IXGBE_NW_MNG_IF_SEL_MDIO_PHY_ADD) >> 342 IXGBE_NW_MNG_IF_SEL_MDIO_PHY_ADD_SHIFT; 343 if (ixgbe_probe_phy(hw, phy_addr)) 344 return IXGBE_SUCCESS; 345 else 346 return IXGBE_ERR_PHY_ADDR_INVALID; 347 } 348 349 for (phy_addr = 0; phy_addr < IXGBE_MAX_PHY_ADDR; phy_addr++) { 350 if (ixgbe_probe_phy(hw, phy_addr)) { 351 status = IXGBE_SUCCESS; 352 break; 353 } 354 } 355 356 /* Certain media types do not have a phy so an address will not 357 * be found and the code will take this path. Caller has to 358 * decide if it is an error or not. 359 */ 360 if (status != IXGBE_SUCCESS) 361 hw->phy.addr = 0; 362 363 return status; 364 } 365 366 /** 367 * ixgbe_check_reset_blocked - check status of MNG FW veto bit 368 * @hw: pointer to the hardware structure 369 * 370 * This function checks the MMNGC.MNG_VETO bit to see if there are 371 * any constraints on link from manageability. For MAC's that don't 372 * have this bit just return faluse since the link can not be blocked 373 * via this method. 374 **/ 375 s32 ixgbe_check_reset_blocked(struct ixgbe_hw *hw) 376 { 377 u32 mmngc; 378 379 DEBUGFUNC("ixgbe_check_reset_blocked"); 380 381 /* If we don't have this bit, it can't be blocking */ 382 if (hw->mac.type == ixgbe_mac_82598EB) 383 return false; 384 385 mmngc = IXGBE_READ_REG(hw, IXGBE_MMNGC); 386 if (mmngc & IXGBE_MMNGC_MNG_VETO) { 387 ERROR_REPORT1(IXGBE_ERROR_SOFTWARE, 388 "MNG_VETO bit detected.\n"); 389 return true; 390 } 391 392 return false; 393 } 394 395 /** 396 * ixgbe_validate_phy_addr - Determines phy address is valid 397 * @hw: pointer to hardware structure 398 * @phy_addr: PHY address 399 * 400 **/ 401 bool ixgbe_validate_phy_addr(struct ixgbe_hw *hw, u32 phy_addr) 402 { 403 u16 phy_id = 0; 404 bool valid = false; 405 406 DEBUGFUNC("ixgbe_validate_phy_addr"); 407 408 hw->phy.addr = phy_addr; 409 hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_ID_HIGH, 410 IXGBE_MDIO_PMA_PMD_DEV_TYPE, &phy_id); 411 412 if (phy_id != 0xFFFF && phy_id != 0x0) 413 valid = true; 414 415 DEBUGOUT1("PHY ID HIGH is 0x%04X\n", phy_id); 416 417 return valid; 418 } 419 420 /** 421 * ixgbe_get_phy_id - Get the phy type 422 * @hw: pointer to hardware structure 423 * 424 **/ 425 s32 ixgbe_get_phy_id(struct ixgbe_hw *hw) 426 { 427 u32 status; 428 u16 phy_id_high = 0; 429 u16 phy_id_low = 0; 430 431 DEBUGFUNC("ixgbe_get_phy_id"); 432 433 status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_ID_HIGH, 434 IXGBE_MDIO_PMA_PMD_DEV_TYPE, 435 &phy_id_high); 436 437 if (status == IXGBE_SUCCESS) { 438 hw->phy.id = (u32)(phy_id_high << 16); 439 status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_ID_LOW, 440 IXGBE_MDIO_PMA_PMD_DEV_TYPE, 441 &phy_id_low); 442 hw->phy.id |= (u32)(phy_id_low & IXGBE_PHY_REVISION_MASK); 443 hw->phy.revision = (u32)(phy_id_low & ~IXGBE_PHY_REVISION_MASK); 444 } 445 DEBUGOUT2("PHY_ID_HIGH 0x%04X, PHY_ID_LOW 0x%04X\n", 446 phy_id_high, phy_id_low); 447 448 return status; 449 } 450 451 /** 452 * ixgbe_get_phy_type_from_id - Get the phy type 453 * @phy_id: PHY ID information 454 * 455 **/ 456 enum ixgbe_phy_type ixgbe_get_phy_type_from_id(u32 phy_id) 457 { 458 enum ixgbe_phy_type phy_type; 459 460 DEBUGFUNC("ixgbe_get_phy_type_from_id"); 461 462 switch (phy_id) { 463 case TN1010_PHY_ID: 464 phy_type = ixgbe_phy_tn; 465 break; 466 case X550_PHY_ID2: 467 case X550_PHY_ID3: 468 case X540_PHY_ID: 469 phy_type = ixgbe_phy_aq; 470 break; 471 case QT2022_PHY_ID: 472 phy_type = ixgbe_phy_qt; 473 break; 474 case ATH_PHY_ID: 475 phy_type = ixgbe_phy_nl; 476 break; 477 case X557_PHY_ID: 478 case X557_PHY_ID2: 479 phy_type = ixgbe_phy_x550em_ext_t; 480 break; 481 case IXGBE_M88E1500_E_PHY_ID: 482 case IXGBE_M88E1543_E_PHY_ID: 483 phy_type = ixgbe_phy_ext_1g_t; 484 break; 485 default: 486 phy_type = ixgbe_phy_unknown; 487 break; 488 } 489 return phy_type; 490 } 491 492 /** 493 * ixgbe_reset_phy_generic - Performs a PHY reset 494 * @hw: pointer to hardware structure 495 **/ 496 s32 ixgbe_reset_phy_generic(struct ixgbe_hw *hw) 497 { 498 u32 i; 499 u16 ctrl = 0; 500 s32 status = IXGBE_SUCCESS; 501 502 DEBUGFUNC("ixgbe_reset_phy_generic"); 503 504 if (hw->phy.type == ixgbe_phy_unknown) 505 status = ixgbe_identify_phy_generic(hw); 506 507 if (status != IXGBE_SUCCESS || hw->phy.type == ixgbe_phy_none) 508 goto out; 509 510 /* Don't reset PHY if it's shut down due to overtemp. */ 511 if (!hw->phy.reset_if_overtemp && 512 (IXGBE_ERR_OVERTEMP == hw->phy.ops.check_overtemp(hw))) 513 goto out; 514 515 /* Blocked by MNG FW so bail */ 516 if (ixgbe_check_reset_blocked(hw)) 517 goto out; 518 519 /* 520 * Perform soft PHY reset to the PHY_XS. 521 * This will cause a soft reset to the PHY 522 */ 523 hw->phy.ops.write_reg(hw, IXGBE_MDIO_PHY_XS_CONTROL, 524 IXGBE_MDIO_PHY_XS_DEV_TYPE, 525 IXGBE_MDIO_PHY_XS_RESET); 526 527 /* 528 * Poll for reset bit to self-clear indicating reset is complete. 529 * Some PHYs could take up to 3 seconds to complete and need about 530 * 1.7 usec delay after the reset is complete. 531 */ 532 for (i = 0; i < 30; i++) { 533 msec_delay(100); 534 if (hw->phy.type == ixgbe_phy_x550em_ext_t) { 535 status = hw->phy.ops.read_reg(hw, 536 IXGBE_MDIO_TX_VENDOR_ALARMS_3, 537 IXGBE_MDIO_PMA_PMD_DEV_TYPE, 538 &ctrl); 539 if (status != IXGBE_SUCCESS) 540 return status; 541 542 if (ctrl & IXGBE_MDIO_TX_VENDOR_ALARMS_3_RST_MASK) { 543 usec_delay(2); 544 break; 545 } 546 } else { 547 status = hw->phy.ops.read_reg(hw, 548 IXGBE_MDIO_PHY_XS_CONTROL, 549 IXGBE_MDIO_PHY_XS_DEV_TYPE, 550 &ctrl); 551 if (status != IXGBE_SUCCESS) 552 return status; 553 554 if (!(ctrl & IXGBE_MDIO_PHY_XS_RESET)) { 555 usec_delay(2); 556 break; 557 } 558 } 559 } 560 561 if (ctrl & IXGBE_MDIO_PHY_XS_RESET) { 562 status = IXGBE_ERR_RESET_FAILED; 563 ERROR_REPORT1(IXGBE_ERROR_POLLING, 564 "PHY reset polling failed to complete.\n"); 565 } 566 567 out: 568 return status; 569 } 570 571 /** 572 * ixgbe_restart_auto_neg - Restart auto negotiation on the PHY 573 * @hw: pointer to hardware structure 574 **/ 575 void ixgbe_restart_auto_neg(struct ixgbe_hw *hw) 576 { 577 u16 autoneg_reg; 578 579 /* Check if PHY reset is blocked by MNG FW */ 580 if (ixgbe_check_reset_blocked(hw)) 581 return; 582 583 /* Restart PHY auto-negotiation. */ 584 hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_CONTROL, 585 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, &autoneg_reg); 586 autoneg_reg |= IXGBE_MII_RESTART; 587 hw->phy.ops.write_reg(hw, IXGBE_MDIO_AUTO_NEG_CONTROL, 588 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, autoneg_reg); 589 } 590 591 /** 592 * ixgbe_read_phy_mdi - Reads a value from a specified PHY register without 593 * the SWFW lock 594 * @hw: pointer to hardware structure 595 * @reg_addr: 32 bit address of PHY register to read 596 * @device_type: 5 bit device type 597 * @phy_data: Pointer to read data from PHY register 598 **/ 599 s32 ixgbe_read_phy_reg_mdi(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type, 600 u16 *phy_data) 601 { 602 u32 i, data, command; 603 604 /* Setup and write the address cycle command */ 605 command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT) | 606 (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) | 607 (hw->phy.addr << IXGBE_MSCA_PHY_ADDR_SHIFT) | 608 (IXGBE_MSCA_ADDR_CYCLE | IXGBE_MSCA_MDI_COMMAND)); 609 610 IXGBE_WRITE_REG(hw, IXGBE_MSCA, command); 611 612 /* 613 * Check every 10 usec to see if the address cycle completed. 614 * The MDI Command bit will clear when the operation is 615 * complete 616 */ 617 for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) { 618 usec_delay(10); 619 620 command = IXGBE_READ_REG(hw, IXGBE_MSCA); 621 if ((command & IXGBE_MSCA_MDI_COMMAND) == 0) 622 break; 623 } 624 625 626 if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) { 627 ERROR_REPORT1(IXGBE_ERROR_POLLING, "PHY address command did not complete.\n"); 628 DEBUGOUT("PHY address command did not complete, returning IXGBE_ERR_PHY\n"); 629 return IXGBE_ERR_PHY; 630 } 631 632 /* 633 * Address cycle complete, setup and write the read 634 * command 635 */ 636 command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT) | 637 (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) | 638 (hw->phy.addr << IXGBE_MSCA_PHY_ADDR_SHIFT) | 639 (IXGBE_MSCA_READ | IXGBE_MSCA_MDI_COMMAND)); 640 641 IXGBE_WRITE_REG(hw, IXGBE_MSCA, command); 642 643 /* 644 * Check every 10 usec to see if the address cycle 645 * completed. The MDI Command bit will clear when the 646 * operation is complete 647 */ 648 for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) { 649 usec_delay(10); 650 651 command = IXGBE_READ_REG(hw, IXGBE_MSCA); 652 if ((command & IXGBE_MSCA_MDI_COMMAND) == 0) 653 break; 654 } 655 656 if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) { 657 ERROR_REPORT1(IXGBE_ERROR_POLLING, "PHY read command didn't complete\n"); 658 DEBUGOUT("PHY read command didn't complete, returning IXGBE_ERR_PHY\n"); 659 return IXGBE_ERR_PHY; 660 } 661 662 /* 663 * Read operation is complete. Get the data 664 * from MSRWD 665 */ 666 data = IXGBE_READ_REG(hw, IXGBE_MSRWD); 667 data >>= IXGBE_MSRWD_READ_DATA_SHIFT; 668 *phy_data = (u16)(data); 669 670 return IXGBE_SUCCESS; 671 } 672 673 /** 674 * ixgbe_read_phy_reg_generic - Reads a value from a specified PHY register 675 * using the SWFW lock - this function is needed in most cases 676 * @hw: pointer to hardware structure 677 * @reg_addr: 32 bit address of PHY register to read 678 * @device_type: 5 bit device type 679 * @phy_data: Pointer to read data from PHY register 680 **/ 681 s32 ixgbe_read_phy_reg_generic(struct ixgbe_hw *hw, u32 reg_addr, 682 u32 device_type, u16 *phy_data) 683 { 684 s32 status; 685 u32 gssr = hw->phy.phy_semaphore_mask; 686 687 DEBUGFUNC("ixgbe_read_phy_reg_generic"); 688 689 if (hw->mac.ops.acquire_swfw_sync(hw, gssr)) 690 return IXGBE_ERR_SWFW_SYNC; 691 692 status = hw->phy.ops.read_reg_mdi(hw, reg_addr, device_type, phy_data); 693 694 hw->mac.ops.release_swfw_sync(hw, gssr); 695 696 return status; 697 } 698 699 /** 700 * ixgbe_write_phy_reg_mdi - Writes a value to specified PHY register 701 * without SWFW lock 702 * @hw: pointer to hardware structure 703 * @reg_addr: 32 bit PHY register to write 704 * @device_type: 5 bit device type 705 * @phy_data: Data to write to the PHY register 706 **/ 707 s32 ixgbe_write_phy_reg_mdi(struct ixgbe_hw *hw, u32 reg_addr, 708 u32 device_type, u16 phy_data) 709 { 710 u32 i, command; 711 712 /* Put the data in the MDI single read and write data register*/ 713 IXGBE_WRITE_REG(hw, IXGBE_MSRWD, (u32)phy_data); 714 715 /* Setup and write the address cycle command */ 716 command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT) | 717 (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) | 718 (hw->phy.addr << IXGBE_MSCA_PHY_ADDR_SHIFT) | 719 (IXGBE_MSCA_ADDR_CYCLE | IXGBE_MSCA_MDI_COMMAND)); 720 721 IXGBE_WRITE_REG(hw, IXGBE_MSCA, command); 722 723 /* 724 * Check every 10 usec to see if the address cycle completed. 725 * The MDI Command bit will clear when the operation is 726 * complete 727 */ 728 for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) { 729 usec_delay(10); 730 731 command = IXGBE_READ_REG(hw, IXGBE_MSCA); 732 if ((command & IXGBE_MSCA_MDI_COMMAND) == 0) 733 break; 734 } 735 736 if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) { 737 ERROR_REPORT1(IXGBE_ERROR_POLLING, "PHY address cmd didn't complete\n"); 738 return IXGBE_ERR_PHY; 739 } 740 741 /* 742 * Address cycle complete, setup and write the write 743 * command 744 */ 745 command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT) | 746 (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) | 747 (hw->phy.addr << IXGBE_MSCA_PHY_ADDR_SHIFT) | 748 (IXGBE_MSCA_WRITE | IXGBE_MSCA_MDI_COMMAND)); 749 750 IXGBE_WRITE_REG(hw, IXGBE_MSCA, command); 751 752 /* 753 * Check every 10 usec to see if the address cycle 754 * completed. The MDI Command bit will clear when the 755 * operation is complete 756 */ 757 for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) { 758 usec_delay(10); 759 760 command = IXGBE_READ_REG(hw, IXGBE_MSCA); 761 if ((command & IXGBE_MSCA_MDI_COMMAND) == 0) 762 break; 763 } 764 765 if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) { 766 ERROR_REPORT1(IXGBE_ERROR_POLLING, "PHY write cmd didn't complete\n"); 767 return IXGBE_ERR_PHY; 768 } 769 770 return IXGBE_SUCCESS; 771 } 772 773 /** 774 * ixgbe_write_phy_reg_generic - Writes a value to specified PHY register 775 * using SWFW lock- this function is needed in most cases 776 * @hw: pointer to hardware structure 777 * @reg_addr: 32 bit PHY register to write 778 * @device_type: 5 bit device type 779 * @phy_data: Data to write to the PHY register 780 **/ 781 s32 ixgbe_write_phy_reg_generic(struct ixgbe_hw *hw, u32 reg_addr, 782 u32 device_type, u16 phy_data) 783 { 784 s32 status; 785 u32 gssr = hw->phy.phy_semaphore_mask; 786 787 DEBUGFUNC("ixgbe_write_phy_reg_generic"); 788 789 if (hw->mac.ops.acquire_swfw_sync(hw, gssr) == IXGBE_SUCCESS) { 790 status = hw->phy.ops.write_reg_mdi(hw, reg_addr, device_type, 791 phy_data); 792 hw->mac.ops.release_swfw_sync(hw, gssr); 793 } else { 794 status = IXGBE_ERR_SWFW_SYNC; 795 } 796 797 return status; 798 } 799 800 /** 801 * ixgbe_setup_phy_link_generic - Set and restart auto-neg 802 * @hw: pointer to hardware structure 803 * 804 * Restart auto-negotiation and PHY and waits for completion. 805 **/ 806 s32 ixgbe_setup_phy_link_generic(struct ixgbe_hw *hw) 807 { 808 s32 status = IXGBE_SUCCESS; 809 u16 autoneg_reg = IXGBE_MII_AUTONEG_REG; 810 bool autoneg = false; 811 ixgbe_link_speed speed; 812 813 DEBUGFUNC("ixgbe_setup_phy_link_generic"); 814 815 ixgbe_get_copper_link_capabilities_generic(hw, &speed, &autoneg); 816 817 /* Set or unset auto-negotiation 10G advertisement */ 818 hw->phy.ops.read_reg(hw, IXGBE_MII_10GBASE_T_AUTONEG_CTRL_REG, 819 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, 820 &autoneg_reg); 821 822 autoneg_reg &= ~IXGBE_MII_10GBASE_T_ADVERTISE; 823 if ((hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_10GB_FULL) && 824 (speed & IXGBE_LINK_SPEED_10GB_FULL)) 825 autoneg_reg |= IXGBE_MII_10GBASE_T_ADVERTISE; 826 827 hw->phy.ops.write_reg(hw, IXGBE_MII_10GBASE_T_AUTONEG_CTRL_REG, 828 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, 829 autoneg_reg); 830 831 hw->phy.ops.read_reg(hw, IXGBE_MII_AUTONEG_VENDOR_PROVISION_1_REG, 832 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, 833 &autoneg_reg); 834 835 if (hw->mac.type == ixgbe_mac_X550) { 836 /* Set or unset auto-negotiation 5G advertisement */ 837 autoneg_reg &= ~IXGBE_MII_5GBASE_T_ADVERTISE; 838 if ((hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_5GB_FULL) && 839 (speed & IXGBE_LINK_SPEED_5GB_FULL)) 840 autoneg_reg |= IXGBE_MII_5GBASE_T_ADVERTISE; 841 842 /* Set or unset auto-negotiation 2.5G advertisement */ 843 autoneg_reg &= ~IXGBE_MII_2_5GBASE_T_ADVERTISE; 844 if ((hw->phy.autoneg_advertised & 845 IXGBE_LINK_SPEED_2_5GB_FULL) && 846 (speed & IXGBE_LINK_SPEED_2_5GB_FULL)) 847 autoneg_reg |= IXGBE_MII_2_5GBASE_T_ADVERTISE; 848 } 849 850 /* Set or unset auto-negotiation 1G advertisement */ 851 autoneg_reg &= ~IXGBE_MII_1GBASE_T_ADVERTISE; 852 if ((hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_1GB_FULL) && 853 (speed & IXGBE_LINK_SPEED_1GB_FULL)) 854 autoneg_reg |= IXGBE_MII_1GBASE_T_ADVERTISE; 855 856 hw->phy.ops.write_reg(hw, IXGBE_MII_AUTONEG_VENDOR_PROVISION_1_REG, 857 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, 858 autoneg_reg); 859 860 /* Set or unset auto-negotiation 100M advertisement */ 861 hw->phy.ops.read_reg(hw, IXGBE_MII_AUTONEG_ADVERTISE_REG, 862 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, 863 &autoneg_reg); 864 865 autoneg_reg &= ~(IXGBE_MII_100BASE_T_ADVERTISE | 866 IXGBE_MII_100BASE_T_ADVERTISE_HALF); 867 if ((hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_100_FULL) && 868 (speed & IXGBE_LINK_SPEED_100_FULL)) 869 autoneg_reg |= IXGBE_MII_100BASE_T_ADVERTISE; 870 871 hw->phy.ops.write_reg(hw, IXGBE_MII_AUTONEG_ADVERTISE_REG, 872 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, 873 autoneg_reg); 874 875 ixgbe_restart_auto_neg(hw); 876 return status; 877 } 878 879 /** 880 * ixgbe_setup_phy_link_speed_generic - Sets the auto advertised capabilities 881 * @hw: pointer to hardware structure 882 * @speed: new link speed 883 * @autoneg_wait_to_complete: unused 884 **/ 885 s32 ixgbe_setup_phy_link_speed_generic(struct ixgbe_hw *hw, 886 ixgbe_link_speed speed, 887 bool autoneg_wait_to_complete) 888 { 889 UNREFERENCED_1PARAMETER(autoneg_wait_to_complete); 890 891 DEBUGFUNC("ixgbe_setup_phy_link_speed_generic"); 892 893 /* 894 * Clear autoneg_advertised and set new values based on input link 895 * speed. 896 */ 897 hw->phy.autoneg_advertised = 0; 898 899 if (speed & IXGBE_LINK_SPEED_10GB_FULL) 900 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_10GB_FULL; 901 902 if (speed & IXGBE_LINK_SPEED_5GB_FULL) 903 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_5GB_FULL; 904 905 if (speed & IXGBE_LINK_SPEED_2_5GB_FULL) 906 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_2_5GB_FULL; 907 908 if (speed & IXGBE_LINK_SPEED_1GB_FULL) 909 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_1GB_FULL; 910 911 if (speed & IXGBE_LINK_SPEED_100_FULL) 912 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_100_FULL; 913 914 if (speed & IXGBE_LINK_SPEED_10_FULL) 915 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_10_FULL; 916 917 /* Setup link based on the new speed settings */ 918 ixgbe_setup_phy_link(hw); 919 920 return IXGBE_SUCCESS; 921 } 922 923 /** 924 * ixgbe_get_copper_speeds_supported - Get copper link speeds from phy 925 * @hw: pointer to hardware structure 926 * 927 * Determines the supported link capabilities by reading the PHY auto 928 * negotiation register. 929 **/ 930 static s32 ixgbe_get_copper_speeds_supported(struct ixgbe_hw *hw) 931 { 932 s32 status; 933 u16 speed_ability; 934 935 status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_SPEED_ABILITY, 936 IXGBE_MDIO_PMA_PMD_DEV_TYPE, 937 &speed_ability); 938 if (status) 939 return status; 940 941 if (speed_ability & IXGBE_MDIO_PHY_SPEED_10G) 942 hw->phy.speeds_supported |= IXGBE_LINK_SPEED_10GB_FULL; 943 if (speed_ability & IXGBE_MDIO_PHY_SPEED_1G) 944 hw->phy.speeds_supported |= IXGBE_LINK_SPEED_1GB_FULL; 945 if (speed_ability & IXGBE_MDIO_PHY_SPEED_100M) 946 hw->phy.speeds_supported |= IXGBE_LINK_SPEED_100_FULL; 947 948 switch (hw->mac.type) { 949 case ixgbe_mac_X550: 950 hw->phy.speeds_supported |= IXGBE_LINK_SPEED_2_5GB_FULL; 951 hw->phy.speeds_supported |= IXGBE_LINK_SPEED_5GB_FULL; 952 break; 953 case ixgbe_mac_X550EM_x: 954 case ixgbe_mac_X550EM_a: 955 hw->phy.speeds_supported &= ~IXGBE_LINK_SPEED_100_FULL; 956 break; 957 default: 958 break; 959 } 960 961 return status; 962 } 963 964 /** 965 * ixgbe_get_copper_link_capabilities_generic - Determines link capabilities 966 * @hw: pointer to hardware structure 967 * @speed: pointer to link speed 968 * @autoneg: boolean auto-negotiation value 969 **/ 970 s32 ixgbe_get_copper_link_capabilities_generic(struct ixgbe_hw *hw, 971 ixgbe_link_speed *speed, 972 bool *autoneg) 973 { 974 s32 status = IXGBE_SUCCESS; 975 976 DEBUGFUNC("ixgbe_get_copper_link_capabilities_generic"); 977 978 *autoneg = true; 979 if (!hw->phy.speeds_supported) 980 status = ixgbe_get_copper_speeds_supported(hw); 981 982 *speed = hw->phy.speeds_supported; 983 return status; 984 } 985 986 /** 987 * ixgbe_check_phy_link_tnx - Determine link and speed status 988 * @hw: pointer to hardware structure 989 * @speed: current link speed 990 * @link_up: true is link is up, false otherwise 991 * 992 * Reads the VS1 register to determine if link is up and the current speed for 993 * the PHY. 994 **/ 995 s32 ixgbe_check_phy_link_tnx(struct ixgbe_hw *hw, ixgbe_link_speed *speed, 996 bool *link_up) 997 { 998 s32 status = IXGBE_SUCCESS; 999 u32 time_out; 1000 u32 max_time_out = 10; 1001 u16 phy_link = 0; 1002 u16 phy_speed = 0; 1003 u16 phy_data = 0; 1004 1005 DEBUGFUNC("ixgbe_check_phy_link_tnx"); 1006 1007 /* Initialize speed and link to default case */ 1008 *link_up = false; 1009 *speed = IXGBE_LINK_SPEED_10GB_FULL; 1010 1011 /* 1012 * Check current speed and link status of the PHY register. 1013 * This is a vendor specific register and may have to 1014 * be changed for other copper PHYs. 1015 */ 1016 for (time_out = 0; time_out < max_time_out; time_out++) { 1017 usec_delay(10); 1018 status = hw->phy.ops.read_reg(hw, 1019 IXGBE_MDIO_VENDOR_SPECIFIC_1_STATUS, 1020 IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE, 1021 &phy_data); 1022 phy_link = phy_data & IXGBE_MDIO_VENDOR_SPECIFIC_1_LINK_STATUS; 1023 phy_speed = phy_data & 1024 IXGBE_MDIO_VENDOR_SPECIFIC_1_SPEED_STATUS; 1025 if (phy_link == IXGBE_MDIO_VENDOR_SPECIFIC_1_LINK_STATUS) { 1026 *link_up = true; 1027 if (phy_speed == 1028 IXGBE_MDIO_VENDOR_SPECIFIC_1_SPEED_STATUS) 1029 *speed = IXGBE_LINK_SPEED_1GB_FULL; 1030 break; 1031 } 1032 } 1033 1034 return status; 1035 } 1036 1037 /** 1038 * ixgbe_setup_phy_link_tnx - Set and restart auto-neg 1039 * @hw: pointer to hardware structure 1040 * 1041 * Restart auto-negotiation and PHY and waits for completion. 1042 **/ 1043 s32 ixgbe_setup_phy_link_tnx(struct ixgbe_hw *hw) 1044 { 1045 s32 status = IXGBE_SUCCESS; 1046 u16 autoneg_reg = IXGBE_MII_AUTONEG_REG; 1047 bool autoneg = false; 1048 ixgbe_link_speed speed; 1049 1050 DEBUGFUNC("ixgbe_setup_phy_link_tnx"); 1051 1052 ixgbe_get_copper_link_capabilities_generic(hw, &speed, &autoneg); 1053 1054 if (speed & IXGBE_LINK_SPEED_10GB_FULL) { 1055 /* Set or unset auto-negotiation 10G advertisement */ 1056 hw->phy.ops.read_reg(hw, IXGBE_MII_10GBASE_T_AUTONEG_CTRL_REG, 1057 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, 1058 &autoneg_reg); 1059 1060 autoneg_reg &= ~IXGBE_MII_10GBASE_T_ADVERTISE; 1061 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_10GB_FULL) 1062 autoneg_reg |= IXGBE_MII_10GBASE_T_ADVERTISE; 1063 1064 hw->phy.ops.write_reg(hw, IXGBE_MII_10GBASE_T_AUTONEG_CTRL_REG, 1065 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, 1066 autoneg_reg); 1067 } 1068 1069 if (speed & IXGBE_LINK_SPEED_1GB_FULL) { 1070 /* Set or unset auto-negotiation 1G advertisement */ 1071 hw->phy.ops.read_reg(hw, IXGBE_MII_AUTONEG_XNP_TX_REG, 1072 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, 1073 &autoneg_reg); 1074 1075 autoneg_reg &= ~IXGBE_MII_1GBASE_T_ADVERTISE_XNP_TX; 1076 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_1GB_FULL) 1077 autoneg_reg |= IXGBE_MII_1GBASE_T_ADVERTISE_XNP_TX; 1078 1079 hw->phy.ops.write_reg(hw, IXGBE_MII_AUTONEG_XNP_TX_REG, 1080 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, 1081 autoneg_reg); 1082 } 1083 1084 if (speed & IXGBE_LINK_SPEED_100_FULL) { 1085 /* Set or unset auto-negotiation 100M advertisement */ 1086 hw->phy.ops.read_reg(hw, IXGBE_MII_AUTONEG_ADVERTISE_REG, 1087 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, 1088 &autoneg_reg); 1089 1090 autoneg_reg &= ~IXGBE_MII_100BASE_T_ADVERTISE; 1091 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_100_FULL) 1092 autoneg_reg |= IXGBE_MII_100BASE_T_ADVERTISE; 1093 1094 hw->phy.ops.write_reg(hw, IXGBE_MII_AUTONEG_ADVERTISE_REG, 1095 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, 1096 autoneg_reg); 1097 } 1098 1099 ixgbe_restart_auto_neg(hw); 1100 return status; 1101 } 1102 1103 /** 1104 * ixgbe_get_phy_firmware_version_tnx - Gets the PHY Firmware Version 1105 * @hw: pointer to hardware structure 1106 * @firmware_version: pointer to the PHY Firmware Version 1107 **/ 1108 s32 ixgbe_get_phy_firmware_version_tnx(struct ixgbe_hw *hw, 1109 u16 *firmware_version) 1110 { 1111 s32 status; 1112 1113 DEBUGFUNC("ixgbe_get_phy_firmware_version_tnx"); 1114 1115 status = hw->phy.ops.read_reg(hw, TNX_FW_REV, 1116 IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE, 1117 firmware_version); 1118 1119 return status; 1120 } 1121 1122 /** 1123 * ixgbe_get_phy_firmware_version_generic - Gets the PHY Firmware Version 1124 * @hw: pointer to hardware structure 1125 * @firmware_version: pointer to the PHY Firmware Version 1126 **/ 1127 s32 ixgbe_get_phy_firmware_version_generic(struct ixgbe_hw *hw, 1128 u16 *firmware_version) 1129 { 1130 s32 status; 1131 1132 DEBUGFUNC("ixgbe_get_phy_firmware_version_generic"); 1133 1134 status = hw->phy.ops.read_reg(hw, AQ_FW_REV, 1135 IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE, 1136 firmware_version); 1137 1138 return status; 1139 } 1140 1141 /** 1142 * ixgbe_reset_phy_nl - Performs a PHY reset 1143 * @hw: pointer to hardware structure 1144 **/ 1145 s32 ixgbe_reset_phy_nl(struct ixgbe_hw *hw) 1146 { 1147 u16 phy_offset, control, eword, edata, block_crc; 1148 bool end_data = false; 1149 u16 list_offset, data_offset; 1150 u16 phy_data = 0; 1151 s32 ret_val = IXGBE_SUCCESS; 1152 u32 i; 1153 1154 DEBUGFUNC("ixgbe_reset_phy_nl"); 1155 1156 /* Blocked by MNG FW so bail */ 1157 if (ixgbe_check_reset_blocked(hw)) 1158 goto out; 1159 1160 hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_XS_CONTROL, 1161 IXGBE_MDIO_PHY_XS_DEV_TYPE, &phy_data); 1162 1163 /* reset the PHY and poll for completion */ 1164 hw->phy.ops.write_reg(hw, IXGBE_MDIO_PHY_XS_CONTROL, 1165 IXGBE_MDIO_PHY_XS_DEV_TYPE, 1166 (phy_data | IXGBE_MDIO_PHY_XS_RESET)); 1167 1168 for (i = 0; i < 100; i++) { 1169 hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_XS_CONTROL, 1170 IXGBE_MDIO_PHY_XS_DEV_TYPE, &phy_data); 1171 if ((phy_data & IXGBE_MDIO_PHY_XS_RESET) == 0) 1172 break; 1173 msec_delay(10); 1174 } 1175 1176 if ((phy_data & IXGBE_MDIO_PHY_XS_RESET) != 0) { 1177 DEBUGOUT("PHY reset did not complete.\n"); 1178 ret_val = IXGBE_ERR_PHY; 1179 goto out; 1180 } 1181 1182 /* Get init offsets */ 1183 ret_val = ixgbe_get_sfp_init_sequence_offsets(hw, &list_offset, 1184 &data_offset); 1185 if (ret_val != IXGBE_SUCCESS) 1186 goto out; 1187 1188 ret_val = hw->eeprom.ops.read(hw, data_offset, &block_crc); 1189 data_offset++; 1190 while (!end_data) { 1191 /* 1192 * Read control word from PHY init contents offset 1193 */ 1194 ret_val = hw->eeprom.ops.read(hw, data_offset, &eword); 1195 if (ret_val) 1196 goto err_eeprom; 1197 control = (eword & IXGBE_CONTROL_MASK_NL) >> 1198 IXGBE_CONTROL_SHIFT_NL; 1199 edata = eword & IXGBE_DATA_MASK_NL; 1200 switch (control) { 1201 case IXGBE_DELAY_NL: 1202 data_offset++; 1203 DEBUGOUT1("DELAY: %d MS\n", edata); 1204 msec_delay(edata); 1205 break; 1206 case IXGBE_DATA_NL: 1207 DEBUGOUT("DATA:\n"); 1208 data_offset++; 1209 ret_val = hw->eeprom.ops.read(hw, data_offset, 1210 &phy_offset); 1211 if (ret_val) 1212 goto err_eeprom; 1213 data_offset++; 1214 for (i = 0; i < edata; i++) { 1215 ret_val = hw->eeprom.ops.read(hw, data_offset, 1216 &eword); 1217 if (ret_val) 1218 goto err_eeprom; 1219 hw->phy.ops.write_reg(hw, phy_offset, 1220 IXGBE_TWINAX_DEV, eword); 1221 DEBUGOUT2("Wrote %4.4x to %4.4x\n", eword, 1222 phy_offset); 1223 data_offset++; 1224 phy_offset++; 1225 } 1226 break; 1227 case IXGBE_CONTROL_NL: 1228 data_offset++; 1229 DEBUGOUT("CONTROL:\n"); 1230 if (edata == IXGBE_CONTROL_EOL_NL) { 1231 DEBUGOUT("EOL\n"); 1232 end_data = true; 1233 } else if (edata == IXGBE_CONTROL_SOL_NL) { 1234 DEBUGOUT("SOL\n"); 1235 } else { 1236 DEBUGOUT("Bad control value\n"); 1237 ret_val = IXGBE_ERR_PHY; 1238 goto out; 1239 } 1240 break; 1241 default: 1242 DEBUGOUT("Bad control type\n"); 1243 ret_val = IXGBE_ERR_PHY; 1244 goto out; 1245 } 1246 } 1247 1248 out: 1249 return ret_val; 1250 1251 err_eeprom: 1252 ERROR_REPORT2(IXGBE_ERROR_INVALID_STATE, 1253 "eeprom read at offset %d failed", data_offset); 1254 return IXGBE_ERR_PHY; 1255 } 1256 1257 /** 1258 * ixgbe_identify_module_generic - Identifies module type 1259 * @hw: pointer to hardware structure 1260 * 1261 * Determines HW type and calls appropriate function. 1262 **/ 1263 s32 ixgbe_identify_module_generic(struct ixgbe_hw *hw) 1264 { 1265 s32 status = IXGBE_ERR_SFP_NOT_PRESENT; 1266 1267 DEBUGFUNC("ixgbe_identify_module_generic"); 1268 1269 switch (hw->mac.ops.get_media_type(hw)) { 1270 case ixgbe_media_type_fiber: 1271 status = ixgbe_identify_sfp_module_generic(hw); 1272 break; 1273 1274 case ixgbe_media_type_fiber_qsfp: 1275 status = ixgbe_identify_qsfp_module_generic(hw); 1276 break; 1277 1278 default: 1279 hw->phy.sfp_type = ixgbe_sfp_type_not_present; 1280 status = IXGBE_ERR_SFP_NOT_PRESENT; 1281 break; 1282 } 1283 1284 return status; 1285 } 1286 1287 /** 1288 * ixgbe_identify_sfp_module_generic - Identifies SFP modules 1289 * @hw: pointer to hardware structure 1290 * 1291 * Searches for and identifies the SFP module and assigns appropriate PHY type. 1292 **/ 1293 s32 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw) 1294 { 1295 s32 status = IXGBE_ERR_PHY_ADDR_INVALID; 1296 u32 vendor_oui = 0; 1297 enum ixgbe_sfp_type stored_sfp_type = hw->phy.sfp_type; 1298 u8 identifier = 0; 1299 u8 comp_codes_1g = 0; 1300 u8 comp_codes_10g = 0; 1301 u8 oui_bytes[3] = {0, 0, 0}; 1302 u8 cable_tech = 0; 1303 u8 cable_spec = 0; 1304 u16 enforce_sfp = 0; 1305 1306 DEBUGFUNC("ixgbe_identify_sfp_module_generic"); 1307 1308 if (hw->mac.ops.get_media_type(hw) != ixgbe_media_type_fiber) { 1309 hw->phy.sfp_type = ixgbe_sfp_type_not_present; 1310 status = IXGBE_ERR_SFP_NOT_PRESENT; 1311 goto out; 1312 } 1313 1314 /* LAN ID is needed for I2C access */ 1315 hw->mac.ops.set_lan_id(hw); 1316 1317 status = hw->phy.ops.read_i2c_eeprom(hw, 1318 IXGBE_SFF_IDENTIFIER, 1319 &identifier); 1320 1321 if (status != IXGBE_SUCCESS) 1322 goto err_read_i2c_eeprom; 1323 1324 if (identifier != IXGBE_SFF_IDENTIFIER_SFP) { 1325 hw->phy.type = ixgbe_phy_sfp_unsupported; 1326 status = IXGBE_ERR_SFP_NOT_SUPPORTED; 1327 } else { 1328 status = hw->phy.ops.read_i2c_eeprom(hw, 1329 IXGBE_SFF_1GBE_COMP_CODES, 1330 &comp_codes_1g); 1331 1332 if (status != IXGBE_SUCCESS) 1333 goto err_read_i2c_eeprom; 1334 1335 status = hw->phy.ops.read_i2c_eeprom(hw, 1336 IXGBE_SFF_10GBE_COMP_CODES, 1337 &comp_codes_10g); 1338 1339 if (status != IXGBE_SUCCESS) 1340 goto err_read_i2c_eeprom; 1341 status = hw->phy.ops.read_i2c_eeprom(hw, 1342 IXGBE_SFF_CABLE_TECHNOLOGY, 1343 &cable_tech); 1344 1345 if (status != IXGBE_SUCCESS) 1346 goto err_read_i2c_eeprom; 1347 1348 /* ID Module 1349 * ========= 1350 * 0 SFP_DA_CU 1351 * 1 SFP_SR 1352 * 2 SFP_LR 1353 * 3 SFP_DA_CORE0 - 82599-specific 1354 * 4 SFP_DA_CORE1 - 82599-specific 1355 * 5 SFP_SR/LR_CORE0 - 82599-specific 1356 * 6 SFP_SR/LR_CORE1 - 82599-specific 1357 * 7 SFP_act_lmt_DA_CORE0 - 82599-specific 1358 * 8 SFP_act_lmt_DA_CORE1 - 82599-specific 1359 * 9 SFP_1g_cu_CORE0 - 82599-specific 1360 * 10 SFP_1g_cu_CORE1 - 82599-specific 1361 * 11 SFP_1g_sx_CORE0 - 82599-specific 1362 * 12 SFP_1g_sx_CORE1 - 82599-specific 1363 */ 1364 if (hw->mac.type == ixgbe_mac_82598EB) { 1365 if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE) 1366 hw->phy.sfp_type = ixgbe_sfp_type_da_cu; 1367 else if (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE) 1368 hw->phy.sfp_type = ixgbe_sfp_type_sr; 1369 else if (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE) 1370 hw->phy.sfp_type = ixgbe_sfp_type_lr; 1371 else 1372 hw->phy.sfp_type = ixgbe_sfp_type_unknown; 1373 } else { 1374 if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE) { 1375 if (hw->bus.lan_id == 0) 1376 hw->phy.sfp_type = 1377 ixgbe_sfp_type_da_cu_core0; 1378 else 1379 hw->phy.sfp_type = 1380 ixgbe_sfp_type_da_cu_core1; 1381 } else if (cable_tech & IXGBE_SFF_DA_ACTIVE_CABLE) { 1382 hw->phy.ops.read_i2c_eeprom( 1383 hw, IXGBE_SFF_CABLE_SPEC_COMP, 1384 &cable_spec); 1385 if (cable_spec & 1386 IXGBE_SFF_DA_SPEC_ACTIVE_LIMITING) { 1387 if (hw->bus.lan_id == 0) 1388 hw->phy.sfp_type = 1389 ixgbe_sfp_type_da_act_lmt_core0; 1390 else 1391 hw->phy.sfp_type = 1392 ixgbe_sfp_type_da_act_lmt_core1; 1393 } else { 1394 hw->phy.sfp_type = 1395 ixgbe_sfp_type_unknown; 1396 } 1397 } else if (comp_codes_10g & 1398 (IXGBE_SFF_10GBASESR_CAPABLE | 1399 IXGBE_SFF_10GBASELR_CAPABLE)) { 1400 if (hw->bus.lan_id == 0) 1401 hw->phy.sfp_type = 1402 ixgbe_sfp_type_srlr_core0; 1403 else 1404 hw->phy.sfp_type = 1405 ixgbe_sfp_type_srlr_core1; 1406 } else if (comp_codes_1g & IXGBE_SFF_1GBASET_CAPABLE) { 1407 if (hw->bus.lan_id == 0) 1408 hw->phy.sfp_type = 1409 ixgbe_sfp_type_1g_cu_core0; 1410 else 1411 hw->phy.sfp_type = 1412 ixgbe_sfp_type_1g_cu_core1; 1413 } else if (comp_codes_1g & IXGBE_SFF_1GBASESX_CAPABLE) { 1414 if (hw->bus.lan_id == 0) 1415 hw->phy.sfp_type = 1416 ixgbe_sfp_type_1g_sx_core0; 1417 else 1418 hw->phy.sfp_type = 1419 ixgbe_sfp_type_1g_sx_core1; 1420 } else if (comp_codes_1g & IXGBE_SFF_1GBASELX_CAPABLE) { 1421 if (hw->bus.lan_id == 0) 1422 hw->phy.sfp_type = 1423 ixgbe_sfp_type_1g_lx_core0; 1424 else 1425 hw->phy.sfp_type = 1426 ixgbe_sfp_type_1g_lx_core1; 1427 } else { 1428 hw->phy.sfp_type = ixgbe_sfp_type_unknown; 1429 } 1430 } 1431 1432 if (hw->phy.sfp_type != stored_sfp_type) 1433 hw->phy.sfp_setup_needed = true; 1434 1435 /* Determine if the SFP+ PHY is dual speed or not. */ 1436 hw->phy.multispeed_fiber = false; 1437 if (((comp_codes_1g & IXGBE_SFF_1GBASESX_CAPABLE) && 1438 (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)) || 1439 ((comp_codes_1g & IXGBE_SFF_1GBASELX_CAPABLE) && 1440 (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE))) 1441 hw->phy.multispeed_fiber = true; 1442 1443 /* Determine PHY vendor */ 1444 if (hw->phy.type != ixgbe_phy_nl) { 1445 hw->phy.id = identifier; 1446 status = hw->phy.ops.read_i2c_eeprom(hw, 1447 IXGBE_SFF_VENDOR_OUI_BYTE0, 1448 &oui_bytes[0]); 1449 1450 if (status != IXGBE_SUCCESS) 1451 goto err_read_i2c_eeprom; 1452 1453 status = hw->phy.ops.read_i2c_eeprom(hw, 1454 IXGBE_SFF_VENDOR_OUI_BYTE1, 1455 &oui_bytes[1]); 1456 1457 if (status != IXGBE_SUCCESS) 1458 goto err_read_i2c_eeprom; 1459 1460 status = hw->phy.ops.read_i2c_eeprom(hw, 1461 IXGBE_SFF_VENDOR_OUI_BYTE2, 1462 &oui_bytes[2]); 1463 1464 if (status != IXGBE_SUCCESS) 1465 goto err_read_i2c_eeprom; 1466 1467 vendor_oui = 1468 ((oui_bytes[0] << IXGBE_SFF_VENDOR_OUI_BYTE0_SHIFT) | 1469 (oui_bytes[1] << IXGBE_SFF_VENDOR_OUI_BYTE1_SHIFT) | 1470 (oui_bytes[2] << IXGBE_SFF_VENDOR_OUI_BYTE2_SHIFT)); 1471 1472 switch (vendor_oui) { 1473 case IXGBE_SFF_VENDOR_OUI_TYCO: 1474 if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE) 1475 hw->phy.type = 1476 ixgbe_phy_sfp_passive_tyco; 1477 break; 1478 case IXGBE_SFF_VENDOR_OUI_FTL: 1479 if (cable_tech & IXGBE_SFF_DA_ACTIVE_CABLE) 1480 hw->phy.type = ixgbe_phy_sfp_ftl_active; 1481 else 1482 hw->phy.type = ixgbe_phy_sfp_ftl; 1483 break; 1484 case IXGBE_SFF_VENDOR_OUI_AVAGO: 1485 hw->phy.type = ixgbe_phy_sfp_avago; 1486 break; 1487 case IXGBE_SFF_VENDOR_OUI_INTEL: 1488 hw->phy.type = ixgbe_phy_sfp_intel; 1489 break; 1490 default: 1491 hw->phy.type = ixgbe_phy_sfp_unknown; 1492 break; 1493 } 1494 } 1495 1496 /* Allow any DA cable vendor */ 1497 if (cable_tech & (IXGBE_SFF_DA_PASSIVE_CABLE | 1498 IXGBE_SFF_DA_ACTIVE_CABLE)) { 1499 if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE) 1500 hw->phy.type = ixgbe_phy_sfp_passive_unknown; 1501 else if (cable_tech & IXGBE_SFF_DA_ACTIVE_CABLE) 1502 hw->phy.type = ixgbe_phy_sfp_active_unknown; 1503 status = IXGBE_SUCCESS; 1504 goto out; 1505 } 1506 1507 /* Verify supported 1G SFP modules */ 1508 if (comp_codes_10g == 0 && 1509 !(hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core1 || 1510 hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core0 || 1511 hw->phy.sfp_type == ixgbe_sfp_type_1g_lx_core0 || 1512 hw->phy.sfp_type == ixgbe_sfp_type_1g_lx_core1 || 1513 hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core0 || 1514 hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core1)) { 1515 hw->phy.type = ixgbe_phy_sfp_unsupported; 1516 status = IXGBE_ERR_SFP_NOT_SUPPORTED; 1517 goto out; 1518 } 1519 1520 /* Anything else 82598-based is supported */ 1521 if (hw->mac.type == ixgbe_mac_82598EB) { 1522 status = IXGBE_SUCCESS; 1523 goto out; 1524 } 1525 1526 ixgbe_get_device_caps(hw, &enforce_sfp); 1527 if (!(enforce_sfp & IXGBE_DEVICE_CAPS_ALLOW_ANY_SFP) && 1528 !(hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core0 || 1529 hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core1 || 1530 hw->phy.sfp_type == ixgbe_sfp_type_1g_lx_core0 || 1531 hw->phy.sfp_type == ixgbe_sfp_type_1g_lx_core1 || 1532 hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core0 || 1533 hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core1)) { 1534 /* Make sure we're a supported PHY type */ 1535 if (hw->phy.type == ixgbe_phy_sfp_intel) { 1536 status = IXGBE_SUCCESS; 1537 } else { 1538 if (hw->allow_unsupported_sfp == true) { 1539 EWARN(hw, 1540 "WARNING: Intel (R) Network Connections are quality tested using Intel (R) Ethernet Optics. " 1541 "Using untested modules is not supported and may cause unstable operation or damage to the module or the adapter. " 1542 "Intel Corporation is not responsible for any harm caused by using untested modules.\n"); 1543 status = IXGBE_SUCCESS; 1544 } else { 1545 DEBUGOUT("SFP+ module not supported\n"); 1546 hw->phy.type = 1547 ixgbe_phy_sfp_unsupported; 1548 status = IXGBE_ERR_SFP_NOT_SUPPORTED; 1549 } 1550 } 1551 } else { 1552 status = IXGBE_SUCCESS; 1553 } 1554 } 1555 1556 out: 1557 return status; 1558 1559 err_read_i2c_eeprom: 1560 hw->phy.sfp_type = ixgbe_sfp_type_not_present; 1561 if (hw->phy.type != ixgbe_phy_nl) { 1562 hw->phy.id = 0; 1563 hw->phy.type = ixgbe_phy_unknown; 1564 } 1565 return IXGBE_ERR_SFP_NOT_PRESENT; 1566 } 1567 1568 /** 1569 * ixgbe_get_supported_phy_sfp_layer_generic - Returns physical layer type 1570 * @hw: pointer to hardware structure 1571 * 1572 * Determines physical layer capabilities of the current SFP. 1573 */ 1574 u64 ixgbe_get_supported_phy_sfp_layer_generic(struct ixgbe_hw *hw) 1575 { 1576 u64 physical_layer = IXGBE_PHYSICAL_LAYER_UNKNOWN; 1577 u8 comp_codes_10g = 0; 1578 u8 comp_codes_1g = 0; 1579 1580 DEBUGFUNC("ixgbe_get_supported_phy_sfp_layer_generic"); 1581 1582 hw->phy.ops.identify_sfp(hw); 1583 if (hw->phy.sfp_type == ixgbe_sfp_type_not_present) 1584 return physical_layer; 1585 1586 switch (hw->phy.type) { 1587 case ixgbe_phy_sfp_passive_tyco: 1588 case ixgbe_phy_sfp_passive_unknown: 1589 case ixgbe_phy_qsfp_passive_unknown: 1590 physical_layer = IXGBE_PHYSICAL_LAYER_SFP_PLUS_CU; 1591 break; 1592 case ixgbe_phy_sfp_ftl_active: 1593 case ixgbe_phy_sfp_active_unknown: 1594 case ixgbe_phy_qsfp_active_unknown: 1595 physical_layer = IXGBE_PHYSICAL_LAYER_SFP_ACTIVE_DA; 1596 break; 1597 case ixgbe_phy_sfp_avago: 1598 case ixgbe_phy_sfp_ftl: 1599 case ixgbe_phy_sfp_intel: 1600 case ixgbe_phy_sfp_unknown: 1601 hw->phy.ops.read_i2c_eeprom(hw, 1602 IXGBE_SFF_1GBE_COMP_CODES, &comp_codes_1g); 1603 hw->phy.ops.read_i2c_eeprom(hw, 1604 IXGBE_SFF_10GBE_COMP_CODES, &comp_codes_10g); 1605 if (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE) 1606 physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_SR; 1607 else if (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE) 1608 physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_LR; 1609 else if (comp_codes_1g & IXGBE_SFF_1GBASET_CAPABLE) 1610 physical_layer = IXGBE_PHYSICAL_LAYER_1000BASE_T; 1611 else if (comp_codes_1g & IXGBE_SFF_1GBASESX_CAPABLE) 1612 physical_layer = IXGBE_PHYSICAL_LAYER_1000BASE_SX; 1613 break; 1614 case ixgbe_phy_qsfp_intel: 1615 case ixgbe_phy_qsfp_unknown: 1616 hw->phy.ops.read_i2c_eeprom(hw, 1617 IXGBE_SFF_QSFP_10GBE_COMP, &comp_codes_10g); 1618 if (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE) 1619 physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_SR; 1620 else if (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE) 1621 physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_LR; 1622 break; 1623 default: 1624 break; 1625 } 1626 1627 return physical_layer; 1628 } 1629 1630 /** 1631 * ixgbe_identify_qsfp_module_generic - Identifies QSFP modules 1632 * @hw: pointer to hardware structure 1633 * 1634 * Searches for and identifies the QSFP module and assigns appropriate PHY type 1635 **/ 1636 s32 ixgbe_identify_qsfp_module_generic(struct ixgbe_hw *hw) 1637 { 1638 s32 status = IXGBE_ERR_PHY_ADDR_INVALID; 1639 u32 vendor_oui = 0; 1640 enum ixgbe_sfp_type stored_sfp_type = hw->phy.sfp_type; 1641 u8 identifier = 0; 1642 u8 comp_codes_1g = 0; 1643 u8 comp_codes_10g = 0; 1644 u8 oui_bytes[3] = {0, 0, 0}; 1645 u16 enforce_sfp = 0; 1646 u8 connector = 0; 1647 u8 cable_length = 0; 1648 u8 device_tech = 0; 1649 bool active_cable = false; 1650 1651 DEBUGFUNC("ixgbe_identify_qsfp_module_generic"); 1652 1653 if (hw->mac.ops.get_media_type(hw) != ixgbe_media_type_fiber_qsfp) { 1654 hw->phy.sfp_type = ixgbe_sfp_type_not_present; 1655 status = IXGBE_ERR_SFP_NOT_PRESENT; 1656 goto out; 1657 } 1658 1659 /* LAN ID is needed for I2C access */ 1660 hw->mac.ops.set_lan_id(hw); 1661 1662 status = hw->phy.ops.read_i2c_eeprom(hw, IXGBE_SFF_IDENTIFIER, 1663 &identifier); 1664 1665 if (status != IXGBE_SUCCESS) 1666 goto err_read_i2c_eeprom; 1667 1668 if (identifier != IXGBE_SFF_IDENTIFIER_QSFP_PLUS) { 1669 hw->phy.type = ixgbe_phy_sfp_unsupported; 1670 status = IXGBE_ERR_SFP_NOT_SUPPORTED; 1671 goto out; 1672 } 1673 1674 hw->phy.id = identifier; 1675 1676 status = hw->phy.ops.read_i2c_eeprom(hw, IXGBE_SFF_QSFP_10GBE_COMP, 1677 &comp_codes_10g); 1678 1679 if (status != IXGBE_SUCCESS) 1680 goto err_read_i2c_eeprom; 1681 1682 status = hw->phy.ops.read_i2c_eeprom(hw, IXGBE_SFF_QSFP_1GBE_COMP, 1683 &comp_codes_1g); 1684 1685 if (status != IXGBE_SUCCESS) 1686 goto err_read_i2c_eeprom; 1687 1688 if (comp_codes_10g & IXGBE_SFF_QSFP_DA_PASSIVE_CABLE) { 1689 hw->phy.type = ixgbe_phy_qsfp_passive_unknown; 1690 if (hw->bus.lan_id == 0) 1691 hw->phy.sfp_type = ixgbe_sfp_type_da_cu_core0; 1692 else 1693 hw->phy.sfp_type = ixgbe_sfp_type_da_cu_core1; 1694 } else if (comp_codes_10g & (IXGBE_SFF_10GBASESR_CAPABLE | 1695 IXGBE_SFF_10GBASELR_CAPABLE)) { 1696 if (hw->bus.lan_id == 0) 1697 hw->phy.sfp_type = ixgbe_sfp_type_srlr_core0; 1698 else 1699 hw->phy.sfp_type = ixgbe_sfp_type_srlr_core1; 1700 } else { 1701 if (comp_codes_10g & IXGBE_SFF_QSFP_DA_ACTIVE_CABLE) 1702 active_cable = true; 1703 1704 if (!active_cable) { 1705 /* check for active DA cables that pre-date 1706 * SFF-8436 v3.6 */ 1707 hw->phy.ops.read_i2c_eeprom(hw, 1708 IXGBE_SFF_QSFP_CONNECTOR, 1709 &connector); 1710 1711 hw->phy.ops.read_i2c_eeprom(hw, 1712 IXGBE_SFF_QSFP_CABLE_LENGTH, 1713 &cable_length); 1714 1715 hw->phy.ops.read_i2c_eeprom(hw, 1716 IXGBE_SFF_QSFP_DEVICE_TECH, 1717 &device_tech); 1718 1719 if ((connector == 1720 IXGBE_SFF_QSFP_CONNECTOR_NOT_SEPARABLE) && 1721 (cable_length > 0) && 1722 ((device_tech >> 4) == 1723 IXGBE_SFF_QSFP_TRANSMITER_850NM_VCSEL)) 1724 active_cable = true; 1725 } 1726 1727 if (active_cable) { 1728 hw->phy.type = ixgbe_phy_qsfp_active_unknown; 1729 if (hw->bus.lan_id == 0) 1730 hw->phy.sfp_type = 1731 ixgbe_sfp_type_da_act_lmt_core0; 1732 else 1733 hw->phy.sfp_type = 1734 ixgbe_sfp_type_da_act_lmt_core1; 1735 } else { 1736 /* unsupported module type */ 1737 hw->phy.type = ixgbe_phy_sfp_unsupported; 1738 status = IXGBE_ERR_SFP_NOT_SUPPORTED; 1739 goto out; 1740 } 1741 } 1742 1743 if (hw->phy.sfp_type != stored_sfp_type) 1744 hw->phy.sfp_setup_needed = true; 1745 1746 /* Determine if the QSFP+ PHY is dual speed or not. */ 1747 hw->phy.multispeed_fiber = false; 1748 if (((comp_codes_1g & IXGBE_SFF_1GBASESX_CAPABLE) && 1749 (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)) || 1750 ((comp_codes_1g & IXGBE_SFF_1GBASELX_CAPABLE) && 1751 (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE))) 1752 hw->phy.multispeed_fiber = true; 1753 1754 /* Determine PHY vendor for optical modules */ 1755 if (comp_codes_10g & (IXGBE_SFF_10GBASESR_CAPABLE | 1756 IXGBE_SFF_10GBASELR_CAPABLE)) { 1757 status = hw->phy.ops.read_i2c_eeprom(hw, 1758 IXGBE_SFF_QSFP_VENDOR_OUI_BYTE0, 1759 &oui_bytes[0]); 1760 1761 if (status != IXGBE_SUCCESS) 1762 goto err_read_i2c_eeprom; 1763 1764 status = hw->phy.ops.read_i2c_eeprom(hw, 1765 IXGBE_SFF_QSFP_VENDOR_OUI_BYTE1, 1766 &oui_bytes[1]); 1767 1768 if (status != IXGBE_SUCCESS) 1769 goto err_read_i2c_eeprom; 1770 1771 status = hw->phy.ops.read_i2c_eeprom(hw, 1772 IXGBE_SFF_QSFP_VENDOR_OUI_BYTE2, 1773 &oui_bytes[2]); 1774 1775 if (status != IXGBE_SUCCESS) 1776 goto err_read_i2c_eeprom; 1777 1778 vendor_oui = 1779 ((oui_bytes[0] << IXGBE_SFF_VENDOR_OUI_BYTE0_SHIFT) | 1780 (oui_bytes[1] << IXGBE_SFF_VENDOR_OUI_BYTE1_SHIFT) | 1781 (oui_bytes[2] << IXGBE_SFF_VENDOR_OUI_BYTE2_SHIFT)); 1782 1783 if (vendor_oui == IXGBE_SFF_VENDOR_OUI_INTEL) 1784 hw->phy.type = ixgbe_phy_qsfp_intel; 1785 else 1786 hw->phy.type = ixgbe_phy_qsfp_unknown; 1787 1788 ixgbe_get_device_caps(hw, &enforce_sfp); 1789 if (!(enforce_sfp & IXGBE_DEVICE_CAPS_ALLOW_ANY_SFP)) { 1790 /* Make sure we're a supported PHY type */ 1791 if (hw->phy.type == ixgbe_phy_qsfp_intel) { 1792 status = IXGBE_SUCCESS; 1793 } else { 1794 if (hw->allow_unsupported_sfp == true) { 1795 EWARN(hw, 1796 "WARNING: Intel (R) Network Connections are quality tested using Intel (R) Ethernet Optics. " 1797 "Using untested modules is not supported and may cause unstable operation or damage to the module or the adapter. " 1798 "Intel Corporation is not responsible for any harm caused by using untested modules.\n"); 1799 status = IXGBE_SUCCESS; 1800 } else { 1801 DEBUGOUT("QSFP module not supported\n"); 1802 hw->phy.type = 1803 ixgbe_phy_sfp_unsupported; 1804 status = IXGBE_ERR_SFP_NOT_SUPPORTED; 1805 } 1806 } 1807 } else { 1808 status = IXGBE_SUCCESS; 1809 } 1810 } 1811 1812 out: 1813 return status; 1814 1815 err_read_i2c_eeprom: 1816 hw->phy.sfp_type = ixgbe_sfp_type_not_present; 1817 hw->phy.id = 0; 1818 hw->phy.type = ixgbe_phy_unknown; 1819 1820 return IXGBE_ERR_SFP_NOT_PRESENT; 1821 } 1822 1823 /** 1824 * ixgbe_get_sfp_init_sequence_offsets - Provides offset of PHY init sequence 1825 * @hw: pointer to hardware structure 1826 * @list_offset: offset to the SFP ID list 1827 * @data_offset: offset to the SFP data block 1828 * 1829 * Checks the MAC's EEPROM to see if it supports a given SFP+ module type, if 1830 * so it returns the offsets to the phy init sequence block. 1831 **/ 1832 s32 ixgbe_get_sfp_init_sequence_offsets(struct ixgbe_hw *hw, 1833 u16 *list_offset, 1834 u16 *data_offset) 1835 { 1836 u16 sfp_id; 1837 u16 sfp_type = hw->phy.sfp_type; 1838 1839 DEBUGFUNC("ixgbe_get_sfp_init_sequence_offsets"); 1840 1841 if (hw->phy.sfp_type == ixgbe_sfp_type_unknown) 1842 return IXGBE_ERR_SFP_NOT_SUPPORTED; 1843 1844 if (hw->phy.sfp_type == ixgbe_sfp_type_not_present) 1845 return IXGBE_ERR_SFP_NOT_PRESENT; 1846 1847 if ((hw->device_id == IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM) && 1848 (hw->phy.sfp_type == ixgbe_sfp_type_da_cu)) 1849 return IXGBE_ERR_SFP_NOT_SUPPORTED; 1850 1851 /* 1852 * Limiting active cables and 1G Phys must be initialized as 1853 * SR modules 1854 */ 1855 if (sfp_type == ixgbe_sfp_type_da_act_lmt_core0 || 1856 sfp_type == ixgbe_sfp_type_1g_lx_core0 || 1857 sfp_type == ixgbe_sfp_type_1g_cu_core0 || 1858 sfp_type == ixgbe_sfp_type_1g_sx_core0) 1859 sfp_type = ixgbe_sfp_type_srlr_core0; 1860 else if (sfp_type == ixgbe_sfp_type_da_act_lmt_core1 || 1861 sfp_type == ixgbe_sfp_type_1g_lx_core1 || 1862 sfp_type == ixgbe_sfp_type_1g_cu_core1 || 1863 sfp_type == ixgbe_sfp_type_1g_sx_core1) 1864 sfp_type = ixgbe_sfp_type_srlr_core1; 1865 1866 /* Read offset to PHY init contents */ 1867 if (hw->eeprom.ops.read(hw, IXGBE_PHY_INIT_OFFSET_NL, list_offset)) { 1868 ERROR_REPORT2(IXGBE_ERROR_INVALID_STATE, 1869 "eeprom read at offset %d failed", 1870 IXGBE_PHY_INIT_OFFSET_NL); 1871 return IXGBE_ERR_SFP_NO_INIT_SEQ_PRESENT; 1872 } 1873 1874 if ((!*list_offset) || (*list_offset == 0xFFFF)) 1875 return IXGBE_ERR_SFP_NO_INIT_SEQ_PRESENT; 1876 1877 /* Shift offset to first ID word */ 1878 (*list_offset)++; 1879 1880 /* 1881 * Find the matching SFP ID in the EEPROM 1882 * and program the init sequence 1883 */ 1884 if (hw->eeprom.ops.read(hw, *list_offset, &sfp_id)) 1885 goto err_phy; 1886 1887 while (sfp_id != IXGBE_PHY_INIT_END_NL) { 1888 if (sfp_id == sfp_type) { 1889 (*list_offset)++; 1890 if (hw->eeprom.ops.read(hw, *list_offset, data_offset)) 1891 goto err_phy; 1892 if ((!*data_offset) || (*data_offset == 0xFFFF)) { 1893 DEBUGOUT("SFP+ module not supported\n"); 1894 return IXGBE_ERR_SFP_NOT_SUPPORTED; 1895 } else { 1896 break; 1897 } 1898 } else { 1899 (*list_offset) += 2; 1900 if (hw->eeprom.ops.read(hw, *list_offset, &sfp_id)) 1901 goto err_phy; 1902 } 1903 } 1904 1905 if (sfp_id == IXGBE_PHY_INIT_END_NL) { 1906 DEBUGOUT("No matching SFP+ module found\n"); 1907 return IXGBE_ERR_SFP_NOT_SUPPORTED; 1908 } 1909 1910 return IXGBE_SUCCESS; 1911 1912 err_phy: 1913 ERROR_REPORT2(IXGBE_ERROR_INVALID_STATE, 1914 "eeprom read at offset %d failed", *list_offset); 1915 return IXGBE_ERR_PHY; 1916 } 1917 1918 /** 1919 * ixgbe_read_i2c_eeprom_generic - Reads 8 bit EEPROM word over I2C interface 1920 * @hw: pointer to hardware structure 1921 * @byte_offset: EEPROM byte offset to read 1922 * @eeprom_data: value read 1923 * 1924 * Performs byte read operation to SFP module's EEPROM over I2C interface. 1925 **/ 1926 s32 ixgbe_read_i2c_eeprom_generic(struct ixgbe_hw *hw, u8 byte_offset, 1927 u8 *eeprom_data) 1928 { 1929 DEBUGFUNC("ixgbe_read_i2c_eeprom_generic"); 1930 1931 return hw->phy.ops.read_i2c_byte(hw, byte_offset, 1932 IXGBE_I2C_EEPROM_DEV_ADDR, 1933 eeprom_data); 1934 } 1935 1936 /** 1937 * ixgbe_read_i2c_sff8472_generic - Reads 8 bit word over I2C interface 1938 * @hw: pointer to hardware structure 1939 * @byte_offset: byte offset at address 0xA2 1940 * @sff8472_data: value read 1941 * 1942 * Performs byte read operation to SFP module's SFF-8472 data over I2C 1943 **/ 1944 static s32 ixgbe_read_i2c_sff8472_generic(struct ixgbe_hw *hw, u8 byte_offset, 1945 u8 *sff8472_data) 1946 { 1947 return hw->phy.ops.read_i2c_byte(hw, byte_offset, 1948 IXGBE_I2C_EEPROM_DEV_ADDR2, 1949 sff8472_data); 1950 } 1951 1952 /** 1953 * ixgbe_write_i2c_eeprom_generic - Writes 8 bit EEPROM word over I2C interface 1954 * @hw: pointer to hardware structure 1955 * @byte_offset: EEPROM byte offset to write 1956 * @eeprom_data: value to write 1957 * 1958 * Performs byte write operation to SFP module's EEPROM over I2C interface. 1959 **/ 1960 s32 ixgbe_write_i2c_eeprom_generic(struct ixgbe_hw *hw, u8 byte_offset, 1961 u8 eeprom_data) 1962 { 1963 DEBUGFUNC("ixgbe_write_i2c_eeprom_generic"); 1964 1965 return hw->phy.ops.write_i2c_byte(hw, byte_offset, 1966 IXGBE_I2C_EEPROM_DEV_ADDR, 1967 eeprom_data); 1968 } 1969 1970 /** 1971 * ixgbe_is_sfp_probe - Returns true if SFP is being detected 1972 * @hw: pointer to hardware structure 1973 * @offset: eeprom offset to be read 1974 * @addr: I2C address to be read 1975 */ 1976 static bool ixgbe_is_sfp_probe(struct ixgbe_hw *hw, u8 offset, u8 addr) 1977 { 1978 if (addr == IXGBE_I2C_EEPROM_DEV_ADDR && 1979 offset == IXGBE_SFF_IDENTIFIER && 1980 hw->phy.sfp_type == ixgbe_sfp_type_not_present) 1981 return true; 1982 return false; 1983 } 1984 1985 /** 1986 * ixgbe_read_i2c_byte_generic_int - Reads 8 bit word over I2C 1987 * @hw: pointer to hardware structure 1988 * @byte_offset: byte offset to read 1989 * @dev_addr: address to read from 1990 * @data: value read 1991 * @lock: true if to take and release semaphore 1992 * 1993 * Performs byte read operation to SFP module's EEPROM over I2C interface at 1994 * a specified device address. 1995 **/ 1996 static s32 ixgbe_read_i2c_byte_generic_int(struct ixgbe_hw *hw, u8 byte_offset, 1997 u8 dev_addr, u8 *data, bool lock) 1998 { 1999 s32 status; 2000 u32 max_retry = 10; 2001 u32 retry = 0; 2002 u32 swfw_mask = hw->phy.phy_semaphore_mask; 2003 bool nack = 1; 2004 *data = 0; 2005 2006 DEBUGFUNC("ixgbe_read_i2c_byte_generic"); 2007 2008 if (hw->mac.type >= ixgbe_mac_X550) 2009 max_retry = 3; 2010 if (ixgbe_is_sfp_probe(hw, byte_offset, dev_addr)) 2011 max_retry = IXGBE_SFP_DETECT_RETRIES; 2012 2013 do { 2014 if (lock && hw->mac.ops.acquire_swfw_sync(hw, swfw_mask)) 2015 return IXGBE_ERR_SWFW_SYNC; 2016 2017 ixgbe_i2c_start(hw); 2018 2019 /* Device Address and write indication */ 2020 status = ixgbe_clock_out_i2c_byte(hw, dev_addr); 2021 if (status != IXGBE_SUCCESS) 2022 goto fail; 2023 2024 status = ixgbe_get_i2c_ack(hw); 2025 if (status != IXGBE_SUCCESS) 2026 goto fail; 2027 2028 status = ixgbe_clock_out_i2c_byte(hw, byte_offset); 2029 if (status != IXGBE_SUCCESS) 2030 goto fail; 2031 2032 status = ixgbe_get_i2c_ack(hw); 2033 if (status != IXGBE_SUCCESS) 2034 goto fail; 2035 2036 ixgbe_i2c_start(hw); 2037 2038 /* Device Address and read indication */ 2039 status = ixgbe_clock_out_i2c_byte(hw, (dev_addr | 0x1)); 2040 if (status != IXGBE_SUCCESS) 2041 goto fail; 2042 2043 status = ixgbe_get_i2c_ack(hw); 2044 if (status != IXGBE_SUCCESS) 2045 goto fail; 2046 2047 ixgbe_clock_in_i2c_byte(hw, data); 2048 2049 status = ixgbe_clock_out_i2c_bit(hw, nack); 2050 if (status != IXGBE_SUCCESS) 2051 goto fail; 2052 2053 ixgbe_i2c_stop(hw); 2054 if (lock) 2055 hw->mac.ops.release_swfw_sync(hw, swfw_mask); 2056 return IXGBE_SUCCESS; 2057 2058 fail: 2059 ixgbe_i2c_bus_clear(hw); 2060 if (lock) { 2061 hw->mac.ops.release_swfw_sync(hw, swfw_mask); 2062 msec_delay(100); 2063 } 2064 if (retry < max_retry) 2065 DEBUGOUT("I2C byte read error - Retrying.\n"); 2066 else 2067 DEBUGOUT("I2C byte read error.\n"); 2068 retry++; 2069 } while (retry <= max_retry); 2070 2071 return status; 2072 } 2073 2074 /** 2075 * ixgbe_read_i2c_byte_generic - Reads 8 bit word over I2C 2076 * @hw: pointer to hardware structure 2077 * @byte_offset: byte offset to read 2078 * @dev_addr: address to read from 2079 * @data: value read 2080 * 2081 * Performs byte read operation to SFP module's EEPROM over I2C interface at 2082 * a specified device address. 2083 **/ 2084 s32 ixgbe_read_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset, 2085 u8 dev_addr, u8 *data) 2086 { 2087 return ixgbe_read_i2c_byte_generic_int(hw, byte_offset, dev_addr, 2088 data, true); 2089 } 2090 2091 /** 2092 * ixgbe_read_i2c_byte_generic_unlocked - Reads 8 bit word over I2C 2093 * @hw: pointer to hardware structure 2094 * @byte_offset: byte offset to read 2095 * @dev_addr: address to read from 2096 * @data: value read 2097 * 2098 * Performs byte read operation to SFP module's EEPROM over I2C interface at 2099 * a specified device address. 2100 **/ 2101 s32 ixgbe_read_i2c_byte_generic_unlocked(struct ixgbe_hw *hw, u8 byte_offset, 2102 u8 dev_addr, u8 *data) 2103 { 2104 return ixgbe_read_i2c_byte_generic_int(hw, byte_offset, dev_addr, 2105 data, false); 2106 } 2107 2108 /** 2109 * ixgbe_write_i2c_byte_generic_int - Writes 8 bit word over I2C 2110 * @hw: pointer to hardware structure 2111 * @byte_offset: byte offset to write 2112 * @dev_addr: address to write to 2113 * @data: value to write 2114 * @lock: true if to take and release semaphore 2115 * 2116 * Performs byte write operation to SFP module's EEPROM over I2C interface at 2117 * a specified device address. 2118 **/ 2119 static s32 ixgbe_write_i2c_byte_generic_int(struct ixgbe_hw *hw, u8 byte_offset, 2120 u8 dev_addr, u8 data, bool lock) 2121 { 2122 s32 status; 2123 u32 max_retry = 1; 2124 u32 retry = 0; 2125 u32 swfw_mask = hw->phy.phy_semaphore_mask; 2126 2127 DEBUGFUNC("ixgbe_write_i2c_byte_generic"); 2128 2129 if (lock && hw->mac.ops.acquire_swfw_sync(hw, swfw_mask) != 2130 IXGBE_SUCCESS) 2131 return IXGBE_ERR_SWFW_SYNC; 2132 2133 do { 2134 ixgbe_i2c_start(hw); 2135 2136 status = ixgbe_clock_out_i2c_byte(hw, dev_addr); 2137 if (status != IXGBE_SUCCESS) 2138 goto fail; 2139 2140 status = ixgbe_get_i2c_ack(hw); 2141 if (status != IXGBE_SUCCESS) 2142 goto fail; 2143 2144 status = ixgbe_clock_out_i2c_byte(hw, byte_offset); 2145 if (status != IXGBE_SUCCESS) 2146 goto fail; 2147 2148 status = ixgbe_get_i2c_ack(hw); 2149 if (status != IXGBE_SUCCESS) 2150 goto fail; 2151 2152 status = ixgbe_clock_out_i2c_byte(hw, data); 2153 if (status != IXGBE_SUCCESS) 2154 goto fail; 2155 2156 status = ixgbe_get_i2c_ack(hw); 2157 if (status != IXGBE_SUCCESS) 2158 goto fail; 2159 2160 ixgbe_i2c_stop(hw); 2161 if (lock) 2162 hw->mac.ops.release_swfw_sync(hw, swfw_mask); 2163 return IXGBE_SUCCESS; 2164 2165 fail: 2166 ixgbe_i2c_bus_clear(hw); 2167 if (retry < max_retry) 2168 DEBUGOUT("I2C byte write error - Retrying.\n"); 2169 else 2170 DEBUGOUT("I2C byte write error.\n"); 2171 retry++; 2172 } while (retry <= max_retry); 2173 2174 if (lock) 2175 hw->mac.ops.release_swfw_sync(hw, swfw_mask); 2176 2177 return status; 2178 } 2179 2180 /** 2181 * ixgbe_write_i2c_byte_generic - Writes 8 bit word over I2C 2182 * @hw: pointer to hardware structure 2183 * @byte_offset: byte offset to write 2184 * @dev_addr: address to write to 2185 * @data: value to write 2186 * 2187 * Performs byte write operation to SFP module's EEPROM over I2C interface at 2188 * a specified device address. 2189 **/ 2190 s32 ixgbe_write_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset, 2191 u8 dev_addr, u8 data) 2192 { 2193 return ixgbe_write_i2c_byte_generic_int(hw, byte_offset, dev_addr, 2194 data, true); 2195 } 2196 2197 /** 2198 * ixgbe_write_i2c_byte_generic_unlocked - Writes 8 bit word over I2C 2199 * @hw: pointer to hardware structure 2200 * @byte_offset: byte offset to write 2201 * @dev_addr: address to write to 2202 * @data: value to write 2203 * 2204 * Performs byte write operation to SFP module's EEPROM over I2C interface at 2205 * a specified device address. 2206 **/ 2207 s32 ixgbe_write_i2c_byte_generic_unlocked(struct ixgbe_hw *hw, u8 byte_offset, 2208 u8 dev_addr, u8 data) 2209 { 2210 return ixgbe_write_i2c_byte_generic_int(hw, byte_offset, dev_addr, 2211 data, false); 2212 } 2213 2214 /** 2215 * ixgbe_i2c_start - Sets I2C start condition 2216 * @hw: pointer to hardware structure 2217 * 2218 * Sets I2C start condition (High -> Low on SDA while SCL is High) 2219 * Set bit-bang mode on X550 hardware. 2220 **/ 2221 static void ixgbe_i2c_start(struct ixgbe_hw *hw) 2222 { 2223 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL_BY_MAC(hw)); 2224 2225 DEBUGFUNC("ixgbe_i2c_start"); 2226 2227 i2cctl |= IXGBE_I2C_BB_EN_BY_MAC(hw); 2228 2229 /* Start condition must begin with data and clock high */ 2230 ixgbe_set_i2c_data(hw, &i2cctl, 1); 2231 ixgbe_raise_i2c_clk(hw, &i2cctl); 2232 2233 /* Setup time for start condition (4.7us) */ 2234 usec_delay(IXGBE_I2C_T_SU_STA); 2235 2236 ixgbe_set_i2c_data(hw, &i2cctl, 0); 2237 2238 /* Hold time for start condition (4us) */ 2239 usec_delay(IXGBE_I2C_T_HD_STA); 2240 2241 ixgbe_lower_i2c_clk(hw, &i2cctl); 2242 2243 /* Minimum low period of clock is 4.7 us */ 2244 usec_delay(IXGBE_I2C_T_LOW); 2245 2246 } 2247 2248 /** 2249 * ixgbe_i2c_stop - Sets I2C stop condition 2250 * @hw: pointer to hardware structure 2251 * 2252 * Sets I2C stop condition (Low -> High on SDA while SCL is High) 2253 * Disables bit-bang mode and negates data output enable on X550 2254 * hardware. 2255 **/ 2256 static void ixgbe_i2c_stop(struct ixgbe_hw *hw) 2257 { 2258 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL_BY_MAC(hw)); 2259 u32 data_oe_bit = IXGBE_I2C_DATA_OE_N_EN_BY_MAC(hw); 2260 u32 clk_oe_bit = IXGBE_I2C_CLK_OE_N_EN_BY_MAC(hw); 2261 u32 bb_en_bit = IXGBE_I2C_BB_EN_BY_MAC(hw); 2262 2263 DEBUGFUNC("ixgbe_i2c_stop"); 2264 2265 /* Stop condition must begin with data low and clock high */ 2266 ixgbe_set_i2c_data(hw, &i2cctl, 0); 2267 ixgbe_raise_i2c_clk(hw, &i2cctl); 2268 2269 /* Setup time for stop condition (4us) */ 2270 usec_delay(IXGBE_I2C_T_SU_STO); 2271 2272 ixgbe_set_i2c_data(hw, &i2cctl, 1); 2273 2274 /* bus free time between stop and start (4.7us)*/ 2275 usec_delay(IXGBE_I2C_T_BUF); 2276 2277 if (bb_en_bit || data_oe_bit || clk_oe_bit) { 2278 i2cctl &= ~bb_en_bit; 2279 i2cctl |= data_oe_bit | clk_oe_bit; 2280 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL_BY_MAC(hw), i2cctl); 2281 IXGBE_WRITE_FLUSH(hw); 2282 } 2283 } 2284 2285 /** 2286 * ixgbe_clock_in_i2c_byte - Clocks in one byte via I2C 2287 * @hw: pointer to hardware structure 2288 * @data: data byte to clock in 2289 * 2290 * Clocks in one byte data via I2C data/clock 2291 **/ 2292 static void ixgbe_clock_in_i2c_byte(struct ixgbe_hw *hw, u8 *data) 2293 { 2294 s32 i; 2295 bool bit = 0; 2296 2297 DEBUGFUNC("ixgbe_clock_in_i2c_byte"); 2298 2299 *data = 0; 2300 for (i = 7; i >= 0; i--) { 2301 ixgbe_clock_in_i2c_bit(hw, &bit); 2302 *data |= bit << i; 2303 } 2304 } 2305 2306 /** 2307 * ixgbe_clock_out_i2c_byte - Clocks out one byte via I2C 2308 * @hw: pointer to hardware structure 2309 * @data: data byte clocked out 2310 * 2311 * Clocks out one byte data via I2C data/clock 2312 **/ 2313 static s32 ixgbe_clock_out_i2c_byte(struct ixgbe_hw *hw, u8 data) 2314 { 2315 s32 status = IXGBE_SUCCESS; 2316 s32 i; 2317 u32 i2cctl; 2318 bool bit; 2319 2320 DEBUGFUNC("ixgbe_clock_out_i2c_byte"); 2321 2322 for (i = 7; i >= 0; i--) { 2323 bit = (data >> i) & 0x1; 2324 status = ixgbe_clock_out_i2c_bit(hw, bit); 2325 2326 if (status != IXGBE_SUCCESS) 2327 break; 2328 } 2329 2330 /* Release SDA line (set high) */ 2331 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL_BY_MAC(hw)); 2332 i2cctl |= IXGBE_I2C_DATA_OUT_BY_MAC(hw); 2333 i2cctl |= IXGBE_I2C_DATA_OE_N_EN_BY_MAC(hw); 2334 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL_BY_MAC(hw), i2cctl); 2335 IXGBE_WRITE_FLUSH(hw); 2336 2337 return status; 2338 } 2339 2340 /** 2341 * ixgbe_get_i2c_ack - Polls for I2C ACK 2342 * @hw: pointer to hardware structure 2343 * 2344 * Clocks in/out one bit via I2C data/clock 2345 **/ 2346 static s32 ixgbe_get_i2c_ack(struct ixgbe_hw *hw) 2347 { 2348 u32 data_oe_bit = IXGBE_I2C_DATA_OE_N_EN_BY_MAC(hw); 2349 s32 status = IXGBE_SUCCESS; 2350 u32 i = 0; 2351 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL_BY_MAC(hw)); 2352 u32 timeout = 10; 2353 bool ack = 1; 2354 2355 DEBUGFUNC("ixgbe_get_i2c_ack"); 2356 2357 if (data_oe_bit) { 2358 i2cctl |= IXGBE_I2C_DATA_OUT_BY_MAC(hw); 2359 i2cctl |= data_oe_bit; 2360 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL_BY_MAC(hw), i2cctl); 2361 IXGBE_WRITE_FLUSH(hw); 2362 } 2363 ixgbe_raise_i2c_clk(hw, &i2cctl); 2364 2365 /* Minimum high period of clock is 4us */ 2366 usec_delay(IXGBE_I2C_T_HIGH); 2367 2368 /* Poll for ACK. Note that ACK in I2C spec is 2369 * transition from 1 to 0 */ 2370 for (i = 0; i < timeout; i++) { 2371 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL_BY_MAC(hw)); 2372 ack = ixgbe_get_i2c_data(hw, &i2cctl); 2373 2374 usec_delay(1); 2375 if (!ack) 2376 break; 2377 } 2378 2379 if (ack) { 2380 DEBUGOUT("I2C ack was not received.\n"); 2381 status = IXGBE_ERR_I2C; 2382 } 2383 2384 ixgbe_lower_i2c_clk(hw, &i2cctl); 2385 2386 /* Minimum low period of clock is 4.7 us */ 2387 usec_delay(IXGBE_I2C_T_LOW); 2388 2389 return status; 2390 } 2391 2392 /** 2393 * ixgbe_clock_in_i2c_bit - Clocks in one bit via I2C data/clock 2394 * @hw: pointer to hardware structure 2395 * @data: read data value 2396 * 2397 * Clocks in one bit via I2C data/clock 2398 **/ 2399 static void ixgbe_clock_in_i2c_bit(struct ixgbe_hw *hw, bool *data) 2400 { 2401 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL_BY_MAC(hw)); 2402 u32 data_oe_bit = IXGBE_I2C_DATA_OE_N_EN_BY_MAC(hw); 2403 2404 DEBUGFUNC("ixgbe_clock_in_i2c_bit"); 2405 2406 if (data_oe_bit) { 2407 i2cctl |= IXGBE_I2C_DATA_OUT_BY_MAC(hw); 2408 i2cctl |= data_oe_bit; 2409 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL_BY_MAC(hw), i2cctl); 2410 IXGBE_WRITE_FLUSH(hw); 2411 } 2412 ixgbe_raise_i2c_clk(hw, &i2cctl); 2413 2414 /* Minimum high period of clock is 4us */ 2415 usec_delay(IXGBE_I2C_T_HIGH); 2416 2417 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL_BY_MAC(hw)); 2418 *data = ixgbe_get_i2c_data(hw, &i2cctl); 2419 2420 ixgbe_lower_i2c_clk(hw, &i2cctl); 2421 2422 /* Minimum low period of clock is 4.7 us */ 2423 usec_delay(IXGBE_I2C_T_LOW); 2424 } 2425 2426 /** 2427 * ixgbe_clock_out_i2c_bit - Clocks in/out one bit via I2C data/clock 2428 * @hw: pointer to hardware structure 2429 * @data: data value to write 2430 * 2431 * Clocks out one bit via I2C data/clock 2432 **/ 2433 static s32 ixgbe_clock_out_i2c_bit(struct ixgbe_hw *hw, bool data) 2434 { 2435 s32 status; 2436 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL_BY_MAC(hw)); 2437 2438 DEBUGFUNC("ixgbe_clock_out_i2c_bit"); 2439 2440 status = ixgbe_set_i2c_data(hw, &i2cctl, data); 2441 if (status == IXGBE_SUCCESS) { 2442 ixgbe_raise_i2c_clk(hw, &i2cctl); 2443 2444 /* Minimum high period of clock is 4us */ 2445 usec_delay(IXGBE_I2C_T_HIGH); 2446 2447 ixgbe_lower_i2c_clk(hw, &i2cctl); 2448 2449 /* Minimum low period of clock is 4.7 us. 2450 * This also takes care of the data hold time. 2451 */ 2452 usec_delay(IXGBE_I2C_T_LOW); 2453 } else { 2454 status = IXGBE_ERR_I2C; 2455 ERROR_REPORT2(IXGBE_ERROR_INVALID_STATE, 2456 "I2C data was not set to %X\n", data); 2457 } 2458 2459 return status; 2460 } 2461 2462 /** 2463 * ixgbe_raise_i2c_clk - Raises the I2C SCL clock 2464 * @hw: pointer to hardware structure 2465 * @i2cctl: Current value of I2CCTL register 2466 * 2467 * Raises the I2C clock line '0'->'1' 2468 * Negates the I2C clock output enable on X550 hardware. 2469 **/ 2470 static void ixgbe_raise_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl) 2471 { 2472 u32 clk_oe_bit = IXGBE_I2C_CLK_OE_N_EN_BY_MAC(hw); 2473 u32 i = 0; 2474 u32 timeout = IXGBE_I2C_CLOCK_STRETCHING_TIMEOUT; 2475 u32 i2cctl_r = 0; 2476 2477 DEBUGFUNC("ixgbe_raise_i2c_clk"); 2478 2479 if (clk_oe_bit) { 2480 *i2cctl |= clk_oe_bit; 2481 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL_BY_MAC(hw), *i2cctl); 2482 } 2483 2484 for (i = 0; i < timeout; i++) { 2485 *i2cctl |= IXGBE_I2C_CLK_OUT_BY_MAC(hw); 2486 2487 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL_BY_MAC(hw), *i2cctl); 2488 IXGBE_WRITE_FLUSH(hw); 2489 /* SCL rise time (1000ns) */ 2490 usec_delay(IXGBE_I2C_T_RISE); 2491 2492 i2cctl_r = IXGBE_READ_REG(hw, IXGBE_I2CCTL_BY_MAC(hw)); 2493 if (i2cctl_r & IXGBE_I2C_CLK_IN_BY_MAC(hw)) 2494 break; 2495 } 2496 } 2497 2498 /** 2499 * ixgbe_lower_i2c_clk - Lowers the I2C SCL clock 2500 * @hw: pointer to hardware structure 2501 * @i2cctl: Current value of I2CCTL register 2502 * 2503 * Lowers the I2C clock line '1'->'0' 2504 * Asserts the I2C clock output enable on X550 hardware. 2505 **/ 2506 static void ixgbe_lower_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl) 2507 { 2508 DEBUGFUNC("ixgbe_lower_i2c_clk"); 2509 2510 *i2cctl &= ~(IXGBE_I2C_CLK_OUT_BY_MAC(hw)); 2511 *i2cctl &= ~IXGBE_I2C_CLK_OE_N_EN_BY_MAC(hw); 2512 2513 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL_BY_MAC(hw), *i2cctl); 2514 IXGBE_WRITE_FLUSH(hw); 2515 2516 /* SCL fall time (300ns) */ 2517 usec_delay(IXGBE_I2C_T_FALL); 2518 } 2519 2520 /** 2521 * ixgbe_set_i2c_data - Sets the I2C data bit 2522 * @hw: pointer to hardware structure 2523 * @i2cctl: Current value of I2CCTL register 2524 * @data: I2C data value (0 or 1) to set 2525 * 2526 * Sets the I2C data bit 2527 * Asserts the I2C data output enable on X550 hardware. 2528 **/ 2529 static s32 ixgbe_set_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl, bool data) 2530 { 2531 u32 data_oe_bit = IXGBE_I2C_DATA_OE_N_EN_BY_MAC(hw); 2532 s32 status = IXGBE_SUCCESS; 2533 2534 DEBUGFUNC("ixgbe_set_i2c_data"); 2535 2536 if (data) 2537 *i2cctl |= IXGBE_I2C_DATA_OUT_BY_MAC(hw); 2538 else 2539 *i2cctl &= ~(IXGBE_I2C_DATA_OUT_BY_MAC(hw)); 2540 *i2cctl &= ~data_oe_bit; 2541 2542 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL_BY_MAC(hw), *i2cctl); 2543 IXGBE_WRITE_FLUSH(hw); 2544 2545 /* Data rise/fall (1000ns/300ns) and set-up time (250ns) */ 2546 usec_delay(IXGBE_I2C_T_RISE + IXGBE_I2C_T_FALL + IXGBE_I2C_T_SU_DATA); 2547 2548 if (!data) /* Can't verify data in this case */ 2549 return IXGBE_SUCCESS; 2550 if (data_oe_bit) { 2551 *i2cctl |= data_oe_bit; 2552 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL_BY_MAC(hw), *i2cctl); 2553 IXGBE_WRITE_FLUSH(hw); 2554 } 2555 2556 /* Verify data was set correctly */ 2557 *i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL_BY_MAC(hw)); 2558 if (data != ixgbe_get_i2c_data(hw, i2cctl)) { 2559 status = IXGBE_ERR_I2C; 2560 ERROR_REPORT2(IXGBE_ERROR_INVALID_STATE, 2561 "Error - I2C data was not set to %X.\n", 2562 data); 2563 } 2564 2565 return status; 2566 } 2567 2568 /** 2569 * ixgbe_get_i2c_data - Reads the I2C SDA data bit 2570 * @hw: pointer to hardware structure 2571 * @i2cctl: Current value of I2CCTL register 2572 * 2573 * Returns the I2C data bit value 2574 * Negates the I2C data output enable on X550 hardware. 2575 **/ 2576 static bool ixgbe_get_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl) 2577 { 2578 u32 data_oe_bit = IXGBE_I2C_DATA_OE_N_EN_BY_MAC(hw); 2579 bool data; 2580 2581 DEBUGFUNC("ixgbe_get_i2c_data"); 2582 2583 if (data_oe_bit) { 2584 *i2cctl |= data_oe_bit; 2585 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL_BY_MAC(hw), *i2cctl); 2586 IXGBE_WRITE_FLUSH(hw); 2587 usec_delay(IXGBE_I2C_T_FALL); 2588 } 2589 2590 if (*i2cctl & IXGBE_I2C_DATA_IN_BY_MAC(hw)) 2591 data = 1; 2592 else 2593 data = 0; 2594 2595 return data; 2596 } 2597 2598 /** 2599 * ixgbe_i2c_bus_clear - Clears the I2C bus 2600 * @hw: pointer to hardware structure 2601 * 2602 * Clears the I2C bus by sending nine clock pulses. 2603 * Used when data line is stuck low. 2604 **/ 2605 void ixgbe_i2c_bus_clear(struct ixgbe_hw *hw) 2606 { 2607 u32 i2cctl; 2608 u32 i; 2609 2610 DEBUGFUNC("ixgbe_i2c_bus_clear"); 2611 2612 ixgbe_i2c_start(hw); 2613 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL_BY_MAC(hw)); 2614 2615 ixgbe_set_i2c_data(hw, &i2cctl, 1); 2616 2617 for (i = 0; i < 9; i++) { 2618 ixgbe_raise_i2c_clk(hw, &i2cctl); 2619 2620 /* Min high period of clock is 4us */ 2621 usec_delay(IXGBE_I2C_T_HIGH); 2622 2623 ixgbe_lower_i2c_clk(hw, &i2cctl); 2624 2625 /* Min low period of clock is 4.7us*/ 2626 usec_delay(IXGBE_I2C_T_LOW); 2627 } 2628 2629 ixgbe_i2c_start(hw); 2630 2631 /* Put the i2c bus back to default state */ 2632 ixgbe_i2c_stop(hw); 2633 } 2634 2635 /** 2636 * ixgbe_tn_check_overtemp - Checks if an overtemp occurred. 2637 * @hw: pointer to hardware structure 2638 * 2639 * Checks if the LASI temp alarm status was triggered due to overtemp 2640 **/ 2641 s32 ixgbe_tn_check_overtemp(struct ixgbe_hw *hw) 2642 { 2643 s32 status = IXGBE_SUCCESS; 2644 u16 phy_data = 0; 2645 2646 DEBUGFUNC("ixgbe_tn_check_overtemp"); 2647 2648 if (hw->device_id != IXGBE_DEV_ID_82599_T3_LOM) 2649 goto out; 2650 2651 /* Check that the LASI temp alarm status was triggered */ 2652 hw->phy.ops.read_reg(hw, IXGBE_TN_LASI_STATUS_REG, 2653 IXGBE_MDIO_PMA_PMD_DEV_TYPE, &phy_data); 2654 2655 if (!(phy_data & IXGBE_TN_LASI_STATUS_TEMP_ALARM)) 2656 goto out; 2657 2658 status = IXGBE_ERR_OVERTEMP; 2659 ERROR_REPORT1(IXGBE_ERROR_CAUTION, "Device over temperature"); 2660 out: 2661 return status; 2662 } 2663 2664 /** 2665 * ixgbe_set_copper_phy_power - Control power for copper phy 2666 * @hw: pointer to hardware structure 2667 * @on: true for on, false for off 2668 */ 2669 s32 ixgbe_set_copper_phy_power(struct ixgbe_hw *hw, bool on) 2670 { 2671 u32 status; 2672 u16 reg; 2673 2674 if (!on && ixgbe_mng_present(hw)) 2675 return 0; 2676 2677 status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_VENDOR_SPECIFIC_1_CONTROL, 2678 IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE, 2679 ®); 2680 if (status) 2681 return status; 2682 2683 if (on) { 2684 reg &= ~IXGBE_MDIO_PHY_SET_LOW_POWER_MODE; 2685 } else { 2686 if (ixgbe_check_reset_blocked(hw)) 2687 return 0; 2688 reg |= IXGBE_MDIO_PHY_SET_LOW_POWER_MODE; 2689 } 2690 2691 status = hw->phy.ops.write_reg(hw, IXGBE_MDIO_VENDOR_SPECIFIC_1_CONTROL, 2692 IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE, 2693 reg); 2694 return status; 2695 } 2696