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