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