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