xref: /titanic_41/usr/src/uts/common/io/ixgbe/ixgbe_phy.c (revision 9c7bbd7179a96404fb22fa83f4680174da8b2239)
1 /*
2  * CDDL HEADER START
3  *
4  * Copyright(c) 2007-2009 Intel Corporation. All rights reserved.
5  * The contents of this file are subject to the terms of the
6  * Common Development and Distribution License (the "License").
7  * You may not use this file except in compliance with the License.
8  *
9  * You can obtain a copy of the license at:
10  *      http://www.opensolaris.org/os/licensing.
11  * See the License for the specific language governing permissions
12  * and limitations under the License.
13  *
14  * When using or redistributing this file, you may do so under the
15  * License only. No other modification of this header is permitted.
16  *
17  * If applicable, add the following below this CDDL HEADER, with the
18  * fields enclosed by brackets "[]" replaced with your own identifying
19  * information: Portions Copyright [yyyy] [name of copyright owner]
20  *
21  * CDDL HEADER END
22  */
23 
24 /*
25  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
26  * Use is subject to license terms.
27  */
28 
29 /* IntelVersion: 1.83 v2-7-8_2009-4-7 */
30 
31 #include "ixgbe_api.h"
32 #include "ixgbe_common.h"
33 #include "ixgbe_phy.h"
34 
35 static void ixgbe_i2c_start(struct ixgbe_hw *hw);
36 static void ixgbe_i2c_stop(struct ixgbe_hw *hw);
37 static s32 ixgbe_clock_in_i2c_byte(struct ixgbe_hw *hw, u8 *data);
38 static s32 ixgbe_clock_out_i2c_byte(struct ixgbe_hw *hw, u8 data);
39 static s32 ixgbe_get_i2c_ack(struct ixgbe_hw *hw);
40 static s32 ixgbe_clock_in_i2c_bit(struct ixgbe_hw *hw, bool *data);
41 static s32 ixgbe_clock_out_i2c_bit(struct ixgbe_hw *hw, bool data);
42 static s32 ixgbe_raise_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl);
43 static void ixgbe_lower_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl);
44 static s32 ixgbe_set_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl, bool data);
45 static bool ixgbe_get_i2c_data(u32 *i2cctl);
46 void ixgbe_i2c_bus_clear(struct ixgbe_hw *hw);
47 
48 /*
49  * ixgbe_init_phy_ops_generic - Inits PHY function ptrs
50  * @hw: pointer to the hardware structure
51  *
52  * Initialize the function pointers.
53  */
54 s32
55 ixgbe_init_phy_ops_generic(struct ixgbe_hw *hw)
56 {
57 	struct ixgbe_phy_info *phy = &hw->phy;
58 
59 	/* PHY */
60 	phy->ops.identify = &ixgbe_identify_phy_generic;
61 	phy->ops.reset = &ixgbe_reset_phy_generic;
62 	phy->ops.read_reg = &ixgbe_read_phy_reg_generic;
63 	phy->ops.write_reg = &ixgbe_write_phy_reg_generic;
64 	phy->ops.setup_link = &ixgbe_setup_phy_link_generic;
65 	phy->ops.setup_link_speed = &ixgbe_setup_phy_link_speed_generic;
66 	phy->ops.check_link = NULL;
67 	phy->ops.get_firmware_version = NULL;
68 	phy->ops.read_i2c_byte = &ixgbe_read_i2c_byte_generic;
69 	phy->ops.write_i2c_byte = &ixgbe_write_i2c_byte_generic;
70 	phy->ops.read_i2c_eeprom = &ixgbe_read_i2c_eeprom_generic;
71 	phy->ops.write_i2c_eeprom = &ixgbe_write_i2c_eeprom_generic;
72 	phy->ops.i2c_bus_clear = &ixgbe_i2c_bus_clear;
73 	phy->ops.identify_sfp = &ixgbe_identify_sfp_module_generic;
74 	phy->sfp_type = ixgbe_sfp_type_unknown;
75 
76 	return (IXGBE_SUCCESS);
77 }
78 
79 /*
80  * ixgbe_identify_phy_generic - Get physical layer module
81  * @hw: pointer to hardware structure
82  *
83  * Determines the physical layer module found on the current adapter.
84  */
85 s32
86 ixgbe_identify_phy_generic(struct ixgbe_hw *hw)
87 {
88 	s32 status = IXGBE_ERR_PHY_ADDR_INVALID;
89 	u32 phy_addr;
90 	u16 ext_ability = 0;
91 
92 	if (hw->phy.type == ixgbe_phy_unknown) {
93 		for (phy_addr = 0; phy_addr < IXGBE_MAX_PHY_ADDR; phy_addr++) {
94 			if (ixgbe_validate_phy_addr(hw, phy_addr)) {
95 				hw->phy.addr = phy_addr;
96 				(void) ixgbe_get_phy_id(hw);
97 				hw->phy.type =
98 				    ixgbe_get_phy_type_from_id(hw->phy.id);
99 
100 				if (hw->phy.type == ixgbe_phy_unknown) {
101 					hw->phy.ops.read_reg(hw,
102 					    IXGBE_MDIO_PHY_EXT_ABILITY,
103 					    IXGBE_MDIO_PMA_PMD_DEV_TYPE,
104 					    &ext_ability);
105 					if (ext_ability &
106 					    IXGBE_MDIO_PHY_10GBASET_ABILITY ||
107 					    ext_ability &
108 					    IXGBE_MDIO_PHY_1000BASET_ABILITY)
109 						hw->phy.type =
110 						    ixgbe_phy_cu_unknown;
111 					else
112 						hw->phy.type =
113 						    ixgbe_phy_generic;
114 				}
115 
116 				status = IXGBE_SUCCESS;
117 				break;
118 			}
119 		}
120 		if (status != IXGBE_SUCCESS)
121 			hw->phy.addr = 0;
122 	} else {
123 		status = IXGBE_SUCCESS;
124 	}
125 
126 	return (status);
127 }
128 
129 /*
130  * ixgbe_validate_phy_addr - Determines phy address is valid
131  * @hw: pointer to hardware structure
132  *
133  */
134 bool
135 ixgbe_validate_phy_addr(struct ixgbe_hw *hw, u32 phy_addr)
136 {
137 	u16 phy_id = 0;
138 	bool valid = false;
139 
140 	hw->phy.addr = phy_addr;
141 	hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_ID_HIGH,
142 	    IXGBE_MDIO_PMA_PMD_DEV_TYPE, &phy_id);
143 
144 	if (phy_id != 0xFFFF && phy_id != 0x0)
145 		valid = true;
146 
147 	return (valid);
148 }
149 
150 /*
151  * ixgbe_get_phy_id - Get the phy type
152  * @hw: pointer to hardware structure
153  *
154  */
155 s32
156 ixgbe_get_phy_id(struct ixgbe_hw *hw)
157 {
158 	u32 status;
159 	u16 phy_id_high = 0;
160 	u16 phy_id_low = 0;
161 
162 	status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_ID_HIGH,
163 	    IXGBE_MDIO_PMA_PMD_DEV_TYPE,
164 	    &phy_id_high);
165 
166 	if (status == IXGBE_SUCCESS) {
167 		hw->phy.id = (u32)(phy_id_high << 16);
168 		status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_ID_LOW,
169 		    IXGBE_MDIO_PMA_PMD_DEV_TYPE,
170 		    &phy_id_low);
171 		hw->phy.id |= (u32)(phy_id_low & IXGBE_PHY_REVISION_MASK);
172 		hw->phy.revision = (u32)(phy_id_low & ~IXGBE_PHY_REVISION_MASK);
173 	}
174 
175 	return (status);
176 }
177 
178 /*
179  * ixgbe_get_phy_type_from_id - Get the phy type
180  * @hw: pointer to hardware structure
181  *
182  */
183 enum ixgbe_phy_type
184 ixgbe_get_phy_type_from_id(u32 phy_id)
185 {
186 	enum ixgbe_phy_type phy_type;
187 
188 	switch (phy_id) {
189 	case TN1010_PHY_ID:
190 		phy_type = ixgbe_phy_tn;
191 		break;
192 	case QT2022_PHY_ID:
193 		phy_type = ixgbe_phy_qt;
194 		break;
195 	case ATH_PHY_ID:
196 		phy_type = ixgbe_phy_nl;
197 		break;
198 	default:
199 		phy_type = ixgbe_phy_unknown;
200 		break;
201 	}
202 
203 	DEBUGOUT1("phy type found is %d\n", phy_type);
204 
205 	return (phy_type);
206 }
207 
208 /*
209  * ixgbe_reset_phy_generic - Performs a PHY reset
210  * @hw: pointer to hardware structure
211  */
212 s32
213 ixgbe_reset_phy_generic(struct ixgbe_hw *hw)
214 {
215 	u32 i;
216 	u16 ctrl = 0;
217 	s32 status = IXGBE_SUCCESS;
218 
219 	if (hw->phy.type == ixgbe_phy_unknown)
220 		status = ixgbe_identify_phy_generic(hw);
221 
222 	if (status != IXGBE_SUCCESS || hw->phy.type == ixgbe_phy_none)
223 		goto out;
224 
225 	/*
226 	 * Perform soft PHY reset to the PHY_XS.
227 	 * This will cause a soft reset to the PHY
228 	 */
229 	hw->phy.ops.write_reg(hw, IXGBE_MDIO_PHY_XS_CONTROL,
230 	    IXGBE_MDIO_PHY_XS_DEV_TYPE,
231 	    IXGBE_MDIO_PHY_XS_RESET);
232 
233 	/* Poll for reset bit to self-clear indicating reset is complete */
234 	for (i = 0; i < 500; i++) {
235 		msec_delay(1);
236 		hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_XS_CONTROL,
237 		    IXGBE_MDIO_PHY_XS_DEV_TYPE, &ctrl);
238 		if (!(ctrl & IXGBE_MDIO_PHY_XS_RESET))
239 			break;
240 	}
241 
242 	if (ctrl & IXGBE_MDIO_PHY_XS_RESET) {
243 		status = IXGBE_ERR_RESET_FAILED;
244 		DEBUGOUT("PHY reset polling failed to complete.\n");
245 	}
246 
247 out:
248 	return (status);
249 }
250 
251 /*
252  * ixgbe_read_phy_reg_generic - Reads a value from a specified PHY register
253  * @hw: pointer to hardware structure
254  * @reg_addr: 32 bit address of PHY register to read
255  * @phy_data: Pointer to read data from PHY register
256  */
257 s32
258 ixgbe_read_phy_reg_generic(struct ixgbe_hw *hw, u32 reg_addr,
259     u32 device_type, u16 *phy_data)
260 {
261 	u32 command;
262 	u32 i;
263 	u32 data;
264 	s32 status = IXGBE_SUCCESS;
265 	u16 gssr;
266 
267 	if (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1)
268 		gssr = IXGBE_GSSR_PHY1_SM;
269 	else
270 		gssr = IXGBE_GSSR_PHY0_SM;
271 
272 	if (ixgbe_acquire_swfw_sync(hw, gssr) != IXGBE_SUCCESS)
273 		status = IXGBE_ERR_SWFW_SYNC;
274 
275 	if (status == IXGBE_SUCCESS) {
276 		/* Setup and write the address cycle command */
277 		command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT)  |
278 		    (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) |
279 		    (hw->phy.addr << IXGBE_MSCA_PHY_ADDR_SHIFT) |
280 		    (IXGBE_MSCA_ADDR_CYCLE | IXGBE_MSCA_MDI_COMMAND));
281 
282 		IXGBE_WRITE_REG(hw, IXGBE_MSCA, command);
283 
284 		/*
285 		 * Check every 10 usec to see if the address cycle completed.
286 		 * The MDI Command bit will clear when the operation is
287 		 * complete
288 		 */
289 		for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) {
290 			usec_delay(10);
291 
292 			command = IXGBE_READ_REG(hw, IXGBE_MSCA);
293 
294 			if ((command & IXGBE_MSCA_MDI_COMMAND) == 0) {
295 				break;
296 			}
297 		}
298 
299 		if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) {
300 			DEBUGOUT("PHY address command did not complete.\n");
301 			status = IXGBE_ERR_PHY;
302 		}
303 
304 		if (status == IXGBE_SUCCESS) {
305 			/*
306 			 * Address cycle complete, setup and write the read
307 			 * command
308 			 */
309 			command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT)  |
310 			    (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) |
311 			    (hw->phy.addr << IXGBE_MSCA_PHY_ADDR_SHIFT) |
312 			    (IXGBE_MSCA_READ | IXGBE_MSCA_MDI_COMMAND));
313 
314 			IXGBE_WRITE_REG(hw, IXGBE_MSCA, command);
315 
316 			/*
317 			 * Check every 10 usec to see if the address cycle
318 			 * completed. The MDI Command bit will clear when the
319 			 * operation is complete
320 			 */
321 			for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) {
322 				usec_delay(10);
323 
324 				command = IXGBE_READ_REG(hw, IXGBE_MSCA);
325 
326 				if ((command & IXGBE_MSCA_MDI_COMMAND) == 0)
327 					break;
328 			}
329 
330 			if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) {
331 				DEBUGOUT("PHY read command didn't complete\n");
332 				status = IXGBE_ERR_PHY;
333 			} else {
334 				/*
335 				 * Read operation is complete.  Get the data
336 				 * from MSRWD
337 				 */
338 				data = IXGBE_READ_REG(hw, IXGBE_MSRWD);
339 				data >>= IXGBE_MSRWD_READ_DATA_SHIFT;
340 				*phy_data = (u16)(data);
341 			}
342 		}
343 
344 		ixgbe_release_swfw_sync(hw, gssr);
345 	}
346 
347 	return (status);
348 }
349 
350 /*
351  * ixgbe_write_phy_reg_generic - Writes a value to specified PHY register
352  * @hw: pointer to hardware structure
353  * @reg_addr: 32 bit PHY register to write
354  * @device_type: 5 bit device type
355  * @phy_data: Data to write to the PHY register
356  */
357 s32 ixgbe_write_phy_reg_generic(struct ixgbe_hw *hw, u32 reg_addr,
358     u32 device_type, u16 phy_data)
359 {
360 	u32 command;
361 	u32 i;
362 	s32 status = IXGBE_SUCCESS;
363 	u16 gssr;
364 
365 	if (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1)
366 		gssr = IXGBE_GSSR_PHY1_SM;
367 	else
368 		gssr = IXGBE_GSSR_PHY0_SM;
369 
370 	if (ixgbe_acquire_swfw_sync(hw, gssr) != IXGBE_SUCCESS)
371 		status = IXGBE_ERR_SWFW_SYNC;
372 
373 	if (status == IXGBE_SUCCESS) {
374 		/*
375 		 * Put the data in the MDI single read and write data register
376 		 */
377 		IXGBE_WRITE_REG(hw, IXGBE_MSRWD, (u32)phy_data);
378 
379 		/* Setup and write the address cycle command */
380 		command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT)  |
381 		    (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) |
382 		    (hw->phy.addr << IXGBE_MSCA_PHY_ADDR_SHIFT) |
383 		    (IXGBE_MSCA_ADDR_CYCLE | IXGBE_MSCA_MDI_COMMAND));
384 
385 		IXGBE_WRITE_REG(hw, IXGBE_MSCA, command);
386 
387 		/*
388 		 * Check every 10 usec to see if the address cycle completed.
389 		 * The MDI Command bit will clear when the operation is
390 		 * complete
391 		 */
392 		for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) {
393 			usec_delay(10);
394 
395 			command = IXGBE_READ_REG(hw, IXGBE_MSCA);
396 
397 			if ((command & IXGBE_MSCA_MDI_COMMAND) == 0)
398 				break;
399 		}
400 
401 		if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) {
402 			DEBUGOUT("PHY address cmd didn't complete\n");
403 			status = IXGBE_ERR_PHY;
404 		}
405 
406 		if (status == IXGBE_SUCCESS) {
407 			/*
408 			 * Address cycle complete, setup and write the write
409 			 * command
410 			 */
411 			command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT)  |
412 			    (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) |
413 			    (hw->phy.addr << IXGBE_MSCA_PHY_ADDR_SHIFT) |
414 			    (IXGBE_MSCA_WRITE | IXGBE_MSCA_MDI_COMMAND));
415 
416 			IXGBE_WRITE_REG(hw, IXGBE_MSCA, command);
417 
418 			/*
419 			 * Check every 10 usec to see if the address cycle
420 			 * completed. The MDI Command bit will clear when the
421 			 * operation is complete
422 			 */
423 			for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) {
424 				usec_delay(10);
425 
426 				command = IXGBE_READ_REG(hw, IXGBE_MSCA);
427 
428 				if ((command & IXGBE_MSCA_MDI_COMMAND) == 0)
429 					break;
430 			}
431 
432 			if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) {
433 				DEBUGOUT("PHY address cmd didn't complete\n");
434 				status = IXGBE_ERR_PHY;
435 			}
436 		}
437 
438 		ixgbe_release_swfw_sync(hw, gssr);
439 	}
440 
441 	return (status);
442 }
443 
444 /*
445  * ixgbe_setup_phy_link_generic - Set and restart autoneg
446  * @hw: pointer to hardware structure
447  *
448  * Restart autonegotiation and PHY and waits for completion.
449  */
450 s32
451 ixgbe_setup_phy_link_generic(struct ixgbe_hw *hw)
452 {
453 	s32 status = IXGBE_NOT_IMPLEMENTED;
454 	u32 time_out;
455 	u32 max_time_out = 10;
456 	u16 autoneg_reg = IXGBE_MII_AUTONEG_REG;
457 
458 	/*
459 	 * Set advertisement settings in PHY based on autoneg_advertised
460 	 * settings. If autoneg_advertised = 0, then advertise default values
461 	 * tnx devices cannot be "forced" to a autoneg 10G and fail.  But can
462 	 * for a 1G.
463 	 */
464 	hw->phy.ops.read_reg(hw, IXGBE_MII_SPEED_SELECTION_REG,
465 	    IXGBE_MDIO_AUTO_NEG_DEV_TYPE, &autoneg_reg);
466 
467 	if (hw->phy.autoneg_advertised == IXGBE_LINK_SPEED_1GB_FULL)
468 		autoneg_reg &= 0xEFFF; /* 0 in bit 12 is 1G operation */
469 	else
470 		autoneg_reg |= 0x1000; /* 1 in bit 12 is 10G/1G operation */
471 
472 	hw->phy.ops.write_reg(hw, IXGBE_MII_SPEED_SELECTION_REG,
473 	    IXGBE_MDIO_AUTO_NEG_DEV_TYPE, autoneg_reg);
474 
475 	/* Restart PHY autonegotiation and wait for completion */
476 	hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_CONTROL,
477 	    IXGBE_MDIO_AUTO_NEG_DEV_TYPE, &autoneg_reg);
478 
479 	autoneg_reg |= IXGBE_MII_RESTART;
480 
481 	hw->phy.ops.write_reg(hw, IXGBE_MDIO_AUTO_NEG_CONTROL,
482 	    IXGBE_MDIO_AUTO_NEG_DEV_TYPE, autoneg_reg);
483 
484 	/* Wait for autonegotiation to finish */
485 	for (time_out = 0; time_out < max_time_out; time_out++) {
486 		usec_delay(10);
487 		/* Restart PHY autonegotiation and wait for completion */
488 		status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_STATUS,
489 		    IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
490 		    &autoneg_reg);
491 
492 		autoneg_reg &= IXGBE_MII_AUTONEG_COMPLETE;
493 		if (autoneg_reg == IXGBE_MII_AUTONEG_COMPLETE) {
494 			status = IXGBE_SUCCESS;
495 			break;
496 		}
497 	}
498 
499 	if (time_out == max_time_out)
500 		status = IXGBE_ERR_LINK_SETUP;
501 
502 	return (status);
503 }
504 
505 /*
506  * ixgbe_setup_phy_link_speed_generic - Sets the auto advertised capabilities
507  * @hw: pointer to hardware structure
508  * @speed: new link speed
509  * @autoneg: true if autonegotiation enabled
510  */
511 s32 ixgbe_setup_phy_link_speed_generic(struct ixgbe_hw *hw,
512     ixgbe_link_speed speed,
513     bool autoneg,
514     bool autoneg_wait_to_complete)
515 {
516 	UNREFERENCED_PARAMETER(autoneg);
517 	UNREFERENCED_PARAMETER(autoneg_wait_to_complete);
518 
519 	/*
520 	 * Clear autoneg_advertised and set new values based on input link
521 	 * speed.
522 	 */
523 	hw->phy.autoneg_advertised = 0;
524 
525 	if (speed & IXGBE_LINK_SPEED_10GB_FULL) {
526 		hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_10GB_FULL;
527 	}
528 	if (speed & IXGBE_LINK_SPEED_1GB_FULL) {
529 		hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_1GB_FULL;
530 	}
531 
532 	/* Setup link based on the new speed settings */
533 	hw->phy.ops.setup_link(hw);
534 
535 	return (IXGBE_SUCCESS);
536 }
537 
538 /*
539  * ixgbe_get_copper_link_capabilities_generic - Determines link capabilities
540  * @hw: pointer to hardware structure
541  * @speed: pointer to link speed
542  * @autoneg: boolean auto-negotiation value
543  *
544  * Determines the link capabilities by reading the AUTOC register.
545  */
546 s32 ixgbe_get_copper_link_capabilities_generic(struct ixgbe_hw *hw,
547     ixgbe_link_speed *speed, bool *autoneg)
548 {
549 	s32 status = IXGBE_ERR_LINK_SETUP;
550 	u16 speed_ability;
551 
552 	*speed = 0;
553 	*autoneg = true;
554 
555 	status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_SPEED_ABILITY,
556 	    IXGBE_MDIO_PMA_PMD_DEV_TYPE, &speed_ability);
557 
558 	if (status == IXGBE_SUCCESS) {
559 		if (speed_ability & IXGBE_MDIO_PHY_SPEED_10G)
560 			*speed |= IXGBE_LINK_SPEED_10GB_FULL;
561 		if (speed_ability & IXGBE_MDIO_PHY_SPEED_1G)
562 			*speed |= IXGBE_LINK_SPEED_1GB_FULL;
563 	}
564 
565 	return (status);
566 }
567 
568 /*
569  * ixgbe_check_phy_link_tnx - Determine link and speed status
570  * @hw: pointer to hardware structure
571  *
572  * Reads the VS1 register to determine if link is up and the current speed for
573  * the PHY.
574  */
575 s32
576 ixgbe_check_phy_link_tnx(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
577     bool *link_up)
578 {
579 	s32 status = IXGBE_SUCCESS;
580 	u32 time_out;
581 	u32 max_time_out = 10;
582 	u16 phy_link = 0;
583 	u16 phy_speed = 0;
584 	u16 phy_data = 0;
585 
586 	/* Initialize speed and link to default case */
587 	*link_up = false;
588 	*speed = IXGBE_LINK_SPEED_10GB_FULL;
589 
590 	/*
591 	 * Check current speed and link status of the PHY register.
592 	 * This is a vendor specific register and may have to
593 	 * be changed for other copper PHYs.
594 	 */
595 	for (time_out = 0; time_out < max_time_out; time_out++) {
596 		usec_delay(10);
597 		status = hw->phy.ops.read_reg(hw,
598 		    IXGBE_MDIO_VENDOR_SPECIFIC_1_STATUS,
599 		    IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE,
600 		    &phy_data);
601 		phy_link = phy_data &
602 		    IXGBE_MDIO_VENDOR_SPECIFIC_1_LINK_STATUS;
603 		phy_speed = phy_data &
604 		    IXGBE_MDIO_VENDOR_SPECIFIC_1_SPEED_STATUS;
605 		if (phy_link == IXGBE_MDIO_VENDOR_SPECIFIC_1_LINK_STATUS) {
606 			*link_up = true;
607 			if (phy_speed ==
608 			    IXGBE_MDIO_VENDOR_SPECIFIC_1_SPEED_STATUS)
609 				*speed = IXGBE_LINK_SPEED_1GB_FULL;
610 			break;
611 		}
612 	}
613 
614 	return (status);
615 }
616 
617 /*
618  * ixgbe_get_phy_firmware_version_tnx - Gets the PHY Firmware Version
619  * @hw: pointer to hardware structure
620  * @firmware_version: pointer to the PHY Firmware Version
621  */
622 s32
623 ixgbe_get_phy_firmware_version_tnx(struct ixgbe_hw *hw, u16 *firmware_version)
624 {
625 	s32 status = IXGBE_SUCCESS;
626 
627 	status = hw->phy.ops.read_reg(hw, TNX_FW_REV,
628 	    IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE, firmware_version);
629 
630 	return (status);
631 }
632 
633 /*
634  * ixgbe_reset_phy_nl - Performs a PHY reset
635  * @hw: pointer to hardware structure
636  */
637 s32
638 ixgbe_reset_phy_nl(struct ixgbe_hw *hw)
639 {
640 	u16 phy_offset, control, eword, edata, block_crc;
641 	bool end_data = false;
642 	u16 list_offset, data_offset;
643 	u16 phy_data = 0;
644 	s32 ret_val = IXGBE_SUCCESS;
645 	u32 i;
646 
647 	hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_XS_CONTROL,
648 	    IXGBE_MDIO_PHY_XS_DEV_TYPE, &phy_data);
649 
650 	/* reset the PHY and poll for completion */
651 	hw->phy.ops.write_reg(hw, IXGBE_MDIO_PHY_XS_CONTROL,
652 	    IXGBE_MDIO_PHY_XS_DEV_TYPE,
653 	    (phy_data | IXGBE_MDIO_PHY_XS_RESET));
654 
655 	for (i = 0; i < 100; i++) {
656 		hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_XS_CONTROL,
657 		    IXGBE_MDIO_PHY_XS_DEV_TYPE, &phy_data);
658 		if ((phy_data & IXGBE_MDIO_PHY_XS_RESET) == 0)
659 			break;
660 		msec_delay(10);
661 	}
662 
663 	if ((phy_data & IXGBE_MDIO_PHY_XS_RESET) != 0) {
664 		DEBUGOUT("PHY reset did not complete.\n");
665 		ret_val = IXGBE_ERR_PHY;
666 		goto out;
667 	}
668 
669 	/* Get init offsets */
670 	ret_val = ixgbe_get_sfp_init_sequence_offsets(hw, &list_offset,
671 	    &data_offset);
672 	if (ret_val != IXGBE_SUCCESS)
673 		goto out;
674 
675 	ret_val = hw->eeprom.ops.read(hw, data_offset, &block_crc);
676 	data_offset++;
677 	while (!end_data) {
678 		/*
679 		 * Read control word from PHY init contents offset
680 		 */
681 		ret_val = hw->eeprom.ops.read(hw, data_offset, &eword);
682 		control = (eword & IXGBE_CONTROL_MASK_NL) >>
683 		    IXGBE_CONTROL_SHIFT_NL;
684 		edata = eword & IXGBE_DATA_MASK_NL;
685 		switch (control) {
686 		case IXGBE_DELAY_NL:
687 			data_offset++;
688 			DEBUGOUT1("DELAY: %d MS\n", edata);
689 			msec_delay(edata);
690 			break;
691 		case IXGBE_DATA_NL:
692 			DEBUGOUT("DATA:  \n");
693 			data_offset++;
694 			hw->eeprom.ops.read(hw, data_offset++, &phy_offset);
695 			for (i = 0; i < edata; i++) {
696 				hw->eeprom.ops.read(hw, data_offset, &eword);
697 				hw->phy.ops.write_reg(hw, phy_offset,
698 				    IXGBE_TWINAX_DEV, eword);
699 				DEBUGOUT2("Wrote %4.4x to %4.4x\n", eword,
700 				    phy_offset);
701 				data_offset++;
702 				phy_offset++;
703 			}
704 			break;
705 		case IXGBE_CONTROL_NL:
706 			data_offset++;
707 			DEBUGOUT("CONTROL: \n");
708 			if (edata == IXGBE_CONTROL_EOL_NL) {
709 				DEBUGOUT("EOL\n");
710 				end_data = true;
711 			} else if (edata == IXGBE_CONTROL_SOL_NL) {
712 				DEBUGOUT("SOL\n");
713 			} else {
714 				DEBUGOUT("Bad control value\n");
715 				ret_val = IXGBE_ERR_PHY;
716 				goto out;
717 			}
718 			break;
719 		default:
720 			DEBUGOUT("Bad control type\n");
721 			ret_val = IXGBE_ERR_PHY;
722 			goto out;
723 		}
724 	}
725 
726 out:
727 	return (ret_val);
728 }
729 
730 /*
731  * ixgbe_identify_sfp_module_generic - Identifies SFP module
732  * @hw: pointer to hardware structure
733  *
734  * Searches for and identifies the SFP module and assigns appropriate PHY type.
735  */
736 s32
737 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw)
738 {
739 	s32 status = IXGBE_ERR_PHY_ADDR_INVALID;
740 	u32 vendor_oui = 0;
741 	enum ixgbe_sfp_type stored_sfp_type = hw->phy.sfp_type;
742 	u8 identifier = 0;
743 	u8 comp_codes_1g = 0;
744 	u8 comp_codes_10g = 0;
745 	u8 oui_bytes[3] = {0, 0, 0};
746 	u8 transmission_media = 0;
747 	u16 enforce_sfp = 0;
748 
749 	status = hw->phy.ops.read_i2c_eeprom(hw,
750 	    IXGBE_SFF_IDENTIFIER, &identifier);
751 
752 	if (status == IXGBE_ERR_SFP_NOT_PRESENT || status == IXGBE_ERR_I2C) {
753 		status = IXGBE_ERR_SFP_NOT_PRESENT;
754 		hw->phy.sfp_type = ixgbe_sfp_type_not_present;
755 		if (hw->phy.type != ixgbe_phy_nl) {
756 			hw->phy.id = 0;
757 			hw->phy.type = ixgbe_phy_unknown;
758 		}
759 		goto out;
760 	}
761 
762 	/* LAN ID is needed for sfp_type determination */
763 	hw->mac.ops.set_lan_id(hw);
764 
765 	if (identifier == IXGBE_SFF_IDENTIFIER_SFP) {
766 		hw->phy.ops.read_i2c_eeprom(hw, IXGBE_SFF_1GBE_COMP_CODES,
767 		    &comp_codes_1g);
768 		hw->phy.ops.read_i2c_eeprom(hw, IXGBE_SFF_10GBE_COMP_CODES,
769 		    &comp_codes_10g);
770 		hw->phy.ops.read_i2c_eeprom(hw, IXGBE_SFF_TRANSMISSION_MEDIA,
771 		    &transmission_media);
772 
773 		/*
774 		 * ID  Module
775 		 * ============
776 		 * 0    SFP_DA_CU
777 		 * 1    SFP_SR
778 		 * 2    SFP_LR
779 		 * 3	SFP_DA_CORE0 - 82599-specific
780 		 * 4	SFP_DA_CORE1 - 82599-specific
781 		 * 5	SFP_SR/LR_CORE0 - 82599-specific
782 		 * 6	SFP_SR/LR_CORE1 - 82599-specific
783 		 */
784 		if (hw->mac.type == ixgbe_mac_82598EB) {
785 			if (transmission_media & IXGBE_SFF_TWIN_AX_CAPABLE)
786 				hw->phy.sfp_type = ixgbe_sfp_type_da_cu;
787 			else if (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)
788 				hw->phy.sfp_type = ixgbe_sfp_type_sr;
789 			else if (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)
790 				hw->phy.sfp_type = ixgbe_sfp_type_lr;
791 			else
792 				hw->phy.sfp_type = ixgbe_sfp_type_unknown;
793 		} else if (hw->mac.type == ixgbe_mac_82599EB) {
794 			if (transmission_media & IXGBE_SFF_TWIN_AX_CAPABLE)
795 				if (hw->bus.lan_id == 0)
796 					hw->phy.sfp_type =
797 					    ixgbe_sfp_type_da_cu_core0;
798 				else
799 					hw->phy.sfp_type =
800 					    ixgbe_sfp_type_da_cu_core1;
801 			else if (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)
802 				if (hw->bus.lan_id == 0)
803 					hw->phy.sfp_type =
804 					    ixgbe_sfp_type_srlr_core0;
805 				else
806 					hw->phy.sfp_type =
807 					    ixgbe_sfp_type_srlr_core1;
808 			else if (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)
809 				if (hw->bus.lan_id == 0)
810 					hw->phy.sfp_type =
811 					    ixgbe_sfp_type_srlr_core0;
812 				else
813 					hw->phy.sfp_type =
814 					    ixgbe_sfp_type_srlr_core1;
815 			else
816 				hw->phy.sfp_type = ixgbe_sfp_type_unknown;
817 		}
818 
819 		if (hw->phy.sfp_type != stored_sfp_type)
820 			hw->phy.sfp_setup_needed = true;
821 
822 		/* Determine if the SFP+ PHY is dual speed or not. */
823 		if (((comp_codes_1g & IXGBE_SFF_1GBASESX_CAPABLE) &&
824 		    (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)) ||
825 		    ((comp_codes_1g & IXGBE_SFF_1GBASELX_CAPABLE) &&
826 		    (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)))
827 			hw->phy.multispeed_fiber = true;
828 
829 		/* Determine PHY vendor */
830 		if (hw->phy.type != ixgbe_phy_nl) {
831 			hw->phy.id = identifier;
832 			hw->phy.ops.read_i2c_eeprom(hw,
833 			    IXGBE_SFF_VENDOR_OUI_BYTE0, &oui_bytes[0]);
834 			hw->phy.ops.read_i2c_eeprom(hw,
835 			    IXGBE_SFF_VENDOR_OUI_BYTE1, &oui_bytes[1]);
836 			hw->phy.ops.read_i2c_eeprom(hw,
837 			    IXGBE_SFF_VENDOR_OUI_BYTE2, &oui_bytes[2]);
838 
839 			vendor_oui =
840 			    ((oui_bytes[0] <<
841 			    IXGBE_SFF_VENDOR_OUI_BYTE0_SHIFT) |
842 			    (oui_bytes[1] << IXGBE_SFF_VENDOR_OUI_BYTE1_SHIFT) |
843 			    (oui_bytes[2] << IXGBE_SFF_VENDOR_OUI_BYTE2_SHIFT));
844 
845 			switch (vendor_oui) {
846 			case IXGBE_SFF_VENDOR_OUI_TYCO:
847 				if (transmission_media &
848 				    IXGBE_SFF_TWIN_AX_CAPABLE)
849 					hw->phy.type = ixgbe_phy_tw_tyco;
850 				break;
851 			case IXGBE_SFF_VENDOR_OUI_FTL:
852 				hw->phy.type = ixgbe_phy_sfp_ftl;
853 				break;
854 			case IXGBE_SFF_VENDOR_OUI_AVAGO:
855 				hw->phy.type = ixgbe_phy_sfp_avago;
856 				break;
857 			case IXGBE_SFF_VENDOR_OUI_INTEL:
858 				hw->phy.type = ixgbe_phy_sfp_intel;
859 				break;
860 			default:
861 				if (transmission_media &
862 				    IXGBE_SFF_TWIN_AX_CAPABLE)
863 					hw->phy.type = ixgbe_phy_tw_unknown;
864 				else
865 					hw->phy.type = ixgbe_phy_sfp_unknown;
866 				break;
867 			}
868 		}
869 
870 		if (hw->mac.type == ixgbe_mac_82598EB ||
871 		    (hw->phy.sfp_type != ixgbe_sfp_type_sr &&
872 		    hw->phy.sfp_type != ixgbe_sfp_type_lr &&
873 		    hw->phy.sfp_type != ixgbe_sfp_type_srlr_core0 &&
874 		    hw->phy.sfp_type != ixgbe_sfp_type_srlr_core1)) {
875 			status = IXGBE_SUCCESS;
876 			goto out;
877 		}
878 
879 		(void) ixgbe_get_device_caps(hw, &enforce_sfp);
880 		if (!(enforce_sfp & IXGBE_DEVICE_CAPS_ALLOW_ANY_SFP)) {
881 			/* Make sure we're a supported PHY type */
882 			if (hw->phy.type == ixgbe_phy_sfp_intel) {
883 				status = IXGBE_SUCCESS;
884 			} else {
885 				DEBUGOUT("SFP+ module not supported\n");
886 				hw->phy.type = ixgbe_phy_sfp_unsupported;
887 				status = IXGBE_ERR_SFP_NOT_SUPPORTED;
888 			}
889 		} else {
890 			status = IXGBE_SUCCESS;
891 		}
892 	}
893 
894 out:
895 	return (status);
896 }
897 
898 
899 /*
900  * ixgbe_get_sfp_init_sequence_offsets - Provides offset of PHY init sequence
901  * @hw: pointer to hardware structure
902  * @list_offset: offset to the SFP ID list
903  * @data_offset: offset to the SFP data block
904  *
905  * Checks the MAC's EEPROM to see if it supports a given SFP+ module type, if
906  * so it returns the offsets to the phy init sequence block.
907  */
908 s32 ixgbe_get_sfp_init_sequence_offsets(struct ixgbe_hw *hw,
909     u16 *list_offset, u16 *data_offset)
910 {
911 	u16 sfp_id;
912 
913 	if (hw->phy.sfp_type == ixgbe_sfp_type_unknown)
914 		return (IXGBE_ERR_SFP_NOT_SUPPORTED);
915 
916 	if (hw->phy.sfp_type == ixgbe_sfp_type_not_present)
917 		return (IXGBE_ERR_SFP_NOT_PRESENT);
918 
919 	if ((hw->device_id == IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM) &&
920 	    (hw->phy.sfp_type == ixgbe_sfp_type_da_cu))
921 		return (IXGBE_ERR_SFP_NOT_SUPPORTED);
922 
923 	/* Read offset to PHY init contents */
924 	hw->eeprom.ops.read(hw, IXGBE_PHY_INIT_OFFSET_NL, list_offset);
925 
926 	if ((!*list_offset) || (*list_offset == 0xFFFF))
927 		return (IXGBE_ERR_SFP_NO_INIT_SEQ_PRESENT);
928 
929 	/* Shift offset to first ID word */
930 	(*list_offset)++;
931 
932 	/*
933 	 * Find the matching SFP ID in the EEPROM
934 	 * and program the init sequence
935 	 */
936 	hw->eeprom.ops.read(hw, *list_offset, &sfp_id);
937 
938 	while (sfp_id != IXGBE_PHY_INIT_END_NL) {
939 		if (sfp_id == hw->phy.sfp_type) {
940 			(*list_offset)++;
941 			hw->eeprom.ops.read(hw, *list_offset, data_offset);
942 			if ((!*data_offset) || (*data_offset == 0xFFFF)) {
943 				DEBUGOUT("SFP+ module not supported\n");
944 				return (IXGBE_ERR_SFP_NOT_SUPPORTED);
945 			} else {
946 				break;
947 			}
948 		} else {
949 			(*list_offset) += 2;
950 			if (hw->eeprom.ops.read(hw, *list_offset, &sfp_id))
951 				return (IXGBE_ERR_PHY);
952 		}
953 	}
954 
955 	if (sfp_id == IXGBE_PHY_INIT_END_NL) {
956 		DEBUGOUT("No matching SFP+ module found\n");
957 		return (IXGBE_ERR_SFP_NOT_SUPPORTED);
958 	}
959 
960 	return (IXGBE_SUCCESS);
961 }
962 
963 /*
964  * ixgbe_read_i2c_eeprom_generic - Reads 8 bit EEPROM word over I2C interface
965  * @hw: pointer to hardware structure
966  * @byte_offset: EEPROM byte offset to read
967  * @eeprom_data: value read
968  *
969  * Performs byte read operation to SFP module's EEPROM over I2C interface.
970  */
971 s32
972 ixgbe_read_i2c_eeprom_generic(struct ixgbe_hw *hw, u8 byte_offset,
973     u8 *eeprom_data)
974 {
975 	DEBUGFUNC("ixgbe_read_i2c_eeprom_generic");
976 
977 	return (hw->phy.ops.read_i2c_byte(hw, byte_offset,
978 	    IXGBE_I2C_EEPROM_DEV_ADDR, eeprom_data));
979 }
980 
981 /*
982  * ixgbe_write_i2c_eeprom_generic - Writes 8 bit EEPROM word over I2C interface
983  * @hw: pointer to hardware structure
984  * @byte_offset: EEPROM byte offset to write
985  * @eeprom_data: value to write
986  *
987  * Performs byte write operation to SFP module's EEPROM over I2C interface.
988  */
989 s32 ixgbe_write_i2c_eeprom_generic(struct ixgbe_hw *hw, u8 byte_offset,
990     u8 eeprom_data)
991 {
992 	DEBUGFUNC("ixgbe_write_i2c_eeprom_generic");
993 
994 	return (hw->phy.ops.write_i2c_byte(hw, byte_offset,
995 	    IXGBE_I2C_EEPROM_DEV_ADDR, eeprom_data));
996 }
997 
998 /*
999  * ixgbe_read_i2c_byte_generic - Reads 8 bit word over I2C
1000  * @hw: pointer to hardware structure
1001  * @byte_offset: byte offset to read
1002  * @data: value read
1003  *
1004  * Performs byte read operation to SFP module's EEPROM over I2C interface at
1005  * a specified deivce address.
1006  */
1007 s32
1008 ixgbe_read_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset,
1009     u8 dev_addr, u8 *data)
1010 {
1011 	s32 status = IXGBE_SUCCESS;
1012 	u32 max_retry = 1;
1013 	u32 retry = 0;
1014 	u16 swfw_mask = 0;
1015 	bool nack = 1;
1016 
1017 	DEBUGFUNC("ixgbe_read_i2c_byte_generic");
1018 
1019 	if (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1)
1020 		swfw_mask = IXGBE_GSSR_PHY1_SM;
1021 	else
1022 		swfw_mask = IXGBE_GSSR_PHY0_SM;
1023 
1024 	if (ixgbe_acquire_swfw_sync(hw, swfw_mask) != IXGBE_SUCCESS) {
1025 		status = IXGBE_ERR_SWFW_SYNC;
1026 		goto read_byte_out;
1027 	}
1028 
1029 	do {
1030 		ixgbe_i2c_start(hw);
1031 
1032 		/* Device Address and write indication */
1033 		status = ixgbe_clock_out_i2c_byte(hw, dev_addr);
1034 		if (status != IXGBE_SUCCESS)
1035 			goto fail;
1036 
1037 		status = ixgbe_get_i2c_ack(hw);
1038 		if (status != IXGBE_SUCCESS)
1039 			goto fail;
1040 
1041 		status = ixgbe_clock_out_i2c_byte(hw, byte_offset);
1042 		if (status != IXGBE_SUCCESS)
1043 			goto fail;
1044 
1045 		status = ixgbe_get_i2c_ack(hw);
1046 		if (status != IXGBE_SUCCESS)
1047 			goto fail;
1048 
1049 		ixgbe_i2c_start(hw);
1050 
1051 		/* Device Address and read indication */
1052 		status = ixgbe_clock_out_i2c_byte(hw, (dev_addr | 0x1));
1053 		if (status != IXGBE_SUCCESS)
1054 			goto fail;
1055 
1056 		status = ixgbe_get_i2c_ack(hw);
1057 		if (status != IXGBE_SUCCESS)
1058 			goto fail;
1059 
1060 		status = ixgbe_clock_in_i2c_byte(hw, data);
1061 		if (status != IXGBE_SUCCESS)
1062 			goto fail;
1063 
1064 		status = ixgbe_clock_out_i2c_bit(hw, nack);
1065 		if (status != IXGBE_SUCCESS)
1066 			goto fail;
1067 
1068 		ixgbe_i2c_stop(hw);
1069 		break;
1070 
1071 fail:
1072 		ixgbe_i2c_bus_clear(hw);
1073 		retry++;
1074 		if (retry < max_retry)
1075 			DEBUGOUT("I2C byte read error - Retrying.\n");
1076 		else
1077 			DEBUGOUT("I2C byte read error.\n");
1078 	} while (retry < max_retry);
1079 
1080 	ixgbe_release_swfw_sync(hw, swfw_mask);
1081 
1082 read_byte_out:
1083 	return (status);
1084 }
1085 
1086 /*
1087  * ixgbe_write_i2c_byte_generic - Writes 8 bit word over I2C
1088  * @hw: pointer to hardware structure
1089  * @byte_offset: byte offset to write
1090  * @data: value to write
1091  *
1092  * Performs byte write operation to SFP module's EEPROM over I2C interface at
1093  * a specified device address.
1094  */
1095 s32
1096 ixgbe_write_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset,
1097     u8 dev_addr, u8 data)
1098 {
1099 	s32 status = IXGBE_SUCCESS;
1100 	u32 max_retry = 1;
1101 	u32 retry = 0;
1102 	u16 swfw_mask = 0;
1103 
1104 	DEBUGFUNC("ixgbe_write_i2c_byte_generic");
1105 
1106 	if (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1)
1107 		swfw_mask = IXGBE_GSSR_PHY1_SM;
1108 	else
1109 		swfw_mask = IXGBE_GSSR_PHY0_SM;
1110 
1111 	if (ixgbe_acquire_swfw_sync(hw, swfw_mask) != IXGBE_SUCCESS) {
1112 		status = IXGBE_ERR_SWFW_SYNC;
1113 		goto write_byte_out;
1114 	}
1115 
1116 	do {
1117 		ixgbe_i2c_start(hw);
1118 
1119 		status = ixgbe_clock_out_i2c_byte(hw, dev_addr);
1120 		if (status != IXGBE_SUCCESS)
1121 			goto fail;
1122 
1123 		status = ixgbe_get_i2c_ack(hw);
1124 		if (status != IXGBE_SUCCESS)
1125 			goto fail;
1126 
1127 		status = ixgbe_clock_out_i2c_byte(hw, byte_offset);
1128 		if (status != IXGBE_SUCCESS)
1129 			goto fail;
1130 
1131 		status = ixgbe_get_i2c_ack(hw);
1132 		if (status != IXGBE_SUCCESS)
1133 			goto fail;
1134 
1135 		status = ixgbe_clock_out_i2c_byte(hw, data);
1136 		if (status != IXGBE_SUCCESS)
1137 			goto fail;
1138 
1139 		status = ixgbe_get_i2c_ack(hw);
1140 		if (status != IXGBE_SUCCESS)
1141 			goto fail;
1142 
1143 		ixgbe_i2c_stop(hw);
1144 		break;
1145 
1146 fail:
1147 		ixgbe_i2c_bus_clear(hw);
1148 		retry++;
1149 		if (retry < max_retry)
1150 			DEBUGOUT("I2C byte write error - Retrying.\n");
1151 		else
1152 			DEBUGOUT("I2C byte write error.\n");
1153 	} while (retry < max_retry);
1154 
1155 	ixgbe_release_swfw_sync(hw, swfw_mask);
1156 
1157 write_byte_out:
1158 	return (status);
1159 }
1160 
1161 /*
1162  * ixgbe_i2c_start - Sets I2C start condition
1163  * @hw: pointer to hardware structure
1164  *
1165  * Sets I2C start condition (High -> Low on SDA while SCL is High)
1166  */
1167 static void
1168 ixgbe_i2c_start(struct ixgbe_hw *hw)
1169 {
1170 	u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1171 
1172 	DEBUGFUNC("ixgbe_i2c_start");
1173 
1174 	/* Start condition must begin with data and clock high */
1175 	(void) ixgbe_set_i2c_data(hw, &i2cctl, 1);
1176 	(void) ixgbe_raise_i2c_clk(hw, &i2cctl);
1177 
1178 	/* Setup time for start condition (4.7us) */
1179 	usec_delay(IXGBE_I2C_T_SU_STA);
1180 
1181 	(void) ixgbe_set_i2c_data(hw, &i2cctl, 0);
1182 
1183 	/* Hold time for start condition (4us) */
1184 	usec_delay(IXGBE_I2C_T_HD_STA);
1185 
1186 	ixgbe_lower_i2c_clk(hw, &i2cctl);
1187 
1188 	/* Minimum low period of clock is 4.7 us */
1189 	usec_delay(IXGBE_I2C_T_LOW);
1190 }
1191 
1192 /*
1193  * ixgbe_i2c_stop - Sets I2C stop condition
1194  * @hw: pointer to hardware structure
1195  *
1196  * Sets I2C stop condition (Low -> High on SDA while SCL is High)
1197  */
1198 static void
1199 ixgbe_i2c_stop(struct ixgbe_hw *hw)
1200 {
1201 	u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1202 
1203 	DEBUGFUNC("ixgbe_i2c_stop");
1204 
1205 	/* Stop condition must begin with data low and clock high */
1206 	(void) ixgbe_set_i2c_data(hw, &i2cctl, 0);
1207 	(void) ixgbe_raise_i2c_clk(hw, &i2cctl);
1208 
1209 	/* Setup time for stop condition (4us) */
1210 	usec_delay(IXGBE_I2C_T_SU_STO);
1211 
1212 	(void) ixgbe_set_i2c_data(hw, &i2cctl, 1);
1213 
1214 	/* bus free time between stop and start (4.7us) */
1215 	usec_delay(IXGBE_I2C_T_BUF);
1216 }
1217 
1218 /*
1219  * ixgbe_clock_in_i2c_byte - Clocks in one byte via I2C
1220  * @hw: pointer to hardware structure
1221  * @data: data byte to clock in
1222  *
1223  * Clocks in one byte data via I2C data/clock
1224  */
1225 static s32
1226 ixgbe_clock_in_i2c_byte(struct ixgbe_hw *hw, u8 *data)
1227 {
1228 	s32 status = IXGBE_SUCCESS;
1229 	s32 i;
1230 	bool bit = 0;
1231 
1232 	DEBUGFUNC("ixgbe_clock_in_i2c_byte");
1233 
1234 	for (i = 7; i >= 0; i--) {
1235 		status = ixgbe_clock_in_i2c_bit(hw, &bit);
1236 		*data |= bit<<i;
1237 
1238 		if (status != IXGBE_SUCCESS)
1239 			break;
1240 	}
1241 
1242 	return (status);
1243 }
1244 
1245 /*
1246  * ixgbe_clock_out_i2c_byte - Clocks out one byte via I2C
1247  * @hw: pointer to hardware structure
1248  * @data: data byte clocked out
1249  *
1250  * Clocks out one byte data via I2C data/clock
1251  */
1252 static s32
1253 ixgbe_clock_out_i2c_byte(struct ixgbe_hw *hw, u8 data)
1254 {
1255 	s32 status = IXGBE_SUCCESS;
1256 	s32 i;
1257 	u32 i2cctl;
1258 	bool bit = 0;
1259 
1260 	DEBUGFUNC("ixgbe_clock_out_i2c_byte");
1261 
1262 	for (i = 7; i >= 0; i--) {
1263 		bit = (data >> i) & 0x1;
1264 		status = ixgbe_clock_out_i2c_bit(hw, bit);
1265 
1266 		if (status != IXGBE_SUCCESS)
1267 			break;
1268 	}
1269 
1270 	/* Release SDA line (set high) */
1271 	i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1272 	i2cctl |= IXGBE_I2C_DATA_OUT;
1273 	IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, i2cctl);
1274 
1275 	return (status);
1276 }
1277 
1278 /*
1279  * ixgbe_get_i2c_ack - Polls for I2C ACK
1280  * @hw: pointer to hardware structure
1281  *
1282  * Clocks in/out one bit via I2C data/clock
1283  */
1284 static s32
1285 ixgbe_get_i2c_ack(struct ixgbe_hw *hw)
1286 {
1287 	s32 status;
1288 	u32 i = 0;
1289 	u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1290 	u32 timeout = 10;
1291 	bool ack = 1;
1292 
1293 	DEBUGFUNC("ixgbe_get_i2c_ack");
1294 
1295 	status = ixgbe_raise_i2c_clk(hw, &i2cctl);
1296 
1297 	if (status != IXGBE_SUCCESS)
1298 		goto out;
1299 
1300 	/* Minimum high period of clock is 4us */
1301 	usec_delay(IXGBE_I2C_T_HIGH);
1302 
1303 	/*
1304 	 * Poll for ACK.  Note that ACK in I2C spec is
1305 	 * transition from 1 to 0
1306 	 */
1307 	for (i = 0; i < timeout; i++) {
1308 		i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1309 		ack = ixgbe_get_i2c_data(&i2cctl);
1310 
1311 		usec_delay(1);
1312 		if (ack == 0)
1313 			break;
1314 	}
1315 
1316 	if (ack == 1) {
1317 		DEBUGOUT("I2C ack was not received.\n");
1318 		status = IXGBE_ERR_I2C;
1319 	}
1320 
1321 	ixgbe_lower_i2c_clk(hw, &i2cctl);
1322 
1323 	/* Minimum low period of clock is 4.7 us */
1324 	usec_delay(IXGBE_I2C_T_LOW);
1325 
1326 out:
1327 	return (status);
1328 }
1329 
1330 /*
1331  * ixgbe_clock_in_i2c_bit - Clocks in one bit via I2C data/clock
1332  * @hw: pointer to hardware structure
1333  * @data: read data value
1334  *
1335  * Clocks in one bit via I2C data/clock
1336  */
1337 static s32
1338 ixgbe_clock_in_i2c_bit(struct ixgbe_hw *hw, bool *data)
1339 {
1340 	s32 status;
1341 	u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1342 
1343 	status = ixgbe_raise_i2c_clk(hw, &i2cctl);
1344 
1345 	/* Minimum high period of clock is 4us */
1346 	usec_delay(IXGBE_I2C_T_HIGH);
1347 
1348 	i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1349 	*data = ixgbe_get_i2c_data(&i2cctl);
1350 
1351 	ixgbe_lower_i2c_clk(hw, &i2cctl);
1352 
1353 	/* Minimum low period of clock is 4.7 us */
1354 	usec_delay(IXGBE_I2C_T_LOW);
1355 
1356 	return (status);
1357 }
1358 
1359 /*
1360  * ixgbe_clock_out_i2c_bit - Clocks in/out one bit via I2C data/clock
1361  * @hw: pointer to hardware structure
1362  * @data: data value to write
1363  *
1364  * Clocks out one bit via I2C data/clock
1365  */
1366 static s32
1367 ixgbe_clock_out_i2c_bit(struct ixgbe_hw *hw, bool data)
1368 {
1369 	s32 status;
1370 	u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1371 
1372 	status = ixgbe_set_i2c_data(hw, &i2cctl, data);
1373 	if (status == IXGBE_SUCCESS) {
1374 		status = ixgbe_raise_i2c_clk(hw, &i2cctl);
1375 
1376 		/* Minimum high period of clock is 4us */
1377 		usec_delay(IXGBE_I2C_T_HIGH);
1378 
1379 		ixgbe_lower_i2c_clk(hw, &i2cctl);
1380 
1381 		/*
1382 		 * Minimum low period of clock is 4.7 us.
1383 		 * This also takes care of the data hold time.
1384 		 */
1385 		usec_delay(IXGBE_I2C_T_LOW);
1386 	} else {
1387 		status = IXGBE_ERR_I2C;
1388 		DEBUGOUT1("I2C data was not set to %X\n", data);
1389 	}
1390 
1391 	return (status);
1392 }
1393 
1394 /*
1395  * ixgbe_raise_i2c_clk - Raises the I2C SCL clock
1396  * @hw: pointer to hardware structure
1397  * @i2cctl: Current value of I2CCTL register
1398  *
1399  * Raises the I2C clock line '0'->'1'
1400  */
1401 static s32
1402 ixgbe_raise_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl)
1403 {
1404 	s32 status = IXGBE_SUCCESS;
1405 
1406 	*i2cctl |= IXGBE_I2C_CLK_OUT;
1407 
1408 	IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, *i2cctl);
1409 
1410 	/* SCL rise time (1000ns) */
1411 	usec_delay(IXGBE_I2C_T_RISE);
1412 
1413 	return (status);
1414 }
1415 
1416 /*
1417  * ixgbe_lower_i2c_clk - Lowers the I2C SCL clock
1418  * @hw: pointer to hardware structure
1419  * @i2cctl: Current value of I2CCTL register
1420  *
1421  * Lowers the I2C clock line '1'->'0'
1422  */
1423 static void
1424 ixgbe_lower_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl)
1425 {
1426 	*i2cctl &= ~IXGBE_I2C_CLK_OUT;
1427 
1428 	IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, *i2cctl);
1429 
1430 	/* SCL fall time (300ns) */
1431 	usec_delay(IXGBE_I2C_T_FALL);
1432 }
1433 
1434 /*
1435  * ixgbe_set_i2c_data - Sets the I2C data bit
1436  * @hw: pointer to hardware structure
1437  * @i2cctl: Current value of I2CCTL register
1438  * @data: I2C data value (0 or 1) to set
1439  *
1440  * Sets the I2C data bit
1441  */
1442 static s32
1443 ixgbe_set_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl, bool data)
1444 {
1445 	s32 status = IXGBE_SUCCESS;
1446 
1447 	if (data)
1448 		*i2cctl |= IXGBE_I2C_DATA_OUT;
1449 	else
1450 		*i2cctl &= ~IXGBE_I2C_DATA_OUT;
1451 
1452 	IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, *i2cctl);
1453 
1454 	/* Data rise/fall (1000ns/300ns) and set-up time (250ns) */
1455 	usec_delay(IXGBE_I2C_T_RISE + IXGBE_I2C_T_FALL + IXGBE_I2C_T_SU_DATA);
1456 
1457 	/* Verify data was set correctly */
1458 	*i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1459 	if (data != ixgbe_get_i2c_data(i2cctl)) {
1460 		status = IXGBE_ERR_I2C;
1461 		DEBUGOUT1("Error - I2C data was not set to %X.\n", data);
1462 	}
1463 
1464 	return (status);
1465 }
1466 
1467 /*
1468  * ixgbe_get_i2c_data - Reads the I2C SDA data bit
1469  * @hw: pointer to hardware structure
1470  * @i2cctl: Current value of I2CCTL register
1471  *
1472  * Returns the I2C data bit value
1473  */
1474 static bool
1475 ixgbe_get_i2c_data(u32 *i2cctl)
1476 {
1477 	bool data;
1478 
1479 	if (*i2cctl & IXGBE_I2C_DATA_IN)
1480 		data = 1;
1481 	else
1482 		data = 0;
1483 
1484 	return (data);
1485 }
1486 
1487 /*
1488  * ixgbe_i2c_bus_clear - Clears the I2C bus
1489  * @hw: pointer to hardware structure
1490  *
1491  * Clears the I2C bus by sending nine clock pulses.
1492  * Used when data line is stuck low.
1493  */
1494 void
1495 ixgbe_i2c_bus_clear(struct ixgbe_hw *hw)
1496 {
1497 	u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1498 	u32 i;
1499 
1500 	DEBUGFUNC("ixgbe_i2c_bus_clear");
1501 
1502 	ixgbe_i2c_start(hw);
1503 
1504 	(void) ixgbe_set_i2c_data(hw, &i2cctl, 1);
1505 
1506 	for (i = 0; i < 9; i++) {
1507 		(void) ixgbe_raise_i2c_clk(hw, &i2cctl);
1508 
1509 		/* Min high period of clock is 4us */
1510 		usec_delay(IXGBE_I2C_T_HIGH);
1511 
1512 		ixgbe_lower_i2c_clk(hw, &i2cctl);
1513 
1514 		/* Min low period of clock is 4.7us */
1515 		usec_delay(IXGBE_I2C_T_LOW);
1516 	}
1517 
1518 	ixgbe_i2c_start(hw);
1519 
1520 	/* Put the i2c bus back to default state */
1521 	ixgbe_i2c_stop(hw);
1522 }
1523