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