ixgbe_phy.c revision 1.17 1 /* $NetBSD: ixgbe_phy.c,v 1.17 2018/04/04 08:59:22 msaitoh 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 return status;
1589
1590 err_read_i2c_eeprom:
1591 hw->phy.sfp_type = ixgbe_sfp_type_not_present;
1592 if (hw->phy.type != ixgbe_phy_nl) {
1593 hw->phy.id = 0;
1594 hw->phy.type = ixgbe_phy_unknown;
1595 }
1596 return IXGBE_ERR_SFP_NOT_PRESENT;
1597 }
1598
1599 /**
1600 * ixgbe_get_supported_phy_sfp_layer_generic - Returns physical layer type
1601 * @hw: pointer to hardware structure
1602 *
1603 * Determines physical layer capabilities of the current SFP.
1604 */
1605 u64 ixgbe_get_supported_phy_sfp_layer_generic(struct ixgbe_hw *hw)
1606 {
1607 u64 physical_layer = IXGBE_PHYSICAL_LAYER_UNKNOWN;
1608 u8 comp_codes_10g = 0;
1609 u8 comp_codes_1g = 0;
1610
1611 DEBUGFUNC("ixgbe_get_supported_phy_sfp_layer_generic");
1612
1613 hw->phy.ops.identify_sfp(hw);
1614 if (hw->phy.sfp_type == ixgbe_sfp_type_not_present)
1615 return physical_layer;
1616
1617 switch (hw->phy.type) {
1618 case ixgbe_phy_sfp_passive_tyco:
1619 case ixgbe_phy_sfp_passive_unknown:
1620 case ixgbe_phy_qsfp_passive_unknown:
1621 physical_layer = IXGBE_PHYSICAL_LAYER_SFP_PLUS_CU;
1622 break;
1623 case ixgbe_phy_sfp_ftl_active:
1624 case ixgbe_phy_sfp_active_unknown:
1625 case ixgbe_phy_qsfp_active_unknown:
1626 physical_layer = IXGBE_PHYSICAL_LAYER_SFP_ACTIVE_DA;
1627 break;
1628 case ixgbe_phy_sfp_avago:
1629 case ixgbe_phy_sfp_ftl:
1630 case ixgbe_phy_sfp_intel:
1631 case ixgbe_phy_sfp_unknown:
1632 hw->phy.ops.read_i2c_eeprom(hw,
1633 IXGBE_SFF_1GBE_COMP_CODES, &comp_codes_1g);
1634 hw->phy.ops.read_i2c_eeprom(hw,
1635 IXGBE_SFF_10GBE_COMP_CODES, &comp_codes_10g);
1636 if (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)
1637 physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_SR;
1638 else if (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)
1639 physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_LR;
1640 else if (comp_codes_1g & IXGBE_SFF_1GBASET_CAPABLE)
1641 physical_layer = IXGBE_PHYSICAL_LAYER_1000BASE_T;
1642 else if (comp_codes_1g & IXGBE_SFF_1GBASESX_CAPABLE)
1643 physical_layer = IXGBE_PHYSICAL_LAYER_1000BASE_SX;
1644 break;
1645 case ixgbe_phy_qsfp_intel:
1646 case ixgbe_phy_qsfp_unknown:
1647 hw->phy.ops.read_i2c_eeprom(hw,
1648 IXGBE_SFF_QSFP_10GBE_COMP, &comp_codes_10g);
1649 if (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)
1650 physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_SR;
1651 else if (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)
1652 physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_LR;
1653 break;
1654 default:
1655 break;
1656 }
1657
1658 return physical_layer;
1659 }
1660
1661 /**
1662 * ixgbe_identify_qsfp_module_generic - Identifies QSFP modules
1663 * @hw: pointer to hardware structure
1664 *
1665 * Searches for and identifies the QSFP module and assigns appropriate PHY type
1666 **/
1667 s32 ixgbe_identify_qsfp_module_generic(struct ixgbe_hw *hw)
1668 {
1669 s32 status = IXGBE_ERR_PHY_ADDR_INVALID;
1670 u32 vendor_oui = 0;
1671 enum ixgbe_sfp_type stored_sfp_type = hw->phy.sfp_type;
1672 u8 identifier = 0;
1673 u8 comp_codes_1g = 0;
1674 u8 comp_codes_10g = 0;
1675 u8 oui_bytes[3] = {0, 0, 0};
1676 u16 enforce_sfp = 0;
1677 u8 connector = 0;
1678 u8 cable_length = 0;
1679 u8 device_tech = 0;
1680 bool active_cable = FALSE;
1681
1682 DEBUGFUNC("ixgbe_identify_qsfp_module_generic");
1683
1684 if (hw->mac.ops.get_media_type(hw) != ixgbe_media_type_fiber_qsfp) {
1685 hw->phy.sfp_type = ixgbe_sfp_type_not_present;
1686 status = IXGBE_ERR_SFP_NOT_PRESENT;
1687 goto out;
1688 }
1689
1690 /* LAN ID is needed for I2C access */
1691 hw->mac.ops.set_lan_id(hw);
1692
1693 status = hw->phy.ops.read_i2c_eeprom(hw, IXGBE_SFF_IDENTIFIER,
1694 &identifier);
1695
1696 if (status != IXGBE_SUCCESS)
1697 goto err_read_i2c_eeprom;
1698
1699 if (identifier != IXGBE_SFF_IDENTIFIER_QSFP_PLUS) {
1700 hw->phy.type = ixgbe_phy_sfp_unsupported;
1701 status = IXGBE_ERR_SFP_NOT_SUPPORTED;
1702 goto out;
1703 }
1704
1705 hw->phy.id = identifier;
1706
1707 status = hw->phy.ops.read_i2c_eeprom(hw, IXGBE_SFF_QSFP_10GBE_COMP,
1708 &comp_codes_10g);
1709
1710 if (status != IXGBE_SUCCESS)
1711 goto err_read_i2c_eeprom;
1712
1713 status = hw->phy.ops.read_i2c_eeprom(hw, IXGBE_SFF_QSFP_1GBE_COMP,
1714 &comp_codes_1g);
1715
1716 if (status != IXGBE_SUCCESS)
1717 goto err_read_i2c_eeprom;
1718
1719 if (comp_codes_10g & IXGBE_SFF_QSFP_DA_PASSIVE_CABLE) {
1720 hw->phy.type = ixgbe_phy_qsfp_passive_unknown;
1721 if (hw->bus.lan_id == 0)
1722 hw->phy.sfp_type = ixgbe_sfp_type_da_cu_core0;
1723 else
1724 hw->phy.sfp_type = ixgbe_sfp_type_da_cu_core1;
1725 } else if (comp_codes_10g & (IXGBE_SFF_10GBASESR_CAPABLE |
1726 IXGBE_SFF_10GBASELR_CAPABLE)) {
1727 if (hw->bus.lan_id == 0)
1728 hw->phy.sfp_type = ixgbe_sfp_type_srlr_core0;
1729 else
1730 hw->phy.sfp_type = ixgbe_sfp_type_srlr_core1;
1731 } else {
1732 if (comp_codes_10g & IXGBE_SFF_QSFP_DA_ACTIVE_CABLE)
1733 active_cable = TRUE;
1734
1735 if (!active_cable) {
1736 /* check for active DA cables that pre-date
1737 * SFF-8436 v3.6 */
1738 hw->phy.ops.read_i2c_eeprom(hw,
1739 IXGBE_SFF_QSFP_CONNECTOR,
1740 &connector);
1741
1742 hw->phy.ops.read_i2c_eeprom(hw,
1743 IXGBE_SFF_QSFP_CABLE_LENGTH,
1744 &cable_length);
1745
1746 hw->phy.ops.read_i2c_eeprom(hw,
1747 IXGBE_SFF_QSFP_DEVICE_TECH,
1748 &device_tech);
1749
1750 if ((connector ==
1751 IXGBE_SFF_QSFP_CONNECTOR_NOT_SEPARABLE) &&
1752 (cable_length > 0) &&
1753 ((device_tech >> 4) ==
1754 IXGBE_SFF_QSFP_TRANSMITER_850NM_VCSEL))
1755 active_cable = TRUE;
1756 }
1757
1758 if (active_cable) {
1759 hw->phy.type = ixgbe_phy_qsfp_active_unknown;
1760 if (hw->bus.lan_id == 0)
1761 hw->phy.sfp_type =
1762 ixgbe_sfp_type_da_act_lmt_core0;
1763 else
1764 hw->phy.sfp_type =
1765 ixgbe_sfp_type_da_act_lmt_core1;
1766 } else {
1767 /* unsupported module type */
1768 hw->phy.type = ixgbe_phy_sfp_unsupported;
1769 status = IXGBE_ERR_SFP_NOT_SUPPORTED;
1770 goto out;
1771 }
1772 }
1773
1774 if (hw->phy.sfp_type != stored_sfp_type)
1775 hw->phy.sfp_setup_needed = TRUE;
1776
1777 /* Determine if the QSFP+ PHY is dual speed or not. */
1778 hw->phy.multispeed_fiber = FALSE;
1779 if (((comp_codes_1g & IXGBE_SFF_1GBASESX_CAPABLE) &&
1780 (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)) ||
1781 ((comp_codes_1g & IXGBE_SFF_1GBASELX_CAPABLE) &&
1782 (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)))
1783 hw->phy.multispeed_fiber = TRUE;
1784
1785 /* Determine PHY vendor for optical modules */
1786 if (comp_codes_10g & (IXGBE_SFF_10GBASESR_CAPABLE |
1787 IXGBE_SFF_10GBASELR_CAPABLE)) {
1788 status = hw->phy.ops.read_i2c_eeprom(hw,
1789 IXGBE_SFF_QSFP_VENDOR_OUI_BYTE0,
1790 &oui_bytes[0]);
1791
1792 if (status != IXGBE_SUCCESS)
1793 goto err_read_i2c_eeprom;
1794
1795 status = hw->phy.ops.read_i2c_eeprom(hw,
1796 IXGBE_SFF_QSFP_VENDOR_OUI_BYTE1,
1797 &oui_bytes[1]);
1798
1799 if (status != IXGBE_SUCCESS)
1800 goto err_read_i2c_eeprom;
1801
1802 status = hw->phy.ops.read_i2c_eeprom(hw,
1803 IXGBE_SFF_QSFP_VENDOR_OUI_BYTE2,
1804 &oui_bytes[2]);
1805
1806 if (status != IXGBE_SUCCESS)
1807 goto err_read_i2c_eeprom;
1808
1809 vendor_oui =
1810 ((oui_bytes[0] << IXGBE_SFF_VENDOR_OUI_BYTE0_SHIFT) |
1811 (oui_bytes[1] << IXGBE_SFF_VENDOR_OUI_BYTE1_SHIFT) |
1812 (oui_bytes[2] << IXGBE_SFF_VENDOR_OUI_BYTE2_SHIFT));
1813
1814 if (vendor_oui == IXGBE_SFF_VENDOR_OUI_INTEL)
1815 hw->phy.type = ixgbe_phy_qsfp_intel;
1816 else
1817 hw->phy.type = ixgbe_phy_qsfp_unknown;
1818
1819 ixgbe_get_device_caps(hw, &enforce_sfp);
1820 if (!(enforce_sfp & IXGBE_DEVICE_CAPS_ALLOW_ANY_SFP)) {
1821 /* Make sure we're a supported PHY type */
1822 if (hw->phy.type == ixgbe_phy_qsfp_intel) {
1823 status = IXGBE_SUCCESS;
1824 } else {
1825 if (hw->allow_unsupported_sfp == TRUE) {
1826 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");
1827 status = IXGBE_SUCCESS;
1828 } else {
1829 DEBUGOUT("QSFP module not supported\n");
1830 hw->phy.type =
1831 ixgbe_phy_sfp_unsupported;
1832 status = IXGBE_ERR_SFP_NOT_SUPPORTED;
1833 }
1834 }
1835 } else {
1836 status = IXGBE_SUCCESS;
1837 }
1838 }
1839
1840 out:
1841 return status;
1842
1843 err_read_i2c_eeprom:
1844 hw->phy.sfp_type = ixgbe_sfp_type_not_present;
1845 hw->phy.id = 0;
1846 hw->phy.type = ixgbe_phy_unknown;
1847
1848 return IXGBE_ERR_SFP_NOT_PRESENT;
1849 }
1850
1851 /**
1852 * ixgbe_get_sfp_init_sequence_offsets - Provides offset of PHY init sequence
1853 * @hw: pointer to hardware structure
1854 * @list_offset: offset to the SFP ID list
1855 * @data_offset: offset to the SFP data block
1856 *
1857 * Checks the MAC's EEPROM to see if it supports a given SFP+ module type, if
1858 * so it returns the offsets to the phy init sequence block.
1859 **/
1860 s32 ixgbe_get_sfp_init_sequence_offsets(struct ixgbe_hw *hw,
1861 u16 *list_offset,
1862 u16 *data_offset)
1863 {
1864 u16 sfp_id;
1865 u16 sfp_type = hw->phy.sfp_type;
1866
1867 DEBUGFUNC("ixgbe_get_sfp_init_sequence_offsets");
1868
1869 if (hw->phy.sfp_type == ixgbe_sfp_type_unknown)
1870 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1871
1872 if (hw->phy.sfp_type == ixgbe_sfp_type_not_present)
1873 return IXGBE_ERR_SFP_NOT_PRESENT;
1874
1875 if ((hw->device_id == IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM) &&
1876 (hw->phy.sfp_type == ixgbe_sfp_type_da_cu))
1877 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1878
1879 /*
1880 * Limiting active cables and 1G Phys must be initialized as
1881 * SR modules
1882 */
1883 if (sfp_type == ixgbe_sfp_type_da_act_lmt_core0 ||
1884 sfp_type == ixgbe_sfp_type_1g_lx_core0 ||
1885 sfp_type == ixgbe_sfp_type_1g_cu_core0 ||
1886 sfp_type == ixgbe_sfp_type_1g_sx_core0)
1887 sfp_type = ixgbe_sfp_type_srlr_core0;
1888 else if (sfp_type == ixgbe_sfp_type_da_act_lmt_core1 ||
1889 sfp_type == ixgbe_sfp_type_1g_lx_core1 ||
1890 sfp_type == ixgbe_sfp_type_1g_cu_core1 ||
1891 sfp_type == ixgbe_sfp_type_1g_sx_core1)
1892 sfp_type = ixgbe_sfp_type_srlr_core1;
1893
1894 /* Read offset to PHY init contents */
1895 if (hw->eeprom.ops.read(hw, IXGBE_PHY_INIT_OFFSET_NL, list_offset)) {
1896 ERROR_REPORT2(IXGBE_ERROR_INVALID_STATE,
1897 "eeprom read at offset %d failed",
1898 IXGBE_PHY_INIT_OFFSET_NL);
1899 return IXGBE_ERR_SFP_NO_INIT_SEQ_PRESENT;
1900 }
1901
1902 if ((!*list_offset) || (*list_offset == 0xFFFF))
1903 return IXGBE_ERR_SFP_NO_INIT_SEQ_PRESENT;
1904
1905 /* Shift offset to first ID word */
1906 (*list_offset)++;
1907
1908 /*
1909 * Find the matching SFP ID in the EEPROM
1910 * and program the init sequence
1911 */
1912 if (hw->eeprom.ops.read(hw, *list_offset, &sfp_id))
1913 goto err_phy;
1914
1915 while (sfp_id != IXGBE_PHY_INIT_END_NL) {
1916 if (sfp_id == sfp_type) {
1917 (*list_offset)++;
1918 if (hw->eeprom.ops.read(hw, *list_offset, data_offset))
1919 goto err_phy;
1920 if ((!*data_offset) || (*data_offset == 0xFFFF)) {
1921 DEBUGOUT("SFP+ module not supported\n");
1922 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1923 } else {
1924 break;
1925 }
1926 } else {
1927 (*list_offset) += 2;
1928 if (hw->eeprom.ops.read(hw, *list_offset, &sfp_id))
1929 goto err_phy;
1930 }
1931 }
1932
1933 if (sfp_id == IXGBE_PHY_INIT_END_NL) {
1934 DEBUGOUT("No matching SFP+ module found\n");
1935 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1936 }
1937
1938 return IXGBE_SUCCESS;
1939
1940 err_phy:
1941 ERROR_REPORT2(IXGBE_ERROR_INVALID_STATE,
1942 "eeprom read at offset %d failed", *list_offset);
1943 return IXGBE_ERR_PHY;
1944 }
1945
1946 /**
1947 * ixgbe_read_i2c_eeprom_generic - Reads 8 bit EEPROM word over I2C interface
1948 * @hw: pointer to hardware structure
1949 * @byte_offset: EEPROM byte offset to read
1950 * @eeprom_data: value read
1951 *
1952 * Performs byte read operation to SFP module's EEPROM over I2C interface.
1953 **/
1954 s32 ixgbe_read_i2c_eeprom_generic(struct ixgbe_hw *hw, u8 byte_offset,
1955 u8 *eeprom_data)
1956 {
1957 DEBUGFUNC("ixgbe_read_i2c_eeprom_generic");
1958
1959 return hw->phy.ops.read_i2c_byte(hw, byte_offset,
1960 IXGBE_I2C_EEPROM_DEV_ADDR,
1961 eeprom_data);
1962 }
1963
1964 /**
1965 * ixgbe_read_i2c_sff8472_generic - Reads 8 bit word over I2C interface
1966 * @hw: pointer to hardware structure
1967 * @byte_offset: byte offset at address 0xA2
1968 * @sff8472_data: value read
1969 *
1970 * Performs byte read operation to SFP module's SFF-8472 data over I2C
1971 **/
1972 static s32 ixgbe_read_i2c_sff8472_generic(struct ixgbe_hw *hw, u8 byte_offset,
1973 u8 *sff8472_data)
1974 {
1975 return hw->phy.ops.read_i2c_byte(hw, byte_offset,
1976 IXGBE_I2C_EEPROM_DEV_ADDR2,
1977 sff8472_data);
1978 }
1979
1980 /**
1981 * ixgbe_write_i2c_eeprom_generic - Writes 8 bit EEPROM word over I2C interface
1982 * @hw: pointer to hardware structure
1983 * @byte_offset: EEPROM byte offset to write
1984 * @eeprom_data: value to write
1985 *
1986 * Performs byte write operation to SFP module's EEPROM over I2C interface.
1987 **/
1988 s32 ixgbe_write_i2c_eeprom_generic(struct ixgbe_hw *hw, u8 byte_offset,
1989 u8 eeprom_data)
1990 {
1991 DEBUGFUNC("ixgbe_write_i2c_eeprom_generic");
1992
1993 return hw->phy.ops.write_i2c_byte(hw, byte_offset,
1994 IXGBE_I2C_EEPROM_DEV_ADDR,
1995 eeprom_data);
1996 }
1997
1998 /**
1999 * ixgbe_is_sfp_probe - Returns TRUE if SFP is being detected
2000 * @hw: pointer to hardware structure
2001 * @offset: eeprom offset to be read
2002 * @addr: I2C address to be read
2003 */
2004 static bool ixgbe_is_sfp_probe(struct ixgbe_hw *hw, u8 offset, u8 addr)
2005 {
2006 if (addr == IXGBE_I2C_EEPROM_DEV_ADDR &&
2007 offset == IXGBE_SFF_IDENTIFIER &&
2008 hw->phy.sfp_type == ixgbe_sfp_type_not_present)
2009 return TRUE;
2010 return FALSE;
2011 }
2012
2013 /**
2014 * ixgbe_read_i2c_byte_generic_int - Reads 8 bit word over I2C
2015 * @hw: pointer to hardware structure
2016 * @byte_offset: byte offset to read
2017 * @dev_addr: address to read from
2018 * @data: value read
2019 * @lock: TRUE if to take and release semaphore
2020 *
2021 * Performs byte read operation to SFP module's EEPROM over I2C interface at
2022 * a specified device address.
2023 **/
2024 static s32 ixgbe_read_i2c_byte_generic_int(struct ixgbe_hw *hw, u8 byte_offset,
2025 u8 dev_addr, u8 *data, bool lock)
2026 {
2027 s32 status;
2028 u32 max_retry = 10;
2029 u32 retry = 0;
2030 u32 swfw_mask = hw->phy.phy_semaphore_mask;
2031 bool nack = 1;
2032 *data = 0;
2033
2034 DEBUGFUNC("ixgbe_read_i2c_byte_generic");
2035
2036 if (hw->mac.type >= ixgbe_mac_X550)
2037 max_retry = 3;
2038 if (ixgbe_is_sfp_probe(hw, byte_offset, dev_addr))
2039 max_retry = IXGBE_SFP_DETECT_RETRIES;
2040
2041 do {
2042 if (lock && hw->mac.ops.acquire_swfw_sync(hw, swfw_mask))
2043 return IXGBE_ERR_SWFW_SYNC;
2044
2045 ixgbe_i2c_start(hw);
2046
2047 /* Device Address and write indication */
2048 status = ixgbe_clock_out_i2c_byte(hw, dev_addr);
2049 if (status != IXGBE_SUCCESS)
2050 goto fail;
2051
2052 status = ixgbe_get_i2c_ack(hw);
2053 if (status != IXGBE_SUCCESS)
2054 goto fail;
2055
2056 status = ixgbe_clock_out_i2c_byte(hw, byte_offset);
2057 if (status != IXGBE_SUCCESS)
2058 goto fail;
2059
2060 status = ixgbe_get_i2c_ack(hw);
2061 if (status != IXGBE_SUCCESS)
2062 goto fail;
2063
2064 ixgbe_i2c_start(hw);
2065
2066 /* Device Address and read indication */
2067 status = ixgbe_clock_out_i2c_byte(hw, (dev_addr | 0x1));
2068 if (status != IXGBE_SUCCESS)
2069 goto fail;
2070
2071 status = ixgbe_get_i2c_ack(hw);
2072 if (status != IXGBE_SUCCESS)
2073 goto fail;
2074
2075 status = ixgbe_clock_in_i2c_byte(hw, data);
2076 if (status != IXGBE_SUCCESS)
2077 goto fail;
2078
2079 status = ixgbe_clock_out_i2c_bit(hw, nack);
2080 if (status != IXGBE_SUCCESS)
2081 goto fail;
2082
2083 ixgbe_i2c_stop(hw);
2084 if (lock)
2085 hw->mac.ops.release_swfw_sync(hw, swfw_mask);
2086 return IXGBE_SUCCESS;
2087
2088 fail:
2089 ixgbe_i2c_bus_clear(hw);
2090 if (lock) {
2091 hw->mac.ops.release_swfw_sync(hw, swfw_mask);
2092 msec_delay(100);
2093 }
2094 retry++;
2095 if (retry < max_retry)
2096 DEBUGOUT("I2C byte read error - Retrying.\n");
2097 else
2098 DEBUGOUT("I2C byte read error.\n");
2099
2100 } while (retry < max_retry);
2101
2102 return status;
2103 }
2104
2105 /**
2106 * ixgbe_read_i2c_byte_generic - Reads 8 bit word over I2C
2107 * @hw: pointer to hardware structure
2108 * @byte_offset: byte offset to read
2109 * @dev_addr: address to read from
2110 * @data: value read
2111 *
2112 * Performs byte read operation to SFP module's EEPROM over I2C interface at
2113 * a specified device address.
2114 **/
2115 s32 ixgbe_read_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset,
2116 u8 dev_addr, u8 *data)
2117 {
2118 return ixgbe_read_i2c_byte_generic_int(hw, byte_offset, dev_addr,
2119 data, TRUE);
2120 }
2121
2122 /**
2123 * ixgbe_read_i2c_byte_generic_unlocked - Reads 8 bit word over I2C
2124 * @hw: pointer to hardware structure
2125 * @byte_offset: byte offset to read
2126 * @dev_addr: address to read from
2127 * @data: value read
2128 *
2129 * Performs byte read operation to SFP module's EEPROM over I2C interface at
2130 * a specified device address.
2131 **/
2132 s32 ixgbe_read_i2c_byte_generic_unlocked(struct ixgbe_hw *hw, u8 byte_offset,
2133 u8 dev_addr, u8 *data)
2134 {
2135 return ixgbe_read_i2c_byte_generic_int(hw, byte_offset, dev_addr,
2136 data, FALSE);
2137 }
2138
2139 /**
2140 * ixgbe_write_i2c_byte_generic_int - Writes 8 bit word over I2C
2141 * @hw: pointer to hardware structure
2142 * @byte_offset: byte offset to write
2143 * @dev_addr: address to write to
2144 * @data: value to write
2145 * @lock: TRUE if to take and release semaphore
2146 *
2147 * Performs byte write operation to SFP module's EEPROM over I2C interface at
2148 * a specified device address.
2149 **/
2150 static s32 ixgbe_write_i2c_byte_generic_int(struct ixgbe_hw *hw, u8 byte_offset,
2151 u8 dev_addr, u8 data, bool lock)
2152 {
2153 s32 status;
2154 u32 max_retry = 2;
2155 u32 retry = 0;
2156 u32 swfw_mask = hw->phy.phy_semaphore_mask;
2157
2158 DEBUGFUNC("ixgbe_write_i2c_byte_generic");
2159
2160 if (lock && hw->mac.ops.acquire_swfw_sync(hw, swfw_mask) !=
2161 IXGBE_SUCCESS)
2162 return IXGBE_ERR_SWFW_SYNC;
2163
2164 do {
2165 ixgbe_i2c_start(hw);
2166
2167 status = ixgbe_clock_out_i2c_byte(hw, dev_addr);
2168 if (status != IXGBE_SUCCESS)
2169 goto fail;
2170
2171 status = ixgbe_get_i2c_ack(hw);
2172 if (status != IXGBE_SUCCESS)
2173 goto fail;
2174
2175 status = ixgbe_clock_out_i2c_byte(hw, byte_offset);
2176 if (status != IXGBE_SUCCESS)
2177 goto fail;
2178
2179 status = ixgbe_get_i2c_ack(hw);
2180 if (status != IXGBE_SUCCESS)
2181 goto fail;
2182
2183 status = ixgbe_clock_out_i2c_byte(hw, data);
2184 if (status != IXGBE_SUCCESS)
2185 goto fail;
2186
2187 status = ixgbe_get_i2c_ack(hw);
2188 if (status != IXGBE_SUCCESS)
2189 goto fail;
2190
2191 ixgbe_i2c_stop(hw);
2192 if (lock)
2193 hw->mac.ops.release_swfw_sync(hw, swfw_mask);
2194 return IXGBE_SUCCESS;
2195
2196 fail:
2197 ixgbe_i2c_bus_clear(hw);
2198 retry++;
2199 if (retry < max_retry)
2200 DEBUGOUT("I2C byte write error - Retrying.\n");
2201 else
2202 DEBUGOUT("I2C byte write error.\n");
2203 } while (retry < max_retry);
2204
2205 if (lock)
2206 hw->mac.ops.release_swfw_sync(hw, swfw_mask);
2207
2208 return status;
2209 }
2210
2211 /**
2212 * ixgbe_write_i2c_byte_generic - Writes 8 bit word over I2C
2213 * @hw: pointer to hardware structure
2214 * @byte_offset: byte offset to write
2215 * @dev_addr: address to write to
2216 * @data: value to write
2217 *
2218 * Performs byte write operation to SFP module's EEPROM over I2C interface at
2219 * a specified device address.
2220 **/
2221 s32 ixgbe_write_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset,
2222 u8 dev_addr, u8 data)
2223 {
2224 return ixgbe_write_i2c_byte_generic_int(hw, byte_offset, dev_addr,
2225 data, TRUE);
2226 }
2227
2228 /**
2229 * ixgbe_write_i2c_byte_generic_unlocked - Writes 8 bit word over I2C
2230 * @hw: pointer to hardware structure
2231 * @byte_offset: byte offset to write
2232 * @dev_addr: address to write to
2233 * @data: value to write
2234 *
2235 * Performs byte write operation to SFP module's EEPROM over I2C interface at
2236 * a specified device address.
2237 **/
2238 s32 ixgbe_write_i2c_byte_generic_unlocked(struct ixgbe_hw *hw, u8 byte_offset,
2239 u8 dev_addr, u8 data)
2240 {
2241 return ixgbe_write_i2c_byte_generic_int(hw, byte_offset, dev_addr,
2242 data, FALSE);
2243 }
2244
2245 /**
2246 * ixgbe_i2c_start - Sets I2C start condition
2247 * @hw: pointer to hardware structure
2248 *
2249 * Sets I2C start condition (High -> Low on SDA while SCL is High)
2250 * Set bit-bang mode on X550 hardware.
2251 **/
2252 static void ixgbe_i2c_start(struct ixgbe_hw *hw)
2253 {
2254 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL_BY_MAC(hw));
2255
2256 DEBUGFUNC("ixgbe_i2c_start");
2257
2258 i2cctl |= IXGBE_I2C_BB_EN_BY_MAC(hw);
2259
2260 /* Start condition must begin with data and clock high */
2261 ixgbe_set_i2c_data(hw, &i2cctl, 1);
2262 ixgbe_raise_i2c_clk(hw, &i2cctl);
2263
2264 /* Setup time for start condition (4.7us) */
2265 usec_delay(IXGBE_I2C_T_SU_STA);
2266
2267 ixgbe_set_i2c_data(hw, &i2cctl, 0);
2268
2269 /* Hold time for start condition (4us) */
2270 usec_delay(IXGBE_I2C_T_HD_STA);
2271
2272 ixgbe_lower_i2c_clk(hw, &i2cctl);
2273
2274 /* Minimum low period of clock is 4.7 us */
2275 usec_delay(IXGBE_I2C_T_LOW);
2276
2277 }
2278
2279 /**
2280 * ixgbe_i2c_stop - Sets I2C stop condition
2281 * @hw: pointer to hardware structure
2282 *
2283 * Sets I2C stop condition (Low -> High on SDA while SCL is High)
2284 * Disables bit-bang mode and negates data output enable on X550
2285 * hardware.
2286 **/
2287 static void ixgbe_i2c_stop(struct ixgbe_hw *hw)
2288 {
2289 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL_BY_MAC(hw));
2290 u32 data_oe_bit = IXGBE_I2C_DATA_OE_N_EN_BY_MAC(hw);
2291 u32 clk_oe_bit = IXGBE_I2C_CLK_OE_N_EN_BY_MAC(hw);
2292 u32 bb_en_bit = IXGBE_I2C_BB_EN_BY_MAC(hw);
2293
2294 DEBUGFUNC("ixgbe_i2c_stop");
2295
2296 /* Stop condition must begin with data low and clock high */
2297 ixgbe_set_i2c_data(hw, &i2cctl, 0);
2298 ixgbe_raise_i2c_clk(hw, &i2cctl);
2299
2300 /* Setup time for stop condition (4us) */
2301 usec_delay(IXGBE_I2C_T_SU_STO);
2302
2303 ixgbe_set_i2c_data(hw, &i2cctl, 1);
2304
2305 /* bus free time between stop and start (4.7us)*/
2306 usec_delay(IXGBE_I2C_T_BUF);
2307
2308 if (bb_en_bit || data_oe_bit || clk_oe_bit) {
2309 i2cctl &= ~bb_en_bit;
2310 i2cctl |= data_oe_bit | clk_oe_bit;
2311 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL_BY_MAC(hw), i2cctl);
2312 IXGBE_WRITE_FLUSH(hw);
2313 }
2314 }
2315
2316 /**
2317 * ixgbe_clock_in_i2c_byte - Clocks in one byte via I2C
2318 * @hw: pointer to hardware structure
2319 * @data: data byte to clock in
2320 *
2321 * Clocks in one byte data via I2C data/clock
2322 **/
2323 static s32 ixgbe_clock_in_i2c_byte(struct ixgbe_hw *hw, u8 *data)
2324 {
2325 s32 i;
2326 bool bit = 0;
2327
2328 DEBUGFUNC("ixgbe_clock_in_i2c_byte");
2329
2330 *data = 0;
2331 for (i = 7; i >= 0; i--) {
2332 ixgbe_clock_in_i2c_bit(hw, &bit);
2333 *data |= bit << i;
2334 }
2335
2336 return IXGBE_SUCCESS;
2337 }
2338
2339 /**
2340 * ixgbe_clock_out_i2c_byte - Clocks out one byte via I2C
2341 * @hw: pointer to hardware structure
2342 * @data: data byte clocked out
2343 *
2344 * Clocks out one byte data via I2C data/clock
2345 **/
2346 static s32 ixgbe_clock_out_i2c_byte(struct ixgbe_hw *hw, u8 data)
2347 {
2348 s32 status = IXGBE_SUCCESS;
2349 s32 i;
2350 u32 i2cctl;
2351 bool bit;
2352
2353 DEBUGFUNC("ixgbe_clock_out_i2c_byte");
2354
2355 for (i = 7; i >= 0; i--) {
2356 bit = (data >> i) & 0x1;
2357 status = ixgbe_clock_out_i2c_bit(hw, bit);
2358
2359 if (status != IXGBE_SUCCESS)
2360 break;
2361 }
2362
2363 /* Release SDA line (set high) */
2364 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL_BY_MAC(hw));
2365 i2cctl |= IXGBE_I2C_DATA_OUT_BY_MAC(hw);
2366 i2cctl |= IXGBE_I2C_DATA_OE_N_EN_BY_MAC(hw);
2367 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL_BY_MAC(hw), i2cctl);
2368 IXGBE_WRITE_FLUSH(hw);
2369
2370 return status;
2371 }
2372
2373 /**
2374 * ixgbe_get_i2c_ack - Polls for I2C ACK
2375 * @hw: pointer to hardware structure
2376 *
2377 * Clocks in/out one bit via I2C data/clock
2378 **/
2379 static s32 ixgbe_get_i2c_ack(struct ixgbe_hw *hw)
2380 {
2381 u32 data_oe_bit = IXGBE_I2C_DATA_OE_N_EN_BY_MAC(hw);
2382 s32 status = IXGBE_SUCCESS;
2383 u32 i = 0;
2384 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL_BY_MAC(hw));
2385 u32 timeout = 10;
2386 bool ack = 1;
2387
2388 DEBUGFUNC("ixgbe_get_i2c_ack");
2389
2390 if (data_oe_bit) {
2391 i2cctl |= IXGBE_I2C_DATA_OUT_BY_MAC(hw);
2392 i2cctl |= data_oe_bit;
2393 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL_BY_MAC(hw), i2cctl);
2394 IXGBE_WRITE_FLUSH(hw);
2395 }
2396 ixgbe_raise_i2c_clk(hw, &i2cctl);
2397
2398 /* Minimum high period of clock is 4us */
2399 usec_delay(IXGBE_I2C_T_HIGH);
2400
2401 /* Poll for ACK. Note that ACK in I2C spec is
2402 * transition from 1 to 0 */
2403 for (i = 0; i < timeout; i++) {
2404 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL_BY_MAC(hw));
2405 ack = ixgbe_get_i2c_data(hw, &i2cctl);
2406
2407 usec_delay(1);
2408 if (!ack)
2409 break;
2410 }
2411
2412 if (ack) {
2413 DEBUGOUT("I2C ack was not received.\n");
2414 status = IXGBE_ERR_I2C;
2415 }
2416
2417 ixgbe_lower_i2c_clk(hw, &i2cctl);
2418
2419 /* Minimum low period of clock is 4.7 us */
2420 usec_delay(IXGBE_I2C_T_LOW);
2421
2422 return status;
2423 }
2424
2425 /**
2426 * ixgbe_clock_in_i2c_bit - Clocks in one bit via I2C data/clock
2427 * @hw: pointer to hardware structure
2428 * @data: read data value
2429 *
2430 * Clocks in one bit via I2C data/clock
2431 **/
2432 static s32 ixgbe_clock_in_i2c_bit(struct ixgbe_hw *hw, bool *data)
2433 {
2434 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL_BY_MAC(hw));
2435 u32 data_oe_bit = IXGBE_I2C_DATA_OE_N_EN_BY_MAC(hw);
2436
2437 DEBUGFUNC("ixgbe_clock_in_i2c_bit");
2438
2439 if (data_oe_bit) {
2440 i2cctl |= IXGBE_I2C_DATA_OUT_BY_MAC(hw);
2441 i2cctl |= data_oe_bit;
2442 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL_BY_MAC(hw), i2cctl);
2443 IXGBE_WRITE_FLUSH(hw);
2444 }
2445 ixgbe_raise_i2c_clk(hw, &i2cctl);
2446
2447 /* Minimum high period of clock is 4us */
2448 usec_delay(IXGBE_I2C_T_HIGH);
2449
2450 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL_BY_MAC(hw));
2451 *data = ixgbe_get_i2c_data(hw, &i2cctl);
2452
2453 ixgbe_lower_i2c_clk(hw, &i2cctl);
2454
2455 /* Minimum low period of clock is 4.7 us */
2456 usec_delay(IXGBE_I2C_T_LOW);
2457
2458 return IXGBE_SUCCESS;
2459 }
2460
2461 /**
2462 * ixgbe_clock_out_i2c_bit - Clocks in/out one bit via I2C data/clock
2463 * @hw: pointer to hardware structure
2464 * @data: data value to write
2465 *
2466 * Clocks out one bit via I2C data/clock
2467 **/
2468 static s32 ixgbe_clock_out_i2c_bit(struct ixgbe_hw *hw, bool data)
2469 {
2470 s32 status;
2471 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL_BY_MAC(hw));
2472
2473 DEBUGFUNC("ixgbe_clock_out_i2c_bit");
2474
2475 status = ixgbe_set_i2c_data(hw, &i2cctl, data);
2476 if (status == IXGBE_SUCCESS) {
2477 ixgbe_raise_i2c_clk(hw, &i2cctl);
2478
2479 /* Minimum high period of clock is 4us */
2480 usec_delay(IXGBE_I2C_T_HIGH);
2481
2482 ixgbe_lower_i2c_clk(hw, &i2cctl);
2483
2484 /* Minimum low period of clock is 4.7 us.
2485 * This also takes care of the data hold time.
2486 */
2487 usec_delay(IXGBE_I2C_T_LOW);
2488 } else {
2489 status = IXGBE_ERR_I2C;
2490 ERROR_REPORT2(IXGBE_ERROR_INVALID_STATE,
2491 "I2C data was not set to %X\n", data);
2492 }
2493
2494 return status;
2495 }
2496
2497 /**
2498 * ixgbe_raise_i2c_clk - Raises the I2C SCL clock
2499 * @hw: pointer to hardware structure
2500 * @i2cctl: Current value of I2CCTL register
2501 *
2502 * Raises the I2C clock line '0'->'1'
2503 * Negates the I2C clock output enable on X550 hardware.
2504 **/
2505 static void ixgbe_raise_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl)
2506 {
2507 u32 clk_oe_bit = IXGBE_I2C_CLK_OE_N_EN_BY_MAC(hw);
2508 u32 i = 0;
2509 u32 timeout = IXGBE_I2C_CLOCK_STRETCHING_TIMEOUT;
2510 u32 i2cctl_r = 0;
2511
2512 DEBUGFUNC("ixgbe_raise_i2c_clk");
2513
2514 if (clk_oe_bit) {
2515 *i2cctl |= clk_oe_bit;
2516 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL_BY_MAC(hw), *i2cctl);
2517 }
2518
2519 for (i = 0; i < timeout; i++) {
2520 *i2cctl |= IXGBE_I2C_CLK_OUT_BY_MAC(hw);
2521
2522 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL_BY_MAC(hw), *i2cctl);
2523 IXGBE_WRITE_FLUSH(hw);
2524 /* SCL rise time (1000ns) */
2525 usec_delay(IXGBE_I2C_T_RISE);
2526
2527 i2cctl_r = IXGBE_READ_REG(hw, IXGBE_I2CCTL_BY_MAC(hw));
2528 if (i2cctl_r & IXGBE_I2C_CLK_IN_BY_MAC(hw))
2529 break;
2530 }
2531 }
2532
2533 /**
2534 * ixgbe_lower_i2c_clk - Lowers the I2C SCL clock
2535 * @hw: pointer to hardware structure
2536 * @i2cctl: Current value of I2CCTL register
2537 *
2538 * Lowers the I2C clock line '1'->'0'
2539 * Asserts the I2C clock output enable on X550 hardware.
2540 **/
2541 static void ixgbe_lower_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl)
2542 {
2543 DEBUGFUNC("ixgbe_lower_i2c_clk");
2544
2545 *i2cctl &= ~(IXGBE_I2C_CLK_OUT_BY_MAC(hw));
2546 *i2cctl &= ~IXGBE_I2C_CLK_OE_N_EN_BY_MAC(hw);
2547
2548 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL_BY_MAC(hw), *i2cctl);
2549 IXGBE_WRITE_FLUSH(hw);
2550
2551 /* SCL fall time (300ns) */
2552 usec_delay(IXGBE_I2C_T_FALL);
2553 }
2554
2555 /**
2556 * ixgbe_set_i2c_data - Sets the I2C data bit
2557 * @hw: pointer to hardware structure
2558 * @i2cctl: Current value of I2CCTL register
2559 * @data: I2C data value (0 or 1) to set
2560 *
2561 * Sets the I2C data bit
2562 * Asserts the I2C data output enable on X550 hardware.
2563 **/
2564 static s32 ixgbe_set_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl, bool data)
2565 {
2566 u32 data_oe_bit = IXGBE_I2C_DATA_OE_N_EN_BY_MAC(hw);
2567 s32 status = IXGBE_SUCCESS;
2568
2569 DEBUGFUNC("ixgbe_set_i2c_data");
2570
2571 if (data)
2572 *i2cctl |= IXGBE_I2C_DATA_OUT_BY_MAC(hw);
2573 else
2574 *i2cctl &= ~(IXGBE_I2C_DATA_OUT_BY_MAC(hw));
2575 *i2cctl &= ~data_oe_bit;
2576
2577 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL_BY_MAC(hw), *i2cctl);
2578 IXGBE_WRITE_FLUSH(hw);
2579
2580 /* Data rise/fall (1000ns/300ns) and set-up time (250ns) */
2581 usec_delay(IXGBE_I2C_T_RISE + IXGBE_I2C_T_FALL + IXGBE_I2C_T_SU_DATA);
2582
2583 if (!data) /* Can't verify data in this case */
2584 return IXGBE_SUCCESS;
2585 if (data_oe_bit) {
2586 *i2cctl |= data_oe_bit;
2587 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL_BY_MAC(hw), *i2cctl);
2588 IXGBE_WRITE_FLUSH(hw);
2589 }
2590
2591 /* Verify data was set correctly */
2592 *i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL_BY_MAC(hw));
2593 if (data != ixgbe_get_i2c_data(hw, i2cctl)) {
2594 status = IXGBE_ERR_I2C;
2595 ERROR_REPORT2(IXGBE_ERROR_INVALID_STATE,
2596 "Error - I2C data was not set to %X.\n",
2597 data);
2598 }
2599
2600 return status;
2601 }
2602
2603 /**
2604 * ixgbe_get_i2c_data - Reads the I2C SDA data bit
2605 * @hw: pointer to hardware structure
2606 * @i2cctl: Current value of I2CCTL register
2607 *
2608 * Returns the I2C data bit value
2609 * Negates the I2C data output enable on X550 hardware.
2610 **/
2611 static bool ixgbe_get_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl)
2612 {
2613 u32 data_oe_bit = IXGBE_I2C_DATA_OE_N_EN_BY_MAC(hw);
2614 bool data;
2615 UNREFERENCED_1PARAMETER(hw);
2616
2617 DEBUGFUNC("ixgbe_get_i2c_data");
2618
2619 if (data_oe_bit) {
2620 *i2cctl |= data_oe_bit;
2621 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL_BY_MAC(hw), *i2cctl);
2622 IXGBE_WRITE_FLUSH(hw);
2623 usec_delay(IXGBE_I2C_T_FALL);
2624 }
2625
2626 if (*i2cctl & IXGBE_I2C_DATA_IN_BY_MAC(hw))
2627 data = 1;
2628 else
2629 data = 0;
2630
2631 return data;
2632 }
2633
2634 /**
2635 * ixgbe_i2c_bus_clear - Clears the I2C bus
2636 * @hw: pointer to hardware structure
2637 *
2638 * Clears the I2C bus by sending nine clock pulses.
2639 * Used when data line is stuck low.
2640 **/
2641 void ixgbe_i2c_bus_clear(struct ixgbe_hw *hw)
2642 {
2643 u32 i2cctl;
2644 u32 i;
2645
2646 DEBUGFUNC("ixgbe_i2c_bus_clear");
2647
2648 ixgbe_i2c_start(hw);
2649 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL_BY_MAC(hw));
2650
2651 ixgbe_set_i2c_data(hw, &i2cctl, 1);
2652
2653 for (i = 0; i < 9; i++) {
2654 ixgbe_raise_i2c_clk(hw, &i2cctl);
2655
2656 /* Min high period of clock is 4us */
2657 usec_delay(IXGBE_I2C_T_HIGH);
2658
2659 ixgbe_lower_i2c_clk(hw, &i2cctl);
2660
2661 /* Min low period of clock is 4.7us*/
2662 usec_delay(IXGBE_I2C_T_LOW);
2663 }
2664
2665 ixgbe_i2c_start(hw);
2666
2667 /* Put the i2c bus back to default state */
2668 ixgbe_i2c_stop(hw);
2669 }
2670
2671 /**
2672 * ixgbe_tn_check_overtemp - Checks if an overtemp occurred.
2673 * @hw: pointer to hardware structure
2674 *
2675 * Checks if the LASI temp alarm status was triggered due to overtemp
2676 **/
2677 s32 ixgbe_tn_check_overtemp(struct ixgbe_hw *hw)
2678 {
2679 s32 status = IXGBE_SUCCESS;
2680 u16 phy_data = 0;
2681
2682 DEBUGFUNC("ixgbe_tn_check_overtemp");
2683
2684 if (hw->device_id != IXGBE_DEV_ID_82599_T3_LOM)
2685 goto out;
2686
2687 /* Check that the LASI temp alarm status was triggered */
2688 hw->phy.ops.read_reg(hw, IXGBE_TN_LASI_STATUS_REG,
2689 IXGBE_MDIO_PMA_PMD_DEV_TYPE, &phy_data);
2690
2691 if (!(phy_data & IXGBE_TN_LASI_STATUS_TEMP_ALARM))
2692 goto out;
2693
2694 status = IXGBE_ERR_OVERTEMP;
2695 ERROR_REPORT1(IXGBE_ERROR_CAUTION, "Device over temperature");
2696 out:
2697 return status;
2698 }
2699
2700 /**
2701 * ixgbe_set_copper_phy_power - Control power for copper phy
2702 * @hw: pointer to hardware structure
2703 * @on: TRUE for on, FALSE for off
2704 */
2705 s32 ixgbe_set_copper_phy_power(struct ixgbe_hw *hw, bool on)
2706 {
2707 u32 status;
2708 u16 reg;
2709
2710 if (!on && ixgbe_mng_present(hw))
2711 return 0;
2712
2713 status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_VENDOR_SPECIFIC_1_CONTROL,
2714 IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE,
2715 ®);
2716 if (status)
2717 return status;
2718
2719 if (on) {
2720 reg &= ~IXGBE_MDIO_PHY_SET_LOW_POWER_MODE;
2721 } else {
2722 if (ixgbe_check_reset_blocked(hw))
2723 return 0;
2724 reg |= IXGBE_MDIO_PHY_SET_LOW_POWER_MODE;
2725 }
2726
2727 status = hw->phy.ops.write_reg(hw, IXGBE_MDIO_VENDOR_SPECIFIC_1_CONTROL,
2728 IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE,
2729 reg);
2730 return status;
2731 }
2732