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