root/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. ixgbe_out_i2c_byte_ack
  2. ixgbe_in_i2c_byte_ack
  3. ixgbe_ones_comp_byte_add
  4. ixgbe_read_i2c_combined_generic_int
  5. ixgbe_write_i2c_combined_generic_int
  6. ixgbe_probe_phy
  7. ixgbe_identify_phy_generic
  8. ixgbe_check_reset_blocked
  9. ixgbe_get_phy_id
  10. ixgbe_get_phy_type_from_id
  11. ixgbe_reset_phy_generic
  12. ixgbe_read_phy_reg_mdi
  13. ixgbe_read_phy_reg_generic
  14. ixgbe_write_phy_reg_mdi
  15. ixgbe_write_phy_reg_generic
  16. ixgbe_msca_cmd
  17. ixgbe_mii_bus_read_generic
  18. ixgbe_mii_bus_write_generic
  19. ixgbe_mii_bus_read
  20. ixgbe_mii_bus_write
  21. ixgbe_x550em_a_mii_bus_read
  22. ixgbe_x550em_a_mii_bus_write
  23. ixgbe_get_first_secondary_devfn
  24. ixgbe_x550em_a_has_mii
  25. ixgbe_mii_bus_init
  26. ixgbe_setup_phy_link_generic
  27. ixgbe_setup_phy_link_speed_generic
  28. ixgbe_get_copper_speeds_supported
  29. ixgbe_get_copper_link_capabilities_generic
  30. ixgbe_check_phy_link_tnx
  31. ixgbe_setup_phy_link_tnx
  32. ixgbe_reset_phy_nl
  33. ixgbe_identify_module_generic
  34. ixgbe_identify_sfp_module_generic
  35. ixgbe_identify_qsfp_module_generic
  36. ixgbe_get_sfp_init_sequence_offsets
  37. ixgbe_read_i2c_eeprom_generic
  38. ixgbe_read_i2c_sff8472_generic
  39. ixgbe_write_i2c_eeprom_generic
  40. ixgbe_is_sfp_probe
  41. ixgbe_read_i2c_byte_generic_int
  42. ixgbe_read_i2c_byte_generic
  43. ixgbe_read_i2c_byte_generic_unlocked
  44. ixgbe_write_i2c_byte_generic_int
  45. ixgbe_write_i2c_byte_generic
  46. ixgbe_write_i2c_byte_generic_unlocked
  47. ixgbe_i2c_start
  48. ixgbe_i2c_stop
  49. ixgbe_clock_in_i2c_byte
  50. ixgbe_clock_out_i2c_byte
  51. ixgbe_get_i2c_ack
  52. ixgbe_clock_in_i2c_bit
  53. ixgbe_clock_out_i2c_bit
  54. ixgbe_raise_i2c_clk
  55. ixgbe_lower_i2c_clk
  56. ixgbe_set_i2c_data
  57. ixgbe_get_i2c_data
  58. ixgbe_i2c_bus_clear
  59. ixgbe_tn_check_overtemp
  60. ixgbe_set_copper_phy_power

   1 // SPDX-License-Identifier: GPL-2.0
   2 /* Copyright(c) 1999 - 2018 Intel Corporation. */
   3 
   4 #include <linux/pci.h>
   5 #include <linux/delay.h>
   6 #include <linux/iopoll.h>
   7 #include <linux/sched.h>
   8 
   9 #include "ixgbe.h"
  10 #include "ixgbe_phy.h"
  11 
  12 static void ixgbe_i2c_start(struct ixgbe_hw *hw);
  13 static void ixgbe_i2c_stop(struct ixgbe_hw *hw);
  14 static s32 ixgbe_clock_in_i2c_byte(struct ixgbe_hw *hw, u8 *data);
  15 static s32 ixgbe_clock_out_i2c_byte(struct ixgbe_hw *hw, u8 data);
  16 static s32 ixgbe_get_i2c_ack(struct ixgbe_hw *hw);
  17 static s32 ixgbe_clock_in_i2c_bit(struct ixgbe_hw *hw, bool *data);
  18 static s32 ixgbe_clock_out_i2c_bit(struct ixgbe_hw *hw, bool data);
  19 static void ixgbe_raise_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl);
  20 static void ixgbe_lower_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl);
  21 static s32 ixgbe_set_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl, bool data);
  22 static bool ixgbe_get_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl);
  23 static void ixgbe_i2c_bus_clear(struct ixgbe_hw *hw);
  24 static enum ixgbe_phy_type ixgbe_get_phy_type_from_id(u32 phy_id);
  25 static s32 ixgbe_get_phy_id(struct ixgbe_hw *hw);
  26 static s32 ixgbe_identify_qsfp_module_generic(struct ixgbe_hw *hw);
  27 
  28 /**
  29  *  ixgbe_out_i2c_byte_ack - Send I2C byte with ack
  30  *  @hw: pointer to the hardware structure
  31  *  @byte: byte to send
  32  *
  33  *  Returns an error code on error.
  34  **/
  35 static s32 ixgbe_out_i2c_byte_ack(struct ixgbe_hw *hw, u8 byte)
  36 {
  37         s32 status;
  38 
  39         status = ixgbe_clock_out_i2c_byte(hw, byte);
  40         if (status)
  41                 return status;
  42         return ixgbe_get_i2c_ack(hw);
  43 }
  44 
  45 /**
  46  *  ixgbe_in_i2c_byte_ack - Receive an I2C byte and send ack
  47  *  @hw: pointer to the hardware structure
  48  *  @byte: pointer to a u8 to receive the byte
  49  *
  50  *  Returns an error code on error.
  51  **/
  52 static s32 ixgbe_in_i2c_byte_ack(struct ixgbe_hw *hw, u8 *byte)
  53 {
  54         s32 status;
  55 
  56         status = ixgbe_clock_in_i2c_byte(hw, byte);
  57         if (status)
  58                 return status;
  59         /* ACK */
  60         return ixgbe_clock_out_i2c_bit(hw, false);
  61 }
  62 
  63 /**
  64  *  ixgbe_ones_comp_byte_add - Perform one's complement addition
  65  *  @add1: addend 1
  66  *  @add2: addend 2
  67  *
  68  *  Returns one's complement 8-bit sum.
  69  **/
  70 static u8 ixgbe_ones_comp_byte_add(u8 add1, u8 add2)
  71 {
  72         u16 sum = add1 + add2;
  73 
  74         sum = (sum & 0xFF) + (sum >> 8);
  75         return sum & 0xFF;
  76 }
  77 
  78 /**
  79  *  ixgbe_read_i2c_combined_generic_int - Perform I2C read combined operation
  80  *  @hw: pointer to the hardware structure
  81  *  @addr: I2C bus address to read from
  82  *  @reg: I2C device register to read from
  83  *  @val: pointer to location to receive read value
  84  *  @lock: true if to take and release semaphore
  85  *
  86  *  Returns an error code on error.
  87  */
  88 s32 ixgbe_read_i2c_combined_generic_int(struct ixgbe_hw *hw, u8 addr,
  89                                         u16 reg, u16 *val, bool lock)
  90 {
  91         u32 swfw_mask = hw->phy.phy_semaphore_mask;
  92         int max_retry = 3;
  93         int retry = 0;
  94         u8 csum_byte;
  95         u8 high_bits;
  96         u8 low_bits;
  97         u8 reg_high;
  98         u8 csum;
  99 
 100         reg_high = ((reg >> 7) & 0xFE) | 1;     /* Indicate read combined */
 101         csum = ixgbe_ones_comp_byte_add(reg_high, reg & 0xFF);
 102         csum = ~csum;
 103         do {
 104                 if (lock && hw->mac.ops.acquire_swfw_sync(hw, swfw_mask))
 105                         return IXGBE_ERR_SWFW_SYNC;
 106                 ixgbe_i2c_start(hw);
 107                 /* Device Address and write indication */
 108                 if (ixgbe_out_i2c_byte_ack(hw, addr))
 109                         goto fail;
 110                 /* Write bits 14:8 */
 111                 if (ixgbe_out_i2c_byte_ack(hw, reg_high))
 112                         goto fail;
 113                 /* Write bits 7:0 */
 114                 if (ixgbe_out_i2c_byte_ack(hw, reg & 0xFF))
 115                         goto fail;
 116                 /* Write csum */
 117                 if (ixgbe_out_i2c_byte_ack(hw, csum))
 118                         goto fail;
 119                 /* Re-start condition */
 120                 ixgbe_i2c_start(hw);
 121                 /* Device Address and read indication */
 122                 if (ixgbe_out_i2c_byte_ack(hw, addr | 1))
 123                         goto fail;
 124                 /* Get upper bits */
 125                 if (ixgbe_in_i2c_byte_ack(hw, &high_bits))
 126                         goto fail;
 127                 /* Get low bits */
 128                 if (ixgbe_in_i2c_byte_ack(hw, &low_bits))
 129                         goto fail;
 130                 /* Get csum */
 131                 if (ixgbe_clock_in_i2c_byte(hw, &csum_byte))
 132                         goto fail;
 133                 /* NACK */
 134                 if (ixgbe_clock_out_i2c_bit(hw, false))
 135                         goto fail;
 136                 ixgbe_i2c_stop(hw);
 137                 if (lock)
 138                         hw->mac.ops.release_swfw_sync(hw, swfw_mask);
 139                 *val = (high_bits << 8) | low_bits;
 140                 return 0;
 141 
 142 fail:
 143                 ixgbe_i2c_bus_clear(hw);
 144                 if (lock)
 145                         hw->mac.ops.release_swfw_sync(hw, swfw_mask);
 146                 retry++;
 147                 if (retry < max_retry)
 148                         hw_dbg(hw, "I2C byte read combined error - Retry.\n");
 149                 else
 150                         hw_dbg(hw, "I2C byte read combined error.\n");
 151         } while (retry < max_retry);
 152 
 153         return IXGBE_ERR_I2C;
 154 }
 155 
 156 /**
 157  *  ixgbe_write_i2c_combined_generic_int - Perform I2C write combined operation
 158  *  @hw: pointer to the hardware structure
 159  *  @addr: I2C bus address to write to
 160  *  @reg: I2C device register to write to
 161  *  @val: value to write
 162  *  @lock: true if to take and release semaphore
 163  *
 164  *  Returns an error code on error.
 165  */
 166 s32 ixgbe_write_i2c_combined_generic_int(struct ixgbe_hw *hw, u8 addr,
 167                                          u16 reg, u16 val, bool lock)
 168 {
 169         u32 swfw_mask = hw->phy.phy_semaphore_mask;
 170         int max_retry = 1;
 171         int retry = 0;
 172         u8 reg_high;
 173         u8 csum;
 174 
 175         reg_high = (reg >> 7) & 0xFE;   /* Indicate write combined */
 176         csum = ixgbe_ones_comp_byte_add(reg_high, reg & 0xFF);
 177         csum = ixgbe_ones_comp_byte_add(csum, val >> 8);
 178         csum = ixgbe_ones_comp_byte_add(csum, val & 0xFF);
 179         csum = ~csum;
 180         do {
 181                 if (lock && hw->mac.ops.acquire_swfw_sync(hw, swfw_mask))
 182                         return IXGBE_ERR_SWFW_SYNC;
 183                 ixgbe_i2c_start(hw);
 184                 /* Device Address and write indication */
 185                 if (ixgbe_out_i2c_byte_ack(hw, addr))
 186                         goto fail;
 187                 /* Write bits 14:8 */
 188                 if (ixgbe_out_i2c_byte_ack(hw, reg_high))
 189                         goto fail;
 190                 /* Write bits 7:0 */
 191                 if (ixgbe_out_i2c_byte_ack(hw, reg & 0xFF))
 192                         goto fail;
 193                 /* Write data 15:8 */
 194                 if (ixgbe_out_i2c_byte_ack(hw, val >> 8))
 195                         goto fail;
 196                 /* Write data 7:0 */
 197                 if (ixgbe_out_i2c_byte_ack(hw, val & 0xFF))
 198                         goto fail;
 199                 /* Write csum */
 200                 if (ixgbe_out_i2c_byte_ack(hw, csum))
 201                         goto fail;
 202                 ixgbe_i2c_stop(hw);
 203                 if (lock)
 204                         hw->mac.ops.release_swfw_sync(hw, swfw_mask);
 205                 return 0;
 206 
 207 fail:
 208                 ixgbe_i2c_bus_clear(hw);
 209                 if (lock)
 210                         hw->mac.ops.release_swfw_sync(hw, swfw_mask);
 211                 retry++;
 212                 if (retry < max_retry)
 213                         hw_dbg(hw, "I2C byte write combined error - Retry.\n");
 214                 else
 215                         hw_dbg(hw, "I2C byte write combined error.\n");
 216         } while (retry < max_retry);
 217 
 218         return IXGBE_ERR_I2C;
 219 }
 220 
 221 /**
 222  *  ixgbe_probe_phy - Probe a single address for a PHY
 223  *  @hw: pointer to hardware structure
 224  *  @phy_addr: PHY address to probe
 225  *
 226  *  Returns true if PHY found
 227  **/
 228 static bool ixgbe_probe_phy(struct ixgbe_hw *hw, u16 phy_addr)
 229 {
 230         u16 ext_ability = 0;
 231 
 232         hw->phy.mdio.prtad = phy_addr;
 233         if (mdio45_probe(&hw->phy.mdio, phy_addr) != 0)
 234                 return false;
 235 
 236         if (ixgbe_get_phy_id(hw))
 237                 return false;
 238 
 239         hw->phy.type = ixgbe_get_phy_type_from_id(hw->phy.id);
 240 
 241         if (hw->phy.type == ixgbe_phy_unknown) {
 242                 hw->phy.ops.read_reg(hw,
 243                                      MDIO_PMA_EXTABLE,
 244                                      MDIO_MMD_PMAPMD,
 245                                      &ext_ability);
 246                 if (ext_ability &
 247                     (MDIO_PMA_EXTABLE_10GBT |
 248                      MDIO_PMA_EXTABLE_1000BT))
 249                         hw->phy.type = ixgbe_phy_cu_unknown;
 250                 else
 251                         hw->phy.type = ixgbe_phy_generic;
 252         }
 253 
 254         return true;
 255 }
 256 
 257 /**
 258  *  ixgbe_identify_phy_generic - Get physical layer module
 259  *  @hw: pointer to hardware structure
 260  *
 261  *  Determines the physical layer module found on the current adapter.
 262  **/
 263 s32 ixgbe_identify_phy_generic(struct ixgbe_hw *hw)
 264 {
 265         u32 phy_addr;
 266         u32 status = IXGBE_ERR_PHY_ADDR_INVALID;
 267 
 268         if (!hw->phy.phy_semaphore_mask) {
 269                 if (hw->bus.lan_id)
 270                         hw->phy.phy_semaphore_mask = IXGBE_GSSR_PHY1_SM;
 271                 else
 272                         hw->phy.phy_semaphore_mask = IXGBE_GSSR_PHY0_SM;
 273         }
 274 
 275         if (hw->phy.type != ixgbe_phy_unknown)
 276                 return 0;
 277 
 278         if (hw->phy.nw_mng_if_sel) {
 279                 phy_addr = (hw->phy.nw_mng_if_sel &
 280                             IXGBE_NW_MNG_IF_SEL_MDIO_PHY_ADD) >>
 281                            IXGBE_NW_MNG_IF_SEL_MDIO_PHY_ADD_SHIFT;
 282                 if (ixgbe_probe_phy(hw, phy_addr))
 283                         return 0;
 284                 else
 285                         return IXGBE_ERR_PHY_ADDR_INVALID;
 286         }
 287 
 288         for (phy_addr = 0; phy_addr < IXGBE_MAX_PHY_ADDR; phy_addr++) {
 289                 if (ixgbe_probe_phy(hw, phy_addr)) {
 290                         status = 0;
 291                         break;
 292                 }
 293         }
 294 
 295         /* Certain media types do not have a phy so an address will not
 296          * be found and the code will take this path.  Caller has to
 297          * decide if it is an error or not.
 298          */
 299         if (status)
 300                 hw->phy.mdio.prtad = MDIO_PRTAD_NONE;
 301 
 302         return status;
 303 }
 304 
 305 /**
 306  * ixgbe_check_reset_blocked - check status of MNG FW veto bit
 307  * @hw: pointer to the hardware structure
 308  *
 309  * This function checks the MMNGC.MNG_VETO bit to see if there are
 310  * any constraints on link from manageability.  For MAC's that don't
 311  * have this bit just return false since the link can not be blocked
 312  * via this method.
 313  **/
 314 bool ixgbe_check_reset_blocked(struct ixgbe_hw *hw)
 315 {
 316         u32 mmngc;
 317 
 318         /* If we don't have this bit, it can't be blocking */
 319         if (hw->mac.type == ixgbe_mac_82598EB)
 320                 return false;
 321 
 322         mmngc = IXGBE_READ_REG(hw, IXGBE_MMNGC);
 323         if (mmngc & IXGBE_MMNGC_MNG_VETO) {
 324                 hw_dbg(hw, "MNG_VETO bit detected.\n");
 325                 return true;
 326         }
 327 
 328         return false;
 329 }
 330 
 331 /**
 332  *  ixgbe_get_phy_id - Get the phy type
 333  *  @hw: pointer to hardware structure
 334  *
 335  **/
 336 static s32 ixgbe_get_phy_id(struct ixgbe_hw *hw)
 337 {
 338         s32 status;
 339         u16 phy_id_high = 0;
 340         u16 phy_id_low = 0;
 341 
 342         status = hw->phy.ops.read_reg(hw, MDIO_DEVID1, MDIO_MMD_PMAPMD,
 343                                       &phy_id_high);
 344 
 345         if (!status) {
 346                 hw->phy.id = (u32)(phy_id_high << 16);
 347                 status = hw->phy.ops.read_reg(hw, MDIO_DEVID2, MDIO_MMD_PMAPMD,
 348                                               &phy_id_low);
 349                 hw->phy.id |= (u32)(phy_id_low & IXGBE_PHY_REVISION_MASK);
 350                 hw->phy.revision = (u32)(phy_id_low & ~IXGBE_PHY_REVISION_MASK);
 351         }
 352         return status;
 353 }
 354 
 355 /**
 356  *  ixgbe_get_phy_type_from_id - Get the phy type
 357  *  @phy_id: hardware phy id
 358  *
 359  **/
 360 static enum ixgbe_phy_type ixgbe_get_phy_type_from_id(u32 phy_id)
 361 {
 362         enum ixgbe_phy_type phy_type;
 363 
 364         switch (phy_id) {
 365         case TN1010_PHY_ID:
 366                 phy_type = ixgbe_phy_tn;
 367                 break;
 368         case X550_PHY_ID2:
 369         case X550_PHY_ID3:
 370         case X540_PHY_ID:
 371                 phy_type = ixgbe_phy_aq;
 372                 break;
 373         case QT2022_PHY_ID:
 374                 phy_type = ixgbe_phy_qt;
 375                 break;
 376         case ATH_PHY_ID:
 377                 phy_type = ixgbe_phy_nl;
 378                 break;
 379         case X557_PHY_ID:
 380         case X557_PHY_ID2:
 381                 phy_type = ixgbe_phy_x550em_ext_t;
 382                 break;
 383         default:
 384                 phy_type = ixgbe_phy_unknown;
 385                 break;
 386         }
 387 
 388         return phy_type;
 389 }
 390 
 391 /**
 392  *  ixgbe_reset_phy_generic - Performs a PHY reset
 393  *  @hw: pointer to hardware structure
 394  **/
 395 s32 ixgbe_reset_phy_generic(struct ixgbe_hw *hw)
 396 {
 397         u32 i;
 398         u16 ctrl = 0;
 399         s32 status = 0;
 400 
 401         if (hw->phy.type == ixgbe_phy_unknown)
 402                 status = ixgbe_identify_phy_generic(hw);
 403 
 404         if (status != 0 || hw->phy.type == ixgbe_phy_none)
 405                 return status;
 406 
 407         /* Don't reset PHY if it's shut down due to overtemp. */
 408         if (!hw->phy.reset_if_overtemp &&
 409             (IXGBE_ERR_OVERTEMP == hw->phy.ops.check_overtemp(hw)))
 410                 return 0;
 411 
 412         /* Blocked by MNG FW so bail */
 413         if (ixgbe_check_reset_blocked(hw))
 414                 return 0;
 415 
 416         /*
 417          * Perform soft PHY reset to the PHY_XS.
 418          * This will cause a soft reset to the PHY
 419          */
 420         hw->phy.ops.write_reg(hw, MDIO_CTRL1,
 421                               MDIO_MMD_PHYXS,
 422                               MDIO_CTRL1_RESET);
 423 
 424         /*
 425          * Poll for reset bit to self-clear indicating reset is complete.
 426          * Some PHYs could take up to 3 seconds to complete and need about
 427          * 1.7 usec delay after the reset is complete.
 428          */
 429         for (i = 0; i < 30; i++) {
 430                 msleep(100);
 431                 if (hw->phy.type == ixgbe_phy_x550em_ext_t) {
 432                         status = hw->phy.ops.read_reg(hw,
 433                                                   IXGBE_MDIO_TX_VENDOR_ALARMS_3,
 434                                                   MDIO_MMD_PMAPMD, &ctrl);
 435                         if (status)
 436                                 return status;
 437 
 438                         if (ctrl & IXGBE_MDIO_TX_VENDOR_ALARMS_3_RST_MASK) {
 439                                 udelay(2);
 440                                 break;
 441                         }
 442                 } else {
 443                         status = hw->phy.ops.read_reg(hw, MDIO_CTRL1,
 444                                                       MDIO_MMD_PHYXS, &ctrl);
 445                         if (status)
 446                                 return status;
 447 
 448                         if (!(ctrl & MDIO_CTRL1_RESET)) {
 449                                 udelay(2);
 450                                 break;
 451                         }
 452                 }
 453         }
 454 
 455         if (ctrl & MDIO_CTRL1_RESET) {
 456                 hw_dbg(hw, "PHY reset polling failed to complete.\n");
 457                 return IXGBE_ERR_RESET_FAILED;
 458         }
 459 
 460         return 0;
 461 }
 462 
 463 /**
 464  *  ixgbe_read_phy_mdi - Reads a value from a specified PHY register without
 465  *  the SWFW lock
 466  *  @hw: pointer to hardware structure
 467  *  @reg_addr: 32 bit address of PHY register to read
 468  *  @device_type: 5 bit device type
 469  *  @phy_data: Pointer to read data from PHY register
 470  **/
 471 s32 ixgbe_read_phy_reg_mdi(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type,
 472                        u16 *phy_data)
 473 {
 474         u32 i, data, command;
 475 
 476         /* Setup and write the address cycle command */
 477         command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT)  |
 478                    (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) |
 479                    (hw->phy.mdio.prtad << IXGBE_MSCA_PHY_ADDR_SHIFT) |
 480                    (IXGBE_MSCA_ADDR_CYCLE | IXGBE_MSCA_MDI_COMMAND));
 481 
 482         IXGBE_WRITE_REG(hw, IXGBE_MSCA, command);
 483 
 484         /* Check every 10 usec to see if the address cycle completed.
 485          * The MDI Command bit will clear when the operation is
 486          * complete
 487          */
 488         for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) {
 489                 udelay(10);
 490 
 491                 command = IXGBE_READ_REG(hw, IXGBE_MSCA);
 492                 if ((command & IXGBE_MSCA_MDI_COMMAND) == 0)
 493                                 break;
 494         }
 495 
 496 
 497         if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) {
 498                 hw_dbg(hw, "PHY address command did not complete.\n");
 499                 return IXGBE_ERR_PHY;
 500         }
 501 
 502         /* Address cycle complete, setup and write the read
 503          * command
 504          */
 505         command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT)  |
 506                    (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) |
 507                    (hw->phy.mdio.prtad << IXGBE_MSCA_PHY_ADDR_SHIFT) |
 508                    (IXGBE_MSCA_READ | IXGBE_MSCA_MDI_COMMAND));
 509 
 510         IXGBE_WRITE_REG(hw, IXGBE_MSCA, command);
 511 
 512         /* Check every 10 usec to see if the address cycle
 513          * completed. The MDI Command bit will clear when the
 514          * operation is complete
 515          */
 516         for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) {
 517                 udelay(10);
 518 
 519                 command = IXGBE_READ_REG(hw, IXGBE_MSCA);
 520                 if ((command & IXGBE_MSCA_MDI_COMMAND) == 0)
 521                         break;
 522         }
 523 
 524         if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) {
 525                 hw_dbg(hw, "PHY read command didn't complete\n");
 526                 return IXGBE_ERR_PHY;
 527         }
 528 
 529         /* Read operation is complete.  Get the data
 530          * from MSRWD
 531          */
 532         data = IXGBE_READ_REG(hw, IXGBE_MSRWD);
 533         data >>= IXGBE_MSRWD_READ_DATA_SHIFT;
 534         *phy_data = (u16)(data);
 535 
 536         return 0;
 537 }
 538 
 539 /**
 540  *  ixgbe_read_phy_reg_generic - Reads a value from a specified PHY register
 541  *  using the SWFW lock - this function is needed in most cases
 542  *  @hw: pointer to hardware structure
 543  *  @reg_addr: 32 bit address of PHY register to read
 544  *  @device_type: 5 bit device type
 545  *  @phy_data: Pointer to read data from PHY register
 546  **/
 547 s32 ixgbe_read_phy_reg_generic(struct ixgbe_hw *hw, u32 reg_addr,
 548                                u32 device_type, u16 *phy_data)
 549 {
 550         s32 status;
 551         u32 gssr = hw->phy.phy_semaphore_mask;
 552 
 553         if (hw->mac.ops.acquire_swfw_sync(hw, gssr) == 0) {
 554                 status = ixgbe_read_phy_reg_mdi(hw, reg_addr, device_type,
 555                                                 phy_data);
 556                 hw->mac.ops.release_swfw_sync(hw, gssr);
 557         } else {
 558                 return IXGBE_ERR_SWFW_SYNC;
 559         }
 560 
 561         return status;
 562 }
 563 
 564 /**
 565  *  ixgbe_write_phy_reg_mdi - Writes a value to specified PHY register
 566  *  without SWFW lock
 567  *  @hw: pointer to hardware structure
 568  *  @reg_addr: 32 bit PHY register to write
 569  *  @device_type: 5 bit device type
 570  *  @phy_data: Data to write to the PHY register
 571  **/
 572 s32 ixgbe_write_phy_reg_mdi(struct ixgbe_hw *hw, u32 reg_addr,
 573                                 u32 device_type, u16 phy_data)
 574 {
 575         u32 i, command;
 576 
 577         /* Put the data in the MDI single read and write data register*/
 578         IXGBE_WRITE_REG(hw, IXGBE_MSRWD, (u32)phy_data);
 579 
 580         /* Setup and write the address cycle command */
 581         command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT)  |
 582                    (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) |
 583                    (hw->phy.mdio.prtad << IXGBE_MSCA_PHY_ADDR_SHIFT) |
 584                    (IXGBE_MSCA_ADDR_CYCLE | IXGBE_MSCA_MDI_COMMAND));
 585 
 586         IXGBE_WRITE_REG(hw, IXGBE_MSCA, command);
 587 
 588         /*
 589          * Check every 10 usec to see if the address cycle completed.
 590          * The MDI Command bit will clear when the operation is
 591          * complete
 592          */
 593         for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) {
 594                 udelay(10);
 595 
 596                 command = IXGBE_READ_REG(hw, IXGBE_MSCA);
 597                 if ((command & IXGBE_MSCA_MDI_COMMAND) == 0)
 598                         break;
 599         }
 600 
 601         if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) {
 602                 hw_dbg(hw, "PHY address cmd didn't complete\n");
 603                 return IXGBE_ERR_PHY;
 604         }
 605 
 606         /*
 607          * Address cycle complete, setup and write the write
 608          * command
 609          */
 610         command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT)  |
 611                    (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) |
 612                    (hw->phy.mdio.prtad << IXGBE_MSCA_PHY_ADDR_SHIFT) |
 613                    (IXGBE_MSCA_WRITE | IXGBE_MSCA_MDI_COMMAND));
 614 
 615         IXGBE_WRITE_REG(hw, IXGBE_MSCA, command);
 616 
 617         /* Check every 10 usec to see if the address cycle
 618          * completed. The MDI Command bit will clear when the
 619          * operation is complete
 620          */
 621         for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) {
 622                 udelay(10);
 623 
 624                 command = IXGBE_READ_REG(hw, IXGBE_MSCA);
 625                 if ((command & IXGBE_MSCA_MDI_COMMAND) == 0)
 626                         break;
 627         }
 628 
 629         if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) {
 630                 hw_dbg(hw, "PHY write cmd didn't complete\n");
 631                 return IXGBE_ERR_PHY;
 632         }
 633 
 634         return 0;
 635 }
 636 
 637 /**
 638  *  ixgbe_write_phy_reg_generic - Writes a value to specified PHY register
 639  *  using SWFW lock- this function is needed in most cases
 640  *  @hw: pointer to hardware structure
 641  *  @reg_addr: 32 bit PHY register to write
 642  *  @device_type: 5 bit device type
 643  *  @phy_data: Data to write to the PHY register
 644  **/
 645 s32 ixgbe_write_phy_reg_generic(struct ixgbe_hw *hw, u32 reg_addr,
 646                                 u32 device_type, u16 phy_data)
 647 {
 648         s32 status;
 649         u32 gssr = hw->phy.phy_semaphore_mask;
 650 
 651         if (hw->mac.ops.acquire_swfw_sync(hw, gssr) == 0) {
 652                 status = ixgbe_write_phy_reg_mdi(hw, reg_addr, device_type,
 653                                                  phy_data);
 654                 hw->mac.ops.release_swfw_sync(hw, gssr);
 655         } else {
 656                 return IXGBE_ERR_SWFW_SYNC;
 657         }
 658 
 659         return status;
 660 }
 661 
 662 #define IXGBE_HW_READ_REG(addr) IXGBE_READ_REG(hw, addr)
 663 
 664 /**
 665  *  ixgbe_msca_cmd - Write the command register and poll for completion/timeout
 666  *  @hw: pointer to hardware structure
 667  *  @cmd: command register value to write
 668  **/
 669 static s32 ixgbe_msca_cmd(struct ixgbe_hw *hw, u32 cmd)
 670 {
 671         IXGBE_WRITE_REG(hw, IXGBE_MSCA, cmd);
 672 
 673         return readx_poll_timeout(IXGBE_HW_READ_REG, IXGBE_MSCA, cmd,
 674                                   !(cmd & IXGBE_MSCA_MDI_COMMAND), 10,
 675                                   10 * IXGBE_MDIO_COMMAND_TIMEOUT);
 676 }
 677 
 678 /**
 679  *  ixgbe_mii_bus_read_generic - Read a clause 22/45 register with gssr flags
 680  *  @hw: pointer to hardware structure
 681  *  @addr: address
 682  *  @regnum: register number
 683  *  @gssr: semaphore flags to acquire
 684  **/
 685 static s32 ixgbe_mii_bus_read_generic(struct ixgbe_hw *hw, int addr,
 686                                       int regnum, u32 gssr)
 687 {
 688         u32 hwaddr, cmd;
 689         s32 data;
 690 
 691         if (hw->mac.ops.acquire_swfw_sync(hw, gssr))
 692                 return -EBUSY;
 693 
 694         hwaddr = addr << IXGBE_MSCA_PHY_ADDR_SHIFT;
 695         if (regnum & MII_ADDR_C45) {
 696                 hwaddr |= regnum & GENMASK(21, 0);
 697                 cmd = hwaddr | IXGBE_MSCA_ADDR_CYCLE | IXGBE_MSCA_MDI_COMMAND;
 698         } else {
 699                 hwaddr |= (regnum & GENMASK(5, 0)) << IXGBE_MSCA_DEV_TYPE_SHIFT;
 700                 cmd = hwaddr | IXGBE_MSCA_OLD_PROTOCOL |
 701                         IXGBE_MSCA_READ_AUTOINC | IXGBE_MSCA_MDI_COMMAND;
 702         }
 703 
 704         data = ixgbe_msca_cmd(hw, cmd);
 705         if (data < 0)
 706                 goto mii_bus_read_done;
 707 
 708         /* For a clause 45 access the address cycle just completed, we still
 709          * need to do the read command, otherwise just get the data
 710          */
 711         if (!(regnum & MII_ADDR_C45))
 712                 goto do_mii_bus_read;
 713 
 714         cmd = hwaddr | IXGBE_MSCA_READ | IXGBE_MSCA_MDI_COMMAND;
 715         data = ixgbe_msca_cmd(hw, cmd);
 716         if (data < 0)
 717                 goto mii_bus_read_done;
 718 
 719 do_mii_bus_read:
 720         data = IXGBE_READ_REG(hw, IXGBE_MSRWD);
 721         data = (data >> IXGBE_MSRWD_READ_DATA_SHIFT) & GENMASK(16, 0);
 722 
 723 mii_bus_read_done:
 724         hw->mac.ops.release_swfw_sync(hw, gssr);
 725         return data;
 726 }
 727 
 728 /**
 729  *  ixgbe_mii_bus_write_generic - Write a clause 22/45 register with gssr flags
 730  *  @hw: pointer to hardware structure
 731  *  @addr: address
 732  *  @regnum: register number
 733  *  @val: value to write
 734  *  @gssr: semaphore flags to acquire
 735  **/
 736 static s32 ixgbe_mii_bus_write_generic(struct ixgbe_hw *hw, int addr,
 737                                        int regnum, u16 val, u32 gssr)
 738 {
 739         u32 hwaddr, cmd;
 740         s32 err;
 741 
 742         if (hw->mac.ops.acquire_swfw_sync(hw, gssr))
 743                 return -EBUSY;
 744 
 745         IXGBE_WRITE_REG(hw, IXGBE_MSRWD, (u32)val);
 746 
 747         hwaddr = addr << IXGBE_MSCA_PHY_ADDR_SHIFT;
 748         if (regnum & MII_ADDR_C45) {
 749                 hwaddr |= regnum & GENMASK(21, 0);
 750                 cmd = hwaddr | IXGBE_MSCA_ADDR_CYCLE | IXGBE_MSCA_MDI_COMMAND;
 751         } else {
 752                 hwaddr |= (regnum & GENMASK(5, 0)) << IXGBE_MSCA_DEV_TYPE_SHIFT;
 753                 cmd = hwaddr | IXGBE_MSCA_OLD_PROTOCOL | IXGBE_MSCA_WRITE |
 754                         IXGBE_MSCA_MDI_COMMAND;
 755         }
 756 
 757         /* For clause 45 this is an address cycle, for clause 22 this is the
 758          * entire transaction
 759          */
 760         err = ixgbe_msca_cmd(hw, cmd);
 761         if (err < 0 || !(regnum & MII_ADDR_C45))
 762                 goto mii_bus_write_done;
 763 
 764         cmd = hwaddr | IXGBE_MSCA_WRITE | IXGBE_MSCA_MDI_COMMAND;
 765         err = ixgbe_msca_cmd(hw, cmd);
 766 
 767 mii_bus_write_done:
 768         hw->mac.ops.release_swfw_sync(hw, gssr);
 769         return err;
 770 }
 771 
 772 /**
 773  *  ixgbe_mii_bus_read - Read a clause 22/45 register
 774  *  @hw: pointer to hardware structure
 775  *  @addr: address
 776  *  @regnum: register number
 777  **/
 778 static s32 ixgbe_mii_bus_read(struct mii_bus *bus, int addr, int regnum)
 779 {
 780         struct ixgbe_adapter *adapter = bus->priv;
 781         struct ixgbe_hw *hw = &adapter->hw;
 782         u32 gssr = hw->phy.phy_semaphore_mask;
 783 
 784         return ixgbe_mii_bus_read_generic(hw, addr, regnum, gssr);
 785 }
 786 
 787 /**
 788  *  ixgbe_mii_bus_write - Write a clause 22/45 register
 789  *  @hw: pointer to hardware structure
 790  *  @addr: address
 791  *  @regnum: register number
 792  *  @val: value to write
 793  **/
 794 static s32 ixgbe_mii_bus_write(struct mii_bus *bus, int addr, int regnum,
 795                                u16 val)
 796 {
 797         struct ixgbe_adapter *adapter = bus->priv;
 798         struct ixgbe_hw *hw = &adapter->hw;
 799         u32 gssr = hw->phy.phy_semaphore_mask;
 800 
 801         return ixgbe_mii_bus_write_generic(hw, addr, regnum, val, gssr);
 802 }
 803 
 804 /**
 805  *  ixgbe_x550em_a_mii_bus_read - Read a clause 22/45 register on x550em_a
 806  *  @hw: pointer to hardware structure
 807  *  @addr: address
 808  *  @regnum: register number
 809  **/
 810 static s32 ixgbe_x550em_a_mii_bus_read(struct mii_bus *bus, int addr,
 811                                        int regnum)
 812 {
 813         struct ixgbe_adapter *adapter = bus->priv;
 814         struct ixgbe_hw *hw = &adapter->hw;
 815         u32 gssr = hw->phy.phy_semaphore_mask;
 816 
 817         gssr |= IXGBE_GSSR_TOKEN_SM | IXGBE_GSSR_PHY0_SM;
 818         return ixgbe_mii_bus_read_generic(hw, addr, regnum, gssr);
 819 }
 820 
 821 /**
 822  *  ixgbe_x550em_a_mii_bus_write - Write a clause 22/45 register on x550em_a
 823  *  @hw: pointer to hardware structure
 824  *  @addr: address
 825  *  @regnum: register number
 826  *  @val: value to write
 827  **/
 828 static s32 ixgbe_x550em_a_mii_bus_write(struct mii_bus *bus, int addr,
 829                                         int regnum, u16 val)
 830 {
 831         struct ixgbe_adapter *adapter = bus->priv;
 832         struct ixgbe_hw *hw = &adapter->hw;
 833         u32 gssr = hw->phy.phy_semaphore_mask;
 834 
 835         gssr |= IXGBE_GSSR_TOKEN_SM | IXGBE_GSSR_PHY0_SM;
 836         return ixgbe_mii_bus_write_generic(hw, addr, regnum, val, gssr);
 837 }
 838 
 839 /**
 840  * ixgbe_get_first_secondary_devfn - get first device downstream of root port
 841  * @devfn: PCI_DEVFN of root port on domain 0, bus 0
 842  *
 843  * Returns pci_dev pointer to PCI_DEVFN(0, 0) on subordinate side of root
 844  * on domain 0, bus 0, devfn = 'devfn'
 845  **/
 846 static struct pci_dev *ixgbe_get_first_secondary_devfn(unsigned int devfn)
 847 {
 848         struct pci_dev *rp_pdev;
 849         int bus;
 850 
 851         rp_pdev = pci_get_domain_bus_and_slot(0, 0, devfn);
 852         if (rp_pdev && rp_pdev->subordinate) {
 853                 bus = rp_pdev->subordinate->number;
 854                 return pci_get_domain_bus_and_slot(0, bus, 0);
 855         }
 856 
 857         return NULL;
 858 }
 859 
 860 /**
 861  * ixgbe_x550em_a_has_mii - is this the first ixgbe x550em_a PCI function?
 862  * @hw: pointer to hardware structure
 863  *
 864  * Returns true if hw points to lowest numbered PCI B:D.F x550_em_a device in
 865  * the SoC.  There are up to 4 MACs sharing a single MDIO bus on the x550em_a,
 866  * but we only want to register one MDIO bus.
 867  **/
 868 static bool ixgbe_x550em_a_has_mii(struct ixgbe_hw *hw)
 869 {
 870         struct ixgbe_adapter *adapter = hw->back;
 871         struct pci_dev *pdev = adapter->pdev;
 872         struct pci_dev *func0_pdev;
 873 
 874         /* For the C3000 family of SoCs (x550em_a) the internal ixgbe devices
 875          * are always downstream of root ports @ 0000:00:16.0 & 0000:00:17.0
 876          * It's not valid for function 0 to be disabled and function 1 is up,
 877          * so the lowest numbered ixgbe dev will be device 0 function 0 on one
 878          * of those two root ports
 879          */
 880         func0_pdev = ixgbe_get_first_secondary_devfn(PCI_DEVFN(0x16, 0));
 881         if (func0_pdev) {
 882                 if (func0_pdev == pdev)
 883                         return true;
 884                 else
 885                         return false;
 886         }
 887         func0_pdev = ixgbe_get_first_secondary_devfn(PCI_DEVFN(0x17, 0));
 888         if (func0_pdev == pdev)
 889                 return true;
 890 
 891         return false;
 892 }
 893 
 894 /**
 895  * ixgbe_mii_bus_init - mii_bus structure setup
 896  * @hw: pointer to hardware structure
 897  *
 898  * Returns 0 on success, negative on failure
 899  *
 900  * ixgbe_mii_bus_init initializes a mii_bus structure in adapter
 901  **/
 902 s32 ixgbe_mii_bus_init(struct ixgbe_hw *hw)
 903 {
 904         struct ixgbe_adapter *adapter = hw->back;
 905         struct pci_dev *pdev = adapter->pdev;
 906         struct device *dev = &adapter->netdev->dev;
 907         struct mii_bus *bus;
 908         int err = -ENODEV;
 909 
 910         bus = devm_mdiobus_alloc(dev);
 911         if (!bus)
 912                 return -ENOMEM;
 913 
 914         switch (hw->device_id) {
 915         /* C3000 SoCs */
 916         case IXGBE_DEV_ID_X550EM_A_KR:
 917         case IXGBE_DEV_ID_X550EM_A_KR_L:
 918         case IXGBE_DEV_ID_X550EM_A_SFP_N:
 919         case IXGBE_DEV_ID_X550EM_A_SGMII:
 920         case IXGBE_DEV_ID_X550EM_A_SGMII_L:
 921         case IXGBE_DEV_ID_X550EM_A_10G_T:
 922         case IXGBE_DEV_ID_X550EM_A_SFP:
 923         case IXGBE_DEV_ID_X550EM_A_1G_T:
 924         case IXGBE_DEV_ID_X550EM_A_1G_T_L:
 925                 if (!ixgbe_x550em_a_has_mii(hw))
 926                         goto ixgbe_no_mii_bus;
 927                 bus->read = &ixgbe_x550em_a_mii_bus_read;
 928                 bus->write = &ixgbe_x550em_a_mii_bus_write;
 929                 break;
 930         default:
 931                 bus->read = &ixgbe_mii_bus_read;
 932                 bus->write = &ixgbe_mii_bus_write;
 933                 break;
 934         }
 935 
 936         /* Use the position of the device in the PCI hierarchy as the id */
 937         snprintf(bus->id, MII_BUS_ID_SIZE, "%s-mdio-%s", ixgbe_driver_name,
 938                  pci_name(pdev));
 939 
 940         bus->name = "ixgbe-mdio";
 941         bus->priv = adapter;
 942         bus->parent = dev;
 943         bus->phy_mask = GENMASK(31, 0);
 944 
 945         /* Support clause 22/45 natively.  ixgbe_probe() sets MDIO_EMULATE_C22
 946          * unfortunately that causes some clause 22 frames to be sent with
 947          * clause 45 addressing.  We don't want that.
 948          */
 949         hw->phy.mdio.mode_support = MDIO_SUPPORTS_C45 | MDIO_SUPPORTS_C22;
 950 
 951         err = mdiobus_register(bus);
 952         if (!err) {
 953                 adapter->mii_bus = bus;
 954                 return 0;
 955         }
 956 
 957 ixgbe_no_mii_bus:
 958         devm_mdiobus_free(dev, bus);
 959         return err;
 960 }
 961 
 962 /**
 963  *  ixgbe_setup_phy_link_generic - Set and restart autoneg
 964  *  @hw: pointer to hardware structure
 965  *
 966  *  Restart autonegotiation and PHY and waits for completion.
 967  **/
 968 s32 ixgbe_setup_phy_link_generic(struct ixgbe_hw *hw)
 969 {
 970         s32 status = 0;
 971         u16 autoneg_reg = IXGBE_MII_AUTONEG_REG;
 972         bool autoneg = false;
 973         ixgbe_link_speed speed;
 974 
 975         ixgbe_get_copper_link_capabilities_generic(hw, &speed, &autoneg);
 976 
 977         /* Set or unset auto-negotiation 10G advertisement */
 978         hw->phy.ops.read_reg(hw, MDIO_AN_10GBT_CTRL, MDIO_MMD_AN, &autoneg_reg);
 979 
 980         autoneg_reg &= ~MDIO_AN_10GBT_CTRL_ADV10G;
 981         if ((hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_10GB_FULL) &&
 982             (speed & IXGBE_LINK_SPEED_10GB_FULL))
 983                 autoneg_reg |= MDIO_AN_10GBT_CTRL_ADV10G;
 984 
 985         hw->phy.ops.write_reg(hw, MDIO_AN_10GBT_CTRL, MDIO_MMD_AN, autoneg_reg);
 986 
 987         hw->phy.ops.read_reg(hw, IXGBE_MII_AUTONEG_VENDOR_PROVISION_1_REG,
 988                              MDIO_MMD_AN, &autoneg_reg);
 989 
 990         if (hw->mac.type == ixgbe_mac_X550) {
 991                 /* Set or unset auto-negotiation 5G advertisement */
 992                 autoneg_reg &= ~IXGBE_MII_5GBASE_T_ADVERTISE;
 993                 if ((hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_5GB_FULL) &&
 994                     (speed & IXGBE_LINK_SPEED_5GB_FULL))
 995                         autoneg_reg |= IXGBE_MII_5GBASE_T_ADVERTISE;
 996 
 997                 /* Set or unset auto-negotiation 2.5G advertisement */
 998                 autoneg_reg &= ~IXGBE_MII_2_5GBASE_T_ADVERTISE;
 999                 if ((hw->phy.autoneg_advertised &
1000                      IXGBE_LINK_SPEED_2_5GB_FULL) &&
1001                     (speed & IXGBE_LINK_SPEED_2_5GB_FULL))
1002                         autoneg_reg |= IXGBE_MII_2_5GBASE_T_ADVERTISE;
1003         }
1004 
1005         /* Set or unset auto-negotiation 1G advertisement */
1006         autoneg_reg &= ~IXGBE_MII_1GBASE_T_ADVERTISE;
1007         if ((hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_1GB_FULL) &&
1008             (speed & IXGBE_LINK_SPEED_1GB_FULL))
1009                 autoneg_reg |= IXGBE_MII_1GBASE_T_ADVERTISE;
1010 
1011         hw->phy.ops.write_reg(hw, IXGBE_MII_AUTONEG_VENDOR_PROVISION_1_REG,
1012                               MDIO_MMD_AN, autoneg_reg);
1013 
1014         /* Set or unset auto-negotiation 100M advertisement */
1015         hw->phy.ops.read_reg(hw, MDIO_AN_ADVERTISE, MDIO_MMD_AN, &autoneg_reg);
1016 
1017         autoneg_reg &= ~(ADVERTISE_100FULL | ADVERTISE_100HALF);
1018         if ((hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_100_FULL) &&
1019             (speed & IXGBE_LINK_SPEED_100_FULL))
1020                 autoneg_reg |= ADVERTISE_100FULL;
1021 
1022         hw->phy.ops.write_reg(hw, MDIO_AN_ADVERTISE, MDIO_MMD_AN, autoneg_reg);
1023 
1024         /* Blocked by MNG FW so don't reset PHY */
1025         if (ixgbe_check_reset_blocked(hw))
1026                 return 0;
1027 
1028         /* Restart PHY autonegotiation and wait for completion */
1029         hw->phy.ops.read_reg(hw, MDIO_CTRL1,
1030                              MDIO_MMD_AN, &autoneg_reg);
1031 
1032         autoneg_reg |= MDIO_AN_CTRL1_RESTART;
1033 
1034         hw->phy.ops.write_reg(hw, MDIO_CTRL1,
1035                               MDIO_MMD_AN, autoneg_reg);
1036 
1037         return status;
1038 }
1039 
1040 /**
1041  *  ixgbe_setup_phy_link_speed_generic - Sets the auto advertised capabilities
1042  *  @hw: pointer to hardware structure
1043  *  @speed: new link speed
1044  *  @autoneg_wait_to_complete: unused
1045  **/
1046 s32 ixgbe_setup_phy_link_speed_generic(struct ixgbe_hw *hw,
1047                                        ixgbe_link_speed speed,
1048                                        bool autoneg_wait_to_complete)
1049 {
1050         /* Clear autoneg_advertised and set new values based on input link
1051          * speed.
1052          */
1053         hw->phy.autoneg_advertised = 0;
1054 
1055         if (speed & IXGBE_LINK_SPEED_10GB_FULL)
1056                 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_10GB_FULL;
1057 
1058         if (speed & IXGBE_LINK_SPEED_5GB_FULL)
1059                 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_5GB_FULL;
1060 
1061         if (speed & IXGBE_LINK_SPEED_2_5GB_FULL)
1062                 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_2_5GB_FULL;
1063 
1064         if (speed & IXGBE_LINK_SPEED_1GB_FULL)
1065                 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_1GB_FULL;
1066 
1067         if (speed & IXGBE_LINK_SPEED_100_FULL)
1068                 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_100_FULL;
1069 
1070         if (speed & IXGBE_LINK_SPEED_10_FULL)
1071                 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_10_FULL;
1072 
1073         /* Setup link based on the new speed settings */
1074         if (hw->phy.ops.setup_link)
1075                 hw->phy.ops.setup_link(hw);
1076 
1077         return 0;
1078 }
1079 
1080 /**
1081  * ixgbe_get_copper_speeds_supported - Get copper link speed from phy
1082  * @hw: pointer to hardware structure
1083  *
1084  * Determines the supported link capabilities by reading the PHY auto
1085  * negotiation register.
1086  */
1087 static s32 ixgbe_get_copper_speeds_supported(struct ixgbe_hw *hw)
1088 {
1089         u16 speed_ability;
1090         s32 status;
1091 
1092         status = hw->phy.ops.read_reg(hw, MDIO_SPEED, MDIO_MMD_PMAPMD,
1093                                       &speed_ability);
1094         if (status)
1095                 return status;
1096 
1097         if (speed_ability & MDIO_SPEED_10G)
1098                 hw->phy.speeds_supported |= IXGBE_LINK_SPEED_10GB_FULL;
1099         if (speed_ability & MDIO_PMA_SPEED_1000)
1100                 hw->phy.speeds_supported |= IXGBE_LINK_SPEED_1GB_FULL;
1101         if (speed_ability & MDIO_PMA_SPEED_100)
1102                 hw->phy.speeds_supported |= IXGBE_LINK_SPEED_100_FULL;
1103 
1104         switch (hw->mac.type) {
1105         case ixgbe_mac_X550:
1106                 hw->phy.speeds_supported |= IXGBE_LINK_SPEED_2_5GB_FULL;
1107                 hw->phy.speeds_supported |= IXGBE_LINK_SPEED_5GB_FULL;
1108                 break;
1109         case ixgbe_mac_X550EM_x:
1110         case ixgbe_mac_x550em_a:
1111                 hw->phy.speeds_supported &= ~IXGBE_LINK_SPEED_100_FULL;
1112                 break;
1113         default:
1114                 break;
1115         }
1116 
1117         return 0;
1118 }
1119 
1120 /**
1121  * ixgbe_get_copper_link_capabilities_generic - Determines link capabilities
1122  * @hw: pointer to hardware structure
1123  * @speed: pointer to link speed
1124  * @autoneg: boolean auto-negotiation value
1125  */
1126 s32 ixgbe_get_copper_link_capabilities_generic(struct ixgbe_hw *hw,
1127                                                ixgbe_link_speed *speed,
1128                                                bool *autoneg)
1129 {
1130         s32 status = 0;
1131 
1132         *autoneg = true;
1133         if (!hw->phy.speeds_supported)
1134                 status = ixgbe_get_copper_speeds_supported(hw);
1135 
1136         *speed = hw->phy.speeds_supported;
1137         return status;
1138 }
1139 
1140 /**
1141  *  ixgbe_check_phy_link_tnx - Determine link and speed status
1142  *  @hw: pointer to hardware structure
1143  *  @speed: link speed
1144  *  @link_up: status of link
1145  *
1146  *  Reads the VS1 register to determine if link is up and the current speed for
1147  *  the PHY.
1148  **/
1149 s32 ixgbe_check_phy_link_tnx(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
1150                              bool *link_up)
1151 {
1152         s32 status;
1153         u32 time_out;
1154         u32 max_time_out = 10;
1155         u16 phy_link = 0;
1156         u16 phy_speed = 0;
1157         u16 phy_data = 0;
1158 
1159         /* Initialize speed and link to default case */
1160         *link_up = false;
1161         *speed = IXGBE_LINK_SPEED_10GB_FULL;
1162 
1163         /*
1164          * Check current speed and link status of the PHY register.
1165          * This is a vendor specific register and may have to
1166          * be changed for other copper PHYs.
1167          */
1168         for (time_out = 0; time_out < max_time_out; time_out++) {
1169                 udelay(10);
1170                 status = hw->phy.ops.read_reg(hw,
1171                                               MDIO_STAT1,
1172                                               MDIO_MMD_VEND1,
1173                                               &phy_data);
1174                 phy_link = phy_data &
1175                             IXGBE_MDIO_VENDOR_SPECIFIC_1_LINK_STATUS;
1176                 phy_speed = phy_data &
1177                             IXGBE_MDIO_VENDOR_SPECIFIC_1_SPEED_STATUS;
1178                 if (phy_link == IXGBE_MDIO_VENDOR_SPECIFIC_1_LINK_STATUS) {
1179                         *link_up = true;
1180                         if (phy_speed ==
1181                             IXGBE_MDIO_VENDOR_SPECIFIC_1_SPEED_STATUS)
1182                                 *speed = IXGBE_LINK_SPEED_1GB_FULL;
1183                         break;
1184                 }
1185         }
1186 
1187         return status;
1188 }
1189 
1190 /**
1191  *      ixgbe_setup_phy_link_tnx - Set and restart autoneg
1192  *      @hw: pointer to hardware structure
1193  *
1194  *      Restart autonegotiation and PHY and waits for completion.
1195  *      This function always returns success, this is nessary since
1196  *      it is called via a function pointer that could call other
1197  *      functions that could return an error.
1198  **/
1199 s32 ixgbe_setup_phy_link_tnx(struct ixgbe_hw *hw)
1200 {
1201         u16 autoneg_reg = IXGBE_MII_AUTONEG_REG;
1202         bool autoneg = false;
1203         ixgbe_link_speed speed;
1204 
1205         ixgbe_get_copper_link_capabilities_generic(hw, &speed, &autoneg);
1206 
1207         if (speed & IXGBE_LINK_SPEED_10GB_FULL) {
1208                 /* Set or unset auto-negotiation 10G advertisement */
1209                 hw->phy.ops.read_reg(hw, MDIO_AN_10GBT_CTRL,
1210                                      MDIO_MMD_AN,
1211                                      &autoneg_reg);
1212 
1213                 autoneg_reg &= ~MDIO_AN_10GBT_CTRL_ADV10G;
1214                 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_10GB_FULL)
1215                         autoneg_reg |= MDIO_AN_10GBT_CTRL_ADV10G;
1216 
1217                 hw->phy.ops.write_reg(hw, MDIO_AN_10GBT_CTRL,
1218                                       MDIO_MMD_AN,
1219                                       autoneg_reg);
1220         }
1221 
1222         if (speed & IXGBE_LINK_SPEED_1GB_FULL) {
1223                 /* Set or unset auto-negotiation 1G advertisement */
1224                 hw->phy.ops.read_reg(hw, IXGBE_MII_AUTONEG_XNP_TX_REG,
1225                                      MDIO_MMD_AN,
1226                                      &autoneg_reg);
1227 
1228                 autoneg_reg &= ~IXGBE_MII_1GBASE_T_ADVERTISE_XNP_TX;
1229                 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_1GB_FULL)
1230                         autoneg_reg |= IXGBE_MII_1GBASE_T_ADVERTISE_XNP_TX;
1231 
1232                 hw->phy.ops.write_reg(hw, IXGBE_MII_AUTONEG_XNP_TX_REG,
1233                                       MDIO_MMD_AN,
1234                                       autoneg_reg);
1235         }
1236 
1237         if (speed & IXGBE_LINK_SPEED_100_FULL) {
1238                 /* Set or unset auto-negotiation 100M advertisement */
1239                 hw->phy.ops.read_reg(hw, MDIO_AN_ADVERTISE,
1240                                      MDIO_MMD_AN,
1241                                      &autoneg_reg);
1242 
1243                 autoneg_reg &= ~(ADVERTISE_100FULL |
1244                                  ADVERTISE_100HALF);
1245                 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_100_FULL)
1246                         autoneg_reg |= ADVERTISE_100FULL;
1247 
1248                 hw->phy.ops.write_reg(hw, MDIO_AN_ADVERTISE,
1249                                       MDIO_MMD_AN,
1250                                       autoneg_reg);
1251         }
1252 
1253         /* Blocked by MNG FW so don't reset PHY */
1254         if (ixgbe_check_reset_blocked(hw))
1255                 return 0;
1256 
1257         /* Restart PHY autonegotiation and wait for completion */
1258         hw->phy.ops.read_reg(hw, MDIO_CTRL1,
1259                              MDIO_MMD_AN, &autoneg_reg);
1260 
1261         autoneg_reg |= MDIO_AN_CTRL1_RESTART;
1262 
1263         hw->phy.ops.write_reg(hw, MDIO_CTRL1,
1264                               MDIO_MMD_AN, autoneg_reg);
1265         return 0;
1266 }
1267 
1268 /**
1269  *  ixgbe_reset_phy_nl - Performs a PHY reset
1270  *  @hw: pointer to hardware structure
1271  **/
1272 s32 ixgbe_reset_phy_nl(struct ixgbe_hw *hw)
1273 {
1274         u16 phy_offset, control, eword, edata, block_crc;
1275         bool end_data = false;
1276         u16 list_offset, data_offset;
1277         u16 phy_data = 0;
1278         s32 ret_val;
1279         u32 i;
1280 
1281         /* Blocked by MNG FW so bail */
1282         if (ixgbe_check_reset_blocked(hw))
1283                 return 0;
1284 
1285         hw->phy.ops.read_reg(hw, MDIO_CTRL1, MDIO_MMD_PHYXS, &phy_data);
1286 
1287         /* reset the PHY and poll for completion */
1288         hw->phy.ops.write_reg(hw, MDIO_CTRL1, MDIO_MMD_PHYXS,
1289                               (phy_data | MDIO_CTRL1_RESET));
1290 
1291         for (i = 0; i < 100; i++) {
1292                 hw->phy.ops.read_reg(hw, MDIO_CTRL1, MDIO_MMD_PHYXS,
1293                                      &phy_data);
1294                 if ((phy_data & MDIO_CTRL1_RESET) == 0)
1295                         break;
1296                 usleep_range(10000, 20000);
1297         }
1298 
1299         if ((phy_data & MDIO_CTRL1_RESET) != 0) {
1300                 hw_dbg(hw, "PHY reset did not complete.\n");
1301                 return IXGBE_ERR_PHY;
1302         }
1303 
1304         /* Get init offsets */
1305         ret_val = ixgbe_get_sfp_init_sequence_offsets(hw, &list_offset,
1306                                                       &data_offset);
1307         if (ret_val)
1308                 return ret_val;
1309 
1310         ret_val = hw->eeprom.ops.read(hw, data_offset, &block_crc);
1311         data_offset++;
1312         while (!end_data) {
1313                 /*
1314                  * Read control word from PHY init contents offset
1315                  */
1316                 ret_val = hw->eeprom.ops.read(hw, data_offset, &eword);
1317                 if (ret_val)
1318                         goto err_eeprom;
1319                 control = (eword & IXGBE_CONTROL_MASK_NL) >>
1320                            IXGBE_CONTROL_SHIFT_NL;
1321                 edata = eword & IXGBE_DATA_MASK_NL;
1322                 switch (control) {
1323                 case IXGBE_DELAY_NL:
1324                         data_offset++;
1325                         hw_dbg(hw, "DELAY: %d MS\n", edata);
1326                         usleep_range(edata * 1000, edata * 2000);
1327                         break;
1328                 case IXGBE_DATA_NL:
1329                         hw_dbg(hw, "DATA:\n");
1330                         data_offset++;
1331                         ret_val = hw->eeprom.ops.read(hw, data_offset++,
1332                                                       &phy_offset);
1333                         if (ret_val)
1334                                 goto err_eeprom;
1335                         for (i = 0; i < edata; i++) {
1336                                 ret_val = hw->eeprom.ops.read(hw, data_offset,
1337                                                               &eword);
1338                                 if (ret_val)
1339                                         goto err_eeprom;
1340                                 hw->phy.ops.write_reg(hw, phy_offset,
1341                                                       MDIO_MMD_PMAPMD, eword);
1342                                 hw_dbg(hw, "Wrote %4.4x to %4.4x\n", eword,
1343                                        phy_offset);
1344                                 data_offset++;
1345                                 phy_offset++;
1346                         }
1347                         break;
1348                 case IXGBE_CONTROL_NL:
1349                         data_offset++;
1350                         hw_dbg(hw, "CONTROL:\n");
1351                         if (edata == IXGBE_CONTROL_EOL_NL) {
1352                                 hw_dbg(hw, "EOL\n");
1353                                 end_data = true;
1354                         } else if (edata == IXGBE_CONTROL_SOL_NL) {
1355                                 hw_dbg(hw, "SOL\n");
1356                         } else {
1357                                 hw_dbg(hw, "Bad control value\n");
1358                                 return IXGBE_ERR_PHY;
1359                         }
1360                         break;
1361                 default:
1362                         hw_dbg(hw, "Bad control type\n");
1363                         return IXGBE_ERR_PHY;
1364                 }
1365         }
1366 
1367         return ret_val;
1368 
1369 err_eeprom:
1370         hw_err(hw, "eeprom read at offset %d failed\n", data_offset);
1371         return IXGBE_ERR_PHY;
1372 }
1373 
1374 /**
1375  *  ixgbe_identify_module_generic - Identifies module type
1376  *  @hw: pointer to hardware structure
1377  *
1378  *  Determines HW type and calls appropriate function.
1379  **/
1380 s32 ixgbe_identify_module_generic(struct ixgbe_hw *hw)
1381 {
1382         switch (hw->mac.ops.get_media_type(hw)) {
1383         case ixgbe_media_type_fiber:
1384                 return ixgbe_identify_sfp_module_generic(hw);
1385         case ixgbe_media_type_fiber_qsfp:
1386                 return ixgbe_identify_qsfp_module_generic(hw);
1387         default:
1388                 hw->phy.sfp_type = ixgbe_sfp_type_not_present;
1389                 return IXGBE_ERR_SFP_NOT_PRESENT;
1390         }
1391 
1392         return IXGBE_ERR_SFP_NOT_PRESENT;
1393 }
1394 
1395 /**
1396  *  ixgbe_identify_sfp_module_generic - Identifies SFP modules
1397  *  @hw: pointer to hardware structure
1398  *
1399  *  Searches for and identifies the SFP module and assigns appropriate PHY type.
1400  **/
1401 s32 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw)
1402 {
1403         struct ixgbe_adapter *adapter = hw->back;
1404         s32 status;
1405         u32 vendor_oui = 0;
1406         enum ixgbe_sfp_type stored_sfp_type = hw->phy.sfp_type;
1407         u8 identifier = 0;
1408         u8 comp_codes_1g = 0;
1409         u8 comp_codes_10g = 0;
1410         u8 oui_bytes[3] = {0, 0, 0};
1411         u8 cable_tech = 0;
1412         u8 cable_spec = 0;
1413         u16 enforce_sfp = 0;
1414 
1415         if (hw->mac.ops.get_media_type(hw) != ixgbe_media_type_fiber) {
1416                 hw->phy.sfp_type = ixgbe_sfp_type_not_present;
1417                 return IXGBE_ERR_SFP_NOT_PRESENT;
1418         }
1419 
1420         /* LAN ID is needed for sfp_type determination */
1421         hw->mac.ops.set_lan_id(hw);
1422 
1423         status = hw->phy.ops.read_i2c_eeprom(hw,
1424                                              IXGBE_SFF_IDENTIFIER,
1425                                              &identifier);
1426 
1427         if (status)
1428                 goto err_read_i2c_eeprom;
1429 
1430         if (identifier != IXGBE_SFF_IDENTIFIER_SFP) {
1431                 hw->phy.type = ixgbe_phy_sfp_unsupported;
1432                 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1433         }
1434         status = hw->phy.ops.read_i2c_eeprom(hw,
1435                                              IXGBE_SFF_1GBE_COMP_CODES,
1436                                              &comp_codes_1g);
1437 
1438         if (status)
1439                 goto err_read_i2c_eeprom;
1440 
1441         status = hw->phy.ops.read_i2c_eeprom(hw,
1442                                              IXGBE_SFF_10GBE_COMP_CODES,
1443                                              &comp_codes_10g);
1444 
1445         if (status)
1446                 goto err_read_i2c_eeprom;
1447         status = hw->phy.ops.read_i2c_eeprom(hw,
1448                                              IXGBE_SFF_CABLE_TECHNOLOGY,
1449                                              &cable_tech);
1450 
1451         if (status)
1452                 goto err_read_i2c_eeprom;
1453 
1454          /* ID Module
1455           * =========
1456           * 0   SFP_DA_CU
1457           * 1   SFP_SR
1458           * 2   SFP_LR
1459           * 3   SFP_DA_CORE0 - 82599-specific
1460           * 4   SFP_DA_CORE1 - 82599-specific
1461           * 5   SFP_SR/LR_CORE0 - 82599-specific
1462           * 6   SFP_SR/LR_CORE1 - 82599-specific
1463           * 7   SFP_act_lmt_DA_CORE0 - 82599-specific
1464           * 8   SFP_act_lmt_DA_CORE1 - 82599-specific
1465           * 9   SFP_1g_cu_CORE0 - 82599-specific
1466           * 10  SFP_1g_cu_CORE1 - 82599-specific
1467           * 11  SFP_1g_sx_CORE0 - 82599-specific
1468           * 12  SFP_1g_sx_CORE1 - 82599-specific
1469           */
1470         if (hw->mac.type == ixgbe_mac_82598EB) {
1471                 if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE)
1472                         hw->phy.sfp_type = ixgbe_sfp_type_da_cu;
1473                 else if (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)
1474                         hw->phy.sfp_type = ixgbe_sfp_type_sr;
1475                 else if (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)
1476                         hw->phy.sfp_type = ixgbe_sfp_type_lr;
1477                 else
1478                         hw->phy.sfp_type = ixgbe_sfp_type_unknown;
1479         } else {
1480                 if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE) {
1481                         if (hw->bus.lan_id == 0)
1482                                 hw->phy.sfp_type =
1483                                              ixgbe_sfp_type_da_cu_core0;
1484                         else
1485                                 hw->phy.sfp_type =
1486                                              ixgbe_sfp_type_da_cu_core1;
1487                 } else if (cable_tech & IXGBE_SFF_DA_ACTIVE_CABLE) {
1488                         hw->phy.ops.read_i2c_eeprom(
1489                                         hw, IXGBE_SFF_CABLE_SPEC_COMP,
1490                                         &cable_spec);
1491                         if (cable_spec &
1492                             IXGBE_SFF_DA_SPEC_ACTIVE_LIMITING) {
1493                                 if (hw->bus.lan_id == 0)
1494                                         hw->phy.sfp_type =
1495                                         ixgbe_sfp_type_da_act_lmt_core0;
1496                                 else
1497                                         hw->phy.sfp_type =
1498                                         ixgbe_sfp_type_da_act_lmt_core1;
1499                         } else {
1500                                 hw->phy.sfp_type =
1501                                                 ixgbe_sfp_type_unknown;
1502                         }
1503                 } else if (comp_codes_10g &
1504                            (IXGBE_SFF_10GBASESR_CAPABLE |
1505                             IXGBE_SFF_10GBASELR_CAPABLE)) {
1506                         if (hw->bus.lan_id == 0)
1507                                 hw->phy.sfp_type =
1508                                               ixgbe_sfp_type_srlr_core0;
1509                         else
1510                                 hw->phy.sfp_type =
1511                                               ixgbe_sfp_type_srlr_core1;
1512                 } else if (comp_codes_1g & IXGBE_SFF_1GBASET_CAPABLE) {
1513                         if (hw->bus.lan_id == 0)
1514                                 hw->phy.sfp_type =
1515                                         ixgbe_sfp_type_1g_cu_core0;
1516                         else
1517                                 hw->phy.sfp_type =
1518                                         ixgbe_sfp_type_1g_cu_core1;
1519                 } else if (comp_codes_1g & IXGBE_SFF_1GBASESX_CAPABLE) {
1520                         if (hw->bus.lan_id == 0)
1521                                 hw->phy.sfp_type =
1522                                         ixgbe_sfp_type_1g_sx_core0;
1523                         else
1524                                 hw->phy.sfp_type =
1525                                         ixgbe_sfp_type_1g_sx_core1;
1526                 } else if (comp_codes_1g & IXGBE_SFF_1GBASELX_CAPABLE) {
1527                         if (hw->bus.lan_id == 0)
1528                                 hw->phy.sfp_type =
1529                                         ixgbe_sfp_type_1g_lx_core0;
1530                         else
1531                                 hw->phy.sfp_type =
1532                                         ixgbe_sfp_type_1g_lx_core1;
1533                 } else {
1534                         hw->phy.sfp_type = ixgbe_sfp_type_unknown;
1535                 }
1536         }
1537 
1538         if (hw->phy.sfp_type != stored_sfp_type)
1539                 hw->phy.sfp_setup_needed = true;
1540 
1541         /* Determine if the SFP+ PHY is dual speed or not. */
1542         hw->phy.multispeed_fiber = false;
1543         if (((comp_codes_1g & IXGBE_SFF_1GBASESX_CAPABLE) &&
1544              (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)) ||
1545             ((comp_codes_1g & IXGBE_SFF_1GBASELX_CAPABLE) &&
1546              (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)))
1547                 hw->phy.multispeed_fiber = true;
1548 
1549         /* Determine PHY vendor */
1550         if (hw->phy.type != ixgbe_phy_nl) {
1551                 hw->phy.id = identifier;
1552                 status = hw->phy.ops.read_i2c_eeprom(hw,
1553                                             IXGBE_SFF_VENDOR_OUI_BYTE0,
1554                                             &oui_bytes[0]);
1555 
1556                 if (status != 0)
1557                         goto err_read_i2c_eeprom;
1558 
1559                 status = hw->phy.ops.read_i2c_eeprom(hw,
1560                                             IXGBE_SFF_VENDOR_OUI_BYTE1,
1561                                             &oui_bytes[1]);
1562 
1563                 if (status != 0)
1564                         goto err_read_i2c_eeprom;
1565 
1566                 status = hw->phy.ops.read_i2c_eeprom(hw,
1567                                             IXGBE_SFF_VENDOR_OUI_BYTE2,
1568                                             &oui_bytes[2]);
1569 
1570                 if (status != 0)
1571                         goto err_read_i2c_eeprom;
1572 
1573                 vendor_oui =
1574                   ((oui_bytes[0] << IXGBE_SFF_VENDOR_OUI_BYTE0_SHIFT) |
1575                    (oui_bytes[1] << IXGBE_SFF_VENDOR_OUI_BYTE1_SHIFT) |
1576                    (oui_bytes[2] << IXGBE_SFF_VENDOR_OUI_BYTE2_SHIFT));
1577 
1578                 switch (vendor_oui) {
1579                 case IXGBE_SFF_VENDOR_OUI_TYCO:
1580                         if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE)
1581                                 hw->phy.type =
1582                                             ixgbe_phy_sfp_passive_tyco;
1583                         break;
1584                 case IXGBE_SFF_VENDOR_OUI_FTL:
1585                         if (cable_tech & IXGBE_SFF_DA_ACTIVE_CABLE)
1586                                 hw->phy.type = ixgbe_phy_sfp_ftl_active;
1587                         else
1588                                 hw->phy.type = ixgbe_phy_sfp_ftl;
1589                         break;
1590                 case IXGBE_SFF_VENDOR_OUI_AVAGO:
1591                         hw->phy.type = ixgbe_phy_sfp_avago;
1592                         break;
1593                 case IXGBE_SFF_VENDOR_OUI_INTEL:
1594                         hw->phy.type = ixgbe_phy_sfp_intel;
1595                         break;
1596                 default:
1597                         if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE)
1598                                 hw->phy.type =
1599                                          ixgbe_phy_sfp_passive_unknown;
1600                         else if (cable_tech & IXGBE_SFF_DA_ACTIVE_CABLE)
1601                                 hw->phy.type =
1602                                         ixgbe_phy_sfp_active_unknown;
1603                         else
1604                                 hw->phy.type = ixgbe_phy_sfp_unknown;
1605                         break;
1606                 }
1607         }
1608 
1609         /* Allow any DA cable vendor */
1610         if (cable_tech & (IXGBE_SFF_DA_PASSIVE_CABLE |
1611             IXGBE_SFF_DA_ACTIVE_CABLE))
1612                 return 0;
1613 
1614         /* Verify supported 1G SFP modules */
1615         if (comp_codes_10g == 0 &&
1616             !(hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core1 ||
1617               hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core0 ||
1618               hw->phy.sfp_type == ixgbe_sfp_type_1g_lx_core0 ||
1619               hw->phy.sfp_type == ixgbe_sfp_type_1g_lx_core1 ||
1620               hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core0 ||
1621               hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core1)) {
1622                 hw->phy.type = ixgbe_phy_sfp_unsupported;
1623                 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1624         }
1625 
1626         /* Anything else 82598-based is supported */
1627         if (hw->mac.type == ixgbe_mac_82598EB)
1628                 return 0;
1629 
1630         hw->mac.ops.get_device_caps(hw, &enforce_sfp);
1631         if (!(enforce_sfp & IXGBE_DEVICE_CAPS_ALLOW_ANY_SFP) &&
1632             !(hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core0 ||
1633               hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core1 ||
1634               hw->phy.sfp_type == ixgbe_sfp_type_1g_lx_core0 ||
1635               hw->phy.sfp_type == ixgbe_sfp_type_1g_lx_core1 ||
1636               hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core0 ||
1637               hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core1)) {
1638                 /* Make sure we're a supported PHY type */
1639                 if (hw->phy.type == ixgbe_phy_sfp_intel)
1640                         return 0;
1641                 if (hw->allow_unsupported_sfp) {
1642                         e_warn(drv, "WARNING: Intel (R) Network Connections are quality tested using Intel (R) Ethernet Optics.  Using untested modules is not supported and may cause unstable operation or damage to the module or the adapter.  Intel Corporation is not responsible for any harm caused by using untested modules.\n");
1643                         return 0;
1644                 }
1645                 hw_dbg(hw, "SFP+ module not supported\n");
1646                 hw->phy.type = ixgbe_phy_sfp_unsupported;
1647                 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1648         }
1649         return 0;
1650 
1651 err_read_i2c_eeprom:
1652         hw->phy.sfp_type = ixgbe_sfp_type_not_present;
1653         if (hw->phy.type != ixgbe_phy_nl) {
1654                 hw->phy.id = 0;
1655                 hw->phy.type = ixgbe_phy_unknown;
1656         }
1657         return IXGBE_ERR_SFP_NOT_PRESENT;
1658 }
1659 
1660 /**
1661  * ixgbe_identify_qsfp_module_generic - Identifies QSFP modules
1662  * @hw: pointer to hardware structure
1663  *
1664  * Searches for and identifies the QSFP module and assigns appropriate PHY type
1665  **/
1666 static s32 ixgbe_identify_qsfp_module_generic(struct ixgbe_hw *hw)
1667 {
1668         struct ixgbe_adapter *adapter = hw->back;
1669         s32 status;
1670         u32 vendor_oui = 0;
1671         enum ixgbe_sfp_type stored_sfp_type = hw->phy.sfp_type;
1672         u8 identifier = 0;
1673         u8 comp_codes_1g = 0;
1674         u8 comp_codes_10g = 0;
1675         u8 oui_bytes[3] = {0, 0, 0};
1676         u16 enforce_sfp = 0;
1677         u8 connector = 0;
1678         u8 cable_length = 0;
1679         u8 device_tech = 0;
1680         bool active_cable = false;
1681 
1682         if (hw->mac.ops.get_media_type(hw) != ixgbe_media_type_fiber_qsfp) {
1683                 hw->phy.sfp_type = ixgbe_sfp_type_not_present;
1684                 return IXGBE_ERR_SFP_NOT_PRESENT;
1685         }
1686 
1687         /* LAN ID is needed for sfp_type determination */
1688         hw->mac.ops.set_lan_id(hw);
1689 
1690         status = hw->phy.ops.read_i2c_eeprom(hw, IXGBE_SFF_IDENTIFIER,
1691                                              &identifier);
1692 
1693         if (status != 0)
1694                 goto err_read_i2c_eeprom;
1695 
1696         if (identifier != IXGBE_SFF_IDENTIFIER_QSFP_PLUS) {
1697                 hw->phy.type = ixgbe_phy_sfp_unsupported;
1698                 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1699         }
1700 
1701         hw->phy.id = identifier;
1702 
1703         status = hw->phy.ops.read_i2c_eeprom(hw, IXGBE_SFF_QSFP_10GBE_COMP,
1704                                              &comp_codes_10g);
1705 
1706         if (status != 0)
1707                 goto err_read_i2c_eeprom;
1708 
1709         status = hw->phy.ops.read_i2c_eeprom(hw, IXGBE_SFF_QSFP_1GBE_COMP,
1710                                              &comp_codes_1g);
1711 
1712         if (status != 0)
1713                 goto err_read_i2c_eeprom;
1714 
1715         if (comp_codes_10g & IXGBE_SFF_QSFP_DA_PASSIVE_CABLE) {
1716                 hw->phy.type = ixgbe_phy_qsfp_passive_unknown;
1717                 if (hw->bus.lan_id == 0)
1718                         hw->phy.sfp_type = ixgbe_sfp_type_da_cu_core0;
1719                 else
1720                         hw->phy.sfp_type = ixgbe_sfp_type_da_cu_core1;
1721         } else if (comp_codes_10g & (IXGBE_SFF_10GBASESR_CAPABLE |
1722                                      IXGBE_SFF_10GBASELR_CAPABLE)) {
1723                 if (hw->bus.lan_id == 0)
1724                         hw->phy.sfp_type = ixgbe_sfp_type_srlr_core0;
1725                 else
1726                         hw->phy.sfp_type = ixgbe_sfp_type_srlr_core1;
1727         } else {
1728                 if (comp_codes_10g & IXGBE_SFF_QSFP_DA_ACTIVE_CABLE)
1729                         active_cable = true;
1730 
1731                 if (!active_cable) {
1732                         /* check for active DA cables that pre-date
1733                          * SFF-8436 v3.6
1734                          */
1735                         hw->phy.ops.read_i2c_eeprom(hw,
1736                                         IXGBE_SFF_QSFP_CONNECTOR,
1737                                         &connector);
1738 
1739                         hw->phy.ops.read_i2c_eeprom(hw,
1740                                         IXGBE_SFF_QSFP_CABLE_LENGTH,
1741                                         &cable_length);
1742 
1743                         hw->phy.ops.read_i2c_eeprom(hw,
1744                                         IXGBE_SFF_QSFP_DEVICE_TECH,
1745                                         &device_tech);
1746 
1747                         if ((connector ==
1748                                      IXGBE_SFF_QSFP_CONNECTOR_NOT_SEPARABLE) &&
1749                             (cable_length > 0) &&
1750                             ((device_tech >> 4) ==
1751                                      IXGBE_SFF_QSFP_TRANSMITER_850NM_VCSEL))
1752                                 active_cable = true;
1753                 }
1754 
1755                 if (active_cable) {
1756                         hw->phy.type = ixgbe_phy_qsfp_active_unknown;
1757                         if (hw->bus.lan_id == 0)
1758                                 hw->phy.sfp_type =
1759                                                 ixgbe_sfp_type_da_act_lmt_core0;
1760                         else
1761                                 hw->phy.sfp_type =
1762                                                 ixgbe_sfp_type_da_act_lmt_core1;
1763                 } else {
1764                         /* unsupported module type */
1765                         hw->phy.type = ixgbe_phy_sfp_unsupported;
1766                         return IXGBE_ERR_SFP_NOT_SUPPORTED;
1767                 }
1768         }
1769 
1770         if (hw->phy.sfp_type != stored_sfp_type)
1771                 hw->phy.sfp_setup_needed = true;
1772 
1773         /* Determine if the QSFP+ PHY is dual speed or not. */
1774         hw->phy.multispeed_fiber = false;
1775         if (((comp_codes_1g & IXGBE_SFF_1GBASESX_CAPABLE) &&
1776              (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)) ||
1777             ((comp_codes_1g & IXGBE_SFF_1GBASELX_CAPABLE) &&
1778              (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)))
1779                 hw->phy.multispeed_fiber = true;
1780 
1781         /* Determine PHY vendor for optical modules */
1782         if (comp_codes_10g & (IXGBE_SFF_10GBASESR_CAPABLE |
1783                               IXGBE_SFF_10GBASELR_CAPABLE)) {
1784                 status = hw->phy.ops.read_i2c_eeprom(hw,
1785                                         IXGBE_SFF_QSFP_VENDOR_OUI_BYTE0,
1786                                         &oui_bytes[0]);
1787 
1788                 if (status != 0)
1789                         goto err_read_i2c_eeprom;
1790 
1791                 status = hw->phy.ops.read_i2c_eeprom(hw,
1792                                         IXGBE_SFF_QSFP_VENDOR_OUI_BYTE1,
1793                                         &oui_bytes[1]);
1794 
1795                 if (status != 0)
1796                         goto err_read_i2c_eeprom;
1797 
1798                 status = hw->phy.ops.read_i2c_eeprom(hw,
1799                                         IXGBE_SFF_QSFP_VENDOR_OUI_BYTE2,
1800                                         &oui_bytes[2]);
1801 
1802                 if (status != 0)
1803                         goto err_read_i2c_eeprom;
1804 
1805                 vendor_oui =
1806                         ((oui_bytes[0] << IXGBE_SFF_VENDOR_OUI_BYTE0_SHIFT) |
1807                          (oui_bytes[1] << IXGBE_SFF_VENDOR_OUI_BYTE1_SHIFT) |
1808                          (oui_bytes[2] << IXGBE_SFF_VENDOR_OUI_BYTE2_SHIFT));
1809 
1810                 if (vendor_oui == IXGBE_SFF_VENDOR_OUI_INTEL)
1811                         hw->phy.type = ixgbe_phy_qsfp_intel;
1812                 else
1813                         hw->phy.type = ixgbe_phy_qsfp_unknown;
1814 
1815                 hw->mac.ops.get_device_caps(hw, &enforce_sfp);
1816                 if (!(enforce_sfp & IXGBE_DEVICE_CAPS_ALLOW_ANY_SFP)) {
1817                         /* Make sure we're a supported PHY type */
1818                         if (hw->phy.type == ixgbe_phy_qsfp_intel)
1819                                 return 0;
1820                         if (hw->allow_unsupported_sfp) {
1821                                 e_warn(drv, "WARNING: Intel (R) Network Connections are quality tested using Intel (R) Ethernet Optics. Using untested modules is not supported and may cause unstable operation or damage to the module or the adapter. Intel Corporation is not responsible for any harm caused by using untested modules.\n");
1822                                 return 0;
1823                         }
1824                         hw_dbg(hw, "QSFP module not supported\n");
1825                         hw->phy.type = ixgbe_phy_sfp_unsupported;
1826                         return IXGBE_ERR_SFP_NOT_SUPPORTED;
1827                 }
1828                 return 0;
1829         }
1830         return 0;
1831 
1832 err_read_i2c_eeprom:
1833         hw->phy.sfp_type = ixgbe_sfp_type_not_present;
1834         hw->phy.id = 0;
1835         hw->phy.type = ixgbe_phy_unknown;
1836 
1837         return IXGBE_ERR_SFP_NOT_PRESENT;
1838 }
1839 
1840 /**
1841  *  ixgbe_get_sfp_init_sequence_offsets - Provides offset of PHY init sequence
1842  *  @hw: pointer to hardware structure
1843  *  @list_offset: offset to the SFP ID list
1844  *  @data_offset: offset to the SFP data block
1845  *
1846  *  Checks the MAC's EEPROM to see if it supports a given SFP+ module type, if
1847  *  so it returns the offsets to the phy init sequence block.
1848  **/
1849 s32 ixgbe_get_sfp_init_sequence_offsets(struct ixgbe_hw *hw,
1850                                         u16 *list_offset,
1851                                         u16 *data_offset)
1852 {
1853         u16 sfp_id;
1854         u16 sfp_type = hw->phy.sfp_type;
1855 
1856         if (hw->phy.sfp_type == ixgbe_sfp_type_unknown)
1857                 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1858 
1859         if (hw->phy.sfp_type == ixgbe_sfp_type_not_present)
1860                 return IXGBE_ERR_SFP_NOT_PRESENT;
1861 
1862         if ((hw->device_id == IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM) &&
1863             (hw->phy.sfp_type == ixgbe_sfp_type_da_cu))
1864                 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1865 
1866         /*
1867          * Limiting active cables and 1G Phys must be initialized as
1868          * SR modules
1869          */
1870         if (sfp_type == ixgbe_sfp_type_da_act_lmt_core0 ||
1871             sfp_type == ixgbe_sfp_type_1g_lx_core0 ||
1872             sfp_type == ixgbe_sfp_type_1g_cu_core0 ||
1873             sfp_type == ixgbe_sfp_type_1g_sx_core0)
1874                 sfp_type = ixgbe_sfp_type_srlr_core0;
1875         else if (sfp_type == ixgbe_sfp_type_da_act_lmt_core1 ||
1876                  sfp_type == ixgbe_sfp_type_1g_lx_core1 ||
1877                  sfp_type == ixgbe_sfp_type_1g_cu_core1 ||
1878                  sfp_type == ixgbe_sfp_type_1g_sx_core1)
1879                 sfp_type = ixgbe_sfp_type_srlr_core1;
1880 
1881         /* Read offset to PHY init contents */
1882         if (hw->eeprom.ops.read(hw, IXGBE_PHY_INIT_OFFSET_NL, list_offset)) {
1883                 hw_err(hw, "eeprom read at %d failed\n",
1884                        IXGBE_PHY_INIT_OFFSET_NL);
1885                 return IXGBE_ERR_SFP_NO_INIT_SEQ_PRESENT;
1886         }
1887 
1888         if ((!*list_offset) || (*list_offset == 0xFFFF))
1889                 return IXGBE_ERR_SFP_NO_INIT_SEQ_PRESENT;
1890 
1891         /* Shift offset to first ID word */
1892         (*list_offset)++;
1893 
1894         /*
1895          * Find the matching SFP ID in the EEPROM
1896          * and program the init sequence
1897          */
1898         if (hw->eeprom.ops.read(hw, *list_offset, &sfp_id))
1899                 goto err_phy;
1900 
1901         while (sfp_id != IXGBE_PHY_INIT_END_NL) {
1902                 if (sfp_id == sfp_type) {
1903                         (*list_offset)++;
1904                         if (hw->eeprom.ops.read(hw, *list_offset, data_offset))
1905                                 goto err_phy;
1906                         if ((!*data_offset) || (*data_offset == 0xFFFF)) {
1907                                 hw_dbg(hw, "SFP+ module not supported\n");
1908                                 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1909                         } else {
1910                                 break;
1911                         }
1912                 } else {
1913                         (*list_offset) += 2;
1914                         if (hw->eeprom.ops.read(hw, *list_offset, &sfp_id))
1915                                 goto err_phy;
1916                 }
1917         }
1918 
1919         if (sfp_id == IXGBE_PHY_INIT_END_NL) {
1920                 hw_dbg(hw, "No matching SFP+ module found\n");
1921                 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1922         }
1923 
1924         return 0;
1925 
1926 err_phy:
1927         hw_err(hw, "eeprom read at offset %d failed\n", *list_offset);
1928         return IXGBE_ERR_PHY;
1929 }
1930 
1931 /**
1932  *  ixgbe_read_i2c_eeprom_generic - Reads 8 bit EEPROM word over I2C interface
1933  *  @hw: pointer to hardware structure
1934  *  @byte_offset: EEPROM byte offset to read
1935  *  @eeprom_data: value read
1936  *
1937  *  Performs byte read operation to SFP module's EEPROM over I2C interface.
1938  **/
1939 s32 ixgbe_read_i2c_eeprom_generic(struct ixgbe_hw *hw, u8 byte_offset,
1940                                   u8 *eeprom_data)
1941 {
1942         return hw->phy.ops.read_i2c_byte(hw, byte_offset,
1943                                          IXGBE_I2C_EEPROM_DEV_ADDR,
1944                                          eeprom_data);
1945 }
1946 
1947 /**
1948  *  ixgbe_read_i2c_sff8472_generic - Reads 8 bit word over I2C interface
1949  *  @hw: pointer to hardware structure
1950  *  @byte_offset: byte offset at address 0xA2
1951  *  @sff8472_data: value read
1952  *
1953  *  Performs byte read operation to SFP module's SFF-8472 data over I2C
1954  **/
1955 s32 ixgbe_read_i2c_sff8472_generic(struct ixgbe_hw *hw, u8 byte_offset,
1956                                    u8 *sff8472_data)
1957 {
1958         return hw->phy.ops.read_i2c_byte(hw, byte_offset,
1959                                          IXGBE_I2C_EEPROM_DEV_ADDR2,
1960                                          sff8472_data);
1961 }
1962 
1963 /**
1964  *  ixgbe_write_i2c_eeprom_generic - Writes 8 bit EEPROM word over I2C interface
1965  *  @hw: pointer to hardware structure
1966  *  @byte_offset: EEPROM byte offset to write
1967  *  @eeprom_data: value to write
1968  *
1969  *  Performs byte write operation to SFP module's EEPROM over I2C interface.
1970  **/
1971 s32 ixgbe_write_i2c_eeprom_generic(struct ixgbe_hw *hw, u8 byte_offset,
1972                                    u8 eeprom_data)
1973 {
1974         return hw->phy.ops.write_i2c_byte(hw, byte_offset,
1975                                           IXGBE_I2C_EEPROM_DEV_ADDR,
1976                                           eeprom_data);
1977 }
1978 
1979 /**
1980  * ixgbe_is_sfp_probe - Returns true if SFP is being detected
1981  * @hw: pointer to hardware structure
1982  * @offset: eeprom offset to be read
1983  * @addr: I2C address to be read
1984  */
1985 static bool ixgbe_is_sfp_probe(struct ixgbe_hw *hw, u8 offset, u8 addr)
1986 {
1987         if (addr == IXGBE_I2C_EEPROM_DEV_ADDR &&
1988             offset == IXGBE_SFF_IDENTIFIER &&
1989             hw->phy.sfp_type == ixgbe_sfp_type_not_present)
1990                 return true;
1991         return false;
1992 }
1993 
1994 /**
1995  *  ixgbe_read_i2c_byte_generic_int - Reads 8 bit word over I2C
1996  *  @hw: pointer to hardware structure
1997  *  @byte_offset: byte offset to read
1998  *  @dev_addr: device address
1999  *  @data: value read
2000  *  @lock: true if to take and release semaphore
2001  *
2002  *  Performs byte read operation to SFP module's EEPROM over I2C interface at
2003  *  a specified device address.
2004  */
2005 static s32 ixgbe_read_i2c_byte_generic_int(struct ixgbe_hw *hw, u8 byte_offset,
2006                                            u8 dev_addr, u8 *data, bool lock)
2007 {
2008         s32 status;
2009         u32 max_retry = 10;
2010         u32 retry = 0;
2011         u32 swfw_mask = hw->phy.phy_semaphore_mask;
2012         bool nack = true;
2013 
2014         if (hw->mac.type >= ixgbe_mac_X550)
2015                 max_retry = 3;
2016         if (ixgbe_is_sfp_probe(hw, byte_offset, dev_addr))
2017                 max_retry = IXGBE_SFP_DETECT_RETRIES;
2018 
2019         *data = 0;
2020 
2021         do {
2022                 if (lock && hw->mac.ops.acquire_swfw_sync(hw, swfw_mask))
2023                         return IXGBE_ERR_SWFW_SYNC;
2024 
2025                 ixgbe_i2c_start(hw);
2026 
2027                 /* Device Address and write indication */
2028                 status = ixgbe_clock_out_i2c_byte(hw, dev_addr);
2029                 if (status != 0)
2030                         goto fail;
2031 
2032                 status = ixgbe_get_i2c_ack(hw);
2033                 if (status != 0)
2034                         goto fail;
2035 
2036                 status = ixgbe_clock_out_i2c_byte(hw, byte_offset);
2037                 if (status != 0)
2038                         goto fail;
2039 
2040                 status = ixgbe_get_i2c_ack(hw);
2041                 if (status != 0)
2042                         goto fail;
2043 
2044                 ixgbe_i2c_start(hw);
2045 
2046                 /* Device Address and read indication */
2047                 status = ixgbe_clock_out_i2c_byte(hw, (dev_addr | 0x1));
2048                 if (status != 0)
2049                         goto fail;
2050 
2051                 status = ixgbe_get_i2c_ack(hw);
2052                 if (status != 0)
2053                         goto fail;
2054 
2055                 status = ixgbe_clock_in_i2c_byte(hw, data);
2056                 if (status != 0)
2057                         goto fail;
2058 
2059                 status = ixgbe_clock_out_i2c_bit(hw, nack);
2060                 if (status != 0)
2061                         goto fail;
2062 
2063                 ixgbe_i2c_stop(hw);
2064                 if (lock)
2065                         hw->mac.ops.release_swfw_sync(hw, swfw_mask);
2066                 return 0;
2067 
2068 fail:
2069                 ixgbe_i2c_bus_clear(hw);
2070                 if (lock) {
2071                         hw->mac.ops.release_swfw_sync(hw, swfw_mask);
2072                         msleep(100);
2073                 }
2074                 retry++;
2075                 if (retry < max_retry)
2076                         hw_dbg(hw, "I2C byte read error - Retrying.\n");
2077                 else
2078                         hw_dbg(hw, "I2C byte read error.\n");
2079 
2080         } while (retry < max_retry);
2081 
2082         return status;
2083 }
2084 
2085 /**
2086  *  ixgbe_read_i2c_byte_generic - Reads 8 bit word over I2C
2087  *  @hw: pointer to hardware structure
2088  *  @byte_offset: byte offset to read
2089  *  @dev_addr: device address
2090  *  @data: value read
2091  *
2092  *  Performs byte read operation to SFP module's EEPROM over I2C interface at
2093  *  a specified device address.
2094  */
2095 s32 ixgbe_read_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset,
2096                                 u8 dev_addr, u8 *data)
2097 {
2098         return ixgbe_read_i2c_byte_generic_int(hw, byte_offset, dev_addr,
2099                                                data, true);
2100 }
2101 
2102 /**
2103  *  ixgbe_read_i2c_byte_generic_unlocked - Reads 8 bit word over I2C
2104  *  @hw: pointer to hardware structure
2105  *  @byte_offset: byte offset to read
2106  *  @dev_addr: device address
2107  *  @data: value read
2108  *
2109  *  Performs byte read operation to SFP module's EEPROM over I2C interface at
2110  *  a specified device address.
2111  */
2112 s32 ixgbe_read_i2c_byte_generic_unlocked(struct ixgbe_hw *hw, u8 byte_offset,
2113                                          u8 dev_addr, u8 *data)
2114 {
2115         return ixgbe_read_i2c_byte_generic_int(hw, byte_offset, dev_addr,
2116                                                data, false);
2117 }
2118 
2119 /**
2120  *  ixgbe_write_i2c_byte_generic_int - Writes 8 bit word over I2C
2121  *  @hw: pointer to hardware structure
2122  *  @byte_offset: byte offset to write
2123  *  @dev_addr: device address
2124  *  @data: value to write
2125  *  @lock: true if to take and release semaphore
2126  *
2127  *  Performs byte write operation to SFP module's EEPROM over I2C interface at
2128  *  a specified device address.
2129  */
2130 static s32 ixgbe_write_i2c_byte_generic_int(struct ixgbe_hw *hw, u8 byte_offset,
2131                                             u8 dev_addr, u8 data, bool lock)
2132 {
2133         s32 status;
2134         u32 max_retry = 1;
2135         u32 retry = 0;
2136         u32 swfw_mask = hw->phy.phy_semaphore_mask;
2137 
2138         if (lock && hw->mac.ops.acquire_swfw_sync(hw, swfw_mask))
2139                 return IXGBE_ERR_SWFW_SYNC;
2140 
2141         do {
2142                 ixgbe_i2c_start(hw);
2143 
2144                 status = ixgbe_clock_out_i2c_byte(hw, dev_addr);
2145                 if (status != 0)
2146                         goto fail;
2147 
2148                 status = ixgbe_get_i2c_ack(hw);
2149                 if (status != 0)
2150                         goto fail;
2151 
2152                 status = ixgbe_clock_out_i2c_byte(hw, byte_offset);
2153                 if (status != 0)
2154                         goto fail;
2155 
2156                 status = ixgbe_get_i2c_ack(hw);
2157                 if (status != 0)
2158                         goto fail;
2159 
2160                 status = ixgbe_clock_out_i2c_byte(hw, data);
2161                 if (status != 0)
2162                         goto fail;
2163 
2164                 status = ixgbe_get_i2c_ack(hw);
2165                 if (status != 0)
2166                         goto fail;
2167 
2168                 ixgbe_i2c_stop(hw);
2169                 if (lock)
2170                         hw->mac.ops.release_swfw_sync(hw, swfw_mask);
2171                 return 0;
2172 
2173 fail:
2174                 ixgbe_i2c_bus_clear(hw);
2175                 retry++;
2176                 if (retry < max_retry)
2177                         hw_dbg(hw, "I2C byte write error - Retrying.\n");
2178                 else
2179                         hw_dbg(hw, "I2C byte write error.\n");
2180         } while (retry < max_retry);
2181 
2182         if (lock)
2183                 hw->mac.ops.release_swfw_sync(hw, swfw_mask);
2184 
2185         return status;
2186 }
2187 
2188 /**
2189  *  ixgbe_write_i2c_byte_generic - Writes 8 bit word over I2C
2190  *  @hw: pointer to hardware structure
2191  *  @byte_offset: byte offset to write
2192  *  @dev_addr: device address
2193  *  @data: value to write
2194  *
2195  *  Performs byte write operation to SFP module's EEPROM over I2C interface at
2196  *  a specified device address.
2197  */
2198 s32 ixgbe_write_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset,
2199                                  u8 dev_addr, u8 data)
2200 {
2201         return ixgbe_write_i2c_byte_generic_int(hw, byte_offset, dev_addr,
2202                                                 data, true);
2203 }
2204 
2205 /**
2206  *  ixgbe_write_i2c_byte_generic_unlocked - Writes 8 bit word over I2C
2207  *  @hw: pointer to hardware structure
2208  *  @byte_offset: byte offset to write
2209  *  @dev_addr: device address
2210  *  @data: value to write
2211  *
2212  *  Performs byte write operation to SFP module's EEPROM over I2C interface at
2213  *  a specified device address.
2214  */
2215 s32 ixgbe_write_i2c_byte_generic_unlocked(struct ixgbe_hw *hw, u8 byte_offset,
2216                                           u8 dev_addr, u8 data)
2217 {
2218         return ixgbe_write_i2c_byte_generic_int(hw, byte_offset, dev_addr,
2219                                                 data, false);
2220 }
2221 
2222 /**
2223  *  ixgbe_i2c_start - Sets I2C start condition
2224  *  @hw: pointer to hardware structure
2225  *
2226  *  Sets I2C start condition (High -> Low on SDA while SCL is High)
2227  *  Set bit-bang mode on X550 hardware.
2228  **/
2229 static void ixgbe_i2c_start(struct ixgbe_hw *hw)
2230 {
2231         u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL(hw));
2232 
2233         i2cctl |= IXGBE_I2C_BB_EN(hw);
2234 
2235         /* Start condition must begin with data and clock high */
2236         ixgbe_set_i2c_data(hw, &i2cctl, 1);
2237         ixgbe_raise_i2c_clk(hw, &i2cctl);
2238 
2239         /* Setup time for start condition (4.7us) */
2240         udelay(IXGBE_I2C_T_SU_STA);
2241 
2242         ixgbe_set_i2c_data(hw, &i2cctl, 0);
2243 
2244         /* Hold time for start condition (4us) */
2245         udelay(IXGBE_I2C_T_HD_STA);
2246 
2247         ixgbe_lower_i2c_clk(hw, &i2cctl);
2248 
2249         /* Minimum low period of clock is 4.7 us */
2250         udelay(IXGBE_I2C_T_LOW);
2251 
2252 }
2253 
2254 /**
2255  *  ixgbe_i2c_stop - Sets I2C stop condition
2256  *  @hw: pointer to hardware structure
2257  *
2258  *  Sets I2C stop condition (Low -> High on SDA while SCL is High)
2259  *  Disables bit-bang mode and negates data output enable on X550
2260  *  hardware.
2261  **/
2262 static void ixgbe_i2c_stop(struct ixgbe_hw *hw)
2263 {
2264         u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL(hw));
2265         u32 data_oe_bit = IXGBE_I2C_DATA_OE_N_EN(hw);
2266         u32 clk_oe_bit = IXGBE_I2C_CLK_OE_N_EN(hw);
2267         u32 bb_en_bit = IXGBE_I2C_BB_EN(hw);
2268 
2269         /* Stop condition must begin with data low and clock high */
2270         ixgbe_set_i2c_data(hw, &i2cctl, 0);
2271         ixgbe_raise_i2c_clk(hw, &i2cctl);
2272 
2273         /* Setup time for stop condition (4us) */
2274         udelay(IXGBE_I2C_T_SU_STO);
2275 
2276         ixgbe_set_i2c_data(hw, &i2cctl, 1);
2277 
2278         /* bus free time between stop and start (4.7us)*/
2279         udelay(IXGBE_I2C_T_BUF);
2280 
2281         if (bb_en_bit || data_oe_bit || clk_oe_bit) {
2282                 i2cctl &= ~bb_en_bit;
2283                 i2cctl |= data_oe_bit | clk_oe_bit;
2284                 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL(hw), i2cctl);
2285                 IXGBE_WRITE_FLUSH(hw);
2286         }
2287 }
2288 
2289 /**
2290  *  ixgbe_clock_in_i2c_byte - Clocks in one byte via I2C
2291  *  @hw: pointer to hardware structure
2292  *  @data: data byte to clock in
2293  *
2294  *  Clocks in one byte data via I2C data/clock
2295  **/
2296 static s32 ixgbe_clock_in_i2c_byte(struct ixgbe_hw *hw, u8 *data)
2297 {
2298         s32 i;
2299         bool bit = false;
2300 
2301         *data = 0;
2302         for (i = 7; i >= 0; i--) {
2303                 ixgbe_clock_in_i2c_bit(hw, &bit);
2304                 *data |= bit << i;
2305         }
2306 
2307         return 0;
2308 }
2309 
2310 /**
2311  *  ixgbe_clock_out_i2c_byte - Clocks out one byte via I2C
2312  *  @hw: pointer to hardware structure
2313  *  @data: data byte clocked out
2314  *
2315  *  Clocks out one byte data via I2C data/clock
2316  **/
2317 static s32 ixgbe_clock_out_i2c_byte(struct ixgbe_hw *hw, u8 data)
2318 {
2319         s32 status;
2320         s32 i;
2321         u32 i2cctl;
2322         bool bit = false;
2323 
2324         for (i = 7; i >= 0; i--) {
2325                 bit = (data >> i) & 0x1;
2326                 status = ixgbe_clock_out_i2c_bit(hw, bit);
2327 
2328                 if (status != 0)
2329                         break;
2330         }
2331 
2332         /* Release SDA line (set high) */
2333         i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL(hw));
2334         i2cctl |= IXGBE_I2C_DATA_OUT(hw);
2335         i2cctl |= IXGBE_I2C_DATA_OE_N_EN(hw);
2336         IXGBE_WRITE_REG(hw, IXGBE_I2CCTL(hw), i2cctl);
2337         IXGBE_WRITE_FLUSH(hw);
2338 
2339         return status;
2340 }
2341 
2342 /**
2343  *  ixgbe_get_i2c_ack - Polls for I2C ACK
2344  *  @hw: pointer to hardware structure
2345  *
2346  *  Clocks in/out one bit via I2C data/clock
2347  **/
2348 static s32 ixgbe_get_i2c_ack(struct ixgbe_hw *hw)
2349 {
2350         u32 data_oe_bit = IXGBE_I2C_DATA_OE_N_EN(hw);
2351         s32 status = 0;
2352         u32 i = 0;
2353         u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL(hw));
2354         u32 timeout = 10;
2355         bool ack = true;
2356 
2357         if (data_oe_bit) {
2358                 i2cctl |= IXGBE_I2C_DATA_OUT(hw);
2359                 i2cctl |= data_oe_bit;
2360                 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL(hw), i2cctl);
2361                 IXGBE_WRITE_FLUSH(hw);
2362         }
2363         ixgbe_raise_i2c_clk(hw, &i2cctl);
2364 
2365         /* Minimum high period of clock is 4us */
2366         udelay(IXGBE_I2C_T_HIGH);
2367 
2368         /* Poll for ACK.  Note that ACK in I2C spec is
2369          * transition from 1 to 0 */
2370         for (i = 0; i < timeout; i++) {
2371                 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL(hw));
2372                 ack = ixgbe_get_i2c_data(hw, &i2cctl);
2373 
2374                 udelay(1);
2375                 if (ack == 0)
2376                         break;
2377         }
2378 
2379         if (ack == 1) {
2380                 hw_dbg(hw, "I2C ack was not received.\n");
2381                 status = IXGBE_ERR_I2C;
2382         }
2383 
2384         ixgbe_lower_i2c_clk(hw, &i2cctl);
2385 
2386         /* Minimum low period of clock is 4.7 us */
2387         udelay(IXGBE_I2C_T_LOW);
2388 
2389         return status;
2390 }
2391 
2392 /**
2393  *  ixgbe_clock_in_i2c_bit - Clocks in one bit via I2C data/clock
2394  *  @hw: pointer to hardware structure
2395  *  @data: read data value
2396  *
2397  *  Clocks in one bit via I2C data/clock
2398  **/
2399 static s32 ixgbe_clock_in_i2c_bit(struct ixgbe_hw *hw, bool *data)
2400 {
2401         u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL(hw));
2402         u32 data_oe_bit = IXGBE_I2C_DATA_OE_N_EN(hw);
2403 
2404         if (data_oe_bit) {
2405                 i2cctl |= IXGBE_I2C_DATA_OUT(hw);
2406                 i2cctl |= data_oe_bit;
2407                 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL(hw), i2cctl);
2408                 IXGBE_WRITE_FLUSH(hw);
2409         }
2410         ixgbe_raise_i2c_clk(hw, &i2cctl);
2411 
2412         /* Minimum high period of clock is 4us */
2413         udelay(IXGBE_I2C_T_HIGH);
2414 
2415         i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL(hw));
2416         *data = ixgbe_get_i2c_data(hw, &i2cctl);
2417 
2418         ixgbe_lower_i2c_clk(hw, &i2cctl);
2419 
2420         /* Minimum low period of clock is 4.7 us */
2421         udelay(IXGBE_I2C_T_LOW);
2422 
2423         return 0;
2424 }
2425 
2426 /**
2427  *  ixgbe_clock_out_i2c_bit - Clocks in/out one bit via I2C data/clock
2428  *  @hw: pointer to hardware structure
2429  *  @data: data value to write
2430  *
2431  *  Clocks out one bit via I2C data/clock
2432  **/
2433 static s32 ixgbe_clock_out_i2c_bit(struct ixgbe_hw *hw, bool data)
2434 {
2435         s32 status;
2436         u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL(hw));
2437 
2438         status = ixgbe_set_i2c_data(hw, &i2cctl, data);
2439         if (status == 0) {
2440                 ixgbe_raise_i2c_clk(hw, &i2cctl);
2441 
2442                 /* Minimum high period of clock is 4us */
2443                 udelay(IXGBE_I2C_T_HIGH);
2444 
2445                 ixgbe_lower_i2c_clk(hw, &i2cctl);
2446 
2447                 /* Minimum low period of clock is 4.7 us.
2448                  * This also takes care of the data hold time.
2449                  */
2450                 udelay(IXGBE_I2C_T_LOW);
2451         } else {
2452                 hw_dbg(hw, "I2C data was not set to %X\n", data);
2453                 return IXGBE_ERR_I2C;
2454         }
2455 
2456         return 0;
2457 }
2458 /**
2459  *  ixgbe_raise_i2c_clk - Raises the I2C SCL clock
2460  *  @hw: pointer to hardware structure
2461  *  @i2cctl: Current value of I2CCTL register
2462  *
2463  *  Raises the I2C clock line '0'->'1'
2464  *  Negates the I2C clock output enable on X550 hardware.
2465  **/
2466 static void ixgbe_raise_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl)
2467 {
2468         u32 clk_oe_bit = IXGBE_I2C_CLK_OE_N_EN(hw);
2469         u32 i = 0;
2470         u32 timeout = IXGBE_I2C_CLOCK_STRETCHING_TIMEOUT;
2471         u32 i2cctl_r = 0;
2472 
2473         if (clk_oe_bit) {
2474                 *i2cctl |= clk_oe_bit;
2475                 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL(hw), *i2cctl);
2476         }
2477 
2478         for (i = 0; i < timeout; i++) {
2479                 *i2cctl |= IXGBE_I2C_CLK_OUT(hw);
2480                 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL(hw), *i2cctl);
2481                 IXGBE_WRITE_FLUSH(hw);
2482                 /* SCL rise time (1000ns) */
2483                 udelay(IXGBE_I2C_T_RISE);
2484 
2485                 i2cctl_r = IXGBE_READ_REG(hw, IXGBE_I2CCTL(hw));
2486                 if (i2cctl_r & IXGBE_I2C_CLK_IN(hw))
2487                         break;
2488         }
2489 }
2490 
2491 /**
2492  *  ixgbe_lower_i2c_clk - Lowers the I2C SCL clock
2493  *  @hw: pointer to hardware structure
2494  *  @i2cctl: Current value of I2CCTL register
2495  *
2496  *  Lowers the I2C clock line '1'->'0'
2497  *  Asserts the I2C clock output enable on X550 hardware.
2498  **/
2499 static void ixgbe_lower_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl)
2500 {
2501 
2502         *i2cctl &= ~IXGBE_I2C_CLK_OUT(hw);
2503         *i2cctl &= ~IXGBE_I2C_CLK_OE_N_EN(hw);
2504 
2505         IXGBE_WRITE_REG(hw, IXGBE_I2CCTL(hw), *i2cctl);
2506         IXGBE_WRITE_FLUSH(hw);
2507 
2508         /* SCL fall time (300ns) */
2509         udelay(IXGBE_I2C_T_FALL);
2510 }
2511 
2512 /**
2513  *  ixgbe_set_i2c_data - Sets the I2C data bit
2514  *  @hw: pointer to hardware structure
2515  *  @i2cctl: Current value of I2CCTL register
2516  *  @data: I2C data value (0 or 1) to set
2517  *
2518  *  Sets the I2C data bit
2519  *  Asserts the I2C data output enable on X550 hardware.
2520  **/
2521 static s32 ixgbe_set_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl, bool data)
2522 {
2523         u32 data_oe_bit = IXGBE_I2C_DATA_OE_N_EN(hw);
2524 
2525         if (data)
2526                 *i2cctl |= IXGBE_I2C_DATA_OUT(hw);
2527         else
2528                 *i2cctl &= ~IXGBE_I2C_DATA_OUT(hw);
2529         *i2cctl &= ~data_oe_bit;
2530 
2531         IXGBE_WRITE_REG(hw, IXGBE_I2CCTL(hw), *i2cctl);
2532         IXGBE_WRITE_FLUSH(hw);
2533 
2534         /* Data rise/fall (1000ns/300ns) and set-up time (250ns) */
2535         udelay(IXGBE_I2C_T_RISE + IXGBE_I2C_T_FALL + IXGBE_I2C_T_SU_DATA);
2536 
2537         if (!data)      /* Can't verify data in this case */
2538                 return 0;
2539         if (data_oe_bit) {
2540                 *i2cctl |= data_oe_bit;
2541                 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL(hw), *i2cctl);
2542                 IXGBE_WRITE_FLUSH(hw);
2543         }
2544 
2545         /* Verify data was set correctly */
2546         *i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL(hw));
2547         if (data != ixgbe_get_i2c_data(hw, i2cctl)) {
2548                 hw_dbg(hw, "Error - I2C data was not set to %X.\n", data);
2549                 return IXGBE_ERR_I2C;
2550         }
2551 
2552         return 0;
2553 }
2554 
2555 /**
2556  *  ixgbe_get_i2c_data - Reads the I2C SDA data bit
2557  *  @hw: pointer to hardware structure
2558  *  @i2cctl: Current value of I2CCTL register
2559  *
2560  *  Returns the I2C data bit value
2561  *  Negates the I2C data output enable on X550 hardware.
2562  **/
2563 static bool ixgbe_get_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl)
2564 {
2565         u32 data_oe_bit = IXGBE_I2C_DATA_OE_N_EN(hw);
2566 
2567         if (data_oe_bit) {
2568                 *i2cctl |= data_oe_bit;
2569                 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL(hw), *i2cctl);
2570                 IXGBE_WRITE_FLUSH(hw);
2571                 udelay(IXGBE_I2C_T_FALL);
2572         }
2573 
2574         if (*i2cctl & IXGBE_I2C_DATA_IN(hw))
2575                 return true;
2576         return false;
2577 }
2578 
2579 /**
2580  *  ixgbe_i2c_bus_clear - Clears the I2C bus
2581  *  @hw: pointer to hardware structure
2582  *
2583  *  Clears the I2C bus by sending nine clock pulses.
2584  *  Used when data line is stuck low.
2585  **/
2586 static void ixgbe_i2c_bus_clear(struct ixgbe_hw *hw)
2587 {
2588         u32 i2cctl;
2589         u32 i;
2590 
2591         ixgbe_i2c_start(hw);
2592         i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL(hw));
2593 
2594         ixgbe_set_i2c_data(hw, &i2cctl, 1);
2595 
2596         for (i = 0; i < 9; i++) {
2597                 ixgbe_raise_i2c_clk(hw, &i2cctl);
2598 
2599                 /* Min high period of clock is 4us */
2600                 udelay(IXGBE_I2C_T_HIGH);
2601 
2602                 ixgbe_lower_i2c_clk(hw, &i2cctl);
2603 
2604                 /* Min low period of clock is 4.7us*/
2605                 udelay(IXGBE_I2C_T_LOW);
2606         }
2607 
2608         ixgbe_i2c_start(hw);
2609 
2610         /* Put the i2c bus back to default state */
2611         ixgbe_i2c_stop(hw);
2612 }
2613 
2614 /**
2615  *  ixgbe_tn_check_overtemp - Checks if an overtemp occurred.
2616  *  @hw: pointer to hardware structure
2617  *
2618  *  Checks if the LASI temp alarm status was triggered due to overtemp
2619  **/
2620 s32 ixgbe_tn_check_overtemp(struct ixgbe_hw *hw)
2621 {
2622         u16 phy_data = 0;
2623 
2624         if (hw->device_id != IXGBE_DEV_ID_82599_T3_LOM)
2625                 return 0;
2626 
2627         /* Check that the LASI temp alarm status was triggered */
2628         hw->phy.ops.read_reg(hw, IXGBE_TN_LASI_STATUS_REG,
2629                              MDIO_MMD_PMAPMD, &phy_data);
2630 
2631         if (!(phy_data & IXGBE_TN_LASI_STATUS_TEMP_ALARM))
2632                 return 0;
2633 
2634         return IXGBE_ERR_OVERTEMP;
2635 }
2636 
2637 /** ixgbe_set_copper_phy_power - Control power for copper phy
2638  *  @hw: pointer to hardware structure
2639  *  @on: true for on, false for off
2640  **/
2641 s32 ixgbe_set_copper_phy_power(struct ixgbe_hw *hw, bool on)
2642 {
2643         u32 status;
2644         u16 reg;
2645 
2646         /* Bail if we don't have copper phy */
2647         if (hw->mac.ops.get_media_type(hw) != ixgbe_media_type_copper)
2648                 return 0;
2649 
2650         if (!on && ixgbe_mng_present(hw))
2651                 return 0;
2652 
2653         status = hw->phy.ops.read_reg(hw, MDIO_CTRL1, MDIO_MMD_VEND1, &reg);
2654         if (status)
2655                 return status;
2656 
2657         if (on) {
2658                 reg &= ~IXGBE_MDIO_PHY_SET_LOW_POWER_MODE;
2659         } else {
2660                 if (ixgbe_check_reset_blocked(hw))
2661                         return 0;
2662                 reg |= IXGBE_MDIO_PHY_SET_LOW_POWER_MODE;
2663         }
2664 
2665         status = hw->phy.ops.write_reg(hw, MDIO_CTRL1, MDIO_MMD_VEND1, reg);
2666         return status;
2667 }

/* [<][>][^][v][top][bottom][index][help] */