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