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