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