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_api.h" 36 #include "ixgbe_common.h" 37 #include "ixgbe_phy.h" 38 39 static void ixgbe_i2c_start(struct ixgbe_hw *hw); 40 static void ixgbe_i2c_stop(struct ixgbe_hw *hw); 41 static s32 ixgbe_clock_in_i2c_byte(struct ixgbe_hw *hw, u8 *data); 42 static s32 ixgbe_clock_out_i2c_byte(struct ixgbe_hw *hw, u8 data); 43 static s32 ixgbe_get_i2c_ack(struct ixgbe_hw *hw); 44 static s32 ixgbe_clock_in_i2c_bit(struct ixgbe_hw *hw, bool *data); 45 static s32 ixgbe_clock_out_i2c_bit(struct ixgbe_hw *hw, bool data); 46 static s32 ixgbe_raise_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl); 47 static void ixgbe_lower_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl); 48 static s32 ixgbe_set_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl, bool data); 49 static bool ixgbe_get_i2c_data(u32 *i2cctl); 50 void ixgbe_i2c_bus_clear(struct ixgbe_hw *hw); 51 52 /** 53 * ixgbe_init_phy_ops_generic - Inits PHY function ptrs 54 * @hw: pointer to the hardware structure 55 * 56 * Initialize the function pointers. 57 **/ 58 s32 ixgbe_init_phy_ops_generic(struct ixgbe_hw *hw) 59 { 60 struct ixgbe_phy_info *phy = &hw->phy; 61 62 DEBUGFUNC("ixgbe_init_phy_ops_generic"); 63 64 /* PHY */ 65 phy->ops.identify = &ixgbe_identify_phy_generic; 66 phy->ops.reset = &ixgbe_reset_phy_generic; 67 phy->ops.read_reg = &ixgbe_read_phy_reg_generic; 68 phy->ops.write_reg = &ixgbe_write_phy_reg_generic; 69 phy->ops.setup_link = &ixgbe_setup_phy_link_generic; 70 phy->ops.setup_link_speed = &ixgbe_setup_phy_link_speed_generic; 71 phy->ops.check_link = NULL; 72 phy->ops.get_firmware_version = ixgbe_get_phy_firmware_version_generic; 73 phy->ops.read_i2c_byte = &ixgbe_read_i2c_byte_generic; 74 phy->ops.write_i2c_byte = &ixgbe_write_i2c_byte_generic; 75 phy->ops.read_i2c_eeprom = &ixgbe_read_i2c_eeprom_generic; 76 phy->ops.write_i2c_eeprom = &ixgbe_write_i2c_eeprom_generic; 77 phy->ops.i2c_bus_clear = &ixgbe_i2c_bus_clear; 78 phy->ops.identify_sfp = &ixgbe_identify_sfp_module_generic; 79 phy->sfp_type = ixgbe_sfp_type_unknown; 80 phy->ops.check_overtemp = &ixgbe_tn_check_overtemp; 81 return IXGBE_SUCCESS; 82 } 83 84 /** 85 * ixgbe_identify_phy_generic - Get physical layer module 86 * @hw: pointer to hardware structure 87 * 88 * Determines the physical layer module found on the current adapter. 89 **/ 90 s32 ixgbe_identify_phy_generic(struct ixgbe_hw *hw) 91 { 92 s32 status = IXGBE_ERR_PHY_ADDR_INVALID; 93 u32 phy_addr; 94 u16 ext_ability = 0; 95 96 DEBUGFUNC("ixgbe_identify_phy_generic"); 97 98 if (hw->phy.type == ixgbe_phy_unknown) { 99 for (phy_addr = 0; phy_addr < IXGBE_MAX_PHY_ADDR; phy_addr++) { 100 if (ixgbe_validate_phy_addr(hw, phy_addr)) { 101 hw->phy.addr = phy_addr; 102 ixgbe_get_phy_id(hw); 103 hw->phy.type = 104 ixgbe_get_phy_type_from_id(hw->phy.id); 105 106 if (hw->phy.type == ixgbe_phy_unknown) { 107 hw->phy.ops.read_reg(hw, 108 IXGBE_MDIO_PHY_EXT_ABILITY, 109 IXGBE_MDIO_PMA_PMD_DEV_TYPE, 110 &ext_ability); 111 if (ext_ability & 112 (IXGBE_MDIO_PHY_10GBASET_ABILITY | 113 IXGBE_MDIO_PHY_1000BASET_ABILITY)) 114 hw->phy.type = 115 ixgbe_phy_cu_unknown; 116 else 117 hw->phy.type = 118 ixgbe_phy_generic; 119 } 120 121 status = IXGBE_SUCCESS; 122 break; 123 } 124 } 125 /* clear value if nothing found */ 126 if (status != IXGBE_SUCCESS) 127 hw->phy.addr = 0; 128 } else { 129 status = IXGBE_SUCCESS; 130 } 131 132 return status; 133 } 134 135 /** 136 * ixgbe_validate_phy_addr - Determines phy address is valid 137 * @hw: pointer to hardware structure 138 * 139 **/ 140 bool ixgbe_validate_phy_addr(struct ixgbe_hw *hw, u32 phy_addr) 141 { 142 u16 phy_id = 0; 143 bool valid = FALSE; 144 145 DEBUGFUNC("ixgbe_validate_phy_addr"); 146 147 hw->phy.addr = phy_addr; 148 hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_ID_HIGH, 149 IXGBE_MDIO_PMA_PMD_DEV_TYPE, &phy_id); 150 151 if (phy_id != 0xFFFF && phy_id != 0x0) 152 valid = TRUE; 153 154 return valid; 155 } 156 157 /** 158 * ixgbe_get_phy_id - Get the phy type 159 * @hw: pointer to hardware structure 160 * 161 **/ 162 s32 ixgbe_get_phy_id(struct ixgbe_hw *hw) 163 { 164 u32 status; 165 u16 phy_id_high = 0; 166 u16 phy_id_low = 0; 167 168 DEBUGFUNC("ixgbe_get_phy_id"); 169 170 status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_ID_HIGH, 171 IXGBE_MDIO_PMA_PMD_DEV_TYPE, 172 &phy_id_high); 173 174 if (status == IXGBE_SUCCESS) { 175 hw->phy.id = (u32)(phy_id_high << 16); 176 status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_ID_LOW, 177 IXGBE_MDIO_PMA_PMD_DEV_TYPE, 178 &phy_id_low); 179 hw->phy.id |= (u32)(phy_id_low & IXGBE_PHY_REVISION_MASK); 180 hw->phy.revision = (u32)(phy_id_low & ~IXGBE_PHY_REVISION_MASK); 181 } 182 return status; 183 } 184 185 /** 186 * ixgbe_get_phy_type_from_id - Get the phy type 187 * @hw: pointer to hardware structure 188 * 189 **/ 190 enum ixgbe_phy_type ixgbe_get_phy_type_from_id(u32 phy_id) 191 { 192 enum ixgbe_phy_type phy_type; 193 194 DEBUGFUNC("ixgbe_get_phy_type_from_id"); 195 196 switch (phy_id) { 197 case TN1010_PHY_ID: 198 phy_type = ixgbe_phy_tn; 199 break; 200 case AQ1002_PHY_ID: 201 phy_type = ixgbe_phy_aq; 202 break; 203 case QT2022_PHY_ID: 204 phy_type = ixgbe_phy_qt; 205 break; 206 case ATH_PHY_ID: 207 phy_type = ixgbe_phy_nl; 208 break; 209 default: 210 phy_type = ixgbe_phy_unknown; 211 break; 212 } 213 214 DEBUGOUT1("phy type found is %d\n", phy_type); 215 return phy_type; 216 } 217 218 /** 219 * ixgbe_reset_phy_generic - Performs a PHY reset 220 * @hw: pointer to hardware structure 221 **/ 222 s32 ixgbe_reset_phy_generic(struct ixgbe_hw *hw) 223 { 224 u32 i; 225 u16 ctrl = 0; 226 s32 status = IXGBE_SUCCESS; 227 228 DEBUGFUNC("ixgbe_reset_phy_generic"); 229 230 if (hw->phy.type == ixgbe_phy_unknown) 231 status = ixgbe_identify_phy_generic(hw); 232 233 if (status != IXGBE_SUCCESS || hw->phy.type == ixgbe_phy_none) 234 goto out; 235 236 /* Don't reset PHY if it's shut down due to overtemp. */ 237 if (!hw->phy.reset_if_overtemp && 238 (IXGBE_ERR_OVERTEMP == hw->phy.ops.check_overtemp(hw))) 239 goto out; 240 241 /* 242 * Perform soft PHY reset to the PHY_XS. 243 * This will cause a soft reset to the PHY 244 */ 245 hw->phy.ops.write_reg(hw, IXGBE_MDIO_PHY_XS_CONTROL, 246 IXGBE_MDIO_PHY_XS_DEV_TYPE, 247 IXGBE_MDIO_PHY_XS_RESET); 248 249 /* 250 * Poll for reset bit to self-clear indicating reset is complete. 251 * Some PHYs could take up to 3 seconds to complete and need about 252 * 1.7 usec delay after the reset is complete. 253 */ 254 for (i = 0; i < 30; i++) { 255 msec_delay(100); 256 hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_XS_CONTROL, 257 IXGBE_MDIO_PHY_XS_DEV_TYPE, &ctrl); 258 if (!(ctrl & IXGBE_MDIO_PHY_XS_RESET)) { 259 usec_delay(2); 260 break; 261 } 262 } 263 264 if (ctrl & IXGBE_MDIO_PHY_XS_RESET) { 265 status = IXGBE_ERR_RESET_FAILED; 266 DEBUGOUT("PHY reset polling failed to complete.\n"); 267 } 268 269 out: 270 return status; 271 } 272 273 /** 274 * ixgbe_read_phy_reg_generic - Reads a value from a specified PHY register 275 * @hw: pointer to hardware structure 276 * @reg_addr: 32 bit address of PHY register to read 277 * @phy_data: Pointer to read data from PHY register 278 **/ 279 s32 ixgbe_read_phy_reg_generic(struct ixgbe_hw *hw, u32 reg_addr, 280 u32 device_type, u16 *phy_data) 281 { 282 u32 command; 283 u32 i; 284 u32 data; 285 s32 status = IXGBE_SUCCESS; 286 u16 gssr; 287 288 DEBUGFUNC("ixgbe_read_phy_reg_generic"); 289 290 if (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1) 291 gssr = IXGBE_GSSR_PHY1_SM; 292 else 293 gssr = IXGBE_GSSR_PHY0_SM; 294 295 if (ixgbe_acquire_swfw_sync(hw, gssr) != IXGBE_SUCCESS) 296 status = IXGBE_ERR_SWFW_SYNC; 297 298 if (status == IXGBE_SUCCESS) { 299 /* Setup and write the address cycle command */ 300 command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT) | 301 (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) | 302 (hw->phy.addr << IXGBE_MSCA_PHY_ADDR_SHIFT) | 303 (IXGBE_MSCA_ADDR_CYCLE | IXGBE_MSCA_MDI_COMMAND)); 304 305 IXGBE_WRITE_REG(hw, IXGBE_MSCA, command); 306 307 /* 308 * Check every 10 usec to see if the address cycle completed. 309 * The MDI Command bit will clear when the operation is 310 * complete 311 */ 312 for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) { 313 usec_delay(10); 314 315 command = IXGBE_READ_REG(hw, IXGBE_MSCA); 316 317 if ((command & IXGBE_MSCA_MDI_COMMAND) == 0) 318 break; 319 } 320 321 if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) { 322 DEBUGOUT("PHY address command did not complete.\n"); 323 status = IXGBE_ERR_PHY; 324 } 325 326 if (status == IXGBE_SUCCESS) { 327 /* 328 * Address cycle complete, setup and write the read 329 * command 330 */ 331 command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT) | 332 (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) | 333 (hw->phy.addr << IXGBE_MSCA_PHY_ADDR_SHIFT) | 334 (IXGBE_MSCA_READ | IXGBE_MSCA_MDI_COMMAND)); 335 336 IXGBE_WRITE_REG(hw, IXGBE_MSCA, command); 337 338 /* 339 * Check every 10 usec to see if the address cycle 340 * completed. The MDI Command bit will clear when the 341 * operation is complete 342 */ 343 for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) { 344 usec_delay(10); 345 346 command = IXGBE_READ_REG(hw, IXGBE_MSCA); 347 348 if ((command & IXGBE_MSCA_MDI_COMMAND) == 0) 349 break; 350 } 351 352 if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) { 353 DEBUGOUT("PHY read command didn't complete\n"); 354 status = IXGBE_ERR_PHY; 355 } else { 356 /* 357 * Read operation is complete. Get the data 358 * from MSRWD 359 */ 360 data = IXGBE_READ_REG(hw, IXGBE_MSRWD); 361 data >>= IXGBE_MSRWD_READ_DATA_SHIFT; 362 *phy_data = (u16)(data); 363 } 364 } 365 366 ixgbe_release_swfw_sync(hw, gssr); 367 } 368 369 return status; 370 } 371 372 /** 373 * ixgbe_write_phy_reg_generic - Writes a value to specified PHY register 374 * @hw: pointer to hardware structure 375 * @reg_addr: 32 bit PHY register to write 376 * @device_type: 5 bit device type 377 * @phy_data: Data to write to the PHY register 378 **/ 379 s32 ixgbe_write_phy_reg_generic(struct ixgbe_hw *hw, u32 reg_addr, 380 u32 device_type, u16 phy_data) 381 { 382 u32 command; 383 u32 i; 384 s32 status = IXGBE_SUCCESS; 385 u16 gssr; 386 387 DEBUGFUNC("ixgbe_write_phy_reg_generic"); 388 389 if (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1) 390 gssr = IXGBE_GSSR_PHY1_SM; 391 else 392 gssr = IXGBE_GSSR_PHY0_SM; 393 394 if (ixgbe_acquire_swfw_sync(hw, gssr) != IXGBE_SUCCESS) 395 status = IXGBE_ERR_SWFW_SYNC; 396 397 if (status == IXGBE_SUCCESS) { 398 /* Put the data in the MDI single read and write data register*/ 399 IXGBE_WRITE_REG(hw, IXGBE_MSRWD, (u32)phy_data); 400 401 /* Setup and write the address cycle command */ 402 command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT) | 403 (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) | 404 (hw->phy.addr << IXGBE_MSCA_PHY_ADDR_SHIFT) | 405 (IXGBE_MSCA_ADDR_CYCLE | IXGBE_MSCA_MDI_COMMAND)); 406 407 IXGBE_WRITE_REG(hw, IXGBE_MSCA, command); 408 409 /* 410 * Check every 10 usec to see if the address cycle completed. 411 * The MDI Command bit will clear when the operation is 412 * complete 413 */ 414 for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) { 415 usec_delay(10); 416 417 command = IXGBE_READ_REG(hw, IXGBE_MSCA); 418 419 if ((command & IXGBE_MSCA_MDI_COMMAND) == 0) 420 break; 421 } 422 423 if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) { 424 DEBUGOUT("PHY address cmd didn't complete\n"); 425 status = IXGBE_ERR_PHY; 426 } 427 428 if (status == IXGBE_SUCCESS) { 429 /* 430 * Address cycle complete, setup and write the write 431 * command 432 */ 433 command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT) | 434 (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) | 435 (hw->phy.addr << IXGBE_MSCA_PHY_ADDR_SHIFT) | 436 (IXGBE_MSCA_WRITE | IXGBE_MSCA_MDI_COMMAND)); 437 438 IXGBE_WRITE_REG(hw, IXGBE_MSCA, command); 439 440 /* 441 * Check every 10 usec to see if the address cycle 442 * completed. The MDI Command bit will clear when the 443 * operation is complete 444 */ 445 for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) { 446 usec_delay(10); 447 448 command = IXGBE_READ_REG(hw, IXGBE_MSCA); 449 450 if ((command & IXGBE_MSCA_MDI_COMMAND) == 0) 451 break; 452 } 453 454 if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) { 455 DEBUGOUT("PHY address cmd didn't complete\n"); 456 status = IXGBE_ERR_PHY; 457 } 458 } 459 460 ixgbe_release_swfw_sync(hw, gssr); 461 } 462 463 return status; 464 } 465 466 /** 467 * ixgbe_setup_phy_link_generic - Set and restart autoneg 468 * @hw: pointer to hardware structure 469 * 470 * Restart autonegotiation and PHY and waits for completion. 471 **/ 472 s32 ixgbe_setup_phy_link_generic(struct ixgbe_hw *hw) 473 { 474 s32 status = IXGBE_SUCCESS; 475 u32 time_out; 476 u32 max_time_out = 10; 477 u16 autoneg_reg = IXGBE_MII_AUTONEG_REG; 478 bool autoneg = FALSE; 479 ixgbe_link_speed speed; 480 481 DEBUGFUNC("ixgbe_setup_phy_link_generic"); 482 483 ixgbe_get_copper_link_capabilities_generic(hw, &speed, &autoneg); 484 485 if (speed & IXGBE_LINK_SPEED_10GB_FULL) { 486 /* Set or unset auto-negotiation 10G advertisement */ 487 hw->phy.ops.read_reg(hw, IXGBE_MII_10GBASE_T_AUTONEG_CTRL_REG, 488 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, 489 &autoneg_reg); 490 491 autoneg_reg &= ~IXGBE_MII_10GBASE_T_ADVERTISE; 492 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_10GB_FULL) 493 autoneg_reg |= IXGBE_MII_10GBASE_T_ADVERTISE; 494 495 hw->phy.ops.write_reg(hw, IXGBE_MII_10GBASE_T_AUTONEG_CTRL_REG, 496 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, 497 autoneg_reg); 498 } 499 500 if (speed & IXGBE_LINK_SPEED_1GB_FULL) { 501 /* Set or unset auto-negotiation 1G advertisement */ 502 hw->phy.ops.read_reg(hw, 503 IXGBE_MII_AUTONEG_VENDOR_PROVISION_1_REG, 504 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, 505 &autoneg_reg); 506 507 autoneg_reg &= ~IXGBE_MII_1GBASE_T_ADVERTISE; 508 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_1GB_FULL) 509 autoneg_reg |= IXGBE_MII_1GBASE_T_ADVERTISE; 510 511 hw->phy.ops.write_reg(hw, 512 IXGBE_MII_AUTONEG_VENDOR_PROVISION_1_REG, 513 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, 514 autoneg_reg); 515 } 516 517 if (speed & IXGBE_LINK_SPEED_100_FULL) { 518 /* Set or unset auto-negotiation 100M advertisement */ 519 hw->phy.ops.read_reg(hw, IXGBE_MII_AUTONEG_ADVERTISE_REG, 520 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, 521 &autoneg_reg); 522 523 autoneg_reg &= ~IXGBE_MII_100BASE_T_ADVERTISE; 524 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_100_FULL) 525 autoneg_reg |= IXGBE_MII_100BASE_T_ADVERTISE; 526 527 hw->phy.ops.write_reg(hw, IXGBE_MII_AUTONEG_ADVERTISE_REG, 528 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, 529 autoneg_reg); 530 } 531 532 /* Restart PHY autonegotiation and wait for completion */ 533 hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_CONTROL, 534 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, &autoneg_reg); 535 536 autoneg_reg |= IXGBE_MII_RESTART; 537 538 hw->phy.ops.write_reg(hw, IXGBE_MDIO_AUTO_NEG_CONTROL, 539 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, autoneg_reg); 540 541 /* Wait for autonegotiation to finish */ 542 for (time_out = 0; time_out < max_time_out; time_out++) { 543 usec_delay(10); 544 /* Restart PHY autonegotiation and wait for completion */ 545 status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_STATUS, 546 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, 547 &autoneg_reg); 548 549 autoneg_reg &= IXGBE_MII_AUTONEG_COMPLETE; 550 if (autoneg_reg == IXGBE_MII_AUTONEG_COMPLETE) { 551 break; 552 } 553 } 554 555 if (time_out == max_time_out) { 556 status = IXGBE_ERR_LINK_SETUP; 557 DEBUGOUT("ixgbe_setup_phy_link_generic: time out"); 558 } 559 560 return status; 561 } 562 563 /** 564 * ixgbe_setup_phy_link_speed_generic - Sets the auto advertised capabilities 565 * @hw: pointer to hardware structure 566 * @speed: new link speed 567 * @autoneg: TRUE if autonegotiation enabled 568 **/ 569 s32 ixgbe_setup_phy_link_speed_generic(struct ixgbe_hw *hw, 570 ixgbe_link_speed speed, 571 bool autoneg, 572 bool autoneg_wait_to_complete) 573 { 574 UNREFERENCED_PARAMETER(autoneg); 575 UNREFERENCED_PARAMETER(autoneg_wait_to_complete); 576 577 DEBUGFUNC("ixgbe_setup_phy_link_speed_generic"); 578 579 /* 580 * Clear autoneg_advertised and set new values based on input link 581 * speed. 582 */ 583 hw->phy.autoneg_advertised = 0; 584 585 if (speed & IXGBE_LINK_SPEED_10GB_FULL) 586 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_10GB_FULL; 587 588 if (speed & IXGBE_LINK_SPEED_1GB_FULL) 589 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_1GB_FULL; 590 591 if (speed & IXGBE_LINK_SPEED_100_FULL) 592 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_100_FULL; 593 594 /* Setup link based on the new speed settings */ 595 hw->phy.ops.setup_link(hw); 596 597 return IXGBE_SUCCESS; 598 } 599 600 /** 601 * ixgbe_get_copper_link_capabilities_generic - Determines link capabilities 602 * @hw: pointer to hardware structure 603 * @speed: pointer to link speed 604 * @autoneg: boolean auto-negotiation value 605 * 606 * Determines the link capabilities by reading the AUTOC register. 607 **/ 608 s32 ixgbe_get_copper_link_capabilities_generic(struct ixgbe_hw *hw, 609 ixgbe_link_speed *speed, 610 bool *autoneg) 611 { 612 s32 status = IXGBE_ERR_LINK_SETUP; 613 u16 speed_ability; 614 615 DEBUGFUNC("ixgbe_get_copper_link_capabilities_generic"); 616 617 *speed = 0; 618 *autoneg = TRUE; 619 620 status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_SPEED_ABILITY, 621 IXGBE_MDIO_PMA_PMD_DEV_TYPE, 622 &speed_ability); 623 624 if (status == IXGBE_SUCCESS) { 625 if (speed_ability & IXGBE_MDIO_PHY_SPEED_10G) 626 *speed |= IXGBE_LINK_SPEED_10GB_FULL; 627 if (speed_ability & IXGBE_MDIO_PHY_SPEED_1G) 628 *speed |= IXGBE_LINK_SPEED_1GB_FULL; 629 if (speed_ability & IXGBE_MDIO_PHY_SPEED_100M) 630 *speed |= IXGBE_LINK_SPEED_100_FULL; 631 } 632 633 return status; 634 } 635 636 /** 637 * ixgbe_check_phy_link_tnx - Determine link and speed status 638 * @hw: pointer to hardware structure 639 * 640 * Reads the VS1 register to determine if link is up and the current speed for 641 * the PHY. 642 **/ 643 s32 ixgbe_check_phy_link_tnx(struct ixgbe_hw *hw, ixgbe_link_speed *speed, 644 bool *link_up) 645 { 646 s32 status = IXGBE_SUCCESS; 647 u32 time_out; 648 u32 max_time_out = 10; 649 u16 phy_link = 0; 650 u16 phy_speed = 0; 651 u16 phy_data = 0; 652 653 DEBUGFUNC("ixgbe_check_phy_link_tnx"); 654 655 /* Initialize speed and link to default case */ 656 *link_up = FALSE; 657 *speed = IXGBE_LINK_SPEED_10GB_FULL; 658 659 /* 660 * Check current speed and link status of the PHY register. 661 * This is a vendor specific register and may have to 662 * be changed for other copper PHYs. 663 */ 664 for (time_out = 0; time_out < max_time_out; time_out++) { 665 usec_delay(10); 666 status = hw->phy.ops.read_reg(hw, 667 IXGBE_MDIO_VENDOR_SPECIFIC_1_STATUS, 668 IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE, 669 &phy_data); 670 phy_link = phy_data & 671 IXGBE_MDIO_VENDOR_SPECIFIC_1_LINK_STATUS; 672 phy_speed = phy_data & 673 IXGBE_MDIO_VENDOR_SPECIFIC_1_SPEED_STATUS; 674 if (phy_link == IXGBE_MDIO_VENDOR_SPECIFIC_1_LINK_STATUS) { 675 *link_up = TRUE; 676 if (phy_speed == 677 IXGBE_MDIO_VENDOR_SPECIFIC_1_SPEED_STATUS) 678 *speed = IXGBE_LINK_SPEED_1GB_FULL; 679 break; 680 } 681 } 682 683 return status; 684 } 685 686 /** 687 * ixgbe_setup_phy_link_tnx - Set and restart autoneg 688 * @hw: pointer to hardware structure 689 * 690 * Restart autonegotiation and PHY and waits for completion. 691 **/ 692 s32 ixgbe_setup_phy_link_tnx(struct ixgbe_hw *hw) 693 { 694 s32 status = IXGBE_SUCCESS; 695 u32 time_out; 696 u32 max_time_out = 10; 697 u16 autoneg_reg = IXGBE_MII_AUTONEG_REG; 698 bool autoneg = FALSE; 699 ixgbe_link_speed speed; 700 701 DEBUGFUNC("ixgbe_setup_phy_link_tnx"); 702 703 ixgbe_get_copper_link_capabilities_generic(hw, &speed, &autoneg); 704 705 if (speed & IXGBE_LINK_SPEED_10GB_FULL) { 706 /* Set or unset auto-negotiation 10G advertisement */ 707 hw->phy.ops.read_reg(hw, IXGBE_MII_10GBASE_T_AUTONEG_CTRL_REG, 708 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, 709 &autoneg_reg); 710 711 autoneg_reg &= ~IXGBE_MII_10GBASE_T_ADVERTISE; 712 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_10GB_FULL) 713 autoneg_reg |= IXGBE_MII_10GBASE_T_ADVERTISE; 714 715 hw->phy.ops.write_reg(hw, IXGBE_MII_10GBASE_T_AUTONEG_CTRL_REG, 716 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, 717 autoneg_reg); 718 } 719 720 if (speed & IXGBE_LINK_SPEED_1GB_FULL) { 721 /* Set or unset auto-negotiation 1G advertisement */ 722 hw->phy.ops.read_reg(hw, IXGBE_MII_AUTONEG_XNP_TX_REG, 723 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, 724 &autoneg_reg); 725 726 autoneg_reg &= ~IXGBE_MII_1GBASE_T_ADVERTISE_XNP_TX; 727 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_1GB_FULL) 728 autoneg_reg |= IXGBE_MII_1GBASE_T_ADVERTISE_XNP_TX; 729 730 hw->phy.ops.write_reg(hw, IXGBE_MII_AUTONEG_XNP_TX_REG, 731 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, 732 autoneg_reg); 733 } 734 735 if (speed & IXGBE_LINK_SPEED_100_FULL) { 736 /* Set or unset auto-negotiation 100M advertisement */ 737 hw->phy.ops.read_reg(hw, IXGBE_MII_AUTONEG_ADVERTISE_REG, 738 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, 739 &autoneg_reg); 740 741 autoneg_reg &= ~IXGBE_MII_100BASE_T_ADVERTISE; 742 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_100_FULL) 743 autoneg_reg |= IXGBE_MII_100BASE_T_ADVERTISE; 744 745 hw->phy.ops.write_reg(hw, IXGBE_MII_AUTONEG_ADVERTISE_REG, 746 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, 747 autoneg_reg); 748 } 749 750 /* Restart PHY autonegotiation and wait for completion */ 751 hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_CONTROL, 752 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, &autoneg_reg); 753 754 autoneg_reg |= IXGBE_MII_RESTART; 755 756 hw->phy.ops.write_reg(hw, IXGBE_MDIO_AUTO_NEG_CONTROL, 757 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, autoneg_reg); 758 759 /* Wait for autonegotiation to finish */ 760 for (time_out = 0; time_out < max_time_out; time_out++) { 761 usec_delay(10); 762 /* Restart PHY autonegotiation and wait for completion */ 763 status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_STATUS, 764 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, 765 &autoneg_reg); 766 767 autoneg_reg &= IXGBE_MII_AUTONEG_COMPLETE; 768 if (autoneg_reg == IXGBE_MII_AUTONEG_COMPLETE) { 769 break; 770 } 771 } 772 773 if (time_out == max_time_out) { 774 status = IXGBE_ERR_LINK_SETUP; 775 DEBUGOUT("ixgbe_setup_phy_link_tnx: time out"); 776 } 777 778 return status; 779 } 780 781 /** 782 * ixgbe_get_phy_firmware_version_tnx - Gets the PHY Firmware Version 783 * @hw: pointer to hardware structure 784 * @firmware_version: pointer to the PHY Firmware Version 785 **/ 786 s32 ixgbe_get_phy_firmware_version_tnx(struct ixgbe_hw *hw, 787 u16 *firmware_version) 788 { 789 s32 status = IXGBE_SUCCESS; 790 791 DEBUGFUNC("ixgbe_get_phy_firmware_version_tnx"); 792 793 status = hw->phy.ops.read_reg(hw, TNX_FW_REV, 794 IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE, 795 firmware_version); 796 797 return status; 798 } 799 800 /** 801 * ixgbe_get_phy_firmware_version_generic - Gets the PHY Firmware Version 802 * @hw: pointer to hardware structure 803 * @firmware_version: pointer to the PHY Firmware Version 804 **/ 805 s32 ixgbe_get_phy_firmware_version_generic(struct ixgbe_hw *hw, 806 u16 *firmware_version) 807 { 808 s32 status = IXGBE_SUCCESS; 809 810 DEBUGFUNC("ixgbe_get_phy_firmware_version_generic"); 811 812 status = hw->phy.ops.read_reg(hw, AQ_FW_REV, 813 IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE, 814 firmware_version); 815 816 return status; 817 } 818 819 /** 820 * ixgbe_reset_phy_nl - Performs a PHY reset 821 * @hw: pointer to hardware structure 822 **/ 823 s32 ixgbe_reset_phy_nl(struct ixgbe_hw *hw) 824 { 825 u16 phy_offset, control, eword, edata, block_crc; 826 bool end_data = FALSE; 827 u16 list_offset, data_offset; 828 u16 phy_data = 0; 829 s32 ret_val = IXGBE_SUCCESS; 830 u32 i; 831 832 DEBUGFUNC("ixgbe_reset_phy_nl"); 833 834 hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_XS_CONTROL, 835 IXGBE_MDIO_PHY_XS_DEV_TYPE, &phy_data); 836 837 /* reset the PHY and poll for completion */ 838 hw->phy.ops.write_reg(hw, IXGBE_MDIO_PHY_XS_CONTROL, 839 IXGBE_MDIO_PHY_XS_DEV_TYPE, 840 (phy_data | IXGBE_MDIO_PHY_XS_RESET)); 841 842 for (i = 0; i < 100; i++) { 843 hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_XS_CONTROL, 844 IXGBE_MDIO_PHY_XS_DEV_TYPE, &phy_data); 845 if ((phy_data & IXGBE_MDIO_PHY_XS_RESET) == 0) 846 break; 847 msec_delay(10); 848 } 849 850 if ((phy_data & IXGBE_MDIO_PHY_XS_RESET) != 0) { 851 DEBUGOUT("PHY reset did not complete.\n"); 852 ret_val = IXGBE_ERR_PHY; 853 goto out; 854 } 855 856 /* Get init offsets */ 857 ret_val = ixgbe_get_sfp_init_sequence_offsets(hw, &list_offset, 858 &data_offset); 859 if (ret_val != IXGBE_SUCCESS) 860 goto out; 861 862 ret_val = hw->eeprom.ops.read(hw, data_offset, &block_crc); 863 data_offset++; 864 while (!end_data) { 865 /* 866 * Read control word from PHY init contents offset 867 */ 868 ret_val = hw->eeprom.ops.read(hw, data_offset, &eword); 869 control = (eword & IXGBE_CONTROL_MASK_NL) >> 870 IXGBE_CONTROL_SHIFT_NL; 871 edata = eword & IXGBE_DATA_MASK_NL; 872 switch (control) { 873 case IXGBE_DELAY_NL: 874 data_offset++; 875 DEBUGOUT1("DELAY: %d MS\n", edata); 876 msec_delay(edata); 877 break; 878 case IXGBE_DATA_NL: 879 DEBUGOUT("DATA: \n"); 880 data_offset++; 881 hw->eeprom.ops.read(hw, data_offset++, 882 &phy_offset); 883 for (i = 0; i < edata; i++) { 884 hw->eeprom.ops.read(hw, data_offset, &eword); 885 hw->phy.ops.write_reg(hw, phy_offset, 886 IXGBE_TWINAX_DEV, eword); 887 DEBUGOUT2("Wrote %4.4x to %4.4x\n", eword, 888 phy_offset); 889 data_offset++; 890 phy_offset++; 891 } 892 break; 893 case IXGBE_CONTROL_NL: 894 data_offset++; 895 DEBUGOUT("CONTROL: \n"); 896 if (edata == IXGBE_CONTROL_EOL_NL) { 897 DEBUGOUT("EOL\n"); 898 end_data = TRUE; 899 } else if (edata == IXGBE_CONTROL_SOL_NL) { 900 DEBUGOUT("SOL\n"); 901 } else { 902 DEBUGOUT("Bad control value\n"); 903 ret_val = IXGBE_ERR_PHY; 904 goto out; 905 } 906 break; 907 default: 908 DEBUGOUT("Bad control type\n"); 909 ret_val = IXGBE_ERR_PHY; 910 goto out; 911 } 912 } 913 914 out: 915 return ret_val; 916 } 917 918 /** 919 * ixgbe_identify_sfp_module_generic - Identifies SFP modules 920 * @hw: pointer to hardware structure 921 * 922 * Searches for and identifies the SFP module and assigns appropriate PHY type. 923 **/ 924 s32 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw) 925 { 926 s32 status = IXGBE_ERR_PHY_ADDR_INVALID; 927 u32 vendor_oui = 0; 928 enum ixgbe_sfp_type stored_sfp_type = hw->phy.sfp_type; 929 u8 identifier = 0; 930 u8 comp_codes_1g = 0; 931 u8 comp_codes_10g = 0; 932 u8 oui_bytes[3] = {0, 0, 0}; 933 u8 cable_tech = 0; 934 u8 cable_spec = 0; 935 u16 enforce_sfp = 0; 936 937 DEBUGFUNC("ixgbe_identify_sfp_module_generic"); 938 939 if (hw->mac.ops.get_media_type(hw) != ixgbe_media_type_fiber) { 940 hw->phy.sfp_type = ixgbe_sfp_type_not_present; 941 status = IXGBE_ERR_SFP_NOT_PRESENT; 942 goto out; 943 } 944 945 status = hw->phy.ops.read_i2c_eeprom(hw, 946 IXGBE_SFF_IDENTIFIER, 947 &identifier); 948 949 if (status == IXGBE_ERR_SWFW_SYNC || 950 status == IXGBE_ERR_I2C || 951 status == IXGBE_ERR_SFP_NOT_PRESENT) 952 goto err_read_i2c_eeprom; 953 954 /* LAN ID is needed for sfp_type determination */ 955 hw->mac.ops.set_lan_id(hw); 956 957 if (identifier != IXGBE_SFF_IDENTIFIER_SFP) { 958 hw->phy.type = ixgbe_phy_sfp_unsupported; 959 status = IXGBE_ERR_SFP_NOT_SUPPORTED; 960 } else { 961 status = hw->phy.ops.read_i2c_eeprom(hw, 962 IXGBE_SFF_1GBE_COMP_CODES, 963 &comp_codes_1g); 964 965 if (status == IXGBE_ERR_SWFW_SYNC || 966 status == IXGBE_ERR_I2C || 967 status == IXGBE_ERR_SFP_NOT_PRESENT) 968 goto err_read_i2c_eeprom; 969 970 status = hw->phy.ops.read_i2c_eeprom(hw, 971 IXGBE_SFF_10GBE_COMP_CODES, 972 &comp_codes_10g); 973 974 if (status == IXGBE_ERR_SWFW_SYNC || 975 status == IXGBE_ERR_I2C || 976 status == IXGBE_ERR_SFP_NOT_PRESENT) 977 goto err_read_i2c_eeprom; 978 status = hw->phy.ops.read_i2c_eeprom(hw, 979 IXGBE_SFF_CABLE_TECHNOLOGY, 980 &cable_tech); 981 982 if (status == IXGBE_ERR_SWFW_SYNC || 983 status == IXGBE_ERR_I2C || 984 status == IXGBE_ERR_SFP_NOT_PRESENT) 985 goto err_read_i2c_eeprom; 986 987 /* ID Module 988 * ========= 989 * 0 SFP_DA_CU 990 * 1 SFP_SR 991 * 2 SFP_LR 992 * 3 SFP_DA_CORE0 - 82599-specific 993 * 4 SFP_DA_CORE1 - 82599-specific 994 * 5 SFP_SR/LR_CORE0 - 82599-specific 995 * 6 SFP_SR/LR_CORE1 - 82599-specific 996 * 7 SFP_act_lmt_DA_CORE0 - 82599-specific 997 * 8 SFP_act_lmt_DA_CORE1 - 82599-specific 998 * 9 SFP_1g_cu_CORE0 - 82599-specific 999 * 10 SFP_1g_cu_CORE1 - 82599-specific 1000 */ 1001 if (hw->mac.type == ixgbe_mac_82598EB) { 1002 if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE) 1003 hw->phy.sfp_type = ixgbe_sfp_type_da_cu; 1004 else if (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE) 1005 hw->phy.sfp_type = ixgbe_sfp_type_sr; 1006 else if (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE) 1007 hw->phy.sfp_type = ixgbe_sfp_type_lr; 1008 else 1009 hw->phy.sfp_type = ixgbe_sfp_type_unknown; 1010 } else if (hw->mac.type == ixgbe_mac_82599EB) { 1011 if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE) { 1012 if (hw->bus.lan_id == 0) 1013 hw->phy.sfp_type = 1014 ixgbe_sfp_type_da_cu_core0; 1015 else 1016 hw->phy.sfp_type = 1017 ixgbe_sfp_type_da_cu_core1; 1018 } else if (cable_tech & IXGBE_SFF_DA_ACTIVE_CABLE) { 1019 hw->phy.ops.read_i2c_eeprom( 1020 hw, IXGBE_SFF_CABLE_SPEC_COMP, 1021 &cable_spec); 1022 if (cable_spec & 1023 IXGBE_SFF_DA_SPEC_ACTIVE_LIMITING) { 1024 if (hw->bus.lan_id == 0) 1025 hw->phy.sfp_type = 1026 ixgbe_sfp_type_da_act_lmt_core0; 1027 else 1028 hw->phy.sfp_type = 1029 ixgbe_sfp_type_da_act_lmt_core1; 1030 } else { 1031 hw->phy.sfp_type = 1032 ixgbe_sfp_type_unknown; 1033 } 1034 } else if (comp_codes_10g & 1035 (IXGBE_SFF_10GBASESR_CAPABLE | 1036 IXGBE_SFF_10GBASELR_CAPABLE)) { 1037 if (hw->bus.lan_id == 0) 1038 hw->phy.sfp_type = 1039 ixgbe_sfp_type_srlr_core0; 1040 else 1041 hw->phy.sfp_type = 1042 ixgbe_sfp_type_srlr_core1; 1043 } else if (comp_codes_1g & IXGBE_SFF_1GBASET_CAPABLE) { 1044 if (hw->bus.lan_id == 0) 1045 hw->phy.sfp_type = 1046 ixgbe_sfp_type_1g_cu_core0; 1047 else 1048 hw->phy.sfp_type = 1049 ixgbe_sfp_type_1g_cu_core1; 1050 } else { 1051 hw->phy.sfp_type = ixgbe_sfp_type_unknown; 1052 } 1053 } 1054 1055 if (hw->phy.sfp_type != stored_sfp_type) 1056 hw->phy.sfp_setup_needed = TRUE; 1057 1058 /* Determine if the SFP+ PHY is dual speed or not. */ 1059 hw->phy.multispeed_fiber = FALSE; 1060 if (((comp_codes_1g & IXGBE_SFF_1GBASESX_CAPABLE) && 1061 (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)) || 1062 ((comp_codes_1g & IXGBE_SFF_1GBASELX_CAPABLE) && 1063 (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE))) 1064 hw->phy.multispeed_fiber = TRUE; 1065 1066 /* Determine PHY vendor */ 1067 if (hw->phy.type != ixgbe_phy_nl) { 1068 hw->phy.id = identifier; 1069 status = hw->phy.ops.read_i2c_eeprom(hw, 1070 IXGBE_SFF_VENDOR_OUI_BYTE0, 1071 &oui_bytes[0]); 1072 1073 if (status == IXGBE_ERR_SWFW_SYNC || 1074 status == IXGBE_ERR_I2C || 1075 status == IXGBE_ERR_SFP_NOT_PRESENT) 1076 goto err_read_i2c_eeprom; 1077 1078 status = hw->phy.ops.read_i2c_eeprom(hw, 1079 IXGBE_SFF_VENDOR_OUI_BYTE1, 1080 &oui_bytes[1]); 1081 1082 if (status == IXGBE_ERR_SWFW_SYNC || 1083 status == IXGBE_ERR_I2C || 1084 status == IXGBE_ERR_SFP_NOT_PRESENT) 1085 goto err_read_i2c_eeprom; 1086 1087 status = hw->phy.ops.read_i2c_eeprom(hw, 1088 IXGBE_SFF_VENDOR_OUI_BYTE2, 1089 &oui_bytes[2]); 1090 1091 if (status == IXGBE_ERR_SWFW_SYNC || 1092 status == IXGBE_ERR_I2C || 1093 status == IXGBE_ERR_SFP_NOT_PRESENT) 1094 goto err_read_i2c_eeprom; 1095 1096 vendor_oui = 1097 ((oui_bytes[0] << IXGBE_SFF_VENDOR_OUI_BYTE0_SHIFT) | 1098 (oui_bytes[1] << IXGBE_SFF_VENDOR_OUI_BYTE1_SHIFT) | 1099 (oui_bytes[2] << IXGBE_SFF_VENDOR_OUI_BYTE2_SHIFT)); 1100 1101 switch (vendor_oui) { 1102 case IXGBE_SFF_VENDOR_OUI_TYCO: 1103 if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE) 1104 hw->phy.type = 1105 ixgbe_phy_sfp_passive_tyco; 1106 break; 1107 case IXGBE_SFF_VENDOR_OUI_FTL: 1108 if (cable_tech & IXGBE_SFF_DA_ACTIVE_CABLE) 1109 hw->phy.type = ixgbe_phy_sfp_ftl_active; 1110 else 1111 hw->phy.type = ixgbe_phy_sfp_ftl; 1112 break; 1113 case IXGBE_SFF_VENDOR_OUI_AVAGO: 1114 hw->phy.type = ixgbe_phy_sfp_avago; 1115 break; 1116 case IXGBE_SFF_VENDOR_OUI_INTEL: 1117 hw->phy.type = ixgbe_phy_sfp_intel; 1118 break; 1119 default: 1120 if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE) 1121 hw->phy.type = 1122 ixgbe_phy_sfp_passive_unknown; 1123 else if (cable_tech & IXGBE_SFF_DA_ACTIVE_CABLE) 1124 hw->phy.type = 1125 ixgbe_phy_sfp_active_unknown; 1126 else 1127 hw->phy.type = ixgbe_phy_sfp_unknown; 1128 break; 1129 } 1130 } 1131 1132 /* Allow any DA cable vendor */ 1133 if (cable_tech & (IXGBE_SFF_DA_PASSIVE_CABLE | 1134 IXGBE_SFF_DA_ACTIVE_CABLE)) { 1135 status = IXGBE_SUCCESS; 1136 goto out; 1137 } 1138 1139 /* Verify supported 1G SFP modules */ 1140 if (comp_codes_10g == 0 && 1141 !(hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core1 || 1142 hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core0)) { 1143 hw->phy.type = ixgbe_phy_sfp_unsupported; 1144 status = IXGBE_ERR_SFP_NOT_SUPPORTED; 1145 goto out; 1146 } 1147 1148 /* Anything else 82598-based is supported */ 1149 if (hw->mac.type == ixgbe_mac_82598EB) { 1150 status = IXGBE_SUCCESS; 1151 goto out; 1152 } 1153 1154 ixgbe_get_device_caps(hw, &enforce_sfp); 1155 if (!(enforce_sfp & IXGBE_DEVICE_CAPS_ALLOW_ANY_SFP) && 1156 !((hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core0) || 1157 (hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core1))) { 1158 /* Make sure we're a supported PHY type */ 1159 if (hw->phy.type == ixgbe_phy_sfp_intel) { 1160 status = IXGBE_SUCCESS; 1161 } else { 1162 DEBUGOUT("SFP+ module not supported\n"); 1163 hw->phy.type = ixgbe_phy_sfp_unsupported; 1164 status = IXGBE_ERR_SFP_NOT_SUPPORTED; 1165 } 1166 } else { 1167 status = IXGBE_SUCCESS; 1168 } 1169 } 1170 1171 out: 1172 return status; 1173 1174 err_read_i2c_eeprom: 1175 hw->phy.sfp_type = ixgbe_sfp_type_not_present; 1176 if (hw->phy.type != ixgbe_phy_nl) { 1177 hw->phy.id = 0; 1178 hw->phy.type = ixgbe_phy_unknown; 1179 } 1180 return IXGBE_ERR_SFP_NOT_PRESENT; 1181 } 1182 1183 /** 1184 * ixgbe_get_sfp_init_sequence_offsets - Provides offset of PHY init sequence 1185 * @hw: pointer to hardware structure 1186 * @list_offset: offset to the SFP ID list 1187 * @data_offset: offset to the SFP data block 1188 * 1189 * Checks the MAC's EEPROM to see if it supports a given SFP+ module type, if 1190 * so it returns the offsets to the phy init sequence block. 1191 **/ 1192 s32 ixgbe_get_sfp_init_sequence_offsets(struct ixgbe_hw *hw, 1193 u16 *list_offset, 1194 u16 *data_offset) 1195 { 1196 u16 sfp_id; 1197 u16 sfp_type = hw->phy.sfp_type; 1198 1199 DEBUGFUNC("ixgbe_get_sfp_init_sequence_offsets"); 1200 1201 if (hw->phy.sfp_type == ixgbe_sfp_type_unknown) 1202 return IXGBE_ERR_SFP_NOT_SUPPORTED; 1203 1204 if (hw->phy.sfp_type == ixgbe_sfp_type_not_present) 1205 return IXGBE_ERR_SFP_NOT_PRESENT; 1206 1207 if ((hw->device_id == IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM) && 1208 (hw->phy.sfp_type == ixgbe_sfp_type_da_cu)) 1209 return IXGBE_ERR_SFP_NOT_SUPPORTED; 1210 1211 /* 1212 * Limiting active cables and 1G Phys must be initialized as 1213 * SR modules 1214 */ 1215 if (sfp_type == ixgbe_sfp_type_da_act_lmt_core0 || 1216 sfp_type == ixgbe_sfp_type_1g_cu_core0) 1217 sfp_type = ixgbe_sfp_type_srlr_core0; 1218 else if (sfp_type == ixgbe_sfp_type_da_act_lmt_core1 || 1219 sfp_type == ixgbe_sfp_type_1g_cu_core1) 1220 sfp_type = ixgbe_sfp_type_srlr_core1; 1221 1222 /* Read offset to PHY init contents */ 1223 hw->eeprom.ops.read(hw, IXGBE_PHY_INIT_OFFSET_NL, list_offset); 1224 1225 if ((!*list_offset) || (*list_offset == 0xFFFF)) 1226 return IXGBE_ERR_SFP_NO_INIT_SEQ_PRESENT; 1227 1228 /* Shift offset to first ID word */ 1229 (*list_offset)++; 1230 1231 /* 1232 * Find the matching SFP ID in the EEPROM 1233 * and program the init sequence 1234 */ 1235 hw->eeprom.ops.read(hw, *list_offset, &sfp_id); 1236 1237 while (sfp_id != IXGBE_PHY_INIT_END_NL) { 1238 if (sfp_id == sfp_type) { 1239 (*list_offset)++; 1240 hw->eeprom.ops.read(hw, *list_offset, data_offset); 1241 if ((!*data_offset) || (*data_offset == 0xFFFF)) { 1242 DEBUGOUT("SFP+ module not supported\n"); 1243 return IXGBE_ERR_SFP_NOT_SUPPORTED; 1244 } else { 1245 break; 1246 } 1247 } else { 1248 (*list_offset) += 2; 1249 if (hw->eeprom.ops.read(hw, *list_offset, &sfp_id)) 1250 return IXGBE_ERR_PHY; 1251 } 1252 } 1253 1254 if (sfp_id == IXGBE_PHY_INIT_END_NL) { 1255 DEBUGOUT("No matching SFP+ module found\n"); 1256 return IXGBE_ERR_SFP_NOT_SUPPORTED; 1257 } 1258 1259 return IXGBE_SUCCESS; 1260 } 1261 1262 /** 1263 * ixgbe_read_i2c_eeprom_generic - Reads 8 bit EEPROM word over I2C interface 1264 * @hw: pointer to hardware structure 1265 * @byte_offset: EEPROM byte offset to read 1266 * @eeprom_data: value read 1267 * 1268 * Performs byte read operation to SFP module's EEPROM over I2C interface. 1269 **/ 1270 s32 ixgbe_read_i2c_eeprom_generic(struct ixgbe_hw *hw, u8 byte_offset, 1271 u8 *eeprom_data) 1272 { 1273 DEBUGFUNC("ixgbe_read_i2c_eeprom_generic"); 1274 1275 return hw->phy.ops.read_i2c_byte(hw, byte_offset, 1276 IXGBE_I2C_EEPROM_DEV_ADDR, 1277 eeprom_data); 1278 } 1279 1280 /** 1281 * ixgbe_write_i2c_eeprom_generic - Writes 8 bit EEPROM word over I2C interface 1282 * @hw: pointer to hardware structure 1283 * @byte_offset: EEPROM byte offset to write 1284 * @eeprom_data: value to write 1285 * 1286 * Performs byte write operation to SFP module's EEPROM over I2C interface. 1287 **/ 1288 s32 ixgbe_write_i2c_eeprom_generic(struct ixgbe_hw *hw, u8 byte_offset, 1289 u8 eeprom_data) 1290 { 1291 DEBUGFUNC("ixgbe_write_i2c_eeprom_generic"); 1292 1293 return hw->phy.ops.write_i2c_byte(hw, byte_offset, 1294 IXGBE_I2C_EEPROM_DEV_ADDR, 1295 eeprom_data); 1296 } 1297 1298 /** 1299 * ixgbe_read_i2c_byte_generic - Reads 8 bit word over I2C 1300 * @hw: pointer to hardware structure 1301 * @byte_offset: byte offset to read 1302 * @data: value read 1303 * 1304 * Performs byte read operation to SFP module's EEPROM over I2C interface at 1305 * a specified deivce address. 1306 **/ 1307 s32 ixgbe_read_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset, 1308 u8 dev_addr, u8 *data) 1309 { 1310 s32 status = IXGBE_SUCCESS; 1311 u32 max_retry = 10; 1312 u32 retry = 0; 1313 u16 swfw_mask = 0; 1314 bool nack = 1; 1315 1316 DEBUGFUNC("ixgbe_read_i2c_byte_generic"); 1317 1318 if (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1) 1319 swfw_mask = IXGBE_GSSR_PHY1_SM; 1320 else 1321 swfw_mask = IXGBE_GSSR_PHY0_SM; 1322 1323 do { 1324 if (ixgbe_acquire_swfw_sync(hw, swfw_mask) != IXGBE_SUCCESS) { 1325 status = IXGBE_ERR_SWFW_SYNC; 1326 goto read_byte_out; 1327 } 1328 1329 ixgbe_i2c_start(hw); 1330 1331 /* Device Address and write indication */ 1332 status = ixgbe_clock_out_i2c_byte(hw, dev_addr); 1333 if (status != IXGBE_SUCCESS) 1334 goto fail; 1335 1336 status = ixgbe_get_i2c_ack(hw); 1337 if (status != IXGBE_SUCCESS) 1338 goto fail; 1339 1340 status = ixgbe_clock_out_i2c_byte(hw, byte_offset); 1341 if (status != IXGBE_SUCCESS) 1342 goto fail; 1343 1344 status = ixgbe_get_i2c_ack(hw); 1345 if (status != IXGBE_SUCCESS) 1346 goto fail; 1347 1348 ixgbe_i2c_start(hw); 1349 1350 /* Device Address and read indication */ 1351 status = ixgbe_clock_out_i2c_byte(hw, (dev_addr | 0x1)); 1352 if (status != IXGBE_SUCCESS) 1353 goto fail; 1354 1355 status = ixgbe_get_i2c_ack(hw); 1356 if (status != IXGBE_SUCCESS) 1357 goto fail; 1358 1359 status = ixgbe_clock_in_i2c_byte(hw, data); 1360 if (status != IXGBE_SUCCESS) 1361 goto fail; 1362 1363 status = ixgbe_clock_out_i2c_bit(hw, nack); 1364 if (status != IXGBE_SUCCESS) 1365 goto fail; 1366 1367 ixgbe_i2c_stop(hw); 1368 break; 1369 1370 fail: 1371 ixgbe_release_swfw_sync(hw, swfw_mask); 1372 msec_delay(100); 1373 ixgbe_i2c_bus_clear(hw); 1374 retry++; 1375 if (retry < max_retry) 1376 DEBUGOUT("I2C byte read error - Retrying.\n"); 1377 else 1378 DEBUGOUT("I2C byte read error.\n"); 1379 1380 } while (retry < max_retry); 1381 1382 ixgbe_release_swfw_sync(hw, swfw_mask); 1383 1384 read_byte_out: 1385 return status; 1386 } 1387 1388 /** 1389 * ixgbe_write_i2c_byte_generic - Writes 8 bit word over I2C 1390 * @hw: pointer to hardware structure 1391 * @byte_offset: byte offset to write 1392 * @data: value to write 1393 * 1394 * Performs byte write operation to SFP module's EEPROM over I2C interface at 1395 * a specified device address. 1396 **/ 1397 s32 ixgbe_write_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset, 1398 u8 dev_addr, u8 data) 1399 { 1400 s32 status = IXGBE_SUCCESS; 1401 u32 max_retry = 1; 1402 u32 retry = 0; 1403 u16 swfw_mask = 0; 1404 1405 DEBUGFUNC("ixgbe_write_i2c_byte_generic"); 1406 1407 if (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1) 1408 swfw_mask = IXGBE_GSSR_PHY1_SM; 1409 else 1410 swfw_mask = IXGBE_GSSR_PHY0_SM; 1411 1412 if (ixgbe_acquire_swfw_sync(hw, swfw_mask) != IXGBE_SUCCESS) { 1413 status = IXGBE_ERR_SWFW_SYNC; 1414 goto write_byte_out; 1415 } 1416 1417 do { 1418 ixgbe_i2c_start(hw); 1419 1420 status = ixgbe_clock_out_i2c_byte(hw, dev_addr); 1421 if (status != IXGBE_SUCCESS) 1422 goto fail; 1423 1424 status = ixgbe_get_i2c_ack(hw); 1425 if (status != IXGBE_SUCCESS) 1426 goto fail; 1427 1428 status = ixgbe_clock_out_i2c_byte(hw, byte_offset); 1429 if (status != IXGBE_SUCCESS) 1430 goto fail; 1431 1432 status = ixgbe_get_i2c_ack(hw); 1433 if (status != IXGBE_SUCCESS) 1434 goto fail; 1435 1436 status = ixgbe_clock_out_i2c_byte(hw, data); 1437 if (status != IXGBE_SUCCESS) 1438 goto fail; 1439 1440 status = ixgbe_get_i2c_ack(hw); 1441 if (status != IXGBE_SUCCESS) 1442 goto fail; 1443 1444 ixgbe_i2c_stop(hw); 1445 break; 1446 1447 fail: 1448 ixgbe_i2c_bus_clear(hw); 1449 retry++; 1450 if (retry < max_retry) 1451 DEBUGOUT("I2C byte write error - Retrying.\n"); 1452 else 1453 DEBUGOUT("I2C byte write error.\n"); 1454 } while (retry < max_retry); 1455 1456 ixgbe_release_swfw_sync(hw, swfw_mask); 1457 1458 write_byte_out: 1459 return status; 1460 } 1461 1462 /** 1463 * ixgbe_i2c_start - Sets I2C start condition 1464 * @hw: pointer to hardware structure 1465 * 1466 * Sets I2C start condition (High -> Low on SDA while SCL is High) 1467 **/ 1468 static void ixgbe_i2c_start(struct ixgbe_hw *hw) 1469 { 1470 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL); 1471 1472 DEBUGFUNC("ixgbe_i2c_start"); 1473 1474 /* Start condition must begin with data and clock high */ 1475 ixgbe_set_i2c_data(hw, &i2cctl, 1); 1476 ixgbe_raise_i2c_clk(hw, &i2cctl); 1477 1478 /* Setup time for start condition (4.7us) */ 1479 usec_delay(IXGBE_I2C_T_SU_STA); 1480 1481 ixgbe_set_i2c_data(hw, &i2cctl, 0); 1482 1483 /* Hold time for start condition (4us) */ 1484 usec_delay(IXGBE_I2C_T_HD_STA); 1485 1486 ixgbe_lower_i2c_clk(hw, &i2cctl); 1487 1488 /* Minimum low period of clock is 4.7 us */ 1489 usec_delay(IXGBE_I2C_T_LOW); 1490 1491 } 1492 1493 /** 1494 * ixgbe_i2c_stop - Sets I2C stop condition 1495 * @hw: pointer to hardware structure 1496 * 1497 * Sets I2C stop condition (Low -> High on SDA while SCL is High) 1498 **/ 1499 static void ixgbe_i2c_stop(struct ixgbe_hw *hw) 1500 { 1501 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL); 1502 1503 DEBUGFUNC("ixgbe_i2c_stop"); 1504 1505 /* Stop condition must begin with data low and clock high */ 1506 ixgbe_set_i2c_data(hw, &i2cctl, 0); 1507 ixgbe_raise_i2c_clk(hw, &i2cctl); 1508 1509 /* Setup time for stop condition (4us) */ 1510 usec_delay(IXGBE_I2C_T_SU_STO); 1511 1512 ixgbe_set_i2c_data(hw, &i2cctl, 1); 1513 1514 /* bus free time between stop and start (4.7us)*/ 1515 usec_delay(IXGBE_I2C_T_BUF); 1516 } 1517 1518 /** 1519 * ixgbe_clock_in_i2c_byte - Clocks in one byte via I2C 1520 * @hw: pointer to hardware structure 1521 * @data: data byte to clock in 1522 * 1523 * Clocks in one byte data via I2C data/clock 1524 **/ 1525 static s32 ixgbe_clock_in_i2c_byte(struct ixgbe_hw *hw, u8 *data) 1526 { 1527 s32 status = IXGBE_SUCCESS; 1528 s32 i; 1529 bool bit = 0; 1530 1531 DEBUGFUNC("ixgbe_clock_in_i2c_byte"); 1532 1533 for (i = 7; i >= 0; i--) { 1534 status = ixgbe_clock_in_i2c_bit(hw, &bit); 1535 *data |= bit << i; 1536 1537 if (status != IXGBE_SUCCESS) 1538 break; 1539 } 1540 1541 return status; 1542 } 1543 1544 /** 1545 * ixgbe_clock_out_i2c_byte - Clocks out one byte via I2C 1546 * @hw: pointer to hardware structure 1547 * @data: data byte clocked out 1548 * 1549 * Clocks out one byte data via I2C data/clock 1550 **/ 1551 static s32 ixgbe_clock_out_i2c_byte(struct ixgbe_hw *hw, u8 data) 1552 { 1553 s32 status = IXGBE_SUCCESS; 1554 s32 i; 1555 u32 i2cctl; 1556 bool bit = 0; 1557 1558 DEBUGFUNC("ixgbe_clock_out_i2c_byte"); 1559 1560 for (i = 7; i >= 0; i--) { 1561 bit = (data >> i) & 0x1; 1562 status = ixgbe_clock_out_i2c_bit(hw, bit); 1563 1564 if (status != IXGBE_SUCCESS) 1565 break; 1566 } 1567 1568 /* Release SDA line (set high) */ 1569 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL); 1570 i2cctl |= IXGBE_I2C_DATA_OUT; 1571 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, i2cctl); 1572 1573 return status; 1574 } 1575 1576 /** 1577 * ixgbe_get_i2c_ack - Polls for I2C ACK 1578 * @hw: pointer to hardware structure 1579 * 1580 * Clocks in/out one bit via I2C data/clock 1581 **/ 1582 static s32 ixgbe_get_i2c_ack(struct ixgbe_hw *hw) 1583 { 1584 s32 status; 1585 u32 i = 0; 1586 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL); 1587 u32 timeout = 10; 1588 bool ack = 1; 1589 1590 DEBUGFUNC("ixgbe_get_i2c_ack"); 1591 1592 status = ixgbe_raise_i2c_clk(hw, &i2cctl); 1593 1594 if (status != IXGBE_SUCCESS) 1595 goto out; 1596 1597 /* Minimum high period of clock is 4us */ 1598 usec_delay(IXGBE_I2C_T_HIGH); 1599 1600 /* Poll for ACK. Note that ACK in I2C spec is 1601 * transition from 1 to 0 */ 1602 for (i = 0; i < timeout; i++) { 1603 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL); 1604 ack = ixgbe_get_i2c_data(&i2cctl); 1605 1606 usec_delay(1); 1607 if (ack == 0) 1608 break; 1609 } 1610 1611 if (ack == 1) { 1612 DEBUGOUT("I2C ack was not received.\n"); 1613 status = IXGBE_ERR_I2C; 1614 } 1615 1616 ixgbe_lower_i2c_clk(hw, &i2cctl); 1617 1618 /* Minimum low period of clock is 4.7 us */ 1619 usec_delay(IXGBE_I2C_T_LOW); 1620 1621 out: 1622 return status; 1623 } 1624 1625 /** 1626 * ixgbe_clock_in_i2c_bit - Clocks in one bit via I2C data/clock 1627 * @hw: pointer to hardware structure 1628 * @data: read data value 1629 * 1630 * Clocks in one bit via I2C data/clock 1631 **/ 1632 static s32 ixgbe_clock_in_i2c_bit(struct ixgbe_hw *hw, bool *data) 1633 { 1634 s32 status; 1635 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL); 1636 1637 DEBUGFUNC("ixgbe_clock_in_i2c_bit"); 1638 1639 status = ixgbe_raise_i2c_clk(hw, &i2cctl); 1640 1641 /* Minimum high period of clock is 4us */ 1642 usec_delay(IXGBE_I2C_T_HIGH); 1643 1644 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL); 1645 *data = ixgbe_get_i2c_data(&i2cctl); 1646 1647 ixgbe_lower_i2c_clk(hw, &i2cctl); 1648 1649 /* Minimum low period of clock is 4.7 us */ 1650 usec_delay(IXGBE_I2C_T_LOW); 1651 1652 return status; 1653 } 1654 1655 /** 1656 * ixgbe_clock_out_i2c_bit - Clocks in/out one bit via I2C data/clock 1657 * @hw: pointer to hardware structure 1658 * @data: data value to write 1659 * 1660 * Clocks out one bit via I2C data/clock 1661 **/ 1662 static s32 ixgbe_clock_out_i2c_bit(struct ixgbe_hw *hw, bool data) 1663 { 1664 s32 status; 1665 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL); 1666 1667 DEBUGFUNC("ixgbe_clock_out_i2c_bit"); 1668 1669 status = ixgbe_set_i2c_data(hw, &i2cctl, data); 1670 if (status == IXGBE_SUCCESS) { 1671 status = ixgbe_raise_i2c_clk(hw, &i2cctl); 1672 1673 /* Minimum high period of clock is 4us */ 1674 usec_delay(IXGBE_I2C_T_HIGH); 1675 1676 ixgbe_lower_i2c_clk(hw, &i2cctl); 1677 1678 /* Minimum low period of clock is 4.7 us. 1679 * This also takes care of the data hold time. 1680 */ 1681 usec_delay(IXGBE_I2C_T_LOW); 1682 } else { 1683 status = IXGBE_ERR_I2C; 1684 DEBUGOUT1("I2C data was not set to %X\n", data); 1685 } 1686 1687 return status; 1688 } 1689 /** 1690 * ixgbe_raise_i2c_clk - Raises the I2C SCL clock 1691 * @hw: pointer to hardware structure 1692 * @i2cctl: Current value of I2CCTL register 1693 * 1694 * Raises the I2C clock line '0'->'1' 1695 **/ 1696 static s32 ixgbe_raise_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl) 1697 { 1698 s32 status = IXGBE_SUCCESS; 1699 1700 DEBUGFUNC("ixgbe_raise_i2c_clk"); 1701 1702 *i2cctl |= IXGBE_I2C_CLK_OUT; 1703 1704 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, *i2cctl); 1705 1706 /* SCL rise time (1000ns) */ 1707 usec_delay(IXGBE_I2C_T_RISE); 1708 1709 return status; 1710 } 1711 1712 /** 1713 * ixgbe_lower_i2c_clk - Lowers the I2C SCL clock 1714 * @hw: pointer to hardware structure 1715 * @i2cctl: Current value of I2CCTL register 1716 * 1717 * Lowers the I2C clock line '1'->'0' 1718 **/ 1719 static void ixgbe_lower_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl) 1720 { 1721 1722 DEBUGFUNC("ixgbe_lower_i2c_clk"); 1723 1724 *i2cctl &= ~IXGBE_I2C_CLK_OUT; 1725 1726 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, *i2cctl); 1727 1728 /* SCL fall time (300ns) */ 1729 usec_delay(IXGBE_I2C_T_FALL); 1730 } 1731 1732 /** 1733 * ixgbe_set_i2c_data - Sets the I2C data bit 1734 * @hw: pointer to hardware structure 1735 * @i2cctl: Current value of I2CCTL register 1736 * @data: I2C data value (0 or 1) to set 1737 * 1738 * Sets the I2C data bit 1739 **/ 1740 static s32 ixgbe_set_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl, bool data) 1741 { 1742 s32 status = IXGBE_SUCCESS; 1743 1744 DEBUGFUNC("ixgbe_set_i2c_data"); 1745 1746 if (data) 1747 *i2cctl |= IXGBE_I2C_DATA_OUT; 1748 else 1749 *i2cctl &= ~IXGBE_I2C_DATA_OUT; 1750 1751 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, *i2cctl); 1752 1753 /* Data rise/fall (1000ns/300ns) and set-up time (250ns) */ 1754 usec_delay(IXGBE_I2C_T_RISE + IXGBE_I2C_T_FALL + IXGBE_I2C_T_SU_DATA); 1755 1756 /* Verify data was set correctly */ 1757 *i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL); 1758 if (data != ixgbe_get_i2c_data(i2cctl)) { 1759 status = IXGBE_ERR_I2C; 1760 DEBUGOUT1("Error - I2C data was not set to %X.\n", data); 1761 } 1762 1763 return status; 1764 } 1765 1766 /** 1767 * ixgbe_get_i2c_data - Reads the I2C SDA data bit 1768 * @hw: pointer to hardware structure 1769 * @i2cctl: Current value of I2CCTL register 1770 * 1771 * Returns the I2C data bit value 1772 **/ 1773 static bool ixgbe_get_i2c_data(u32 *i2cctl) 1774 { 1775 bool data; 1776 1777 DEBUGFUNC("ixgbe_get_i2c_data"); 1778 1779 if (*i2cctl & IXGBE_I2C_DATA_IN) 1780 data = 1; 1781 else 1782 data = 0; 1783 1784 return data; 1785 } 1786 1787 /** 1788 * ixgbe_i2c_bus_clear - Clears the I2C bus 1789 * @hw: pointer to hardware structure 1790 * 1791 * Clears the I2C bus by sending nine clock pulses. 1792 * Used when data line is stuck low. 1793 **/ 1794 void ixgbe_i2c_bus_clear(struct ixgbe_hw *hw) 1795 { 1796 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL); 1797 u32 i; 1798 1799 DEBUGFUNC("ixgbe_i2c_bus_clear"); 1800 1801 ixgbe_i2c_start(hw); 1802 1803 ixgbe_set_i2c_data(hw, &i2cctl, 1); 1804 1805 for (i = 0; i < 9; i++) { 1806 ixgbe_raise_i2c_clk(hw, &i2cctl); 1807 1808 /* Min high period of clock is 4us */ 1809 usec_delay(IXGBE_I2C_T_HIGH); 1810 1811 ixgbe_lower_i2c_clk(hw, &i2cctl); 1812 1813 /* Min low period of clock is 4.7us*/ 1814 usec_delay(IXGBE_I2C_T_LOW); 1815 } 1816 1817 ixgbe_i2c_start(hw); 1818 1819 /* Put the i2c bus back to default state */ 1820 ixgbe_i2c_stop(hw); 1821 } 1822 1823 /** 1824 * ixgbe_tn_check_overtemp - Checks if an overtemp occured. 1825 * @hw: pointer to hardware structure 1826 * 1827 * Checks if the LASI temp alarm status was triggered due to overtemp 1828 **/ 1829 s32 ixgbe_tn_check_overtemp(struct ixgbe_hw *hw) 1830 { 1831 s32 status = IXGBE_SUCCESS; 1832 u16 phy_data = 0; 1833 1834 DEBUGFUNC("ixgbe_tn_check_overtemp"); 1835 1836 if (hw->device_id != IXGBE_DEV_ID_82599_T3_LOM) 1837 goto out; 1838 1839 /* Check that the LASI temp alarm status was triggered */ 1840 hw->phy.ops.read_reg(hw, IXGBE_TN_LASI_STATUS_REG, 1841 IXGBE_MDIO_PMA_PMD_DEV_TYPE, &phy_data); 1842 1843 if (!(phy_data & IXGBE_TN_LASI_STATUS_TEMP_ALARM)) 1844 goto out; 1845 1846 status = IXGBE_ERR_OVERTEMP; 1847 out: 1848 return status; 1849 } 1850