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