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