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