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