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