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