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