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