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