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