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