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