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