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