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