xref: /titanic_50/usr/src/uts/common/io/ixgbe/core/ixgbe_phy.c (revision 7e579c3009252f0da48e48e80e1307bc5011b5fa)
1 /******************************************************************************
2 
3   Copyright (c) 2001-2015, Intel Corporation
4   All rights reserved.
5 
6   Redistribution and use in source and binary forms, with or without
7   modification, are permitted provided that the following conditions are met:
8 
9    1. Redistributions of source code must retain the above copyright notice,
10       this list of conditions and the following disclaimer.
11 
12    2. Redistributions in binary form must reproduce the above copyright
13       notice, this list of conditions and the following disclaimer in the
14       documentation and/or other materials provided with the distribution.
15 
16    3. Neither the name of the Intel Corporation nor the names of its
17       contributors may be used to endorse or promote products derived from
18       this software without specific prior written permission.
19 
20   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30   POSSIBILITY OF SUCH DAMAGE.
31 
32 ******************************************************************************/
33 /*$FreeBSD$*/
34 
35 #include "ixgbe_api.h"
36 #include "ixgbe_common.h"
37 #include "ixgbe_phy.h"
38 
39 static void ixgbe_i2c_start(struct ixgbe_hw *hw);
40 static void ixgbe_i2c_stop(struct ixgbe_hw *hw);
41 static s32 ixgbe_clock_in_i2c_byte(struct ixgbe_hw *hw, u8 *data);
42 static s32 ixgbe_clock_out_i2c_byte(struct ixgbe_hw *hw, u8 data);
43 static s32 ixgbe_get_i2c_ack(struct ixgbe_hw *hw);
44 static s32 ixgbe_clock_in_i2c_bit(struct ixgbe_hw *hw, bool *data);
45 static s32 ixgbe_clock_out_i2c_bit(struct ixgbe_hw *hw, bool data);
46 static void ixgbe_raise_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl);
47 static void ixgbe_lower_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl);
48 static s32 ixgbe_set_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl, bool data);
49 static bool ixgbe_get_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl);
50 static s32 ixgbe_read_i2c_sff8472_generic(struct ixgbe_hw *hw, u8 byte_offset,
51 					  u8 *sff8472_data);
52 
53 /**
54  * ixgbe_out_i2c_byte_ack - Send I2C byte with ack
55  * @hw: pointer to the hardware structure
56  * @byte: byte to send
57  *
58  * Returns an error code on error.
59  */
ixgbe_out_i2c_byte_ack(struct ixgbe_hw * hw,u8 byte)60 static s32 ixgbe_out_i2c_byte_ack(struct ixgbe_hw *hw, u8 byte)
61 {
62 	s32 status;
63 
64 	status = ixgbe_clock_out_i2c_byte(hw, byte);
65 	if (status)
66 		return status;
67 	return ixgbe_get_i2c_ack(hw);
68 }
69 
70 /**
71  * ixgbe_in_i2c_byte_ack - Receive an I2C byte and send ack
72  * @hw: pointer to the hardware structure
73  * @byte: pointer to a u8 to receive the byte
74  *
75  * Returns an error code on error.
76  */
ixgbe_in_i2c_byte_ack(struct ixgbe_hw * hw,u8 * byte)77 static s32 ixgbe_in_i2c_byte_ack(struct ixgbe_hw *hw, u8 *byte)
78 {
79 	s32 status;
80 
81 	status = ixgbe_clock_in_i2c_byte(hw, byte);
82 	if (status)
83 		return status;
84 	/* ACK */
85 	return ixgbe_clock_out_i2c_bit(hw, FALSE);
86 }
87 
88 /**
89  * ixgbe_ones_comp_byte_add - Perform one's complement addition
90  * @add1 - addend 1
91  * @add2 - addend 2
92  *
93  * Returns one's complement 8-bit sum.
94  */
ixgbe_ones_comp_byte_add(u8 add1,u8 add2)95 static u8 ixgbe_ones_comp_byte_add(u8 add1, u8 add2)
96 {
97 	u16 sum = add1 + add2;
98 
99 	sum = (sum & 0xFF) + (sum >> 8);
100 	return sum & 0xFF;
101 }
102 
103 /**
104  * ixgbe_read_i2c_combined_generic_int - Perform I2C read combined operation
105  * @hw: pointer to the hardware structure
106  * @addr: I2C bus address to read from
107  * @reg: I2C device register to read from
108  * @val: pointer to location to receive read value
109  * @lock: TRUE if to take and release semaphore
110  *
111  * Returns an error code on error.
112  */
ixgbe_read_i2c_combined_generic_int(struct ixgbe_hw * hw,u8 addr,u16 reg,u16 * val,bool lock)113 static s32 ixgbe_read_i2c_combined_generic_int(struct ixgbe_hw *hw, u8 addr,
114 					       u16 reg, u16 *val, bool lock)
115 {
116 	u32 swfw_mask = hw->phy.phy_semaphore_mask;
117 	int max_retry = 10;
118 	int retry = 0;
119 	u8 csum_byte;
120 	u8 high_bits;
121 	u8 low_bits;
122 	u8 reg_high;
123 	u8 csum;
124 
125 	if (hw->mac.type >= ixgbe_mac_X550)
126 		max_retry = 3;
127 	reg_high = ((reg >> 7) & 0xFE) | 1;	/* Indicate read combined */
128 	csum = ixgbe_ones_comp_byte_add(reg_high, reg & 0xFF);
129 	csum = ~csum;
130 	do {
131 		if (lock && hw->mac.ops.acquire_swfw_sync(hw, swfw_mask))
132 			return IXGBE_ERR_SWFW_SYNC;
133 		ixgbe_i2c_start(hw);
134 		/* Device Address and write indication */
135 		if (ixgbe_out_i2c_byte_ack(hw, addr))
136 			goto fail;
137 		/* Write bits 14:8 */
138 		if (ixgbe_out_i2c_byte_ack(hw, reg_high))
139 			goto fail;
140 		/* Write bits 7:0 */
141 		if (ixgbe_out_i2c_byte_ack(hw, reg & 0xFF))
142 			goto fail;
143 		/* Write csum */
144 		if (ixgbe_out_i2c_byte_ack(hw, csum))
145 			goto fail;
146 		/* Re-start condition */
147 		ixgbe_i2c_start(hw);
148 		/* Device Address and read indication */
149 		if (ixgbe_out_i2c_byte_ack(hw, addr | 1))
150 			goto fail;
151 		/* Get upper bits */
152 		if (ixgbe_in_i2c_byte_ack(hw, &high_bits))
153 			goto fail;
154 		/* Get low bits */
155 		if (ixgbe_in_i2c_byte_ack(hw, &low_bits))
156 			goto fail;
157 		/* Get csum */
158 		if (ixgbe_clock_in_i2c_byte(hw, &csum_byte))
159 			goto fail;
160 		/* NACK */
161 		if (ixgbe_clock_out_i2c_bit(hw, FALSE))
162 			goto fail;
163 		ixgbe_i2c_stop(hw);
164 		if (lock)
165 			hw->mac.ops.release_swfw_sync(hw, swfw_mask);
166 		*val = (high_bits << 8) | low_bits;
167 		return 0;
168 
169 fail:
170 		ixgbe_i2c_bus_clear(hw);
171 		if (lock)
172 			hw->mac.ops.release_swfw_sync(hw, swfw_mask);
173 		retry++;
174 		if (retry < max_retry)
175 			DEBUGOUT("I2C byte read combined error - Retrying.\n");
176 		else
177 			DEBUGOUT("I2C byte read combined error.\n");
178 	} while (retry < max_retry);
179 
180 	return IXGBE_ERR_I2C;
181 }
182 
183 /**
184  * ixgbe_read_i2c_combined_generic - Perform I2C read combined operation
185  * @hw: pointer to the hardware structure
186  * @addr: I2C bus address to read from
187  * @reg: I2C device register to read from
188  * @val: pointer to location to receive read value
189  *
190  * Returns an error code on error.
191  **/
ixgbe_read_i2c_combined_generic(struct ixgbe_hw * hw,u8 addr,u16 reg,u16 * val)192 static s32 ixgbe_read_i2c_combined_generic(struct ixgbe_hw *hw, u8 addr,
193 					   u16 reg, u16 *val)
194 {
195 	return ixgbe_read_i2c_combined_generic_int(hw, addr, reg, val, TRUE);
196 }
197 
198 /**
199  * ixgbe_read_i2c_combined_generic_unlocked - Do I2C read combined operation
200  * @hw: pointer to the hardware structure
201  * @addr: I2C bus address to read from
202  * @reg: I2C device register to read from
203  * @val: pointer to location to receive read value
204  *
205  * Returns an error code on error.
206  **/
207 static s32
ixgbe_read_i2c_combined_generic_unlocked(struct ixgbe_hw * hw,u8 addr,u16 reg,u16 * val)208 ixgbe_read_i2c_combined_generic_unlocked(struct ixgbe_hw *hw, u8 addr,
209 					 u16 reg, u16 *val)
210 {
211 	return ixgbe_read_i2c_combined_generic_int(hw, addr, reg, val, FALSE);
212 }
213 
214 /**
215  * ixgbe_write_i2c_combined_generic_int - Perform I2C write combined operation
216  * @hw: pointer to the hardware structure
217  * @addr: I2C bus address to write to
218  * @reg: I2C device register to write to
219  * @val: value to write
220  * @lock: TRUE if to take and release semaphore
221  *
222  * Returns an error code on error.
223  */
ixgbe_write_i2c_combined_generic_int(struct ixgbe_hw * hw,u8 addr,u16 reg,u16 val,bool lock)224 static s32 ixgbe_write_i2c_combined_generic_int(struct ixgbe_hw *hw, u8 addr,
225 						u16 reg, u16 val, bool lock)
226 {
227 	u32 swfw_mask = hw->phy.phy_semaphore_mask;
228 	int max_retry = 1;
229 	int retry = 0;
230 	u8 reg_high;
231 	u8 csum;
232 
233 	reg_high = (reg >> 7) & 0xFE;	/* Indicate write combined */
234 	csum = ixgbe_ones_comp_byte_add(reg_high, reg & 0xFF);
235 	csum = ixgbe_ones_comp_byte_add(csum, val >> 8);
236 	csum = ixgbe_ones_comp_byte_add(csum, val & 0xFF);
237 	csum = ~csum;
238 	do {
239 		if (lock && hw->mac.ops.acquire_swfw_sync(hw, swfw_mask))
240 			return IXGBE_ERR_SWFW_SYNC;
241 		ixgbe_i2c_start(hw);
242 		/* Device Address and write indication */
243 		if (ixgbe_out_i2c_byte_ack(hw, addr))
244 			goto fail;
245 		/* Write bits 14:8 */
246 		if (ixgbe_out_i2c_byte_ack(hw, reg_high))
247 			goto fail;
248 		/* Write bits 7:0 */
249 		if (ixgbe_out_i2c_byte_ack(hw, reg & 0xFF))
250 			goto fail;
251 		/* Write data 15:8 */
252 		if (ixgbe_out_i2c_byte_ack(hw, val >> 8))
253 			goto fail;
254 		/* Write data 7:0 */
255 		if (ixgbe_out_i2c_byte_ack(hw, val & 0xFF))
256 			goto fail;
257 		/* Write csum */
258 		if (ixgbe_out_i2c_byte_ack(hw, csum))
259 			goto fail;
260 		ixgbe_i2c_stop(hw);
261 		if (lock)
262 			hw->mac.ops.release_swfw_sync(hw, swfw_mask);
263 		return 0;
264 
265 fail:
266 		ixgbe_i2c_bus_clear(hw);
267 		if (lock)
268 			hw->mac.ops.release_swfw_sync(hw, swfw_mask);
269 		retry++;
270 		if (retry < max_retry)
271 			DEBUGOUT("I2C byte write combined error - Retrying.\n");
272 		else
273 			DEBUGOUT("I2C byte write combined error.\n");
274 	} while (retry < max_retry);
275 
276 	return IXGBE_ERR_I2C;
277 }
278 
279 /**
280  * ixgbe_write_i2c_combined_generic - Perform I2C write combined operation
281  * @hw: pointer to the hardware structure
282  * @addr: I2C bus address to write to
283  * @reg: I2C device register to write to
284  * @val: value to write
285  *
286  * Returns an error code on error.
287  **/
ixgbe_write_i2c_combined_generic(struct ixgbe_hw * hw,u8 addr,u16 reg,u16 val)288 static s32 ixgbe_write_i2c_combined_generic(struct ixgbe_hw *hw,
289 					    u8 addr, u16 reg, u16 val)
290 {
291 	return ixgbe_write_i2c_combined_generic_int(hw, addr, reg, val, TRUE);
292 }
293 
294 /**
295  * ixgbe_write_i2c_combined_generic_unlocked - Do I2C write combined operation
296  * @hw: pointer to the hardware structure
297  * @addr: I2C bus address to write to
298  * @reg: I2C device register to write to
299  * @val: value to write
300  *
301  * Returns an error code on error.
302  **/
303 static s32
ixgbe_write_i2c_combined_generic_unlocked(struct ixgbe_hw * hw,u8 addr,u16 reg,u16 val)304 ixgbe_write_i2c_combined_generic_unlocked(struct ixgbe_hw *hw,
305 					  u8 addr, u16 reg, u16 val)
306 {
307 	return ixgbe_write_i2c_combined_generic_int(hw, addr, reg, val, FALSE);
308 }
309 
310 /**
311  *  ixgbe_init_phy_ops_generic - Inits PHY function ptrs
312  *  @hw: pointer to the hardware structure
313  *
314  *  Initialize the function pointers.
315  **/
ixgbe_init_phy_ops_generic(struct ixgbe_hw * hw)316 s32 ixgbe_init_phy_ops_generic(struct ixgbe_hw *hw)
317 {
318 	struct ixgbe_phy_info *phy = &hw->phy;
319 
320 	DEBUGFUNC("ixgbe_init_phy_ops_generic");
321 
322 	/* PHY */
323 	phy->ops.identify = ixgbe_identify_phy_generic;
324 	phy->ops.reset = ixgbe_reset_phy_generic;
325 	phy->ops.read_reg = ixgbe_read_phy_reg_generic;
326 	phy->ops.write_reg = ixgbe_write_phy_reg_generic;
327 	phy->ops.read_reg_mdi = ixgbe_read_phy_reg_mdi;
328 	phy->ops.write_reg_mdi = ixgbe_write_phy_reg_mdi;
329 	phy->ops.setup_link = ixgbe_setup_phy_link_generic;
330 	phy->ops.setup_link_speed = ixgbe_setup_phy_link_speed_generic;
331 	phy->ops.check_link = NULL;
332 	phy->ops.get_firmware_version = ixgbe_get_phy_firmware_version_generic;
333 	phy->ops.read_i2c_byte = ixgbe_read_i2c_byte_generic;
334 	phy->ops.write_i2c_byte = ixgbe_write_i2c_byte_generic;
335 	phy->ops.read_i2c_sff8472 = ixgbe_read_i2c_sff8472_generic;
336 	phy->ops.read_i2c_eeprom = ixgbe_read_i2c_eeprom_generic;
337 	phy->ops.write_i2c_eeprom = ixgbe_write_i2c_eeprom_generic;
338 	phy->ops.i2c_bus_clear = ixgbe_i2c_bus_clear;
339 	phy->ops.identify_sfp = ixgbe_identify_module_generic;
340 	phy->sfp_type = ixgbe_sfp_type_unknown;
341 	phy->ops.read_i2c_combined = ixgbe_read_i2c_combined_generic;
342 	phy->ops.write_i2c_combined = ixgbe_write_i2c_combined_generic;
343 	phy->ops.read_i2c_combined_unlocked =
344 				ixgbe_read_i2c_combined_generic_unlocked;
345 	phy->ops.write_i2c_combined_unlocked =
346 				ixgbe_write_i2c_combined_generic_unlocked;
347 	phy->ops.read_i2c_byte_unlocked = ixgbe_read_i2c_byte_generic_unlocked;
348 	phy->ops.write_i2c_byte_unlocked =
349 				ixgbe_write_i2c_byte_generic_unlocked;
350 	phy->ops.check_overtemp = ixgbe_tn_check_overtemp;
351 	return IXGBE_SUCCESS;
352 }
353 
354 /**
355  *  ixgbe_identify_phy_generic - Get physical layer module
356  *  @hw: pointer to hardware structure
357  *
358  *  Determines the physical layer module found on the current adapter.
359  **/
ixgbe_identify_phy_generic(struct ixgbe_hw * hw)360 s32 ixgbe_identify_phy_generic(struct ixgbe_hw *hw)
361 {
362 	s32 status = IXGBE_ERR_PHY_ADDR_INVALID;
363 	u32 phy_addr;
364 	u16 ext_ability = 0;
365 
366 	DEBUGFUNC("ixgbe_identify_phy_generic");
367 
368 	if (!hw->phy.phy_semaphore_mask) {
369 		if (hw->bus.lan_id)
370 			hw->phy.phy_semaphore_mask = IXGBE_GSSR_PHY1_SM;
371 		else
372 			hw->phy.phy_semaphore_mask = IXGBE_GSSR_PHY0_SM;
373 	}
374 
375 	if (hw->phy.type == ixgbe_phy_unknown) {
376 		for (phy_addr = 0; phy_addr < IXGBE_MAX_PHY_ADDR; phy_addr++) {
377 			if (ixgbe_validate_phy_addr(hw, phy_addr)) {
378 				hw->phy.addr = phy_addr;
379 				ixgbe_get_phy_id(hw);
380 				hw->phy.type =
381 					ixgbe_get_phy_type_from_id(hw->phy.id);
382 
383 				if (hw->phy.type == ixgbe_phy_unknown) {
384 					hw->phy.ops.read_reg(hw,
385 						  IXGBE_MDIO_PHY_EXT_ABILITY,
386 						  IXGBE_MDIO_PMA_PMD_DEV_TYPE,
387 						  &ext_ability);
388 					if (ext_ability &
389 					    (IXGBE_MDIO_PHY_10GBASET_ABILITY |
390 					     IXGBE_MDIO_PHY_1000BASET_ABILITY))
391 						hw->phy.type =
392 							 ixgbe_phy_cu_unknown;
393 					else
394 						hw->phy.type =
395 							 ixgbe_phy_generic;
396 				}
397 
398 				status = IXGBE_SUCCESS;
399 				break;
400 			}
401 		}
402 
403 		/* Certain media types do not have a phy so an address will not
404 		 * be found and the code will take this path.  Caller has to
405 		 * decide if it is an error or not.
406 		 */
407 		if (status != IXGBE_SUCCESS) {
408 			hw->phy.addr = 0;
409 		}
410 	} else {
411 		status = IXGBE_SUCCESS;
412 	}
413 
414 	return status;
415 }
416 
417 /**
418  * ixgbe_check_reset_blocked - check status of MNG FW veto bit
419  * @hw: pointer to the hardware structure
420  *
421  * This function checks the MMNGC.MNG_VETO bit to see if there are
422  * any constraints on link from manageability.  For MAC's that don't
423  * have this bit just return faluse since the link can not be blocked
424  * via this method.
425  **/
ixgbe_check_reset_blocked(struct ixgbe_hw * hw)426 s32 ixgbe_check_reset_blocked(struct ixgbe_hw *hw)
427 {
428 	u32 mmngc;
429 
430 	DEBUGFUNC("ixgbe_check_reset_blocked");
431 
432 	/* If we don't have this bit, it can't be blocking */
433 	if (hw->mac.type == ixgbe_mac_82598EB)
434 		return FALSE;
435 
436 	mmngc = IXGBE_READ_REG(hw, IXGBE_MMNGC);
437 	if (mmngc & IXGBE_MMNGC_MNG_VETO) {
438 		ERROR_REPORT1(IXGBE_ERROR_SOFTWARE,
439 			      "MNG_VETO bit detected.\n");
440 		return TRUE;
441 	}
442 
443 	return FALSE;
444 }
445 
446 /**
447  *  ixgbe_validate_phy_addr - Determines phy address is valid
448  *  @hw: pointer to hardware structure
449  *
450  **/
ixgbe_validate_phy_addr(struct ixgbe_hw * hw,u32 phy_addr)451 bool ixgbe_validate_phy_addr(struct ixgbe_hw *hw, u32 phy_addr)
452 {
453 	u16 phy_id = 0;
454 	bool valid = FALSE;
455 
456 	DEBUGFUNC("ixgbe_validate_phy_addr");
457 
458 	hw->phy.addr = phy_addr;
459 	hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_ID_HIGH,
460 			     IXGBE_MDIO_PMA_PMD_DEV_TYPE, &phy_id);
461 
462 	if (phy_id != 0xFFFF && phy_id != 0x0)
463 		valid = TRUE;
464 
465 	return valid;
466 }
467 
468 /**
469  *  ixgbe_get_phy_id - Get the phy type
470  *  @hw: pointer to hardware structure
471  *
472  **/
ixgbe_get_phy_id(struct ixgbe_hw * hw)473 s32 ixgbe_get_phy_id(struct ixgbe_hw *hw)
474 {
475 	u32 status;
476 	u16 phy_id_high = 0;
477 	u16 phy_id_low = 0;
478 
479 	DEBUGFUNC("ixgbe_get_phy_id");
480 
481 	status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_ID_HIGH,
482 				      IXGBE_MDIO_PMA_PMD_DEV_TYPE,
483 				      &phy_id_high);
484 
485 	if (status == IXGBE_SUCCESS) {
486 		hw->phy.id = (u32)(phy_id_high << 16);
487 		status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_ID_LOW,
488 					      IXGBE_MDIO_PMA_PMD_DEV_TYPE,
489 					      &phy_id_low);
490 		hw->phy.id |= (u32)(phy_id_low & IXGBE_PHY_REVISION_MASK);
491 		hw->phy.revision = (u32)(phy_id_low & ~IXGBE_PHY_REVISION_MASK);
492 	}
493 	return status;
494 }
495 
496 /**
497  *  ixgbe_get_phy_type_from_id - Get the phy type
498  *  @hw: pointer to hardware structure
499  *
500  **/
ixgbe_get_phy_type_from_id(u32 phy_id)501 enum ixgbe_phy_type ixgbe_get_phy_type_from_id(u32 phy_id)
502 {
503 	enum ixgbe_phy_type phy_type;
504 
505 	DEBUGFUNC("ixgbe_get_phy_type_from_id");
506 
507 	switch (phy_id) {
508 	case TN1010_PHY_ID:
509 		phy_type = ixgbe_phy_tn;
510 		break;
511 	case X550_PHY_ID1:
512 	case X550_PHY_ID2:
513 	case X550_PHY_ID3:
514 	case X540_PHY_ID:
515 		phy_type = ixgbe_phy_aq;
516 		break;
517 	case QT2022_PHY_ID:
518 		phy_type = ixgbe_phy_qt;
519 		break;
520 	case ATH_PHY_ID:
521 		phy_type = ixgbe_phy_nl;
522 		break;
523 	case X557_PHY_ID:
524 		phy_type = ixgbe_phy_x550em_ext_t;
525 		break;
526 	default:
527 		phy_type = ixgbe_phy_unknown;
528 		break;
529 	}
530 
531 	DEBUGOUT1("phy type found is %d\n", phy_type);
532 	return phy_type;
533 }
534 
535 /**
536  *  ixgbe_reset_phy_generic - Performs a PHY reset
537  *  @hw: pointer to hardware structure
538  **/
ixgbe_reset_phy_generic(struct ixgbe_hw * hw)539 s32 ixgbe_reset_phy_generic(struct ixgbe_hw *hw)
540 {
541 	u32 i;
542 	u16 ctrl = 0;
543 	s32 status = IXGBE_SUCCESS;
544 
545 	DEBUGFUNC("ixgbe_reset_phy_generic");
546 
547 	if (hw->phy.type == ixgbe_phy_unknown)
548 		status = ixgbe_identify_phy_generic(hw);
549 
550 	if (status != IXGBE_SUCCESS || hw->phy.type == ixgbe_phy_none)
551 		goto out;
552 
553 	/* Don't reset PHY if it's shut down due to overtemp. */
554 	if (!hw->phy.reset_if_overtemp &&
555 	    (IXGBE_ERR_OVERTEMP == hw->phy.ops.check_overtemp(hw)))
556 		goto out;
557 
558 	/* Blocked by MNG FW so bail */
559 	if (ixgbe_check_reset_blocked(hw))
560 		goto out;
561 
562 	/*
563 	 * Perform soft PHY reset to the PHY_XS.
564 	 * This will cause a soft reset to the PHY
565 	 */
566 	hw->phy.ops.write_reg(hw, IXGBE_MDIO_PHY_XS_CONTROL,
567 			      IXGBE_MDIO_PHY_XS_DEV_TYPE,
568 			      IXGBE_MDIO_PHY_XS_RESET);
569 
570 	/*
571 	 * Poll for reset bit to self-clear indicating reset is complete.
572 	 * Some PHYs could take up to 3 seconds to complete and need about
573 	 * 1.7 usec delay after the reset is complete.
574 	 */
575 	for (i = 0; i < 30; i++) {
576 		msec_delay(100);
577 		hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_XS_CONTROL,
578 				     IXGBE_MDIO_PHY_XS_DEV_TYPE, &ctrl);
579 		if (!(ctrl & IXGBE_MDIO_PHY_XS_RESET)) {
580 			usec_delay(2);
581 			break;
582 		}
583 	}
584 
585 	if (ctrl & IXGBE_MDIO_PHY_XS_RESET) {
586 		status = IXGBE_ERR_RESET_FAILED;
587 		ERROR_REPORT1(IXGBE_ERROR_POLLING,
588 			     "PHY reset polling failed to complete.\n");
589 	}
590 
591 out:
592 	return status;
593 }
594 
595 /**
596  *  ixgbe_read_phy_mdi - Reads a value from a specified PHY register without
597  *  the SWFW lock
598  *  @hw: pointer to hardware structure
599  *  @reg_addr: 32 bit address of PHY register to read
600  *  @phy_data: Pointer to read data from PHY register
601  **/
ixgbe_read_phy_reg_mdi(struct ixgbe_hw * hw,u32 reg_addr,u32 device_type,u16 * phy_data)602 s32 ixgbe_read_phy_reg_mdi(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type,
603 		       u16 *phy_data)
604 {
605 	u32 i, data, command;
606 
607 	/* Setup and write the address cycle command */
608 	command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT)  |
609 		   (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) |
610 		   (hw->phy.addr << IXGBE_MSCA_PHY_ADDR_SHIFT) |
611 		   (IXGBE_MSCA_ADDR_CYCLE | IXGBE_MSCA_MDI_COMMAND));
612 
613 	IXGBE_WRITE_REG(hw, IXGBE_MSCA, command);
614 
615 	/*
616 	 * Check every 10 usec to see if the address cycle completed.
617 	 * The MDI Command bit will clear when the operation is
618 	 * complete
619 	 */
620 	for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) {
621 		usec_delay(10);
622 
623 		command = IXGBE_READ_REG(hw, IXGBE_MSCA);
624 		if ((command & IXGBE_MSCA_MDI_COMMAND) == 0)
625 				break;
626 	}
627 
628 
629 	if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) {
630 		ERROR_REPORT1(IXGBE_ERROR_POLLING, "PHY address command did not complete.\n");
631 		return IXGBE_ERR_PHY;
632 	}
633 
634 	/*
635 	 * Address cycle complete, setup and write the read
636 	 * command
637 	 */
638 	command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT)  |
639 		   (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) |
640 		   (hw->phy.addr << IXGBE_MSCA_PHY_ADDR_SHIFT) |
641 		   (IXGBE_MSCA_READ | IXGBE_MSCA_MDI_COMMAND));
642 
643 	IXGBE_WRITE_REG(hw, IXGBE_MSCA, command);
644 
645 	/*
646 	 * Check every 10 usec to see if the address cycle
647 	 * completed. The MDI Command bit will clear when the
648 	 * operation is complete
649 	 */
650 	for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) {
651 		usec_delay(10);
652 
653 		command = IXGBE_READ_REG(hw, IXGBE_MSCA);
654 		if ((command & IXGBE_MSCA_MDI_COMMAND) == 0)
655 			break;
656 	}
657 
658 	if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) {
659 		ERROR_REPORT1(IXGBE_ERROR_POLLING, "PHY read command didn't complete\n");
660 		return IXGBE_ERR_PHY;
661 	}
662 
663 	/*
664 	 * Read operation is complete.  Get the data
665 	 * from MSRWD
666 	 */
667 	data = IXGBE_READ_REG(hw, IXGBE_MSRWD);
668 	data >>= IXGBE_MSRWD_READ_DATA_SHIFT;
669 	*phy_data = (u16)(data);
670 
671 	return IXGBE_SUCCESS;
672 }
673 
674 /**
675  *  ixgbe_read_phy_reg_generic - Reads a value from a specified PHY register
676  *  using the SWFW lock - this function is needed in most cases
677  *  @hw: pointer to hardware structure
678  *  @reg_addr: 32 bit address of PHY register to read
679  *  @phy_data: Pointer to read data from PHY register
680  **/
ixgbe_read_phy_reg_generic(struct ixgbe_hw * hw,u32 reg_addr,u32 device_type,u16 * phy_data)681 s32 ixgbe_read_phy_reg_generic(struct ixgbe_hw *hw, u32 reg_addr,
682 			       u32 device_type, u16 *phy_data)
683 {
684 	s32 status;
685 	u32 gssr = hw->phy.phy_semaphore_mask;
686 
687 	DEBUGFUNC("ixgbe_read_phy_reg_generic");
688 
689 	if (hw->mac.ops.acquire_swfw_sync(hw, gssr) == IXGBE_SUCCESS) {
690 		status = ixgbe_read_phy_reg_mdi(hw, reg_addr, device_type,
691 						phy_data);
692 		hw->mac.ops.release_swfw_sync(hw, gssr);
693 	} else {
694 		status = IXGBE_ERR_SWFW_SYNC;
695 	}
696 
697 	return status;
698 }
699 
700 /**
701  *  ixgbe_write_phy_reg_mdi - Writes a value to specified PHY register
702  *  without SWFW lock
703  *  @hw: pointer to hardware structure
704  *  @reg_addr: 32 bit PHY register to write
705  *  @device_type: 5 bit device type
706  *  @phy_data: Data to write to the PHY register
707  **/
ixgbe_write_phy_reg_mdi(struct ixgbe_hw * hw,u32 reg_addr,u32 device_type,u16 phy_data)708 s32 ixgbe_write_phy_reg_mdi(struct ixgbe_hw *hw, u32 reg_addr,
709 				u32 device_type, u16 phy_data)
710 {
711 	u32 i, command;
712 
713 	/* Put the data in the MDI single read and write data register*/
714 	IXGBE_WRITE_REG(hw, IXGBE_MSRWD, (u32)phy_data);
715 
716 	/* Setup and write the address cycle command */
717 	command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT)  |
718 		   (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) |
719 		   (hw->phy.addr << IXGBE_MSCA_PHY_ADDR_SHIFT) |
720 		   (IXGBE_MSCA_ADDR_CYCLE | IXGBE_MSCA_MDI_COMMAND));
721 
722 	IXGBE_WRITE_REG(hw, IXGBE_MSCA, command);
723 
724 	/*
725 	 * Check every 10 usec to see if the address cycle completed.
726 	 * The MDI Command bit will clear when the operation is
727 	 * complete
728 	 */
729 	for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) {
730 		usec_delay(10);
731 
732 		command = IXGBE_READ_REG(hw, IXGBE_MSCA);
733 		if ((command & IXGBE_MSCA_MDI_COMMAND) == 0)
734 			break;
735 	}
736 
737 	if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) {
738 		ERROR_REPORT1(IXGBE_ERROR_POLLING, "PHY address cmd didn't complete\n");
739 		return IXGBE_ERR_PHY;
740 	}
741 
742 	/*
743 	 * Address cycle complete, setup and write the write
744 	 * command
745 	 */
746 	command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT)  |
747 		   (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) |
748 		   (hw->phy.addr << IXGBE_MSCA_PHY_ADDR_SHIFT) |
749 		   (IXGBE_MSCA_WRITE | IXGBE_MSCA_MDI_COMMAND));
750 
751 	IXGBE_WRITE_REG(hw, IXGBE_MSCA, command);
752 
753 	/*
754 	 * Check every 10 usec to see if the address cycle
755 	 * completed. The MDI Command bit will clear when the
756 	 * operation is complete
757 	 */
758 	for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) {
759 		usec_delay(10);
760 
761 		command = IXGBE_READ_REG(hw, IXGBE_MSCA);
762 		if ((command & IXGBE_MSCA_MDI_COMMAND) == 0)
763 			break;
764 	}
765 
766 	if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) {
767 		ERROR_REPORT1(IXGBE_ERROR_POLLING, "PHY write cmd didn't complete\n");
768 		return IXGBE_ERR_PHY;
769 	}
770 
771 	return IXGBE_SUCCESS;
772 }
773 
774 /**
775  *  ixgbe_write_phy_reg_generic - Writes a value to specified PHY register
776  *  using SWFW lock- this function is needed in most cases
777  *  @hw: pointer to hardware structure
778  *  @reg_addr: 32 bit PHY register to write
779  *  @device_type: 5 bit device type
780  *  @phy_data: Data to write to the PHY register
781  **/
ixgbe_write_phy_reg_generic(struct ixgbe_hw * hw,u32 reg_addr,u32 device_type,u16 phy_data)782 s32 ixgbe_write_phy_reg_generic(struct ixgbe_hw *hw, u32 reg_addr,
783 				u32 device_type, u16 phy_data)
784 {
785 	s32 status;
786 	u32 gssr = hw->phy.phy_semaphore_mask;
787 
788 	DEBUGFUNC("ixgbe_write_phy_reg_generic");
789 
790 	if (hw->mac.ops.acquire_swfw_sync(hw, gssr) == IXGBE_SUCCESS) {
791 		status = ixgbe_write_phy_reg_mdi(hw, reg_addr, device_type,
792 						 phy_data);
793 		hw->mac.ops.release_swfw_sync(hw, gssr);
794 	} else {
795 		status = IXGBE_ERR_SWFW_SYNC;
796 	}
797 
798 	return status;
799 }
800 
801 /**
802  *  ixgbe_setup_phy_link_generic - Set and restart auto-neg
803  *  @hw: pointer to hardware structure
804  *
805  *  Restart auto-negotiation and PHY and waits for completion.
806  **/
ixgbe_setup_phy_link_generic(struct ixgbe_hw * hw)807 s32 ixgbe_setup_phy_link_generic(struct ixgbe_hw *hw)
808 {
809 	s32 status = IXGBE_SUCCESS;
810 	u16 autoneg_reg = IXGBE_MII_AUTONEG_REG;
811 	bool autoneg = FALSE;
812 	ixgbe_link_speed speed;
813 
814 	DEBUGFUNC("ixgbe_setup_phy_link_generic");
815 
816 	ixgbe_get_copper_link_capabilities_generic(hw, &speed, &autoneg);
817 
818 	if (speed & IXGBE_LINK_SPEED_10GB_FULL) {
819 		/* Set or unset auto-negotiation 10G advertisement */
820 		hw->phy.ops.read_reg(hw, IXGBE_MII_10GBASE_T_AUTONEG_CTRL_REG,
821 				     IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
822 				     &autoneg_reg);
823 
824 		autoneg_reg &= ~IXGBE_MII_10GBASE_T_ADVERTISE;
825 		if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_10GB_FULL)
826 			autoneg_reg |= IXGBE_MII_10GBASE_T_ADVERTISE;
827 
828 		hw->phy.ops.write_reg(hw, IXGBE_MII_10GBASE_T_AUTONEG_CTRL_REG,
829 				      IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
830 				      autoneg_reg);
831 	}
832 
833 	if (hw->mac.type == ixgbe_mac_X550) {
834 		if (speed & IXGBE_LINK_SPEED_5GB_FULL) {
835 			/* Set or unset auto-negotiation 5G advertisement */
836 			hw->phy.ops.read_reg(hw,
837 				IXGBE_MII_AUTONEG_VENDOR_PROVISION_1_REG,
838 				IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
839 				&autoneg_reg);
840 
841 			autoneg_reg &= ~IXGBE_MII_5GBASE_T_ADVERTISE;
842 			if (hw->phy.autoneg_advertised &
843 			     IXGBE_LINK_SPEED_5GB_FULL)
844 				autoneg_reg |= IXGBE_MII_5GBASE_T_ADVERTISE;
845 
846 			hw->phy.ops.write_reg(hw,
847 				IXGBE_MII_AUTONEG_VENDOR_PROVISION_1_REG,
848 				IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
849 				autoneg_reg);
850 		}
851 
852 		if (speed & IXGBE_LINK_SPEED_2_5GB_FULL) {
853 			/* Set or unset auto-negotiation 2.5G advertisement */
854 			hw->phy.ops.read_reg(hw,
855 				IXGBE_MII_AUTONEG_VENDOR_PROVISION_1_REG,
856 				IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
857 				&autoneg_reg);
858 
859 			autoneg_reg &= ~IXGBE_MII_2_5GBASE_T_ADVERTISE;
860 			if (hw->phy.autoneg_advertised &
861 			    IXGBE_LINK_SPEED_2_5GB_FULL)
862 				autoneg_reg |= IXGBE_MII_2_5GBASE_T_ADVERTISE;
863 
864 			hw->phy.ops.write_reg(hw,
865 				IXGBE_MII_AUTONEG_VENDOR_PROVISION_1_REG,
866 				IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
867 				autoneg_reg);
868 		}
869 	}
870 
871 	if (speed & IXGBE_LINK_SPEED_1GB_FULL) {
872 		/* Set or unset auto-negotiation 1G advertisement */
873 		hw->phy.ops.read_reg(hw,
874 				     IXGBE_MII_AUTONEG_VENDOR_PROVISION_1_REG,
875 				     IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
876 				     &autoneg_reg);
877 
878 		autoneg_reg &= ~IXGBE_MII_1GBASE_T_ADVERTISE;
879 		if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_1GB_FULL)
880 			autoneg_reg |= IXGBE_MII_1GBASE_T_ADVERTISE;
881 
882 		hw->phy.ops.write_reg(hw,
883 				      IXGBE_MII_AUTONEG_VENDOR_PROVISION_1_REG,
884 				      IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
885 				      autoneg_reg);
886 	}
887 
888 	if (speed & IXGBE_LINK_SPEED_100_FULL) {
889 		/* Set or unset auto-negotiation 100M advertisement */
890 		hw->phy.ops.read_reg(hw, IXGBE_MII_AUTONEG_ADVERTISE_REG,
891 				     IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
892 				     &autoneg_reg);
893 
894 		autoneg_reg &= ~(IXGBE_MII_100BASE_T_ADVERTISE |
895 				 IXGBE_MII_100BASE_T_ADVERTISE_HALF);
896 		if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_100_FULL)
897 			autoneg_reg |= IXGBE_MII_100BASE_T_ADVERTISE;
898 
899 		hw->phy.ops.write_reg(hw, IXGBE_MII_AUTONEG_ADVERTISE_REG,
900 				      IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
901 				      autoneg_reg);
902 	}
903 
904 	/* Blocked by MNG FW so don't reset PHY */
905 	if (ixgbe_check_reset_blocked(hw))
906 		return status;
907 
908 	/* Restart PHY auto-negotiation. */
909 	hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_CONTROL,
910 			     IXGBE_MDIO_AUTO_NEG_DEV_TYPE, &autoneg_reg);
911 
912 	autoneg_reg |= IXGBE_MII_RESTART;
913 
914 	hw->phy.ops.write_reg(hw, IXGBE_MDIO_AUTO_NEG_CONTROL,
915 			      IXGBE_MDIO_AUTO_NEG_DEV_TYPE, autoneg_reg);
916 
917 	return status;
918 }
919 
920 /**
921  *  ixgbe_setup_phy_link_speed_generic - Sets the auto advertised capabilities
922  *  @hw: pointer to hardware structure
923  *  @speed: new link speed
924  **/
ixgbe_setup_phy_link_speed_generic(struct ixgbe_hw * hw,ixgbe_link_speed speed,bool autoneg_wait_to_complete)925 s32 ixgbe_setup_phy_link_speed_generic(struct ixgbe_hw *hw,
926 				       ixgbe_link_speed speed,
927 				       bool autoneg_wait_to_complete)
928 {
929 	UNREFERENCED_1PARAMETER(autoneg_wait_to_complete);
930 
931 	DEBUGFUNC("ixgbe_setup_phy_link_speed_generic");
932 
933 	/*
934 	 * Clear autoneg_advertised and set new values based on input link
935 	 * speed.
936 	 */
937 	hw->phy.autoneg_advertised = 0;
938 
939 	if (speed & IXGBE_LINK_SPEED_10GB_FULL)
940 		hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_10GB_FULL;
941 
942 	if (speed & IXGBE_LINK_SPEED_5GB_FULL)
943 		hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_5GB_FULL;
944 
945 	if (speed & IXGBE_LINK_SPEED_2_5GB_FULL)
946 		hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_2_5GB_FULL;
947 
948 	if (speed & IXGBE_LINK_SPEED_1GB_FULL)
949 		hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_1GB_FULL;
950 
951 	if (speed & IXGBE_LINK_SPEED_100_FULL)
952 		hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_100_FULL;
953 
954 	/* Setup link based on the new speed settings */
955 	ixgbe_setup_phy_link(hw);
956 
957 	return IXGBE_SUCCESS;
958 }
959 
960 /**
961  * ixgbe_get_copper_speeds_supported - Get copper link speeds from phy
962  * @hw: pointer to hardware structure
963  *
964  * Determines the supported link capabilities by reading the PHY auto
965  * negotiation register.
966  **/
ixgbe_get_copper_speeds_supported(struct ixgbe_hw * hw)967 static s32 ixgbe_get_copper_speeds_supported(struct ixgbe_hw *hw)
968 {
969 	s32 status;
970 	u16 speed_ability;
971 
972 	status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_SPEED_ABILITY,
973 				      IXGBE_MDIO_PMA_PMD_DEV_TYPE,
974 				      &speed_ability);
975 	if (status)
976 		return status;
977 
978 	if (speed_ability & IXGBE_MDIO_PHY_SPEED_10G)
979 		hw->phy.speeds_supported |= IXGBE_LINK_SPEED_10GB_FULL;
980 	if (speed_ability & IXGBE_MDIO_PHY_SPEED_1G)
981 		hw->phy.speeds_supported |= IXGBE_LINK_SPEED_1GB_FULL;
982 	if (speed_ability & IXGBE_MDIO_PHY_SPEED_100M)
983 		hw->phy.speeds_supported |= IXGBE_LINK_SPEED_100_FULL;
984 
985 	switch (hw->mac.type) {
986 	case ixgbe_mac_X550:
987 		hw->phy.speeds_supported |= IXGBE_LINK_SPEED_2_5GB_FULL;
988 		hw->phy.speeds_supported |= IXGBE_LINK_SPEED_5GB_FULL;
989 		break;
990 	case ixgbe_mac_X550EM_x:
991 		hw->phy.speeds_supported &= ~IXGBE_LINK_SPEED_100_FULL;
992 		break;
993 	default:
994 		break;
995 	}
996 
997 	return status;
998 }
999 
1000 /**
1001  *  ixgbe_get_copper_link_capabilities_generic - Determines link capabilities
1002  *  @hw: pointer to hardware structure
1003  *  @speed: pointer to link speed
1004  *  @autoneg: boolean auto-negotiation value
1005  **/
ixgbe_get_copper_link_capabilities_generic(struct ixgbe_hw * hw,ixgbe_link_speed * speed,bool * autoneg)1006 s32 ixgbe_get_copper_link_capabilities_generic(struct ixgbe_hw *hw,
1007 					       ixgbe_link_speed *speed,
1008 					       bool *autoneg)
1009 {
1010 	s32 status = IXGBE_SUCCESS;
1011 
1012 	DEBUGFUNC("ixgbe_get_copper_link_capabilities_generic");
1013 
1014 	*autoneg = TRUE;
1015 	if (!hw->phy.speeds_supported)
1016 		status = ixgbe_get_copper_speeds_supported(hw);
1017 
1018 	*speed = hw->phy.speeds_supported;
1019 	return status;
1020 }
1021 
1022 /**
1023  *  ixgbe_check_phy_link_tnx - Determine link and speed status
1024  *  @hw: pointer to hardware structure
1025  *
1026  *  Reads the VS1 register to determine if link is up and the current speed for
1027  *  the PHY.
1028  **/
ixgbe_check_phy_link_tnx(struct ixgbe_hw * hw,ixgbe_link_speed * speed,bool * link_up)1029 s32 ixgbe_check_phy_link_tnx(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
1030 			     bool *link_up)
1031 {
1032 	s32 status = IXGBE_SUCCESS;
1033 	u32 time_out;
1034 	u32 max_time_out = 10;
1035 	u16 phy_link = 0;
1036 	u16 phy_speed = 0;
1037 	u16 phy_data = 0;
1038 
1039 	DEBUGFUNC("ixgbe_check_phy_link_tnx");
1040 
1041 	/* Initialize speed and link to default case */
1042 	*link_up = FALSE;
1043 	*speed = IXGBE_LINK_SPEED_10GB_FULL;
1044 
1045 	/*
1046 	 * Check current speed and link status of the PHY register.
1047 	 * This is a vendor specific register and may have to
1048 	 * be changed for other copper PHYs.
1049 	 */
1050 	for (time_out = 0; time_out < max_time_out; time_out++) {
1051 		usec_delay(10);
1052 		status = hw->phy.ops.read_reg(hw,
1053 					IXGBE_MDIO_VENDOR_SPECIFIC_1_STATUS,
1054 					IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE,
1055 					&phy_data);
1056 		phy_link = phy_data & IXGBE_MDIO_VENDOR_SPECIFIC_1_LINK_STATUS;
1057 		phy_speed = phy_data &
1058 				 IXGBE_MDIO_VENDOR_SPECIFIC_1_SPEED_STATUS;
1059 		if (phy_link == IXGBE_MDIO_VENDOR_SPECIFIC_1_LINK_STATUS) {
1060 			*link_up = TRUE;
1061 			if (phy_speed ==
1062 			    IXGBE_MDIO_VENDOR_SPECIFIC_1_SPEED_STATUS)
1063 				*speed = IXGBE_LINK_SPEED_1GB_FULL;
1064 			break;
1065 		}
1066 	}
1067 
1068 	return status;
1069 }
1070 
1071 /**
1072  *	ixgbe_setup_phy_link_tnx - Set and restart auto-neg
1073  *	@hw: pointer to hardware structure
1074  *
1075  *	Restart auto-negotiation and PHY and waits for completion.
1076  **/
ixgbe_setup_phy_link_tnx(struct ixgbe_hw * hw)1077 s32 ixgbe_setup_phy_link_tnx(struct ixgbe_hw *hw)
1078 {
1079 	s32 status = IXGBE_SUCCESS;
1080 	u16 autoneg_reg = IXGBE_MII_AUTONEG_REG;
1081 	bool autoneg = FALSE;
1082 	ixgbe_link_speed speed;
1083 
1084 	DEBUGFUNC("ixgbe_setup_phy_link_tnx");
1085 
1086 	ixgbe_get_copper_link_capabilities_generic(hw, &speed, &autoneg);
1087 
1088 	if (speed & IXGBE_LINK_SPEED_10GB_FULL) {
1089 		/* Set or unset auto-negotiation 10G advertisement */
1090 		hw->phy.ops.read_reg(hw, IXGBE_MII_10GBASE_T_AUTONEG_CTRL_REG,
1091 				     IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
1092 				     &autoneg_reg);
1093 
1094 		autoneg_reg &= ~IXGBE_MII_10GBASE_T_ADVERTISE;
1095 		if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_10GB_FULL)
1096 			autoneg_reg |= IXGBE_MII_10GBASE_T_ADVERTISE;
1097 
1098 		hw->phy.ops.write_reg(hw, IXGBE_MII_10GBASE_T_AUTONEG_CTRL_REG,
1099 				      IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
1100 				      autoneg_reg);
1101 	}
1102 
1103 	if (speed & IXGBE_LINK_SPEED_1GB_FULL) {
1104 		/* Set or unset auto-negotiation 1G advertisement */
1105 		hw->phy.ops.read_reg(hw, IXGBE_MII_AUTONEG_XNP_TX_REG,
1106 				     IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
1107 				     &autoneg_reg);
1108 
1109 		autoneg_reg &= ~IXGBE_MII_1GBASE_T_ADVERTISE_XNP_TX;
1110 		if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_1GB_FULL)
1111 			autoneg_reg |= IXGBE_MII_1GBASE_T_ADVERTISE_XNP_TX;
1112 
1113 		hw->phy.ops.write_reg(hw, IXGBE_MII_AUTONEG_XNP_TX_REG,
1114 				      IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
1115 				      autoneg_reg);
1116 	}
1117 
1118 	if (speed & IXGBE_LINK_SPEED_100_FULL) {
1119 		/* Set or unset auto-negotiation 100M advertisement */
1120 		hw->phy.ops.read_reg(hw, IXGBE_MII_AUTONEG_ADVERTISE_REG,
1121 				     IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
1122 				     &autoneg_reg);
1123 
1124 		autoneg_reg &= ~IXGBE_MII_100BASE_T_ADVERTISE;
1125 		if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_100_FULL)
1126 			autoneg_reg |= IXGBE_MII_100BASE_T_ADVERTISE;
1127 
1128 		hw->phy.ops.write_reg(hw, IXGBE_MII_AUTONEG_ADVERTISE_REG,
1129 				      IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
1130 				      autoneg_reg);
1131 	}
1132 
1133 	/* Blocked by MNG FW so don't reset PHY */
1134 	if (ixgbe_check_reset_blocked(hw))
1135 		return status;
1136 
1137 	/* Restart PHY auto-negotiation. */
1138 	hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_CONTROL,
1139 			     IXGBE_MDIO_AUTO_NEG_DEV_TYPE, &autoneg_reg);
1140 
1141 	autoneg_reg |= IXGBE_MII_RESTART;
1142 
1143 	hw->phy.ops.write_reg(hw, IXGBE_MDIO_AUTO_NEG_CONTROL,
1144 			      IXGBE_MDIO_AUTO_NEG_DEV_TYPE, autoneg_reg);
1145 
1146 	return status;
1147 }
1148 
1149 /**
1150  *  ixgbe_get_phy_firmware_version_tnx - Gets the PHY Firmware Version
1151  *  @hw: pointer to hardware structure
1152  *  @firmware_version: pointer to the PHY Firmware Version
1153  **/
ixgbe_get_phy_firmware_version_tnx(struct ixgbe_hw * hw,u16 * firmware_version)1154 s32 ixgbe_get_phy_firmware_version_tnx(struct ixgbe_hw *hw,
1155 				       u16 *firmware_version)
1156 {
1157 	s32 status;
1158 
1159 	DEBUGFUNC("ixgbe_get_phy_firmware_version_tnx");
1160 
1161 	status = hw->phy.ops.read_reg(hw, TNX_FW_REV,
1162 				      IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE,
1163 				      firmware_version);
1164 
1165 	return status;
1166 }
1167 
1168 /**
1169  *  ixgbe_get_phy_firmware_version_generic - Gets the PHY Firmware Version
1170  *  @hw: pointer to hardware structure
1171  *  @firmware_version: pointer to the PHY Firmware Version
1172  **/
ixgbe_get_phy_firmware_version_generic(struct ixgbe_hw * hw,u16 * firmware_version)1173 s32 ixgbe_get_phy_firmware_version_generic(struct ixgbe_hw *hw,
1174 					   u16 *firmware_version)
1175 {
1176 	s32 status;
1177 
1178 	DEBUGFUNC("ixgbe_get_phy_firmware_version_generic");
1179 
1180 	status = hw->phy.ops.read_reg(hw, AQ_FW_REV,
1181 				      IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE,
1182 				      firmware_version);
1183 
1184 	return status;
1185 }
1186 
1187 /**
1188  *  ixgbe_reset_phy_nl - Performs a PHY reset
1189  *  @hw: pointer to hardware structure
1190  **/
ixgbe_reset_phy_nl(struct ixgbe_hw * hw)1191 s32 ixgbe_reset_phy_nl(struct ixgbe_hw *hw)
1192 {
1193 	u16 phy_offset, control, eword, edata, block_crc;
1194 	bool end_data = FALSE;
1195 	u16 list_offset, data_offset;
1196 	u16 phy_data = 0;
1197 	s32 ret_val = IXGBE_SUCCESS;
1198 	u32 i;
1199 
1200 	DEBUGFUNC("ixgbe_reset_phy_nl");
1201 
1202 	/* Blocked by MNG FW so bail */
1203 	if (ixgbe_check_reset_blocked(hw))
1204 		goto out;
1205 
1206 	hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_XS_CONTROL,
1207 			     IXGBE_MDIO_PHY_XS_DEV_TYPE, &phy_data);
1208 
1209 	/* reset the PHY and poll for completion */
1210 	hw->phy.ops.write_reg(hw, IXGBE_MDIO_PHY_XS_CONTROL,
1211 			      IXGBE_MDIO_PHY_XS_DEV_TYPE,
1212 			      (phy_data | IXGBE_MDIO_PHY_XS_RESET));
1213 
1214 	for (i = 0; i < 100; i++) {
1215 		hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_XS_CONTROL,
1216 				     IXGBE_MDIO_PHY_XS_DEV_TYPE, &phy_data);
1217 		if ((phy_data & IXGBE_MDIO_PHY_XS_RESET) == 0)
1218 			break;
1219 		msec_delay(10);
1220 	}
1221 
1222 	if ((phy_data & IXGBE_MDIO_PHY_XS_RESET) != 0) {
1223 		DEBUGOUT("PHY reset did not complete.\n");
1224 		ret_val = IXGBE_ERR_PHY;
1225 		goto out;
1226 	}
1227 
1228 	/* Get init offsets */
1229 	ret_val = ixgbe_get_sfp_init_sequence_offsets(hw, &list_offset,
1230 						      &data_offset);
1231 	if (ret_val != IXGBE_SUCCESS)
1232 		goto out;
1233 
1234 	ret_val = hw->eeprom.ops.read(hw, data_offset, &block_crc);
1235 	data_offset++;
1236 	while (!end_data) {
1237 		/*
1238 		 * Read control word from PHY init contents offset
1239 		 */
1240 		ret_val = hw->eeprom.ops.read(hw, data_offset, &eword);
1241 		if (ret_val)
1242 			goto err_eeprom;
1243 		control = (eword & IXGBE_CONTROL_MASK_NL) >>
1244 			   IXGBE_CONTROL_SHIFT_NL;
1245 		edata = eword & IXGBE_DATA_MASK_NL;
1246 		switch (control) {
1247 		case IXGBE_DELAY_NL:
1248 			data_offset++;
1249 			DEBUGOUT1("DELAY: %d MS\n", edata);
1250 			msec_delay(edata);
1251 			break;
1252 		case IXGBE_DATA_NL:
1253 			DEBUGOUT("DATA:\n");
1254 			data_offset++;
1255 			ret_val = hw->eeprom.ops.read(hw, data_offset,
1256 						      &phy_offset);
1257 			if (ret_val)
1258 				goto err_eeprom;
1259 			data_offset++;
1260 			for (i = 0; i < edata; i++) {
1261 				ret_val = hw->eeprom.ops.read(hw, data_offset,
1262 							      &eword);
1263 				if (ret_val)
1264 					goto err_eeprom;
1265 				hw->phy.ops.write_reg(hw, phy_offset,
1266 						      IXGBE_TWINAX_DEV, eword);
1267 				DEBUGOUT2("Wrote %4.4x to %4.4x\n", eword,
1268 					  phy_offset);
1269 				data_offset++;
1270 				phy_offset++;
1271 			}
1272 			break;
1273 		case IXGBE_CONTROL_NL:
1274 			data_offset++;
1275 			DEBUGOUT("CONTROL:\n");
1276 			if (edata == IXGBE_CONTROL_EOL_NL) {
1277 				DEBUGOUT("EOL\n");
1278 				end_data = TRUE;
1279 			} else if (edata == IXGBE_CONTROL_SOL_NL) {
1280 				DEBUGOUT("SOL\n");
1281 			} else {
1282 				DEBUGOUT("Bad control value\n");
1283 				ret_val = IXGBE_ERR_PHY;
1284 				goto out;
1285 			}
1286 			break;
1287 		default:
1288 			DEBUGOUT("Bad control type\n");
1289 			ret_val = IXGBE_ERR_PHY;
1290 			goto out;
1291 		}
1292 	}
1293 
1294 out:
1295 	return ret_val;
1296 
1297 err_eeprom:
1298 	ERROR_REPORT2(IXGBE_ERROR_INVALID_STATE,
1299 		      "eeprom read at offset %d failed", data_offset);
1300 	return IXGBE_ERR_PHY;
1301 }
1302 
1303 /**
1304  *  ixgbe_identify_module_generic - Identifies module type
1305  *  @hw: pointer to hardware structure
1306  *
1307  *  Determines HW type and calls appropriate function.
1308  **/
ixgbe_identify_module_generic(struct ixgbe_hw * hw)1309 s32 ixgbe_identify_module_generic(struct ixgbe_hw *hw)
1310 {
1311 	s32 status = IXGBE_ERR_SFP_NOT_PRESENT;
1312 
1313 	DEBUGFUNC("ixgbe_identify_module_generic");
1314 
1315 	switch (hw->mac.ops.get_media_type(hw)) {
1316 	case ixgbe_media_type_fiber:
1317 		status = ixgbe_identify_sfp_module_generic(hw);
1318 		break;
1319 
1320 	case ixgbe_media_type_fiber_qsfp:
1321 		status = ixgbe_identify_qsfp_module_generic(hw);
1322 		break;
1323 
1324 	default:
1325 		hw->phy.sfp_type = ixgbe_sfp_type_not_present;
1326 		status = IXGBE_ERR_SFP_NOT_PRESENT;
1327 		break;
1328 	}
1329 
1330 	return status;
1331 }
1332 
1333 /**
1334  *  ixgbe_identify_sfp_module_generic - Identifies SFP modules
1335  *  @hw: pointer to hardware structure
1336  *
1337  *  Searches for and identifies the SFP module and assigns appropriate PHY type.
1338  **/
ixgbe_identify_sfp_module_generic(struct ixgbe_hw * hw)1339 s32 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw)
1340 {
1341 	s32 status = IXGBE_ERR_PHY_ADDR_INVALID;
1342 	u32 vendor_oui = 0;
1343 	enum ixgbe_sfp_type stored_sfp_type = hw->phy.sfp_type;
1344 	u8 identifier = 0;
1345 	u8 comp_codes_1g = 0;
1346 	u8 comp_codes_10g = 0;
1347 	u8 oui_bytes[3] = {0, 0, 0};
1348 	u8 cable_tech = 0;
1349 	u8 cable_spec = 0;
1350 	u16 enforce_sfp = 0;
1351 
1352 	DEBUGFUNC("ixgbe_identify_sfp_module_generic");
1353 
1354 	if (hw->mac.ops.get_media_type(hw) != ixgbe_media_type_fiber) {
1355 		hw->phy.sfp_type = ixgbe_sfp_type_not_present;
1356 		status = IXGBE_ERR_SFP_NOT_PRESENT;
1357 		goto out;
1358 	}
1359 
1360 	/* LAN ID is needed for I2C access */
1361 	hw->mac.ops.set_lan_id(hw);
1362 
1363 	status = hw->phy.ops.read_i2c_eeprom(hw,
1364 					     IXGBE_SFF_IDENTIFIER,
1365 					     &identifier);
1366 
1367 	if (status != IXGBE_SUCCESS)
1368 		goto err_read_i2c_eeprom;
1369 
1370 	if (identifier != IXGBE_SFF_IDENTIFIER_SFP) {
1371 		hw->phy.type = ixgbe_phy_sfp_unsupported;
1372 		status = IXGBE_ERR_SFP_NOT_SUPPORTED;
1373 	} else {
1374 		status = hw->phy.ops.read_i2c_eeprom(hw,
1375 						     IXGBE_SFF_1GBE_COMP_CODES,
1376 						     &comp_codes_1g);
1377 
1378 		if (status != IXGBE_SUCCESS)
1379 			goto err_read_i2c_eeprom;
1380 
1381 		status = hw->phy.ops.read_i2c_eeprom(hw,
1382 						     IXGBE_SFF_10GBE_COMP_CODES,
1383 						     &comp_codes_10g);
1384 
1385 		if (status != IXGBE_SUCCESS)
1386 			goto err_read_i2c_eeprom;
1387 		status = hw->phy.ops.read_i2c_eeprom(hw,
1388 						     IXGBE_SFF_CABLE_TECHNOLOGY,
1389 						     &cable_tech);
1390 
1391 		if (status != IXGBE_SUCCESS)
1392 			goto err_read_i2c_eeprom;
1393 
1394 		 /* ID Module
1395 		  * =========
1396 		  * 0   SFP_DA_CU
1397 		  * 1   SFP_SR
1398 		  * 2   SFP_LR
1399 		  * 3   SFP_DA_CORE0 - 82599-specific
1400 		  * 4   SFP_DA_CORE1 - 82599-specific
1401 		  * 5   SFP_SR/LR_CORE0 - 82599-specific
1402 		  * 6   SFP_SR/LR_CORE1 - 82599-specific
1403 		  * 7   SFP_act_lmt_DA_CORE0 - 82599-specific
1404 		  * 8   SFP_act_lmt_DA_CORE1 - 82599-specific
1405 		  * 9   SFP_1g_cu_CORE0 - 82599-specific
1406 		  * 10  SFP_1g_cu_CORE1 - 82599-specific
1407 		  * 11  SFP_1g_sx_CORE0 - 82599-specific
1408 		  * 12  SFP_1g_sx_CORE1 - 82599-specific
1409 		  */
1410 		if (hw->mac.type == ixgbe_mac_82598EB) {
1411 			if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE)
1412 				hw->phy.sfp_type = ixgbe_sfp_type_da_cu;
1413 			else if (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)
1414 				hw->phy.sfp_type = ixgbe_sfp_type_sr;
1415 			else if (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)
1416 				hw->phy.sfp_type = ixgbe_sfp_type_lr;
1417 			else
1418 				hw->phy.sfp_type = ixgbe_sfp_type_unknown;
1419 		} else {
1420 			if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE) {
1421 				if (hw->bus.lan_id == 0)
1422 					hw->phy.sfp_type =
1423 						     ixgbe_sfp_type_da_cu_core0;
1424 				else
1425 					hw->phy.sfp_type =
1426 						     ixgbe_sfp_type_da_cu_core1;
1427 			} else if (cable_tech & IXGBE_SFF_DA_ACTIVE_CABLE) {
1428 				hw->phy.ops.read_i2c_eeprom(
1429 						hw, IXGBE_SFF_CABLE_SPEC_COMP,
1430 						&cable_spec);
1431 				if (cable_spec &
1432 				    IXGBE_SFF_DA_SPEC_ACTIVE_LIMITING) {
1433 					if (hw->bus.lan_id == 0)
1434 						hw->phy.sfp_type =
1435 						ixgbe_sfp_type_da_act_lmt_core0;
1436 					else
1437 						hw->phy.sfp_type =
1438 						ixgbe_sfp_type_da_act_lmt_core1;
1439 				} else {
1440 					hw->phy.sfp_type =
1441 							ixgbe_sfp_type_unknown;
1442 				}
1443 			} else if (comp_codes_10g &
1444 				   (IXGBE_SFF_10GBASESR_CAPABLE |
1445 				    IXGBE_SFF_10GBASELR_CAPABLE)) {
1446 				if (hw->bus.lan_id == 0)
1447 					hw->phy.sfp_type =
1448 						      ixgbe_sfp_type_srlr_core0;
1449 				else
1450 					hw->phy.sfp_type =
1451 						      ixgbe_sfp_type_srlr_core1;
1452 			} else if (comp_codes_1g & IXGBE_SFF_1GBASET_CAPABLE) {
1453 				if (hw->bus.lan_id == 0)
1454 					hw->phy.sfp_type =
1455 						ixgbe_sfp_type_1g_cu_core0;
1456 				else
1457 					hw->phy.sfp_type =
1458 						ixgbe_sfp_type_1g_cu_core1;
1459 			} else if (comp_codes_1g & IXGBE_SFF_1GBASESX_CAPABLE) {
1460 				if (hw->bus.lan_id == 0)
1461 					hw->phy.sfp_type =
1462 						ixgbe_sfp_type_1g_sx_core0;
1463 				else
1464 					hw->phy.sfp_type =
1465 						ixgbe_sfp_type_1g_sx_core1;
1466 			} else if (comp_codes_1g & IXGBE_SFF_1GBASELX_CAPABLE) {
1467 				if (hw->bus.lan_id == 0)
1468 					hw->phy.sfp_type =
1469 						ixgbe_sfp_type_1g_lx_core0;
1470 				else
1471 					hw->phy.sfp_type =
1472 						ixgbe_sfp_type_1g_lx_core1;
1473 			} else {
1474 				hw->phy.sfp_type = ixgbe_sfp_type_unknown;
1475 			}
1476 		}
1477 
1478 		if (hw->phy.sfp_type != stored_sfp_type)
1479 			hw->phy.sfp_setup_needed = TRUE;
1480 
1481 		/* Determine if the SFP+ PHY is dual speed or not. */
1482 		hw->phy.multispeed_fiber = FALSE;
1483 		if (((comp_codes_1g & IXGBE_SFF_1GBASESX_CAPABLE) &&
1484 		   (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)) ||
1485 		   ((comp_codes_1g & IXGBE_SFF_1GBASELX_CAPABLE) &&
1486 		   (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)))
1487 			hw->phy.multispeed_fiber = TRUE;
1488 
1489 		/* Determine PHY vendor */
1490 		if (hw->phy.type != ixgbe_phy_nl) {
1491 			hw->phy.id = identifier;
1492 			status = hw->phy.ops.read_i2c_eeprom(hw,
1493 						    IXGBE_SFF_VENDOR_OUI_BYTE0,
1494 						    &oui_bytes[0]);
1495 
1496 			if (status != IXGBE_SUCCESS)
1497 				goto err_read_i2c_eeprom;
1498 
1499 			status = hw->phy.ops.read_i2c_eeprom(hw,
1500 						    IXGBE_SFF_VENDOR_OUI_BYTE1,
1501 						    &oui_bytes[1]);
1502 
1503 			if (status != IXGBE_SUCCESS)
1504 				goto err_read_i2c_eeprom;
1505 
1506 			status = hw->phy.ops.read_i2c_eeprom(hw,
1507 						    IXGBE_SFF_VENDOR_OUI_BYTE2,
1508 						    &oui_bytes[2]);
1509 
1510 			if (status != IXGBE_SUCCESS)
1511 				goto err_read_i2c_eeprom;
1512 
1513 			vendor_oui =
1514 			  ((oui_bytes[0] << IXGBE_SFF_VENDOR_OUI_BYTE0_SHIFT) |
1515 			   (oui_bytes[1] << IXGBE_SFF_VENDOR_OUI_BYTE1_SHIFT) |
1516 			   (oui_bytes[2] << IXGBE_SFF_VENDOR_OUI_BYTE2_SHIFT));
1517 
1518 			switch (vendor_oui) {
1519 			case IXGBE_SFF_VENDOR_OUI_TYCO:
1520 				if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE)
1521 					hw->phy.type =
1522 						    ixgbe_phy_sfp_passive_tyco;
1523 				break;
1524 			case IXGBE_SFF_VENDOR_OUI_FTL:
1525 				if (cable_tech & IXGBE_SFF_DA_ACTIVE_CABLE)
1526 					hw->phy.type = ixgbe_phy_sfp_ftl_active;
1527 				else
1528 					hw->phy.type = ixgbe_phy_sfp_ftl;
1529 				break;
1530 			case IXGBE_SFF_VENDOR_OUI_AVAGO:
1531 				hw->phy.type = ixgbe_phy_sfp_avago;
1532 				break;
1533 			case IXGBE_SFF_VENDOR_OUI_INTEL:
1534 				hw->phy.type = ixgbe_phy_sfp_intel;
1535 				break;
1536 			default:
1537 				if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE)
1538 					hw->phy.type =
1539 						 ixgbe_phy_sfp_passive_unknown;
1540 				else if (cable_tech & IXGBE_SFF_DA_ACTIVE_CABLE)
1541 					hw->phy.type =
1542 						ixgbe_phy_sfp_active_unknown;
1543 				else
1544 					hw->phy.type = ixgbe_phy_sfp_unknown;
1545 				break;
1546 			}
1547 		}
1548 
1549 		/* Allow any DA cable vendor */
1550 		if (cable_tech & (IXGBE_SFF_DA_PASSIVE_CABLE |
1551 		    IXGBE_SFF_DA_ACTIVE_CABLE)) {
1552 			status = IXGBE_SUCCESS;
1553 			goto out;
1554 		}
1555 
1556 		/* Verify supported 1G SFP modules */
1557 		if (comp_codes_10g == 0 &&
1558 		    !(hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core1 ||
1559 		      hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core0 ||
1560 		      hw->phy.sfp_type == ixgbe_sfp_type_1g_lx_core0 ||
1561 		      hw->phy.sfp_type == ixgbe_sfp_type_1g_lx_core1 ||
1562 		      hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core0 ||
1563 		      hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core1)) {
1564 			hw->phy.type = ixgbe_phy_sfp_unsupported;
1565 			status = IXGBE_ERR_SFP_NOT_SUPPORTED;
1566 			goto out;
1567 		}
1568 
1569 		/* Anything else 82598-based is supported */
1570 		if (hw->mac.type == ixgbe_mac_82598EB) {
1571 			status = IXGBE_SUCCESS;
1572 			goto out;
1573 		}
1574 
1575 		ixgbe_get_device_caps(hw, &enforce_sfp);
1576 		if (!(enforce_sfp & IXGBE_DEVICE_CAPS_ALLOW_ANY_SFP) &&
1577 		    !(hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core0 ||
1578 		      hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core1 ||
1579 		      hw->phy.sfp_type == ixgbe_sfp_type_1g_lx_core0 ||
1580 		      hw->phy.sfp_type == ixgbe_sfp_type_1g_lx_core1 ||
1581 		      hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core0 ||
1582 		      hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core1)) {
1583 			/* Make sure we're a supported PHY type */
1584 			if (hw->phy.type == ixgbe_phy_sfp_intel) {
1585 				status = IXGBE_SUCCESS;
1586 			} else {
1587 				if (hw->allow_unsupported_sfp == TRUE) {
1588 					EWARN(hw, "WARNING: Intel (R) Network "
1589 					      "Connections are quality tested "
1590 					      "using Intel (R) Ethernet Optics."
1591 					      " Using untested modules is not "
1592 					      "supported and may cause unstable"
1593 					      " operation or damage to the "
1594 					      "module or the adapter. Intel "
1595 					      "Corporation is not responsible "
1596 					      "for any harm caused by using "
1597 					      "untested modules.\n", status);
1598 					status = IXGBE_SUCCESS;
1599 				} else {
1600 					DEBUGOUT("SFP+ module not supported\n");
1601 					hw->phy.type =
1602 						ixgbe_phy_sfp_unsupported;
1603 					status = IXGBE_ERR_SFP_NOT_SUPPORTED;
1604 				}
1605 			}
1606 		} else {
1607 			status = IXGBE_SUCCESS;
1608 		}
1609 	}
1610 
1611 out:
1612 	return status;
1613 
1614 err_read_i2c_eeprom:
1615 	hw->phy.sfp_type = ixgbe_sfp_type_not_present;
1616 	if (hw->phy.type != ixgbe_phy_nl) {
1617 		hw->phy.id = 0;
1618 		hw->phy.type = ixgbe_phy_unknown;
1619 	}
1620 	return IXGBE_ERR_SFP_NOT_PRESENT;
1621 }
1622 
1623 /**
1624  *  ixgbe_get_supported_phy_sfp_layer_generic - Returns physical layer type
1625  *  @hw: pointer to hardware structure
1626  *
1627  *  Determines physical layer capabilities of the current SFP.
1628  */
ixgbe_get_supported_phy_sfp_layer_generic(struct ixgbe_hw * hw)1629 s32 ixgbe_get_supported_phy_sfp_layer_generic(struct ixgbe_hw *hw)
1630 {
1631 	u32 physical_layer = IXGBE_PHYSICAL_LAYER_UNKNOWN;
1632 	u8 comp_codes_10g = 0;
1633 	u8 comp_codes_1g = 0;
1634 
1635 	DEBUGFUNC("ixgbe_get_supported_phy_sfp_layer_generic");
1636 
1637 	hw->phy.ops.identify_sfp(hw);
1638 	if (hw->phy.sfp_type == ixgbe_sfp_type_not_present)
1639 		return physical_layer;
1640 
1641 	switch (hw->phy.type) {
1642 	case ixgbe_phy_sfp_passive_tyco:
1643 	case ixgbe_phy_sfp_passive_unknown:
1644 	case ixgbe_phy_qsfp_passive_unknown:
1645 		physical_layer = IXGBE_PHYSICAL_LAYER_SFP_PLUS_CU;
1646 		break;
1647 	case ixgbe_phy_sfp_ftl_active:
1648 	case ixgbe_phy_sfp_active_unknown:
1649 	case ixgbe_phy_qsfp_active_unknown:
1650 		physical_layer = IXGBE_PHYSICAL_LAYER_SFP_ACTIVE_DA;
1651 		break;
1652 	case ixgbe_phy_sfp_avago:
1653 	case ixgbe_phy_sfp_ftl:
1654 	case ixgbe_phy_sfp_intel:
1655 	case ixgbe_phy_sfp_unknown:
1656 		hw->phy.ops.read_i2c_eeprom(hw,
1657 		      IXGBE_SFF_1GBE_COMP_CODES, &comp_codes_1g);
1658 		hw->phy.ops.read_i2c_eeprom(hw,
1659 		      IXGBE_SFF_10GBE_COMP_CODES, &comp_codes_10g);
1660 		if (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)
1661 			physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_SR;
1662 		else if (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)
1663 			physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_LR;
1664 		else if (comp_codes_1g & IXGBE_SFF_1GBASET_CAPABLE)
1665 			physical_layer = IXGBE_PHYSICAL_LAYER_1000BASE_T;
1666 		else if (comp_codes_1g & IXGBE_SFF_1GBASESX_CAPABLE)
1667 			physical_layer = IXGBE_PHYSICAL_LAYER_1000BASE_SX;
1668 		break;
1669 	case ixgbe_phy_qsfp_intel:
1670 	case ixgbe_phy_qsfp_unknown:
1671 		hw->phy.ops.read_i2c_eeprom(hw,
1672 		      IXGBE_SFF_QSFP_10GBE_COMP, &comp_codes_10g);
1673 		if (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)
1674 			physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_SR;
1675 		else if (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)
1676 			physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_LR;
1677 		break;
1678 	default:
1679 		break;
1680 	}
1681 
1682 	return physical_layer;
1683 }
1684 
1685 /**
1686  *  ixgbe_identify_qsfp_module_generic - Identifies QSFP modules
1687  *  @hw: pointer to hardware structure
1688  *
1689  *  Searches for and identifies the QSFP module and assigns appropriate PHY type
1690  **/
ixgbe_identify_qsfp_module_generic(struct ixgbe_hw * hw)1691 s32 ixgbe_identify_qsfp_module_generic(struct ixgbe_hw *hw)
1692 {
1693 	s32 status = IXGBE_ERR_PHY_ADDR_INVALID;
1694 	u32 vendor_oui = 0;
1695 	enum ixgbe_sfp_type stored_sfp_type = hw->phy.sfp_type;
1696 	u8 identifier = 0;
1697 	u8 comp_codes_1g = 0;
1698 	u8 comp_codes_10g = 0;
1699 	u8 oui_bytes[3] = {0, 0, 0};
1700 	u16 enforce_sfp = 0;
1701 	u8 connector = 0;
1702 	u8 cable_length = 0;
1703 	u8 device_tech = 0;
1704 	bool active_cable = FALSE;
1705 
1706 	DEBUGFUNC("ixgbe_identify_qsfp_module_generic");
1707 
1708 	if (hw->mac.ops.get_media_type(hw) != ixgbe_media_type_fiber_qsfp) {
1709 		hw->phy.sfp_type = ixgbe_sfp_type_not_present;
1710 		status = IXGBE_ERR_SFP_NOT_PRESENT;
1711 		goto out;
1712 	}
1713 
1714 	/* LAN ID is needed for I2C access */
1715 	hw->mac.ops.set_lan_id(hw);
1716 
1717 	status = hw->phy.ops.read_i2c_eeprom(hw, IXGBE_SFF_IDENTIFIER,
1718 					     &identifier);
1719 
1720 	if (status != IXGBE_SUCCESS)
1721 		goto err_read_i2c_eeprom;
1722 
1723 	if (identifier != IXGBE_SFF_IDENTIFIER_QSFP_PLUS) {
1724 		hw->phy.type = ixgbe_phy_sfp_unsupported;
1725 		status = IXGBE_ERR_SFP_NOT_SUPPORTED;
1726 		goto out;
1727 	}
1728 
1729 	hw->phy.id = identifier;
1730 
1731 	status = hw->phy.ops.read_i2c_eeprom(hw, IXGBE_SFF_QSFP_10GBE_COMP,
1732 					     &comp_codes_10g);
1733 
1734 	if (status != IXGBE_SUCCESS)
1735 		goto err_read_i2c_eeprom;
1736 
1737 	status = hw->phy.ops.read_i2c_eeprom(hw, IXGBE_SFF_QSFP_1GBE_COMP,
1738 					     &comp_codes_1g);
1739 
1740 	if (status != IXGBE_SUCCESS)
1741 		goto err_read_i2c_eeprom;
1742 
1743 	if (comp_codes_10g & IXGBE_SFF_QSFP_DA_PASSIVE_CABLE) {
1744 		hw->phy.type = ixgbe_phy_qsfp_passive_unknown;
1745 		if (hw->bus.lan_id == 0)
1746 			hw->phy.sfp_type = ixgbe_sfp_type_da_cu_core0;
1747 		else
1748 			hw->phy.sfp_type = ixgbe_sfp_type_da_cu_core1;
1749 	} else if (comp_codes_10g & (IXGBE_SFF_10GBASESR_CAPABLE |
1750 				     IXGBE_SFF_10GBASELR_CAPABLE)) {
1751 		if (hw->bus.lan_id == 0)
1752 			hw->phy.sfp_type = ixgbe_sfp_type_srlr_core0;
1753 		else
1754 			hw->phy.sfp_type = ixgbe_sfp_type_srlr_core1;
1755 	} else {
1756 		if (comp_codes_10g & IXGBE_SFF_QSFP_DA_ACTIVE_CABLE)
1757 			active_cable = TRUE;
1758 
1759 		if (!active_cable) {
1760 			/* check for active DA cables that pre-date
1761 			 * SFF-8436 v3.6 */
1762 			hw->phy.ops.read_i2c_eeprom(hw,
1763 					IXGBE_SFF_QSFP_CONNECTOR,
1764 					&connector);
1765 
1766 			hw->phy.ops.read_i2c_eeprom(hw,
1767 					IXGBE_SFF_QSFP_CABLE_LENGTH,
1768 					&cable_length);
1769 
1770 			hw->phy.ops.read_i2c_eeprom(hw,
1771 					IXGBE_SFF_QSFP_DEVICE_TECH,
1772 					&device_tech);
1773 
1774 			if ((connector ==
1775 				     IXGBE_SFF_QSFP_CONNECTOR_NOT_SEPARABLE) &&
1776 			    (cable_length > 0) &&
1777 			    ((device_tech >> 4) ==
1778 				     IXGBE_SFF_QSFP_TRANSMITER_850NM_VCSEL))
1779 				active_cable = TRUE;
1780 		}
1781 
1782 		if (active_cable) {
1783 			hw->phy.type = ixgbe_phy_qsfp_active_unknown;
1784 			if (hw->bus.lan_id == 0)
1785 				hw->phy.sfp_type =
1786 						ixgbe_sfp_type_da_act_lmt_core0;
1787 			else
1788 				hw->phy.sfp_type =
1789 						ixgbe_sfp_type_da_act_lmt_core1;
1790 		} else {
1791 			/* unsupported module type */
1792 			hw->phy.type = ixgbe_phy_sfp_unsupported;
1793 			status = IXGBE_ERR_SFP_NOT_SUPPORTED;
1794 			goto out;
1795 		}
1796 	}
1797 
1798 	if (hw->phy.sfp_type != stored_sfp_type)
1799 		hw->phy.sfp_setup_needed = TRUE;
1800 
1801 	/* Determine if the QSFP+ PHY is dual speed or not. */
1802 	hw->phy.multispeed_fiber = FALSE;
1803 	if (((comp_codes_1g & IXGBE_SFF_1GBASESX_CAPABLE) &&
1804 	   (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)) ||
1805 	   ((comp_codes_1g & IXGBE_SFF_1GBASELX_CAPABLE) &&
1806 	   (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)))
1807 		hw->phy.multispeed_fiber = TRUE;
1808 
1809 	/* Determine PHY vendor for optical modules */
1810 	if (comp_codes_10g & (IXGBE_SFF_10GBASESR_CAPABLE |
1811 			      IXGBE_SFF_10GBASELR_CAPABLE))  {
1812 		status = hw->phy.ops.read_i2c_eeprom(hw,
1813 					    IXGBE_SFF_QSFP_VENDOR_OUI_BYTE0,
1814 					    &oui_bytes[0]);
1815 
1816 		if (status != IXGBE_SUCCESS)
1817 			goto err_read_i2c_eeprom;
1818 
1819 		status = hw->phy.ops.read_i2c_eeprom(hw,
1820 					    IXGBE_SFF_QSFP_VENDOR_OUI_BYTE1,
1821 					    &oui_bytes[1]);
1822 
1823 		if (status != IXGBE_SUCCESS)
1824 			goto err_read_i2c_eeprom;
1825 
1826 		status = hw->phy.ops.read_i2c_eeprom(hw,
1827 					    IXGBE_SFF_QSFP_VENDOR_OUI_BYTE2,
1828 					    &oui_bytes[2]);
1829 
1830 		if (status != IXGBE_SUCCESS)
1831 			goto err_read_i2c_eeprom;
1832 
1833 		vendor_oui =
1834 		  ((oui_bytes[0] << IXGBE_SFF_VENDOR_OUI_BYTE0_SHIFT) |
1835 		   (oui_bytes[1] << IXGBE_SFF_VENDOR_OUI_BYTE1_SHIFT) |
1836 		   (oui_bytes[2] << IXGBE_SFF_VENDOR_OUI_BYTE2_SHIFT));
1837 
1838 		if (vendor_oui == IXGBE_SFF_VENDOR_OUI_INTEL)
1839 			hw->phy.type = ixgbe_phy_qsfp_intel;
1840 		else
1841 			hw->phy.type = ixgbe_phy_qsfp_unknown;
1842 
1843 		ixgbe_get_device_caps(hw, &enforce_sfp);
1844 		if (!(enforce_sfp & IXGBE_DEVICE_CAPS_ALLOW_ANY_SFP)) {
1845 			/* Make sure we're a supported PHY type */
1846 			if (hw->phy.type == ixgbe_phy_qsfp_intel) {
1847 				status = IXGBE_SUCCESS;
1848 			} else {
1849 				if (hw->allow_unsupported_sfp == TRUE) {
1850 					EWARN(hw, "WARNING: Intel (R) Network "
1851 					      "Connections are quality tested "
1852 					      "using Intel (R) Ethernet Optics."
1853 					      " Using untested modules is not "
1854 					      "supported and may cause unstable"
1855 					      " operation or damage to the "
1856 					      "module or the adapter. Intel "
1857 					      "Corporation is not responsible "
1858 					      "for any harm caused by using "
1859 					      "untested modules.\n", status);
1860 					status = IXGBE_SUCCESS;
1861 				} else {
1862 					DEBUGOUT("QSFP module not supported\n");
1863 					hw->phy.type =
1864 						ixgbe_phy_sfp_unsupported;
1865 					status = IXGBE_ERR_SFP_NOT_SUPPORTED;
1866 				}
1867 			}
1868 		} else {
1869 			status = IXGBE_SUCCESS;
1870 		}
1871 	}
1872 
1873 out:
1874 	return status;
1875 
1876 err_read_i2c_eeprom:
1877 	hw->phy.sfp_type = ixgbe_sfp_type_not_present;
1878 	hw->phy.id = 0;
1879 	hw->phy.type = ixgbe_phy_unknown;
1880 
1881 	return IXGBE_ERR_SFP_NOT_PRESENT;
1882 }
1883 
1884 
1885 /**
1886  *  ixgbe_get_sfp_init_sequence_offsets - Provides offset of PHY init sequence
1887  *  @hw: pointer to hardware structure
1888  *  @list_offset: offset to the SFP ID list
1889  *  @data_offset: offset to the SFP data block
1890  *
1891  *  Checks the MAC's EEPROM to see if it supports a given SFP+ module type, if
1892  *  so it returns the offsets to the phy init sequence block.
1893  **/
ixgbe_get_sfp_init_sequence_offsets(struct ixgbe_hw * hw,u16 * list_offset,u16 * data_offset)1894 s32 ixgbe_get_sfp_init_sequence_offsets(struct ixgbe_hw *hw,
1895 					u16 *list_offset,
1896 					u16 *data_offset)
1897 {
1898 	u16 sfp_id;
1899 	u16 sfp_type = hw->phy.sfp_type;
1900 
1901 	DEBUGFUNC("ixgbe_get_sfp_init_sequence_offsets");
1902 
1903 	if (hw->phy.sfp_type == ixgbe_sfp_type_unknown)
1904 		return IXGBE_ERR_SFP_NOT_SUPPORTED;
1905 
1906 	if (hw->phy.sfp_type == ixgbe_sfp_type_not_present)
1907 		return IXGBE_ERR_SFP_NOT_PRESENT;
1908 
1909 	if ((hw->device_id == IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM) &&
1910 	    (hw->phy.sfp_type == ixgbe_sfp_type_da_cu))
1911 		return IXGBE_ERR_SFP_NOT_SUPPORTED;
1912 
1913 	/*
1914 	 * Limiting active cables and 1G Phys must be initialized as
1915 	 * SR modules
1916 	 */
1917 	if (sfp_type == ixgbe_sfp_type_da_act_lmt_core0 ||
1918 	    sfp_type == ixgbe_sfp_type_1g_lx_core0 ||
1919 	    sfp_type == ixgbe_sfp_type_1g_cu_core0 ||
1920 	    sfp_type == ixgbe_sfp_type_1g_sx_core0)
1921 		sfp_type = ixgbe_sfp_type_srlr_core0;
1922 	else if (sfp_type == ixgbe_sfp_type_da_act_lmt_core1 ||
1923 		 sfp_type == ixgbe_sfp_type_1g_lx_core1 ||
1924 		 sfp_type == ixgbe_sfp_type_1g_cu_core1 ||
1925 		 sfp_type == ixgbe_sfp_type_1g_sx_core1)
1926 		sfp_type = ixgbe_sfp_type_srlr_core1;
1927 
1928 	/* Read offset to PHY init contents */
1929 	if (hw->eeprom.ops.read(hw, IXGBE_PHY_INIT_OFFSET_NL, list_offset)) {
1930 		ERROR_REPORT2(IXGBE_ERROR_INVALID_STATE,
1931 			      "eeprom read at offset %d failed",
1932 			      IXGBE_PHY_INIT_OFFSET_NL);
1933 		return IXGBE_ERR_SFP_NO_INIT_SEQ_PRESENT;
1934 	}
1935 
1936 	if ((!*list_offset) || (*list_offset == 0xFFFF))
1937 		return IXGBE_ERR_SFP_NO_INIT_SEQ_PRESENT;
1938 
1939 	/* Shift offset to first ID word */
1940 	(*list_offset)++;
1941 
1942 	/*
1943 	 * Find the matching SFP ID in the EEPROM
1944 	 * and program the init sequence
1945 	 */
1946 	if (hw->eeprom.ops.read(hw, *list_offset, &sfp_id))
1947 		goto err_phy;
1948 
1949 	while (sfp_id != IXGBE_PHY_INIT_END_NL) {
1950 		if (sfp_id == sfp_type) {
1951 			(*list_offset)++;
1952 			if (hw->eeprom.ops.read(hw, *list_offset, data_offset))
1953 				goto err_phy;
1954 			if ((!*data_offset) || (*data_offset == 0xFFFF)) {
1955 				DEBUGOUT("SFP+ module not supported\n");
1956 				return IXGBE_ERR_SFP_NOT_SUPPORTED;
1957 			} else {
1958 				break;
1959 			}
1960 		} else {
1961 			(*list_offset) += 2;
1962 			if (hw->eeprom.ops.read(hw, *list_offset, &sfp_id))
1963 				goto err_phy;
1964 		}
1965 	}
1966 
1967 	if (sfp_id == IXGBE_PHY_INIT_END_NL) {
1968 		DEBUGOUT("No matching SFP+ module found\n");
1969 		return IXGBE_ERR_SFP_NOT_SUPPORTED;
1970 	}
1971 
1972 	return IXGBE_SUCCESS;
1973 
1974 err_phy:
1975 	ERROR_REPORT2(IXGBE_ERROR_INVALID_STATE,
1976 		      "eeprom read at offset %d failed", *list_offset);
1977 	return IXGBE_ERR_PHY;
1978 }
1979 
1980 /**
1981  *  ixgbe_read_i2c_eeprom_generic - Reads 8 bit EEPROM word over I2C interface
1982  *  @hw: pointer to hardware structure
1983  *  @byte_offset: EEPROM byte offset to read
1984  *  @eeprom_data: value read
1985  *
1986  *  Performs byte read operation to SFP module's EEPROM over I2C interface.
1987  **/
ixgbe_read_i2c_eeprom_generic(struct ixgbe_hw * hw,u8 byte_offset,u8 * eeprom_data)1988 s32 ixgbe_read_i2c_eeprom_generic(struct ixgbe_hw *hw, u8 byte_offset,
1989 				  u8 *eeprom_data)
1990 {
1991 	DEBUGFUNC("ixgbe_read_i2c_eeprom_generic");
1992 
1993 	return hw->phy.ops.read_i2c_byte(hw, byte_offset,
1994 					 IXGBE_I2C_EEPROM_DEV_ADDR,
1995 					 eeprom_data);
1996 }
1997 
1998 /**
1999  *  ixgbe_read_i2c_sff8472_generic - Reads 8 bit word over I2C interface
2000  *  @hw: pointer to hardware structure
2001  *  @byte_offset: byte offset at address 0xA2
2002  *  @eeprom_data: value read
2003  *
2004  *  Performs byte read operation to SFP module's SFF-8472 data over I2C
2005  **/
ixgbe_read_i2c_sff8472_generic(struct ixgbe_hw * hw,u8 byte_offset,u8 * sff8472_data)2006 static s32 ixgbe_read_i2c_sff8472_generic(struct ixgbe_hw *hw, u8 byte_offset,
2007 					  u8 *sff8472_data)
2008 {
2009 	return hw->phy.ops.read_i2c_byte(hw, byte_offset,
2010 					 IXGBE_I2C_EEPROM_DEV_ADDR2,
2011 					 sff8472_data);
2012 }
2013 
2014 /**
2015  *  ixgbe_write_i2c_eeprom_generic - Writes 8 bit EEPROM word over I2C interface
2016  *  @hw: pointer to hardware structure
2017  *  @byte_offset: EEPROM byte offset to write
2018  *  @eeprom_data: value to write
2019  *
2020  *  Performs byte write operation to SFP module's EEPROM over I2C interface.
2021  **/
ixgbe_write_i2c_eeprom_generic(struct ixgbe_hw * hw,u8 byte_offset,u8 eeprom_data)2022 s32 ixgbe_write_i2c_eeprom_generic(struct ixgbe_hw *hw, u8 byte_offset,
2023 				   u8 eeprom_data)
2024 {
2025 	DEBUGFUNC("ixgbe_write_i2c_eeprom_generic");
2026 
2027 	return hw->phy.ops.write_i2c_byte(hw, byte_offset,
2028 					  IXGBE_I2C_EEPROM_DEV_ADDR,
2029 					  eeprom_data);
2030 }
2031 
2032 /**
2033  * ixgbe_is_sfp_probe - Returns TRUE if SFP is being detected
2034  * @hw: pointer to hardware structure
2035  * @offset: eeprom offset to be read
2036  * @addr: I2C address to be read
2037  */
ixgbe_is_sfp_probe(struct ixgbe_hw * hw,u8 offset,u8 addr)2038 static bool ixgbe_is_sfp_probe(struct ixgbe_hw *hw, u8 offset, u8 addr)
2039 {
2040 	if (addr == IXGBE_I2C_EEPROM_DEV_ADDR &&
2041 	    offset == IXGBE_SFF_IDENTIFIER &&
2042 	    hw->phy.sfp_type == ixgbe_sfp_type_not_present)
2043 		return TRUE;
2044 	return FALSE;
2045 }
2046 
2047 /**
2048  *  ixgbe_read_i2c_byte_generic_int - Reads 8 bit word over I2C
2049  *  @hw: pointer to hardware structure
2050  *  @byte_offset: byte offset to read
2051  *  @data: value read
2052  *  @lock: TRUE if to take and release semaphore
2053  *
2054  *  Performs byte read operation to SFP module's EEPROM over I2C interface at
2055  *  a specified device address.
2056  **/
ixgbe_read_i2c_byte_generic_int(struct ixgbe_hw * hw,u8 byte_offset,u8 dev_addr,u8 * data,bool lock)2057 static s32 ixgbe_read_i2c_byte_generic_int(struct ixgbe_hw *hw, u8 byte_offset,
2058 					   u8 dev_addr, u8 *data, bool lock)
2059 {
2060 	s32 status;
2061 	u32 max_retry = 10;
2062 	u32 retry = 0;
2063 	u32 swfw_mask = hw->phy.phy_semaphore_mask;
2064 	bool nack = 1;
2065 	*data = 0;
2066 
2067 	DEBUGFUNC("ixgbe_read_i2c_byte_generic");
2068 
2069 	if (hw->mac.type >= ixgbe_mac_X550)
2070 		max_retry = 3;
2071 	if (ixgbe_is_sfp_probe(hw, byte_offset, dev_addr))
2072 		max_retry = IXGBE_SFP_DETECT_RETRIES;
2073 
2074 	do {
2075 		if (lock && hw->mac.ops.acquire_swfw_sync(hw, swfw_mask))
2076 			return IXGBE_ERR_SWFW_SYNC;
2077 
2078 		ixgbe_i2c_start(hw);
2079 
2080 		/* Device Address and write indication */
2081 		status = ixgbe_clock_out_i2c_byte(hw, dev_addr);
2082 		if (status != IXGBE_SUCCESS)
2083 			goto fail;
2084 
2085 		status = ixgbe_get_i2c_ack(hw);
2086 		if (status != IXGBE_SUCCESS)
2087 			goto fail;
2088 
2089 		status = ixgbe_clock_out_i2c_byte(hw, byte_offset);
2090 		if (status != IXGBE_SUCCESS)
2091 			goto fail;
2092 
2093 		status = ixgbe_get_i2c_ack(hw);
2094 		if (status != IXGBE_SUCCESS)
2095 			goto fail;
2096 
2097 		ixgbe_i2c_start(hw);
2098 
2099 		/* Device Address and read indication */
2100 		status = ixgbe_clock_out_i2c_byte(hw, (dev_addr | 0x1));
2101 		if (status != IXGBE_SUCCESS)
2102 			goto fail;
2103 
2104 		status = ixgbe_get_i2c_ack(hw);
2105 		if (status != IXGBE_SUCCESS)
2106 			goto fail;
2107 
2108 		status = ixgbe_clock_in_i2c_byte(hw, data);
2109 		if (status != IXGBE_SUCCESS)
2110 			goto fail;
2111 
2112 		status = ixgbe_clock_out_i2c_bit(hw, nack);
2113 		if (status != IXGBE_SUCCESS)
2114 			goto fail;
2115 
2116 		ixgbe_i2c_stop(hw);
2117 		if (lock)
2118 			hw->mac.ops.release_swfw_sync(hw, swfw_mask);
2119 		return IXGBE_SUCCESS;
2120 
2121 fail:
2122 		ixgbe_i2c_bus_clear(hw);
2123 		if (lock) {
2124 			hw->mac.ops.release_swfw_sync(hw, swfw_mask);
2125 			msec_delay(100);
2126 		}
2127 		retry++;
2128 		if (retry < max_retry)
2129 			DEBUGOUT("I2C byte read error - Retrying.\n");
2130 		else
2131 			DEBUGOUT("I2C byte read error.\n");
2132 
2133 	} while (retry < max_retry);
2134 
2135 	return status;
2136 }
2137 
2138 /**
2139  *  ixgbe_read_i2c_byte_generic - Reads 8 bit word over I2C
2140  *  @hw: pointer to hardware structure
2141  *  @byte_offset: byte offset to read
2142  *  @data: value read
2143  *
2144  *  Performs byte read operation to SFP module's EEPROM over I2C interface at
2145  *  a specified device address.
2146  **/
ixgbe_read_i2c_byte_generic(struct ixgbe_hw * hw,u8 byte_offset,u8 dev_addr,u8 * data)2147 s32 ixgbe_read_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset,
2148 				u8 dev_addr, u8 *data)
2149 {
2150 	return ixgbe_read_i2c_byte_generic_int(hw, byte_offset, dev_addr,
2151 					       data, TRUE);
2152 }
2153 
2154 /**
2155  *  ixgbe_read_i2c_byte_generic_unlocked - Reads 8 bit word over I2C
2156  *  @hw: pointer to hardware structure
2157  *  @byte_offset: byte offset to read
2158  *  @data: value read
2159  *
2160  *  Performs byte read operation to SFP module's EEPROM over I2C interface at
2161  *  a specified device address.
2162  **/
ixgbe_read_i2c_byte_generic_unlocked(struct ixgbe_hw * hw,u8 byte_offset,u8 dev_addr,u8 * data)2163 s32 ixgbe_read_i2c_byte_generic_unlocked(struct ixgbe_hw *hw, u8 byte_offset,
2164 					 u8 dev_addr, u8 *data)
2165 {
2166 	return ixgbe_read_i2c_byte_generic_int(hw, byte_offset, dev_addr,
2167 					       data, FALSE);
2168 }
2169 
2170 /**
2171  *  ixgbe_write_i2c_byte_generic_int - Writes 8 bit word over I2C
2172  *  @hw: pointer to hardware structure
2173  *  @byte_offset: byte offset to write
2174  *  @data: value to write
2175  *  @lock: TRUE if to take and release semaphore
2176  *
2177  *  Performs byte write operation to SFP module's EEPROM over I2C interface at
2178  *  a specified device address.
2179  **/
ixgbe_write_i2c_byte_generic_int(struct ixgbe_hw * hw,u8 byte_offset,u8 dev_addr,u8 data,bool lock)2180 static s32 ixgbe_write_i2c_byte_generic_int(struct ixgbe_hw *hw, u8 byte_offset,
2181 					    u8 dev_addr, u8 data, bool lock)
2182 {
2183 	s32 status;
2184 	u32 max_retry = 1;
2185 	u32 retry = 0;
2186 	u32 swfw_mask = hw->phy.phy_semaphore_mask;
2187 
2188 	DEBUGFUNC("ixgbe_write_i2c_byte_generic");
2189 
2190 	if (lock && hw->mac.ops.acquire_swfw_sync(hw, swfw_mask) !=
2191 	    IXGBE_SUCCESS)
2192 		return IXGBE_ERR_SWFW_SYNC;
2193 
2194 	do {
2195 		ixgbe_i2c_start(hw);
2196 
2197 		status = ixgbe_clock_out_i2c_byte(hw, dev_addr);
2198 		if (status != IXGBE_SUCCESS)
2199 			goto fail;
2200 
2201 		status = ixgbe_get_i2c_ack(hw);
2202 		if (status != IXGBE_SUCCESS)
2203 			goto fail;
2204 
2205 		status = ixgbe_clock_out_i2c_byte(hw, byte_offset);
2206 		if (status != IXGBE_SUCCESS)
2207 			goto fail;
2208 
2209 		status = ixgbe_get_i2c_ack(hw);
2210 		if (status != IXGBE_SUCCESS)
2211 			goto fail;
2212 
2213 		status = ixgbe_clock_out_i2c_byte(hw, data);
2214 		if (status != IXGBE_SUCCESS)
2215 			goto fail;
2216 
2217 		status = ixgbe_get_i2c_ack(hw);
2218 		if (status != IXGBE_SUCCESS)
2219 			goto fail;
2220 
2221 		ixgbe_i2c_stop(hw);
2222 		if (lock)
2223 			hw->mac.ops.release_swfw_sync(hw, swfw_mask);
2224 		return IXGBE_SUCCESS;
2225 
2226 fail:
2227 		ixgbe_i2c_bus_clear(hw);
2228 		retry++;
2229 		if (retry < max_retry)
2230 			DEBUGOUT("I2C byte write error - Retrying.\n");
2231 		else
2232 			DEBUGOUT("I2C byte write error.\n");
2233 	} while (retry < max_retry);
2234 
2235 	if (lock)
2236 		hw->mac.ops.release_swfw_sync(hw, swfw_mask);
2237 
2238 	return status;
2239 }
2240 
2241 /**
2242  *  ixgbe_write_i2c_byte_generic - Writes 8 bit word over I2C
2243  *  @hw: pointer to hardware structure
2244  *  @byte_offset: byte offset to write
2245  *  @data: value to write
2246  *
2247  *  Performs byte write operation to SFP module's EEPROM over I2C interface at
2248  *  a specified device address.
2249  **/
ixgbe_write_i2c_byte_generic(struct ixgbe_hw * hw,u8 byte_offset,u8 dev_addr,u8 data)2250 s32 ixgbe_write_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset,
2251 				 u8 dev_addr, u8 data)
2252 {
2253 	return ixgbe_write_i2c_byte_generic_int(hw, byte_offset, dev_addr,
2254 						data, TRUE);
2255 }
2256 
2257 /**
2258  *  ixgbe_write_i2c_byte_generic_unlocked - Writes 8 bit word over I2C
2259  *  @hw: pointer to hardware structure
2260  *  @byte_offset: byte offset to write
2261  *  @data: value to write
2262  *
2263  *  Performs byte write operation to SFP module's EEPROM over I2C interface at
2264  *  a specified device address.
2265  **/
ixgbe_write_i2c_byte_generic_unlocked(struct ixgbe_hw * hw,u8 byte_offset,u8 dev_addr,u8 data)2266 s32 ixgbe_write_i2c_byte_generic_unlocked(struct ixgbe_hw *hw, u8 byte_offset,
2267 					  u8 dev_addr, u8 data)
2268 {
2269 	return ixgbe_write_i2c_byte_generic_int(hw, byte_offset, dev_addr,
2270 						data, FALSE);
2271 }
2272 
2273 /**
2274  *  ixgbe_i2c_start - Sets I2C start condition
2275  *  @hw: pointer to hardware structure
2276  *
2277  *  Sets I2C start condition (High -> Low on SDA while SCL is High)
2278  *  Set bit-bang mode on X550 hardware.
2279  **/
ixgbe_i2c_start(struct ixgbe_hw * hw)2280 static void ixgbe_i2c_start(struct ixgbe_hw *hw)
2281 {
2282 	u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL_BY_MAC(hw));
2283 
2284 	DEBUGFUNC("ixgbe_i2c_start");
2285 
2286 	i2cctl |= IXGBE_I2C_BB_EN_BY_MAC(hw);
2287 
2288 	/* Start condition must begin with data and clock high */
2289 	ixgbe_set_i2c_data(hw, &i2cctl, 1);
2290 	ixgbe_raise_i2c_clk(hw, &i2cctl);
2291 
2292 	/* Setup time for start condition (4.7us) */
2293 	usec_delay(IXGBE_I2C_T_SU_STA);
2294 
2295 	ixgbe_set_i2c_data(hw, &i2cctl, 0);
2296 
2297 	/* Hold time for start condition (4us) */
2298 	usec_delay(IXGBE_I2C_T_HD_STA);
2299 
2300 	ixgbe_lower_i2c_clk(hw, &i2cctl);
2301 
2302 	/* Minimum low period of clock is 4.7 us */
2303 	usec_delay(IXGBE_I2C_T_LOW);
2304 
2305 }
2306 
2307 /**
2308  *  ixgbe_i2c_stop - Sets I2C stop condition
2309  *  @hw: pointer to hardware structure
2310  *
2311  *  Sets I2C stop condition (Low -> High on SDA while SCL is High)
2312  *  Disables bit-bang mode and negates data output enable on X550
2313  *  hardware.
2314  **/
ixgbe_i2c_stop(struct ixgbe_hw * hw)2315 static void ixgbe_i2c_stop(struct ixgbe_hw *hw)
2316 {
2317 	u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL_BY_MAC(hw));
2318 	u32 data_oe_bit = IXGBE_I2C_DATA_OE_N_EN_BY_MAC(hw);
2319 	u32 clk_oe_bit = IXGBE_I2C_CLK_OE_N_EN_BY_MAC(hw);
2320 	u32 bb_en_bit = IXGBE_I2C_BB_EN_BY_MAC(hw);
2321 
2322 	DEBUGFUNC("ixgbe_i2c_stop");
2323 
2324 	/* Stop condition must begin with data low and clock high */
2325 	ixgbe_set_i2c_data(hw, &i2cctl, 0);
2326 	ixgbe_raise_i2c_clk(hw, &i2cctl);
2327 
2328 	/* Setup time for stop condition (4us) */
2329 	usec_delay(IXGBE_I2C_T_SU_STO);
2330 
2331 	ixgbe_set_i2c_data(hw, &i2cctl, 1);
2332 
2333 	/* bus free time between stop and start (4.7us)*/
2334 	usec_delay(IXGBE_I2C_T_BUF);
2335 
2336 	if (bb_en_bit || data_oe_bit || clk_oe_bit) {
2337 		i2cctl &= ~bb_en_bit;
2338 		i2cctl |= data_oe_bit | clk_oe_bit;
2339 		IXGBE_WRITE_REG(hw, IXGBE_I2CCTL_BY_MAC(hw), i2cctl);
2340 		IXGBE_WRITE_FLUSH(hw);
2341 	}
2342 }
2343 
2344 /**
2345  *  ixgbe_clock_in_i2c_byte - Clocks in one byte via I2C
2346  *  @hw: pointer to hardware structure
2347  *  @data: data byte to clock in
2348  *
2349  *  Clocks in one byte data via I2C data/clock
2350  **/
ixgbe_clock_in_i2c_byte(struct ixgbe_hw * hw,u8 * data)2351 static s32 ixgbe_clock_in_i2c_byte(struct ixgbe_hw *hw, u8 *data)
2352 {
2353 	s32 i;
2354 	bool bit = 0;
2355 
2356 	DEBUGFUNC("ixgbe_clock_in_i2c_byte");
2357 
2358 	*data = 0;
2359 	for (i = 7; i >= 0; i--) {
2360 		ixgbe_clock_in_i2c_bit(hw, &bit);
2361 		*data |= bit << i;
2362 	}
2363 
2364 	return IXGBE_SUCCESS;
2365 }
2366 
2367 /**
2368  *  ixgbe_clock_out_i2c_byte - Clocks out one byte via I2C
2369  *  @hw: pointer to hardware structure
2370  *  @data: data byte clocked out
2371  *
2372  *  Clocks out one byte data via I2C data/clock
2373  **/
ixgbe_clock_out_i2c_byte(struct ixgbe_hw * hw,u8 data)2374 static s32 ixgbe_clock_out_i2c_byte(struct ixgbe_hw *hw, u8 data)
2375 {
2376 	s32 status = IXGBE_SUCCESS;
2377 	s32 i;
2378 	u32 i2cctl;
2379 	bool bit;
2380 
2381 	DEBUGFUNC("ixgbe_clock_out_i2c_byte");
2382 
2383 	for (i = 7; i >= 0; i--) {
2384 		bit = (data >> i) & 0x1;
2385 		status = ixgbe_clock_out_i2c_bit(hw, bit);
2386 
2387 		if (status != IXGBE_SUCCESS)
2388 			break;
2389 	}
2390 
2391 	/* Release SDA line (set high) */
2392 	i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL_BY_MAC(hw));
2393 	i2cctl |= IXGBE_I2C_DATA_OUT_BY_MAC(hw);
2394 	i2cctl |= IXGBE_I2C_DATA_OE_N_EN_BY_MAC(hw);
2395 	IXGBE_WRITE_REG(hw, IXGBE_I2CCTL_BY_MAC(hw), i2cctl);
2396 	IXGBE_WRITE_FLUSH(hw);
2397 
2398 	return status;
2399 }
2400 
2401 /**
2402  *  ixgbe_get_i2c_ack - Polls for I2C ACK
2403  *  @hw: pointer to hardware structure
2404  *
2405  *  Clocks in/out one bit via I2C data/clock
2406  **/
ixgbe_get_i2c_ack(struct ixgbe_hw * hw)2407 static s32 ixgbe_get_i2c_ack(struct ixgbe_hw *hw)
2408 {
2409 	u32 data_oe_bit = IXGBE_I2C_DATA_OE_N_EN_BY_MAC(hw);
2410 	s32 status = IXGBE_SUCCESS;
2411 	u32 i = 0;
2412 	u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL_BY_MAC(hw));
2413 	u32 timeout = 10;
2414 	bool ack = 1;
2415 
2416 	DEBUGFUNC("ixgbe_get_i2c_ack");
2417 
2418 	if (data_oe_bit) {
2419 		i2cctl |= IXGBE_I2C_DATA_OUT_BY_MAC(hw);
2420 		i2cctl |= data_oe_bit;
2421 		IXGBE_WRITE_REG(hw, IXGBE_I2CCTL_BY_MAC(hw), i2cctl);
2422 		IXGBE_WRITE_FLUSH(hw);
2423 	}
2424 	ixgbe_raise_i2c_clk(hw, &i2cctl);
2425 
2426 	/* Minimum high period of clock is 4us */
2427 	usec_delay(IXGBE_I2C_T_HIGH);
2428 
2429 	/* Poll for ACK.  Note that ACK in I2C spec is
2430 	 * transition from 1 to 0 */
2431 	for (i = 0; i < timeout; i++) {
2432 		i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL_BY_MAC(hw));
2433 		ack = ixgbe_get_i2c_data(hw, &i2cctl);
2434 
2435 		usec_delay(1);
2436 		if (!ack)
2437 			break;
2438 	}
2439 
2440 	if (ack) {
2441 		DEBUGOUT("I2C ack was not received.\n");
2442 		status = IXGBE_ERR_I2C;
2443 	}
2444 
2445 	ixgbe_lower_i2c_clk(hw, &i2cctl);
2446 
2447 	/* Minimum low period of clock is 4.7 us */
2448 	usec_delay(IXGBE_I2C_T_LOW);
2449 
2450 	return status;
2451 }
2452 
2453 /**
2454  *  ixgbe_clock_in_i2c_bit - Clocks in one bit via I2C data/clock
2455  *  @hw: pointer to hardware structure
2456  *  @data: read data value
2457  *
2458  *  Clocks in one bit via I2C data/clock
2459  **/
ixgbe_clock_in_i2c_bit(struct ixgbe_hw * hw,bool * data)2460 static s32 ixgbe_clock_in_i2c_bit(struct ixgbe_hw *hw, bool *data)
2461 {
2462 	u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL_BY_MAC(hw));
2463 	u32 data_oe_bit = IXGBE_I2C_DATA_OE_N_EN_BY_MAC(hw);
2464 
2465 	DEBUGFUNC("ixgbe_clock_in_i2c_bit");
2466 
2467 	if (data_oe_bit) {
2468 		i2cctl |= IXGBE_I2C_DATA_OUT_BY_MAC(hw);
2469 		i2cctl |= data_oe_bit;
2470 		IXGBE_WRITE_REG(hw, IXGBE_I2CCTL_BY_MAC(hw), i2cctl);
2471 		IXGBE_WRITE_FLUSH(hw);
2472 	}
2473 	ixgbe_raise_i2c_clk(hw, &i2cctl);
2474 
2475 	/* Minimum high period of clock is 4us */
2476 	usec_delay(IXGBE_I2C_T_HIGH);
2477 
2478 	i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL_BY_MAC(hw));
2479 	*data = ixgbe_get_i2c_data(hw, &i2cctl);
2480 
2481 	ixgbe_lower_i2c_clk(hw, &i2cctl);
2482 
2483 	/* Minimum low period of clock is 4.7 us */
2484 	usec_delay(IXGBE_I2C_T_LOW);
2485 
2486 	return IXGBE_SUCCESS;
2487 }
2488 
2489 /**
2490  *  ixgbe_clock_out_i2c_bit - Clocks in/out one bit via I2C data/clock
2491  *  @hw: pointer to hardware structure
2492  *  @data: data value to write
2493  *
2494  *  Clocks out one bit via I2C data/clock
2495  **/
ixgbe_clock_out_i2c_bit(struct ixgbe_hw * hw,bool data)2496 static s32 ixgbe_clock_out_i2c_bit(struct ixgbe_hw *hw, bool data)
2497 {
2498 	s32 status;
2499 	u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL_BY_MAC(hw));
2500 
2501 	DEBUGFUNC("ixgbe_clock_out_i2c_bit");
2502 
2503 	status = ixgbe_set_i2c_data(hw, &i2cctl, data);
2504 	if (status == IXGBE_SUCCESS) {
2505 		ixgbe_raise_i2c_clk(hw, &i2cctl);
2506 
2507 		/* Minimum high period of clock is 4us */
2508 		usec_delay(IXGBE_I2C_T_HIGH);
2509 
2510 		ixgbe_lower_i2c_clk(hw, &i2cctl);
2511 
2512 		/* Minimum low period of clock is 4.7 us.
2513 		 * This also takes care of the data hold time.
2514 		 */
2515 		usec_delay(IXGBE_I2C_T_LOW);
2516 	} else {
2517 		status = IXGBE_ERR_I2C;
2518 		ERROR_REPORT2(IXGBE_ERROR_INVALID_STATE,
2519 			     "I2C data was not set to %X\n", data);
2520 	}
2521 
2522 	return status;
2523 }
2524 
2525 /**
2526  *  ixgbe_raise_i2c_clk - Raises the I2C SCL clock
2527  *  @hw: pointer to hardware structure
2528  *  @i2cctl: Current value of I2CCTL register
2529  *
2530  *  Raises the I2C clock line '0'->'1'
2531  *  Negates the I2C clock output enable on X550 hardware.
2532  **/
ixgbe_raise_i2c_clk(struct ixgbe_hw * hw,u32 * i2cctl)2533 static void ixgbe_raise_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl)
2534 {
2535 	u32 clk_oe_bit = IXGBE_I2C_CLK_OE_N_EN_BY_MAC(hw);
2536 	u32 i = 0;
2537 	u32 timeout = IXGBE_I2C_CLOCK_STRETCHING_TIMEOUT;
2538 	u32 i2cctl_r = 0;
2539 
2540 	DEBUGFUNC("ixgbe_raise_i2c_clk");
2541 
2542 	if (clk_oe_bit) {
2543 		*i2cctl |= clk_oe_bit;
2544 		IXGBE_WRITE_REG(hw, IXGBE_I2CCTL_BY_MAC(hw), *i2cctl);
2545 	}
2546 
2547 	for (i = 0; i < timeout; i++) {
2548 		*i2cctl |= IXGBE_I2C_CLK_OUT_BY_MAC(hw);
2549 
2550 		IXGBE_WRITE_REG(hw, IXGBE_I2CCTL_BY_MAC(hw), *i2cctl);
2551 		IXGBE_WRITE_FLUSH(hw);
2552 		/* SCL rise time (1000ns) */
2553 		usec_delay(IXGBE_I2C_T_RISE);
2554 
2555 		i2cctl_r = IXGBE_READ_REG(hw, IXGBE_I2CCTL_BY_MAC(hw));
2556 		if (i2cctl_r & IXGBE_I2C_CLK_IN_BY_MAC(hw))
2557 			break;
2558 	}
2559 }
2560 
2561 /**
2562  *  ixgbe_lower_i2c_clk - Lowers the I2C SCL clock
2563  *  @hw: pointer to hardware structure
2564  *  @i2cctl: Current value of I2CCTL register
2565  *
2566  *  Lowers the I2C clock line '1'->'0'
2567  *  Asserts the I2C clock output enable on X550 hardware.
2568  **/
ixgbe_lower_i2c_clk(struct ixgbe_hw * hw,u32 * i2cctl)2569 static void ixgbe_lower_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl)
2570 {
2571 	DEBUGFUNC("ixgbe_lower_i2c_clk");
2572 
2573 	*i2cctl &= ~(IXGBE_I2C_CLK_OUT_BY_MAC(hw));
2574 	*i2cctl &= ~IXGBE_I2C_CLK_OE_N_EN_BY_MAC(hw);
2575 
2576 	IXGBE_WRITE_REG(hw, IXGBE_I2CCTL_BY_MAC(hw), *i2cctl);
2577 	IXGBE_WRITE_FLUSH(hw);
2578 
2579 	/* SCL fall time (300ns) */
2580 	usec_delay(IXGBE_I2C_T_FALL);
2581 }
2582 
2583 /**
2584  *  ixgbe_set_i2c_data - Sets the I2C data bit
2585  *  @hw: pointer to hardware structure
2586  *  @i2cctl: Current value of I2CCTL register
2587  *  @data: I2C data value (0 or 1) to set
2588  *
2589  *  Sets the I2C data bit
2590  *  Asserts the I2C data output enable on X550 hardware.
2591  **/
ixgbe_set_i2c_data(struct ixgbe_hw * hw,u32 * i2cctl,bool data)2592 static s32 ixgbe_set_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl, bool data)
2593 {
2594 	u32 data_oe_bit = IXGBE_I2C_DATA_OE_N_EN_BY_MAC(hw);
2595 	s32 status = IXGBE_SUCCESS;
2596 
2597 	DEBUGFUNC("ixgbe_set_i2c_data");
2598 
2599 	if (data)
2600 		*i2cctl |= IXGBE_I2C_DATA_OUT_BY_MAC(hw);
2601 	else
2602 		*i2cctl &= ~(IXGBE_I2C_DATA_OUT_BY_MAC(hw));
2603 	*i2cctl &= ~data_oe_bit;
2604 
2605 	IXGBE_WRITE_REG(hw, IXGBE_I2CCTL_BY_MAC(hw), *i2cctl);
2606 	IXGBE_WRITE_FLUSH(hw);
2607 
2608 	/* Data rise/fall (1000ns/300ns) and set-up time (250ns) */
2609 	usec_delay(IXGBE_I2C_T_RISE + IXGBE_I2C_T_FALL + IXGBE_I2C_T_SU_DATA);
2610 
2611 	if (!data)	/* Can't verify data in this case */
2612 		return IXGBE_SUCCESS;
2613 	if (data_oe_bit) {
2614 		*i2cctl |= data_oe_bit;
2615 		IXGBE_WRITE_REG(hw, IXGBE_I2CCTL_BY_MAC(hw), *i2cctl);
2616 		IXGBE_WRITE_FLUSH(hw);
2617 	}
2618 
2619 	/* Verify data was set correctly */
2620 	*i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL_BY_MAC(hw));
2621 	if (data != ixgbe_get_i2c_data(hw, i2cctl)) {
2622 		status = IXGBE_ERR_I2C;
2623 		ERROR_REPORT2(IXGBE_ERROR_INVALID_STATE,
2624 			     "Error - I2C data was not set to %X.\n",
2625 			     data);
2626 	}
2627 
2628 	return status;
2629 }
2630 
2631 /**
2632  *  ixgbe_get_i2c_data - Reads the I2C SDA data bit
2633  *  @hw: pointer to hardware structure
2634  *  @i2cctl: Current value of I2CCTL register
2635  *
2636  *  Returns the I2C data bit value
2637  *  Negates the I2C data output enable on X550 hardware.
2638  **/
ixgbe_get_i2c_data(struct ixgbe_hw * hw,u32 * i2cctl)2639 static bool ixgbe_get_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl)
2640 {
2641 	u32 data_oe_bit = IXGBE_I2C_DATA_OE_N_EN_BY_MAC(hw);
2642 	bool data;
2643 
2644 	DEBUGFUNC("ixgbe_get_i2c_data");
2645 
2646 	if (data_oe_bit) {
2647 		*i2cctl |= data_oe_bit;
2648 		IXGBE_WRITE_REG(hw, IXGBE_I2CCTL_BY_MAC(hw), *i2cctl);
2649 		IXGBE_WRITE_FLUSH(hw);
2650 		usec_delay(IXGBE_I2C_T_FALL);
2651 	}
2652 
2653 	if (*i2cctl & IXGBE_I2C_DATA_IN_BY_MAC(hw))
2654 		data = 1;
2655 	else
2656 		data = 0;
2657 
2658 	return data;
2659 }
2660 
2661 /**
2662  *  ixgbe_i2c_bus_clear - Clears the I2C bus
2663  *  @hw: pointer to hardware structure
2664  *
2665  *  Clears the I2C bus by sending nine clock pulses.
2666  *  Used when data line is stuck low.
2667  **/
ixgbe_i2c_bus_clear(struct ixgbe_hw * hw)2668 void ixgbe_i2c_bus_clear(struct ixgbe_hw *hw)
2669 {
2670 	u32 i2cctl;
2671 	u32 i;
2672 
2673 	DEBUGFUNC("ixgbe_i2c_bus_clear");
2674 
2675 	ixgbe_i2c_start(hw);
2676 	i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL_BY_MAC(hw));
2677 
2678 	ixgbe_set_i2c_data(hw, &i2cctl, 1);
2679 
2680 	for (i = 0; i < 9; i++) {
2681 		ixgbe_raise_i2c_clk(hw, &i2cctl);
2682 
2683 		/* Min high period of clock is 4us */
2684 		usec_delay(IXGBE_I2C_T_HIGH);
2685 
2686 		ixgbe_lower_i2c_clk(hw, &i2cctl);
2687 
2688 		/* Min low period of clock is 4.7us*/
2689 		usec_delay(IXGBE_I2C_T_LOW);
2690 	}
2691 
2692 	ixgbe_i2c_start(hw);
2693 
2694 	/* Put the i2c bus back to default state */
2695 	ixgbe_i2c_stop(hw);
2696 }
2697 
2698 /**
2699  *  ixgbe_tn_check_overtemp - Checks if an overtemp occurred.
2700  *  @hw: pointer to hardware structure
2701  *
2702  *  Checks if the LASI temp alarm status was triggered due to overtemp
2703  **/
ixgbe_tn_check_overtemp(struct ixgbe_hw * hw)2704 s32 ixgbe_tn_check_overtemp(struct ixgbe_hw *hw)
2705 {
2706 	s32 status = IXGBE_SUCCESS;
2707 	u16 phy_data = 0;
2708 
2709 	DEBUGFUNC("ixgbe_tn_check_overtemp");
2710 
2711 	if (hw->device_id != IXGBE_DEV_ID_82599_T3_LOM)
2712 		goto out;
2713 
2714 	/* Check that the LASI temp alarm status was triggered */
2715 	hw->phy.ops.read_reg(hw, IXGBE_TN_LASI_STATUS_REG,
2716 			     IXGBE_MDIO_PMA_PMD_DEV_TYPE, &phy_data);
2717 
2718 	if (!(phy_data & IXGBE_TN_LASI_STATUS_TEMP_ALARM))
2719 		goto out;
2720 
2721 	status = IXGBE_ERR_OVERTEMP;
2722 	ERROR_REPORT1(IXGBE_ERROR_CAUTION, "Device over temperature");
2723 out:
2724 	return status;
2725 }
2726 
2727 /**
2728  * ixgbe_set_copper_phy_power - Control power for copper phy
2729  * @hw: pointer to hardware structure
2730  * @on: TRUE for on, FALSE for off
2731  */
ixgbe_set_copper_phy_power(struct ixgbe_hw * hw,bool on)2732 s32 ixgbe_set_copper_phy_power(struct ixgbe_hw *hw, bool on)
2733 {
2734 	u32 status;
2735 	u16 reg;
2736 
2737 	if (!on && ixgbe_mng_present(hw))
2738 		return 0;
2739 
2740 	status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_VENDOR_SPECIFIC_1_CONTROL,
2741 				      IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE,
2742 				      &reg);
2743 	if (status)
2744 		return status;
2745 
2746 	if (on) {
2747 		reg &= ~IXGBE_MDIO_PHY_SET_LOW_POWER_MODE;
2748 	} else {
2749 		if (ixgbe_check_reset_blocked(hw))
2750 			return 0;
2751 		reg |= IXGBE_MDIO_PHY_SET_LOW_POWER_MODE;
2752 	}
2753 
2754 	status = hw->phy.ops.write_reg(hw, IXGBE_MDIO_VENDOR_SPECIFIC_1_CONTROL,
2755 				       IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE,
2756 				       reg);
2757 	return status;
2758 }
2759