]> git.karo-electronics.de Git - karo-tx-linux.git/blob - drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c
ef808bcec2768b5b5810ba9c39906a2fde69cf97
[karo-tx-linux.git] / drivers / net / ethernet / intel / ixgbe / ixgbe_82599.c
1 /*******************************************************************************
2
3   Intel 10 Gigabit PCI Express Linux driver
4   Copyright(c) 1999 - 2014 Intel Corporation.
5
6   This program is free software; you can redistribute it and/or modify it
7   under the terms and conditions of the GNU General Public License,
8   version 2, as published by the Free Software Foundation.
9
10   This program is distributed in the hope it will be useful, but WITHOUT
11   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
13   more details.
14
15   You should have received a copy of the GNU General Public License along with
16   this program; if not, write to the Free Software Foundation, Inc.,
17   51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
18
19   The full GNU General Public License is included in this distribution in
20   the file called "COPYING".
21
22   Contact Information:
23   Linux NICS <linux.nics@intel.com>
24   e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
25   Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
26
27 *******************************************************************************/
28
29 #include <linux/pci.h>
30 #include <linux/delay.h>
31 #include <linux/sched.h>
32
33 #include "ixgbe.h"
34 #include "ixgbe_phy.h"
35 #include "ixgbe_mbx.h"
36
37 #define IXGBE_82599_MAX_TX_QUEUES 128
38 #define IXGBE_82599_MAX_RX_QUEUES 128
39 #define IXGBE_82599_RAR_ENTRIES   128
40 #define IXGBE_82599_MC_TBL_SIZE   128
41 #define IXGBE_82599_VFT_TBL_SIZE  128
42 #define IXGBE_82599_RX_PB_SIZE    512
43
44 static void ixgbe_disable_tx_laser_multispeed_fiber(struct ixgbe_hw *hw);
45 static void ixgbe_enable_tx_laser_multispeed_fiber(struct ixgbe_hw *hw);
46 static void ixgbe_flap_tx_laser_multispeed_fiber(struct ixgbe_hw *hw);
47 static s32 ixgbe_setup_mac_link_multispeed_fiber(struct ixgbe_hw *hw,
48                                                  ixgbe_link_speed speed,
49                                                  bool autoneg_wait_to_complete);
50 static s32 ixgbe_setup_mac_link_smartspeed(struct ixgbe_hw *hw,
51                                            ixgbe_link_speed speed,
52                                            bool autoneg_wait_to_complete);
53 static void ixgbe_stop_mac_link_on_d3_82599(struct ixgbe_hw *hw);
54 static s32 ixgbe_start_mac_link_82599(struct ixgbe_hw *hw,
55                                       bool autoneg_wait_to_complete);
56 static s32 ixgbe_setup_mac_link_82599(struct ixgbe_hw *hw,
57                                ixgbe_link_speed speed,
58                                bool autoneg_wait_to_complete);
59 static s32 ixgbe_setup_copper_link_82599(struct ixgbe_hw *hw,
60                                          ixgbe_link_speed speed,
61                                          bool autoneg_wait_to_complete);
62 static s32 ixgbe_verify_fw_version_82599(struct ixgbe_hw *hw);
63 static s32 ixgbe_read_i2c_byte_82599(struct ixgbe_hw *hw, u8 byte_offset,
64                                      u8 dev_addr, u8 *data);
65 static s32 ixgbe_write_i2c_byte_82599(struct ixgbe_hw *hw, u8 byte_offset,
66                                       u8 dev_addr, u8 data);
67 static s32 ixgbe_reset_pipeline_82599(struct ixgbe_hw *hw);
68 static bool ixgbe_verify_lesm_fw_enabled_82599(struct ixgbe_hw *hw);
69
70 static bool ixgbe_mng_enabled(struct ixgbe_hw *hw)
71 {
72         u32 fwsm, manc, factps;
73
74         fwsm = IXGBE_READ_REG(hw, IXGBE_FWSM);
75         if ((fwsm & IXGBE_FWSM_MODE_MASK) != IXGBE_FWSM_FW_MODE_PT)
76                 return false;
77
78         manc = IXGBE_READ_REG(hw, IXGBE_MANC);
79         if (!(manc & IXGBE_MANC_RCV_TCO_EN))
80                 return false;
81
82         factps = IXGBE_READ_REG(hw, IXGBE_FACTPS);
83         if (factps & IXGBE_FACTPS_MNGCG)
84                 return false;
85
86         return true;
87 }
88
89 static void ixgbe_init_mac_link_ops_82599(struct ixgbe_hw *hw)
90 {
91         struct ixgbe_mac_info *mac = &hw->mac;
92
93         /* enable the laser control functions for SFP+ fiber
94          * and MNG not enabled
95          */
96         if ((mac->ops.get_media_type(hw) == ixgbe_media_type_fiber) &&
97             !hw->mng_fw_enabled) {
98                 mac->ops.disable_tx_laser =
99                                        &ixgbe_disable_tx_laser_multispeed_fiber;
100                 mac->ops.enable_tx_laser =
101                                         &ixgbe_enable_tx_laser_multispeed_fiber;
102                 mac->ops.flap_tx_laser = &ixgbe_flap_tx_laser_multispeed_fiber;
103         } else {
104                 mac->ops.disable_tx_laser = NULL;
105                 mac->ops.enable_tx_laser = NULL;
106                 mac->ops.flap_tx_laser = NULL;
107         }
108
109         if (hw->phy.multispeed_fiber) {
110                 /* Set up dual speed SFP+ support */
111                 mac->ops.setup_link = &ixgbe_setup_mac_link_multispeed_fiber;
112         } else {
113                 if ((mac->ops.get_media_type(hw) ==
114                      ixgbe_media_type_backplane) &&
115                     (hw->phy.smart_speed == ixgbe_smart_speed_auto ||
116                      hw->phy.smart_speed == ixgbe_smart_speed_on) &&
117                      !ixgbe_verify_lesm_fw_enabled_82599(hw))
118                         mac->ops.setup_link = &ixgbe_setup_mac_link_smartspeed;
119                 else
120                         mac->ops.setup_link = &ixgbe_setup_mac_link_82599;
121         }
122 }
123
124 static s32 ixgbe_setup_sfp_modules_82599(struct ixgbe_hw *hw)
125 {
126         s32 ret_val = 0;
127         u16 list_offset, data_offset, data_value;
128
129         if (hw->phy.sfp_type != ixgbe_sfp_type_unknown) {
130                 ixgbe_init_mac_link_ops_82599(hw);
131
132                 hw->phy.ops.reset = NULL;
133
134                 ret_val = ixgbe_get_sfp_init_sequence_offsets(hw, &list_offset,
135                                                               &data_offset);
136                 if (ret_val != 0)
137                         goto setup_sfp_out;
138
139                 /* PHY config will finish before releasing the semaphore */
140                 ret_val = hw->mac.ops.acquire_swfw_sync(hw,
141                                                         IXGBE_GSSR_MAC_CSR_SM);
142                 if (ret_val != 0) {
143                         ret_val = IXGBE_ERR_SWFW_SYNC;
144                         goto setup_sfp_out;
145                 }
146
147                 if (hw->eeprom.ops.read(hw, ++data_offset, &data_value))
148                         goto setup_sfp_err;
149                 while (data_value != 0xffff) {
150                         IXGBE_WRITE_REG(hw, IXGBE_CORECTL, data_value);
151                         IXGBE_WRITE_FLUSH(hw);
152                         if (hw->eeprom.ops.read(hw, ++data_offset, &data_value))
153                                 goto setup_sfp_err;
154                 }
155
156                 /* Release the semaphore */
157                 hw->mac.ops.release_swfw_sync(hw, IXGBE_GSSR_MAC_CSR_SM);
158                 /*
159                  * Delay obtaining semaphore again to allow FW access,
160                  * semaphore_delay is in ms usleep_range needs us.
161                  */
162                 usleep_range(hw->eeprom.semaphore_delay * 1000,
163                              hw->eeprom.semaphore_delay * 2000);
164
165                 /* Restart DSP and set SFI mode */
166                 ret_val = hw->mac.ops.prot_autoc_write(hw,
167                         hw->mac.orig_autoc | IXGBE_AUTOC_LMS_10G_SERIAL,
168                         false);
169
170                 if (ret_val) {
171                         hw_dbg(hw, " sfp module setup not complete\n");
172                         ret_val = IXGBE_ERR_SFP_SETUP_NOT_COMPLETE;
173                         goto setup_sfp_out;
174                 }
175         }
176
177 setup_sfp_out:
178         return ret_val;
179
180 setup_sfp_err:
181         /* Release the semaphore */
182         hw->mac.ops.release_swfw_sync(hw, IXGBE_GSSR_MAC_CSR_SM);
183         /* Delay obtaining semaphore again to allow FW access,
184          * semaphore_delay is in ms usleep_range needs us.
185          */
186         usleep_range(hw->eeprom.semaphore_delay * 1000,
187                      hw->eeprom.semaphore_delay * 2000);
188         hw_err(hw, "eeprom read at offset %d failed\n", data_offset);
189         return IXGBE_ERR_SFP_SETUP_NOT_COMPLETE;
190 }
191
192 /**
193  *  prot_autoc_read_82599 - Hides MAC differences needed for AUTOC read
194  *  @hw: pointer to hardware structure
195  *  @locked: Return the if we locked for this read.
196  *  @reg_val: Value we read from AUTOC
197  *
198  *  For this part (82599) we need to wrap read-modify-writes with a possible
199  *  FW/SW lock.  It is assumed this lock will be freed with the next
200  *  prot_autoc_write_82599().  Note, that locked can only be true in cases
201  *  where this function doesn't return an error.
202  **/
203 static s32 prot_autoc_read_82599(struct ixgbe_hw *hw, bool *locked,
204                                  u32 *reg_val)
205 {
206         s32 ret_val;
207
208         *locked = false;
209         /* If LESM is on then we need to hold the SW/FW semaphore. */
210         if (ixgbe_verify_lesm_fw_enabled_82599(hw)) {
211                 ret_val = hw->mac.ops.acquire_swfw_sync(hw,
212                                         IXGBE_GSSR_MAC_CSR_SM);
213                 if (ret_val)
214                         return IXGBE_ERR_SWFW_SYNC;
215
216                 *locked = true;
217         }
218
219         *reg_val = IXGBE_READ_REG(hw, IXGBE_AUTOC);
220         return 0;
221 }
222
223 /**
224  * prot_autoc_write_82599 - Hides MAC differences needed for AUTOC write
225  * @hw: pointer to hardware structure
226  * @reg_val: value to write to AUTOC
227  * @locked: bool to indicate whether the SW/FW lock was already taken by
228  *           previous proc_autoc_read_82599.
229  *
230  * This part (82599) may need to hold a the SW/FW lock around all writes to
231  * AUTOC. Likewise after a write we need to do a pipeline reset.
232  **/
233 static s32 prot_autoc_write_82599(struct ixgbe_hw *hw, u32 autoc, bool locked)
234 {
235         s32 ret_val = 0;
236
237         /* Blocked by MNG FW so bail */
238         if (ixgbe_check_reset_blocked(hw))
239                 goto out;
240
241         /* We only need to get the lock if:
242          *  - We didn't do it already (in the read part of a read-modify-write)
243          *  - LESM is enabled.
244          */
245         if (!locked && ixgbe_verify_lesm_fw_enabled_82599(hw)) {
246                 ret_val = hw->mac.ops.acquire_swfw_sync(hw,
247                                         IXGBE_GSSR_MAC_CSR_SM);
248                 if (ret_val)
249                         return IXGBE_ERR_SWFW_SYNC;
250
251                 locked = true;
252         }
253
254         IXGBE_WRITE_REG(hw, IXGBE_AUTOC, autoc);
255         ret_val = ixgbe_reset_pipeline_82599(hw);
256
257 out:
258         /* Free the SW/FW semaphore as we either grabbed it here or
259          * already had it when this function was called.
260          */
261         if (locked)
262                 hw->mac.ops.release_swfw_sync(hw, IXGBE_GSSR_MAC_CSR_SM);
263
264         return ret_val;
265 }
266
267 static s32 ixgbe_get_invariants_82599(struct ixgbe_hw *hw)
268 {
269         struct ixgbe_mac_info *mac = &hw->mac;
270
271         ixgbe_init_mac_link_ops_82599(hw);
272
273         mac->mcft_size = IXGBE_82599_MC_TBL_SIZE;
274         mac->vft_size = IXGBE_82599_VFT_TBL_SIZE;
275         mac->num_rar_entries = IXGBE_82599_RAR_ENTRIES;
276         mac->rx_pb_size = IXGBE_82599_RX_PB_SIZE;
277         mac->max_rx_queues = IXGBE_82599_MAX_RX_QUEUES;
278         mac->max_tx_queues = IXGBE_82599_MAX_TX_QUEUES;
279         mac->max_msix_vectors = ixgbe_get_pcie_msix_count_generic(hw);
280
281         return 0;
282 }
283
284 /**
285  *  ixgbe_init_phy_ops_82599 - PHY/SFP specific init
286  *  @hw: pointer to hardware structure
287  *
288  *  Initialize any function pointers that were not able to be
289  *  set during get_invariants because the PHY/SFP type was
290  *  not known.  Perform the SFP init if necessary.
291  *
292  **/
293 static s32 ixgbe_init_phy_ops_82599(struct ixgbe_hw *hw)
294 {
295         struct ixgbe_mac_info *mac = &hw->mac;
296         struct ixgbe_phy_info *phy = &hw->phy;
297         s32 ret_val = 0;
298         u32 esdp;
299
300         if (hw->device_id == IXGBE_DEV_ID_82599_QSFP_SF_QP) {
301                 /* Store flag indicating I2C bus access control unit. */
302                 hw->phy.qsfp_shared_i2c_bus = true;
303
304                 /* Initialize access to QSFP+ I2C bus */
305                 esdp = IXGBE_READ_REG(hw, IXGBE_ESDP);
306                 esdp |= IXGBE_ESDP_SDP0_DIR;
307                 esdp &= ~IXGBE_ESDP_SDP1_DIR;
308                 esdp &= ~IXGBE_ESDP_SDP0;
309                 esdp &= ~IXGBE_ESDP_SDP0_NATIVE;
310                 esdp &= ~IXGBE_ESDP_SDP1_NATIVE;
311                 IXGBE_WRITE_REG(hw, IXGBE_ESDP, esdp);
312                 IXGBE_WRITE_FLUSH(hw);
313
314                 phy->ops.read_i2c_byte = &ixgbe_read_i2c_byte_82599;
315                 phy->ops.write_i2c_byte = &ixgbe_write_i2c_byte_82599;
316         }
317
318         /* Identify the PHY or SFP module */
319         ret_val = phy->ops.identify(hw);
320
321         /* Setup function pointers based on detected SFP module and speeds */
322         ixgbe_init_mac_link_ops_82599(hw);
323
324         /* If copper media, overwrite with copper function pointers */
325         if (mac->ops.get_media_type(hw) == ixgbe_media_type_copper) {
326                 mac->ops.setup_link = &ixgbe_setup_copper_link_82599;
327                 mac->ops.get_link_capabilities =
328                         &ixgbe_get_copper_link_capabilities_generic;
329         }
330
331         /* Set necessary function pointers based on phy type */
332         switch (hw->phy.type) {
333         case ixgbe_phy_tn:
334                 phy->ops.check_link = &ixgbe_check_phy_link_tnx;
335                 phy->ops.setup_link = &ixgbe_setup_phy_link_tnx;
336                 phy->ops.get_firmware_version =
337                              &ixgbe_get_phy_firmware_version_tnx;
338                 break;
339         default:
340                 break;
341         }
342
343         return ret_val;
344 }
345
346 /**
347  *  ixgbe_get_link_capabilities_82599 - Determines link capabilities
348  *  @hw: pointer to hardware structure
349  *  @speed: pointer to link speed
350  *  @autoneg: true when autoneg or autotry is enabled
351  *
352  *  Determines the link capabilities by reading the AUTOC register.
353  **/
354 static s32 ixgbe_get_link_capabilities_82599(struct ixgbe_hw *hw,
355                                              ixgbe_link_speed *speed,
356                                              bool *autoneg)
357 {
358         s32 status = 0;
359         u32 autoc = 0;
360
361         /* Determine 1G link capabilities off of SFP+ type */
362         if (hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core0 ||
363             hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core1 ||
364             hw->phy.sfp_type == ixgbe_sfp_type_1g_lx_core0 ||
365             hw->phy.sfp_type == ixgbe_sfp_type_1g_lx_core1 ||
366             hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core0 ||
367             hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core1) {
368                 *speed = IXGBE_LINK_SPEED_1GB_FULL;
369                 *autoneg = true;
370                 goto out;
371         }
372
373         /*
374          * Determine link capabilities based on the stored value of AUTOC,
375          * which represents EEPROM defaults.  If AUTOC value has not been
376          * stored, use the current register value.
377          */
378         if (hw->mac.orig_link_settings_stored)
379                 autoc = hw->mac.orig_autoc;
380         else
381                 autoc = IXGBE_READ_REG(hw, IXGBE_AUTOC);
382
383         switch (autoc & IXGBE_AUTOC_LMS_MASK) {
384         case IXGBE_AUTOC_LMS_1G_LINK_NO_AN:
385                 *speed = IXGBE_LINK_SPEED_1GB_FULL;
386                 *autoneg = false;
387                 break;
388
389         case IXGBE_AUTOC_LMS_10G_LINK_NO_AN:
390                 *speed = IXGBE_LINK_SPEED_10GB_FULL;
391                 *autoneg = false;
392                 break;
393
394         case IXGBE_AUTOC_LMS_1G_AN:
395                 *speed = IXGBE_LINK_SPEED_1GB_FULL;
396                 *autoneg = true;
397                 break;
398
399         case IXGBE_AUTOC_LMS_10G_SERIAL:
400                 *speed = IXGBE_LINK_SPEED_10GB_FULL;
401                 *autoneg = false;
402                 break;
403
404         case IXGBE_AUTOC_LMS_KX4_KX_KR:
405         case IXGBE_AUTOC_LMS_KX4_KX_KR_1G_AN:
406                 *speed = IXGBE_LINK_SPEED_UNKNOWN;
407                 if (autoc & IXGBE_AUTOC_KR_SUPP)
408                         *speed |= IXGBE_LINK_SPEED_10GB_FULL;
409                 if (autoc & IXGBE_AUTOC_KX4_SUPP)
410                         *speed |= IXGBE_LINK_SPEED_10GB_FULL;
411                 if (autoc & IXGBE_AUTOC_KX_SUPP)
412                         *speed |= IXGBE_LINK_SPEED_1GB_FULL;
413                 *autoneg = true;
414                 break;
415
416         case IXGBE_AUTOC_LMS_KX4_KX_KR_SGMII:
417                 *speed = IXGBE_LINK_SPEED_100_FULL;
418                 if (autoc & IXGBE_AUTOC_KR_SUPP)
419                         *speed |= IXGBE_LINK_SPEED_10GB_FULL;
420                 if (autoc & IXGBE_AUTOC_KX4_SUPP)
421                         *speed |= IXGBE_LINK_SPEED_10GB_FULL;
422                 if (autoc & IXGBE_AUTOC_KX_SUPP)
423                         *speed |= IXGBE_LINK_SPEED_1GB_FULL;
424                 *autoneg = true;
425                 break;
426
427         case IXGBE_AUTOC_LMS_SGMII_1G_100M:
428                 *speed = IXGBE_LINK_SPEED_1GB_FULL | IXGBE_LINK_SPEED_100_FULL;
429                 *autoneg = false;
430                 break;
431
432         default:
433                 status = IXGBE_ERR_LINK_SETUP;
434                 goto out;
435                 break;
436         }
437
438         if (hw->phy.multispeed_fiber) {
439                 *speed |= IXGBE_LINK_SPEED_10GB_FULL |
440                           IXGBE_LINK_SPEED_1GB_FULL;
441
442                 /* QSFP must not enable auto-negotiation */
443                 if (hw->phy.media_type == ixgbe_media_type_fiber_qsfp)
444                         *autoneg = false;
445                 else
446                         *autoneg = true;
447         }
448
449 out:
450         return status;
451 }
452
453 /**
454  *  ixgbe_get_media_type_82599 - Get media type
455  *  @hw: pointer to hardware structure
456  *
457  *  Returns the media type (fiber, copper, backplane)
458  **/
459 static enum ixgbe_media_type ixgbe_get_media_type_82599(struct ixgbe_hw *hw)
460 {
461         enum ixgbe_media_type media_type;
462
463         /* Detect if there is a copper PHY attached. */
464         switch (hw->phy.type) {
465         case ixgbe_phy_cu_unknown:
466         case ixgbe_phy_tn:
467                 media_type = ixgbe_media_type_copper;
468                 goto out;
469         default:
470                 break;
471         }
472
473         switch (hw->device_id) {
474         case IXGBE_DEV_ID_82599_KX4:
475         case IXGBE_DEV_ID_82599_KX4_MEZZ:
476         case IXGBE_DEV_ID_82599_COMBO_BACKPLANE:
477         case IXGBE_DEV_ID_82599_KR:
478         case IXGBE_DEV_ID_82599_BACKPLANE_FCOE:
479         case IXGBE_DEV_ID_82599_XAUI_LOM:
480                 /* Default device ID is mezzanine card KX/KX4 */
481                 media_type = ixgbe_media_type_backplane;
482                 break;
483         case IXGBE_DEV_ID_82599_SFP:
484         case IXGBE_DEV_ID_82599_SFP_FCOE:
485         case IXGBE_DEV_ID_82599_SFP_EM:
486         case IXGBE_DEV_ID_82599_SFP_SF2:
487         case IXGBE_DEV_ID_82599_SFP_SF_QP:
488         case IXGBE_DEV_ID_82599EN_SFP:
489                 media_type = ixgbe_media_type_fiber;
490                 break;
491         case IXGBE_DEV_ID_82599_CX4:
492                 media_type = ixgbe_media_type_cx4;
493                 break;
494         case IXGBE_DEV_ID_82599_T3_LOM:
495                 media_type = ixgbe_media_type_copper;
496                 break;
497         case IXGBE_DEV_ID_82599_LS:
498                 media_type = ixgbe_media_type_fiber_lco;
499                 break;
500         case IXGBE_DEV_ID_82599_QSFP_SF_QP:
501                 media_type = ixgbe_media_type_fiber_qsfp;
502                 break;
503         default:
504                 media_type = ixgbe_media_type_unknown;
505                 break;
506         }
507 out:
508         return media_type;
509 }
510
511 /**
512  * ixgbe_stop_mac_link_on_d3_82599 - Disables link on D3
513  * @hw: pointer to hardware structure
514  *
515  * Disables link, should be called during D3 power down sequence.
516  *
517  **/
518 static void ixgbe_stop_mac_link_on_d3_82599(struct ixgbe_hw *hw)
519 {
520         u32 autoc2_reg, fwsm;
521         u16 ee_ctrl_2 = 0;
522
523         hw->eeprom.ops.read(hw, IXGBE_EEPROM_CTRL_2, &ee_ctrl_2);
524
525         /* Check to see if MNG FW could be enabled */
526         fwsm = IXGBE_READ_REG(hw, IXGBE_FWSM);
527
528         if (((fwsm & IXGBE_FWSM_MODE_MASK) != IXGBE_FWSM_FW_MODE_PT) &&
529             !hw->wol_enabled &&
530             ee_ctrl_2 & IXGBE_EEPROM_CCD_BIT) {
531                 autoc2_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC2);
532                 autoc2_reg |= IXGBE_AUTOC2_LINK_DISABLE_ON_D3_MASK;
533                 IXGBE_WRITE_REG(hw, IXGBE_AUTOC2, autoc2_reg);
534         }
535 }
536
537 /**
538  *  ixgbe_start_mac_link_82599 - Setup MAC link settings
539  *  @hw: pointer to hardware structure
540  *  @autoneg_wait_to_complete: true when waiting for completion is needed
541  *
542  *  Configures link settings based on values in the ixgbe_hw struct.
543  *  Restarts the link.  Performs autonegotiation if needed.
544  **/
545 static s32 ixgbe_start_mac_link_82599(struct ixgbe_hw *hw,
546                                bool autoneg_wait_to_complete)
547 {
548         u32 autoc_reg;
549         u32 links_reg;
550         u32 i;
551         s32 status = 0;
552         bool got_lock = false;
553
554         if (ixgbe_verify_lesm_fw_enabled_82599(hw)) {
555                 status = hw->mac.ops.acquire_swfw_sync(hw,
556                                                 IXGBE_GSSR_MAC_CSR_SM);
557                 if (status)
558                         goto out;
559
560                 got_lock = true;
561         }
562
563         /* Restart link */
564         ixgbe_reset_pipeline_82599(hw);
565
566         if (got_lock)
567                 hw->mac.ops.release_swfw_sync(hw, IXGBE_GSSR_MAC_CSR_SM);
568
569         /* Only poll for autoneg to complete if specified to do so */
570         if (autoneg_wait_to_complete) {
571                 autoc_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC);
572                 if ((autoc_reg & IXGBE_AUTOC_LMS_MASK) ==
573                      IXGBE_AUTOC_LMS_KX4_KX_KR ||
574                     (autoc_reg & IXGBE_AUTOC_LMS_MASK) ==
575                      IXGBE_AUTOC_LMS_KX4_KX_KR_1G_AN ||
576                     (autoc_reg & IXGBE_AUTOC_LMS_MASK) ==
577                      IXGBE_AUTOC_LMS_KX4_KX_KR_SGMII) {
578                         links_reg = 0; /* Just in case Autoneg time = 0 */
579                         for (i = 0; i < IXGBE_AUTO_NEG_TIME; i++) {
580                                 links_reg = IXGBE_READ_REG(hw, IXGBE_LINKS);
581                                 if (links_reg & IXGBE_LINKS_KX_AN_COMP)
582                                         break;
583                                 msleep(100);
584                         }
585                         if (!(links_reg & IXGBE_LINKS_KX_AN_COMP)) {
586                                 status = IXGBE_ERR_AUTONEG_NOT_COMPLETE;
587                                 hw_dbg(hw, "Autoneg did not complete.\n");
588                         }
589                 }
590         }
591
592         /* Add delay to filter out noises during initial link setup */
593         msleep(50);
594
595 out:
596         return status;
597 }
598
599 /**
600  *  ixgbe_disable_tx_laser_multispeed_fiber - Disable Tx laser
601  *  @hw: pointer to hardware structure
602  *
603  *  The base drivers may require better control over SFP+ module
604  *  PHY states.  This includes selectively shutting down the Tx
605  *  laser on the PHY, effectively halting physical link.
606  **/
607 static void ixgbe_disable_tx_laser_multispeed_fiber(struct ixgbe_hw *hw)
608 {
609         u32 esdp_reg = IXGBE_READ_REG(hw, IXGBE_ESDP);
610
611         /* Blocked by MNG FW so bail */
612         if (ixgbe_check_reset_blocked(hw))
613                 return;
614
615         /* Disable tx laser; allow 100us to go dark per spec */
616         esdp_reg |= IXGBE_ESDP_SDP3;
617         IXGBE_WRITE_REG(hw, IXGBE_ESDP, esdp_reg);
618         IXGBE_WRITE_FLUSH(hw);
619         udelay(100);
620 }
621
622 /**
623  *  ixgbe_enable_tx_laser_multispeed_fiber - Enable Tx laser
624  *  @hw: pointer to hardware structure
625  *
626  *  The base drivers may require better control over SFP+ module
627  *  PHY states.  This includes selectively turning on the Tx
628  *  laser on the PHY, effectively starting physical link.
629  **/
630 static void ixgbe_enable_tx_laser_multispeed_fiber(struct ixgbe_hw *hw)
631 {
632         u32 esdp_reg = IXGBE_READ_REG(hw, IXGBE_ESDP);
633
634         /* Enable tx laser; allow 100ms to light up */
635         esdp_reg &= ~IXGBE_ESDP_SDP3;
636         IXGBE_WRITE_REG(hw, IXGBE_ESDP, esdp_reg);
637         IXGBE_WRITE_FLUSH(hw);
638         msleep(100);
639 }
640
641 /**
642  *  ixgbe_flap_tx_laser_multispeed_fiber - Flap Tx laser
643  *  @hw: pointer to hardware structure
644  *
645  *  When the driver changes the link speeds that it can support,
646  *  it sets autotry_restart to true to indicate that we need to
647  *  initiate a new autotry session with the link partner.  To do
648  *  so, we set the speed then disable and re-enable the tx laser, to
649  *  alert the link partner that it also needs to restart autotry on its
650  *  end.  This is consistent with true clause 37 autoneg, which also
651  *  involves a loss of signal.
652  **/
653 static void ixgbe_flap_tx_laser_multispeed_fiber(struct ixgbe_hw *hw)
654 {
655         /* Blocked by MNG FW so bail */
656         if (ixgbe_check_reset_blocked(hw))
657                 return;
658
659         if (hw->mac.autotry_restart) {
660                 ixgbe_disable_tx_laser_multispeed_fiber(hw);
661                 ixgbe_enable_tx_laser_multispeed_fiber(hw);
662                 hw->mac.autotry_restart = false;
663         }
664 }
665
666 /**
667  *  ixgbe_set_fiber_fixed_speed - Set module link speed for fixed fiber
668  *  @hw: pointer to hardware structure
669  *  @speed: link speed to set
670  *
671  *  We set the module speed differently for fixed fiber.  For other
672  *  multi-speed devices we don't have an error value so here if we
673  *  detect an error we just log it and exit.
674  */
675 static void ixgbe_set_fiber_fixed_speed(struct ixgbe_hw *hw,
676                                         ixgbe_link_speed speed)
677 {
678         s32 status;
679         u8 rs, eeprom_data;
680
681         switch (speed) {
682         case IXGBE_LINK_SPEED_10GB_FULL:
683                 /* one bit mask same as setting on */
684                 rs = IXGBE_SFF_SOFT_RS_SELECT_10G;
685                 break;
686         case IXGBE_LINK_SPEED_1GB_FULL:
687                 rs = IXGBE_SFF_SOFT_RS_SELECT_1G;
688                 break;
689         default:
690                 hw_dbg(hw, "Invalid fixed module speed\n");
691                 return;
692         }
693
694         /* Set RS0 */
695         status = hw->phy.ops.read_i2c_byte(hw, IXGBE_SFF_SFF_8472_OSCB,
696                                            IXGBE_I2C_EEPROM_DEV_ADDR2,
697                                            &eeprom_data);
698         if (status) {
699                 hw_dbg(hw, "Failed to read Rx Rate Select RS0\n");
700                 goto out;
701         }
702
703         eeprom_data = (eeprom_data & ~IXGBE_SFF_SOFT_RS_SELECT_MASK) | rs;
704
705         status = hw->phy.ops.write_i2c_byte(hw, IXGBE_SFF_SFF_8472_OSCB,
706                                             IXGBE_I2C_EEPROM_DEV_ADDR2,
707                                             eeprom_data);
708         if (status) {
709                 hw_dbg(hw, "Failed to write Rx Rate Select RS0\n");
710                 goto out;
711         }
712
713         /* Set RS1 */
714         status = hw->phy.ops.read_i2c_byte(hw, IXGBE_SFF_SFF_8472_ESCB,
715                                            IXGBE_I2C_EEPROM_DEV_ADDR2,
716                                            &eeprom_data);
717         if (status) {
718                 hw_dbg(hw, "Failed to read Rx Rate Select RS1\n");
719                 goto out;
720         }
721
722         eeprom_data = (eeprom_data & ~IXGBE_SFF_SOFT_RS_SELECT_MASK) & rs;
723
724         status = hw->phy.ops.write_i2c_byte(hw, IXGBE_SFF_SFF_8472_ESCB,
725                                             IXGBE_I2C_EEPROM_DEV_ADDR2,
726                                             eeprom_data);
727         if (status) {
728                 hw_dbg(hw, "Failed to write Rx Rate Select RS1\n");
729                 goto out;
730         }
731 out:
732         return;
733 }
734
735 /**
736  *  ixgbe_setup_mac_link_multispeed_fiber - Set MAC link speed
737  *  @hw: pointer to hardware structure
738  *  @speed: new link speed
739  *  @autoneg_wait_to_complete: true when waiting for completion is needed
740  *
741  *  Set the link speed in the AUTOC register and restarts link.
742  **/
743 static s32 ixgbe_setup_mac_link_multispeed_fiber(struct ixgbe_hw *hw,
744                                           ixgbe_link_speed speed,
745                                           bool autoneg_wait_to_complete)
746 {
747         s32 status = 0;
748         ixgbe_link_speed link_speed = IXGBE_LINK_SPEED_UNKNOWN;
749         ixgbe_link_speed highest_link_speed = IXGBE_LINK_SPEED_UNKNOWN;
750         u32 speedcnt = 0;
751         u32 esdp_reg = IXGBE_READ_REG(hw, IXGBE_ESDP);
752         u32 i = 0;
753         bool link_up = false;
754         bool autoneg = false;
755
756         /* Mask off requested but non-supported speeds */
757         status = hw->mac.ops.get_link_capabilities(hw, &link_speed,
758                                                    &autoneg);
759         if (status != 0)
760                 return status;
761
762         speed &= link_speed;
763
764         /*
765          * Try each speed one by one, highest priority first.  We do this in
766          * software because 10gb fiber doesn't support speed autonegotiation.
767          */
768         if (speed & IXGBE_LINK_SPEED_10GB_FULL) {
769                 speedcnt++;
770                 highest_link_speed = IXGBE_LINK_SPEED_10GB_FULL;
771
772                 /* If we already have link at this speed, just jump out */
773                 status = hw->mac.ops.check_link(hw, &link_speed, &link_up,
774                                                 false);
775                 if (status != 0)
776                         return status;
777
778                 if ((link_speed == IXGBE_LINK_SPEED_10GB_FULL) && link_up)
779                         goto out;
780
781                 /* Set the module link speed */
782                 switch (hw->phy.media_type) {
783                 case ixgbe_media_type_fiber:
784                         esdp_reg |= (IXGBE_ESDP_SDP5_DIR | IXGBE_ESDP_SDP5);
785                         IXGBE_WRITE_REG(hw, IXGBE_ESDP, esdp_reg);
786                         IXGBE_WRITE_FLUSH(hw);
787                         break;
788                 case ixgbe_media_type_fiber_qsfp:
789                         /* QSFP module automatically detects MAC link speed */
790                         break;
791                 default:
792                         hw_dbg(hw, "Unexpected media type.\n");
793                         break;
794                 }
795
796                 /* Allow module to change analog characteristics (1G->10G) */
797                 msleep(40);
798
799                 status = ixgbe_setup_mac_link_82599(hw,
800                                                     IXGBE_LINK_SPEED_10GB_FULL,
801                                                     autoneg_wait_to_complete);
802                 if (status != 0)
803                         return status;
804
805                 /* Flap the tx laser if it has not already been done */
806                 if (hw->mac.ops.flap_tx_laser)
807                         hw->mac.ops.flap_tx_laser(hw);
808
809                 /*
810                  * Wait for the controller to acquire link.  Per IEEE 802.3ap,
811                  * Section 73.10.2, we may have to wait up to 500ms if KR is
812                  * attempted.  82599 uses the same timing for 10g SFI.
813                  */
814                 for (i = 0; i < 5; i++) {
815                         /* Wait for the link partner to also set speed */
816                         msleep(100);
817
818                         /* If we have link, just jump out */
819                         status = hw->mac.ops.check_link(hw, &link_speed,
820                                                         &link_up, false);
821                         if (status != 0)
822                                 return status;
823
824                         if (link_up)
825                                 goto out;
826                 }
827         }
828
829         if (speed & IXGBE_LINK_SPEED_1GB_FULL) {
830                 speedcnt++;
831                 if (highest_link_speed == IXGBE_LINK_SPEED_UNKNOWN)
832                         highest_link_speed = IXGBE_LINK_SPEED_1GB_FULL;
833
834                 /* If we already have link at this speed, just jump out */
835                 status = hw->mac.ops.check_link(hw, &link_speed, &link_up,
836                                                 false);
837                 if (status != 0)
838                         return status;
839
840                 if ((link_speed == IXGBE_LINK_SPEED_1GB_FULL) && link_up)
841                         goto out;
842
843                 /* Set the module link speed */
844                 switch (hw->phy.media_type) {
845                 case ixgbe_media_type_fiber_fixed:
846                         ixgbe_set_fiber_fixed_speed(hw,
847                                                 IXGBE_LINK_SPEED_1GB_FULL);
848                         break;
849                 case ixgbe_media_type_fiber:
850                         esdp_reg &= ~IXGBE_ESDP_SDP5;
851                         esdp_reg |= IXGBE_ESDP_SDP5_DIR;
852                         IXGBE_WRITE_REG(hw, IXGBE_ESDP, esdp_reg);
853                         IXGBE_WRITE_FLUSH(hw);
854                         break;
855                 case ixgbe_media_type_fiber_qsfp:
856                         /* QSFP module automatically detects MAC link speed */
857                         break;
858                 default:
859                         hw_dbg(hw, "Unexpected media type.\n");
860                         break;
861                 }
862
863                 /* Allow module to change analog characteristics (10G->1G) */
864                 msleep(40);
865
866                 status = ixgbe_setup_mac_link_82599(hw,
867                                                     IXGBE_LINK_SPEED_1GB_FULL,
868                                                     autoneg_wait_to_complete);
869                 if (status != 0)
870                         return status;
871
872                 /* Flap the tx laser if it has not already been done */
873                 if (hw->mac.ops.flap_tx_laser)
874                         hw->mac.ops.flap_tx_laser(hw);
875
876                 /* Wait for the link partner to also set speed */
877                 msleep(100);
878
879                 /* If we have link, just jump out */
880                 status = hw->mac.ops.check_link(hw, &link_speed, &link_up,
881                                                 false);
882                 if (status != 0)
883                         return status;
884
885                 if (link_up)
886                         goto out;
887         }
888
889         /*
890          * We didn't get link.  Configure back to the highest speed we tried,
891          * (if there was more than one).  We call ourselves back with just the
892          * single highest speed that the user requested.
893          */
894         if (speedcnt > 1)
895                 status = ixgbe_setup_mac_link_multispeed_fiber(hw,
896                                                                highest_link_speed,
897                                                                autoneg_wait_to_complete);
898
899 out:
900         /* Set autoneg_advertised value based on input link speed */
901         hw->phy.autoneg_advertised = 0;
902
903         if (speed & IXGBE_LINK_SPEED_10GB_FULL)
904                 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_10GB_FULL;
905
906         if (speed & IXGBE_LINK_SPEED_1GB_FULL)
907                 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_1GB_FULL;
908
909         return status;
910 }
911
912 /**
913  *  ixgbe_setup_mac_link_smartspeed - Set MAC link speed using SmartSpeed
914  *  @hw: pointer to hardware structure
915  *  @speed: new link speed
916  *  @autoneg_wait_to_complete: true when waiting for completion is needed
917  *
918  *  Implements the Intel SmartSpeed algorithm.
919  **/
920 static s32 ixgbe_setup_mac_link_smartspeed(struct ixgbe_hw *hw,
921                                      ixgbe_link_speed speed,
922                                      bool autoneg_wait_to_complete)
923 {
924         s32 status = 0;
925         ixgbe_link_speed link_speed = IXGBE_LINK_SPEED_UNKNOWN;
926         s32 i, j;
927         bool link_up = false;
928         u32 autoc_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC);
929
930          /* Set autoneg_advertised value based on input link speed */
931         hw->phy.autoneg_advertised = 0;
932
933         if (speed & IXGBE_LINK_SPEED_10GB_FULL)
934                 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_10GB_FULL;
935
936         if (speed & IXGBE_LINK_SPEED_1GB_FULL)
937                 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_1GB_FULL;
938
939         if (speed & IXGBE_LINK_SPEED_100_FULL)
940                 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_100_FULL;
941
942         /*
943          * Implement Intel SmartSpeed algorithm.  SmartSpeed will reduce the
944          * autoneg advertisement if link is unable to be established at the
945          * highest negotiated rate.  This can sometimes happen due to integrity
946          * issues with the physical media connection.
947          */
948
949         /* First, try to get link with full advertisement */
950         hw->phy.smart_speed_active = false;
951         for (j = 0; j < IXGBE_SMARTSPEED_MAX_RETRIES; j++) {
952                 status = ixgbe_setup_mac_link_82599(hw, speed,
953                                                     autoneg_wait_to_complete);
954                 if (status != 0)
955                         goto out;
956
957                 /*
958                  * Wait for the controller to acquire link.  Per IEEE 802.3ap,
959                  * Section 73.10.2, we may have to wait up to 500ms if KR is
960                  * attempted, or 200ms if KX/KX4/BX/BX4 is attempted, per
961                  * Table 9 in the AN MAS.
962                  */
963                 for (i = 0; i < 5; i++) {
964                         mdelay(100);
965
966                         /* If we have link, just jump out */
967                         status = hw->mac.ops.check_link(hw, &link_speed,
968                                                         &link_up, false);
969                         if (status != 0)
970                                 goto out;
971
972                         if (link_up)
973                                 goto out;
974                 }
975         }
976
977         /*
978          * We didn't get link.  If we advertised KR plus one of KX4/KX
979          * (or BX4/BX), then disable KR and try again.
980          */
981         if (((autoc_reg & IXGBE_AUTOC_KR_SUPP) == 0) ||
982             ((autoc_reg & IXGBE_AUTOC_KX4_KX_SUPP_MASK) == 0))
983                 goto out;
984
985         /* Turn SmartSpeed on to disable KR support */
986         hw->phy.smart_speed_active = true;
987         status = ixgbe_setup_mac_link_82599(hw, speed,
988                                             autoneg_wait_to_complete);
989         if (status != 0)
990                 goto out;
991
992         /*
993          * Wait for the controller to acquire link.  600ms will allow for
994          * the AN link_fail_inhibit_timer as well for multiple cycles of
995          * parallel detect, both 10g and 1g. This allows for the maximum
996          * connect attempts as defined in the AN MAS table 73-7.
997          */
998         for (i = 0; i < 6; i++) {
999                 mdelay(100);
1000
1001                 /* If we have link, just jump out */
1002                 status = hw->mac.ops.check_link(hw, &link_speed,
1003                                                 &link_up, false);
1004                 if (status != 0)
1005                         goto out;
1006
1007                 if (link_up)
1008                         goto out;
1009         }
1010
1011         /* We didn't get link.  Turn SmartSpeed back off. */
1012         hw->phy.smart_speed_active = false;
1013         status = ixgbe_setup_mac_link_82599(hw, speed,
1014                                             autoneg_wait_to_complete);
1015
1016 out:
1017         if (link_up && (link_speed == IXGBE_LINK_SPEED_1GB_FULL))
1018                 hw_dbg(hw, "Smartspeed has downgraded the link speed from the maximum advertised\n");
1019         return status;
1020 }
1021
1022 /**
1023  *  ixgbe_setup_mac_link_82599 - Set MAC link speed
1024  *  @hw: pointer to hardware structure
1025  *  @speed: new link speed
1026  *  @autoneg_wait_to_complete: true when waiting for completion is needed
1027  *
1028  *  Set the link speed in the AUTOC register and restarts link.
1029  **/
1030 static s32 ixgbe_setup_mac_link_82599(struct ixgbe_hw *hw,
1031                                       ixgbe_link_speed speed,
1032                                       bool autoneg_wait_to_complete)
1033 {
1034         s32 status = 0;
1035         u32 autoc, pma_pmd_1g, link_mode, start_autoc;
1036         u32 autoc2 = IXGBE_READ_REG(hw, IXGBE_AUTOC2);
1037         u32 orig_autoc = 0;
1038         u32 pma_pmd_10g_serial = autoc2 & IXGBE_AUTOC2_10G_SERIAL_PMA_PMD_MASK;
1039         u32 links_reg;
1040         u32 i;
1041         ixgbe_link_speed link_capabilities = IXGBE_LINK_SPEED_UNKNOWN;
1042         bool autoneg = false;
1043
1044         /* Check to see if speed passed in is supported. */
1045         status = hw->mac.ops.get_link_capabilities(hw, &link_capabilities,
1046                                                    &autoneg);
1047         if (status != 0)
1048                 goto out;
1049
1050         speed &= link_capabilities;
1051
1052         if (speed == IXGBE_LINK_SPEED_UNKNOWN) {
1053                 status = IXGBE_ERR_LINK_SETUP;
1054                 goto out;
1055         }
1056
1057         /* Use stored value (EEPROM defaults) of AUTOC to find KR/KX4 support*/
1058         if (hw->mac.orig_link_settings_stored)
1059                 autoc = hw->mac.orig_autoc;
1060         else
1061                 autoc = IXGBE_READ_REG(hw, IXGBE_AUTOC);
1062
1063         orig_autoc = autoc;
1064         start_autoc = IXGBE_READ_REG(hw, IXGBE_AUTOC);
1065         link_mode = autoc & IXGBE_AUTOC_LMS_MASK;
1066         pma_pmd_1g = autoc & IXGBE_AUTOC_1G_PMA_PMD_MASK;
1067
1068         if (link_mode == IXGBE_AUTOC_LMS_KX4_KX_KR ||
1069             link_mode == IXGBE_AUTOC_LMS_KX4_KX_KR_1G_AN ||
1070             link_mode == IXGBE_AUTOC_LMS_KX4_KX_KR_SGMII) {
1071                 /* Set KX4/KX/KR support according to speed requested */
1072                 autoc &= ~(IXGBE_AUTOC_KX4_KX_SUPP_MASK | IXGBE_AUTOC_KR_SUPP);
1073                 if (speed & IXGBE_LINK_SPEED_10GB_FULL) {
1074                         if (orig_autoc & IXGBE_AUTOC_KX4_SUPP)
1075                                 autoc |= IXGBE_AUTOC_KX4_SUPP;
1076                         if ((orig_autoc & IXGBE_AUTOC_KR_SUPP) &&
1077                             (hw->phy.smart_speed_active == false))
1078                                 autoc |= IXGBE_AUTOC_KR_SUPP;
1079                 }
1080                 if (speed & IXGBE_LINK_SPEED_1GB_FULL)
1081                         autoc |= IXGBE_AUTOC_KX_SUPP;
1082         } else if ((pma_pmd_1g == IXGBE_AUTOC_1G_SFI) &&
1083                    (link_mode == IXGBE_AUTOC_LMS_1G_LINK_NO_AN ||
1084                     link_mode == IXGBE_AUTOC_LMS_1G_AN)) {
1085                 /* Switch from 1G SFI to 10G SFI if requested */
1086                 if ((speed == IXGBE_LINK_SPEED_10GB_FULL) &&
1087                     (pma_pmd_10g_serial == IXGBE_AUTOC2_10G_SFI)) {
1088                         autoc &= ~IXGBE_AUTOC_LMS_MASK;
1089                         autoc |= IXGBE_AUTOC_LMS_10G_SERIAL;
1090                 }
1091         } else if ((pma_pmd_10g_serial == IXGBE_AUTOC2_10G_SFI) &&
1092                    (link_mode == IXGBE_AUTOC_LMS_10G_SERIAL)) {
1093                 /* Switch from 10G SFI to 1G SFI if requested */
1094                 if ((speed == IXGBE_LINK_SPEED_1GB_FULL) &&
1095                     (pma_pmd_1g == IXGBE_AUTOC_1G_SFI)) {
1096                         autoc &= ~IXGBE_AUTOC_LMS_MASK;
1097                         if (autoneg)
1098                                 autoc |= IXGBE_AUTOC_LMS_1G_AN;
1099                         else
1100                                 autoc |= IXGBE_AUTOC_LMS_1G_LINK_NO_AN;
1101                 }
1102         }
1103
1104         if (autoc != start_autoc) {
1105                 /* Restart link */
1106                 status = hw->mac.ops.prot_autoc_write(hw, autoc, false);
1107                 if (status)
1108                         goto out;
1109
1110                 /* Only poll for autoneg to complete if specified to do so */
1111                 if (autoneg_wait_to_complete) {
1112                         if (link_mode == IXGBE_AUTOC_LMS_KX4_KX_KR ||
1113                             link_mode == IXGBE_AUTOC_LMS_KX4_KX_KR_1G_AN ||
1114                             link_mode == IXGBE_AUTOC_LMS_KX4_KX_KR_SGMII) {
1115                                 links_reg = 0; /*Just in case Autoneg time=0*/
1116                                 for (i = 0; i < IXGBE_AUTO_NEG_TIME; i++) {
1117                                         links_reg =
1118                                                IXGBE_READ_REG(hw, IXGBE_LINKS);
1119                                         if (links_reg & IXGBE_LINKS_KX_AN_COMP)
1120                                                 break;
1121                                         msleep(100);
1122                                 }
1123                                 if (!(links_reg & IXGBE_LINKS_KX_AN_COMP)) {
1124                                         status =
1125                                                 IXGBE_ERR_AUTONEG_NOT_COMPLETE;
1126                                         hw_dbg(hw, "Autoneg did not complete.\n");
1127                                 }
1128                         }
1129                 }
1130
1131                 /* Add delay to filter out noises during initial link setup */
1132                 msleep(50);
1133         }
1134
1135 out:
1136         return status;
1137 }
1138
1139 /**
1140  *  ixgbe_setup_copper_link_82599 - Set the PHY autoneg advertised field
1141  *  @hw: pointer to hardware structure
1142  *  @speed: new link speed
1143  *  @autoneg_wait_to_complete: true if waiting is needed to complete
1144  *
1145  *  Restarts link on PHY and MAC based on settings passed in.
1146  **/
1147 static s32 ixgbe_setup_copper_link_82599(struct ixgbe_hw *hw,
1148                                          ixgbe_link_speed speed,
1149                                          bool autoneg_wait_to_complete)
1150 {
1151         s32 status;
1152
1153         /* Setup the PHY according to input speed */
1154         status = hw->phy.ops.setup_link_speed(hw, speed,
1155                                               autoneg_wait_to_complete);
1156         /* Set up MAC */
1157         ixgbe_start_mac_link_82599(hw, autoneg_wait_to_complete);
1158
1159         return status;
1160 }
1161
1162 /**
1163  *  ixgbe_reset_hw_82599 - Perform hardware reset
1164  *  @hw: pointer to hardware structure
1165  *
1166  *  Resets the hardware by resetting the transmit and receive units, masks
1167  *  and clears all interrupts, perform a PHY reset, and perform a link (MAC)
1168  *  reset.
1169  **/
1170 static s32 ixgbe_reset_hw_82599(struct ixgbe_hw *hw)
1171 {
1172         ixgbe_link_speed link_speed;
1173         s32 status;
1174         u32 ctrl, i, autoc, autoc2;
1175         u32 curr_lms;
1176         bool link_up = false;
1177
1178         /* Call adapter stop to disable tx/rx and clear interrupts */
1179         status = hw->mac.ops.stop_adapter(hw);
1180         if (status != 0)
1181                 goto reset_hw_out;
1182
1183         /* flush pending Tx transactions */
1184         ixgbe_clear_tx_pending(hw);
1185
1186         /* PHY ops must be identified and initialized prior to reset */
1187
1188         /* Identify PHY and related function pointers */
1189         status = hw->phy.ops.init(hw);
1190
1191         if (status == IXGBE_ERR_SFP_NOT_SUPPORTED)
1192                 goto reset_hw_out;
1193
1194         /* Setup SFP module if there is one present. */
1195         if (hw->phy.sfp_setup_needed) {
1196                 status = hw->mac.ops.setup_sfp(hw);
1197                 hw->phy.sfp_setup_needed = false;
1198         }
1199
1200         if (status == IXGBE_ERR_SFP_NOT_SUPPORTED)
1201                 goto reset_hw_out;
1202
1203         /* Reset PHY */
1204         if (hw->phy.reset_disable == false && hw->phy.ops.reset != NULL)
1205                 hw->phy.ops.reset(hw);
1206
1207         /* remember AUTOC from before we reset */
1208         curr_lms = IXGBE_READ_REG(hw, IXGBE_AUTOC) & IXGBE_AUTOC_LMS_MASK;
1209
1210 mac_reset_top:
1211         /*
1212          * Issue global reset to the MAC. Needs to be SW reset if link is up.
1213          * If link reset is used when link is up, it might reset the PHY when
1214          * mng is using it.  If link is down or the flag to force full link
1215          * reset is set, then perform link reset.
1216          */
1217         ctrl = IXGBE_CTRL_LNK_RST;
1218         if (!hw->force_full_reset) {
1219                 hw->mac.ops.check_link(hw, &link_speed, &link_up, false);
1220                 if (link_up)
1221                         ctrl = IXGBE_CTRL_RST;
1222         }
1223
1224         ctrl |= IXGBE_READ_REG(hw, IXGBE_CTRL);
1225         IXGBE_WRITE_REG(hw, IXGBE_CTRL, ctrl);
1226         IXGBE_WRITE_FLUSH(hw);
1227
1228         /* Poll for reset bit to self-clear indicating reset is complete */
1229         for (i = 0; i < 10; i++) {
1230                 udelay(1);
1231                 ctrl = IXGBE_READ_REG(hw, IXGBE_CTRL);
1232                 if (!(ctrl & IXGBE_CTRL_RST_MASK))
1233                         break;
1234         }
1235
1236         if (ctrl & IXGBE_CTRL_RST_MASK) {
1237                 status = IXGBE_ERR_RESET_FAILED;
1238                 hw_dbg(hw, "Reset polling failed to complete.\n");
1239         }
1240
1241         msleep(50);
1242
1243         /*
1244          * Double resets are required for recovery from certain error
1245          * conditions.  Between resets, it is necessary to stall to allow time
1246          * for any pending HW events to complete.
1247          */
1248         if (hw->mac.flags & IXGBE_FLAGS_DOUBLE_RESET_REQUIRED) {
1249                 hw->mac.flags &= ~IXGBE_FLAGS_DOUBLE_RESET_REQUIRED;
1250                 goto mac_reset_top;
1251         }
1252
1253         /*
1254          * Store the original AUTOC/AUTOC2 values if they have not been
1255          * stored off yet.  Otherwise restore the stored original
1256          * values since the reset operation sets back to defaults.
1257          */
1258         autoc = IXGBE_READ_REG(hw, IXGBE_AUTOC);
1259         autoc2 = IXGBE_READ_REG(hw, IXGBE_AUTOC2);
1260
1261         /* Enable link if disabled in NVM */
1262         if (autoc2 & IXGBE_AUTOC2_LINK_DISABLE_MASK) {
1263                 autoc2 &= ~IXGBE_AUTOC2_LINK_DISABLE_MASK;
1264                 IXGBE_WRITE_REG(hw, IXGBE_AUTOC2, autoc2);
1265                 IXGBE_WRITE_FLUSH(hw);
1266         }
1267
1268         if (hw->mac.orig_link_settings_stored == false) {
1269                 hw->mac.orig_autoc = autoc;
1270                 hw->mac.orig_autoc2 = autoc2;
1271                 hw->mac.orig_link_settings_stored = true;
1272         } else {
1273
1274                 /* If MNG FW is running on a multi-speed device that
1275                  * doesn't autoneg with out driver support we need to
1276                  * leave LMS in the state it was before we MAC reset.
1277                  * Likewise if we support WoL we don't want change the
1278                  * LMS state either.
1279                  */
1280                 if ((hw->phy.multispeed_fiber && hw->mng_fw_enabled) ||
1281                     hw->wol_enabled)
1282                         hw->mac.orig_autoc =
1283                                 (hw->mac.orig_autoc & ~IXGBE_AUTOC_LMS_MASK) |
1284                                 curr_lms;
1285
1286                 if (autoc != hw->mac.orig_autoc) {
1287                         status = hw->mac.ops.prot_autoc_write(hw,
1288                                                         hw->mac.orig_autoc,
1289                                                         false);
1290                         if (status)
1291                                 goto reset_hw_out;
1292                 }
1293
1294                 if ((autoc2 & IXGBE_AUTOC2_UPPER_MASK) !=
1295                     (hw->mac.orig_autoc2 & IXGBE_AUTOC2_UPPER_MASK)) {
1296                         autoc2 &= ~IXGBE_AUTOC2_UPPER_MASK;
1297                         autoc2 |= (hw->mac.orig_autoc2 &
1298                                    IXGBE_AUTOC2_UPPER_MASK);
1299                         IXGBE_WRITE_REG(hw, IXGBE_AUTOC2, autoc2);
1300                 }
1301         }
1302
1303         /* Store the permanent mac address */
1304         hw->mac.ops.get_mac_addr(hw, hw->mac.perm_addr);
1305
1306         /*
1307          * Store MAC address from RAR0, clear receive address registers, and
1308          * clear the multicast table.  Also reset num_rar_entries to 128,
1309          * since we modify this value when programming the SAN MAC address.
1310          */
1311         hw->mac.num_rar_entries = 128;
1312         hw->mac.ops.init_rx_addrs(hw);
1313
1314         /* Store the permanent SAN mac address */
1315         hw->mac.ops.get_san_mac_addr(hw, hw->mac.san_addr);
1316
1317         /* Add the SAN MAC address to the RAR only if it's a valid address */
1318         if (is_valid_ether_addr(hw->mac.san_addr)) {
1319                 hw->mac.ops.set_rar(hw, hw->mac.num_rar_entries - 1,
1320                                     hw->mac.san_addr, 0, IXGBE_RAH_AV);
1321
1322                 /* Save the SAN MAC RAR index */
1323                 hw->mac.san_mac_rar_index = hw->mac.num_rar_entries - 1;
1324
1325                 /* Reserve the last RAR for the SAN MAC address */
1326                 hw->mac.num_rar_entries--;
1327         }
1328
1329         /* Store the alternative WWNN/WWPN prefix */
1330         hw->mac.ops.get_wwn_prefix(hw, &hw->mac.wwnn_prefix,
1331                                        &hw->mac.wwpn_prefix);
1332
1333 reset_hw_out:
1334         return status;
1335 }
1336
1337 /**
1338  *  ixgbe_reinit_fdir_tables_82599 - Reinitialize Flow Director tables.
1339  *  @hw: pointer to hardware structure
1340  **/
1341 s32 ixgbe_reinit_fdir_tables_82599(struct ixgbe_hw *hw)
1342 {
1343         int i;
1344         u32 fdirctrl = IXGBE_READ_REG(hw, IXGBE_FDIRCTRL);
1345         fdirctrl &= ~IXGBE_FDIRCTRL_INIT_DONE;
1346
1347         /*
1348          * Before starting reinitialization process,
1349          * FDIRCMD.CMD must be zero.
1350          */
1351         for (i = 0; i < IXGBE_FDIRCMD_CMD_POLL; i++) {
1352                 if (!(IXGBE_READ_REG(hw, IXGBE_FDIRCMD) &
1353                       IXGBE_FDIRCMD_CMD_MASK))
1354                         break;
1355                 udelay(10);
1356         }
1357         if (i >= IXGBE_FDIRCMD_CMD_POLL) {
1358                 hw_dbg(hw, "Flow Director previous command isn't complete, "
1359                        "aborting table re-initialization.\n");
1360                 return IXGBE_ERR_FDIR_REINIT_FAILED;
1361         }
1362
1363         IXGBE_WRITE_REG(hw, IXGBE_FDIRFREE, 0);
1364         IXGBE_WRITE_FLUSH(hw);
1365         /*
1366          * 82599 adapters flow director init flow cannot be restarted,
1367          * Workaround 82599 silicon errata by performing the following steps
1368          * before re-writing the FDIRCTRL control register with the same value.
1369          * - write 1 to bit 8 of FDIRCMD register &
1370          * - write 0 to bit 8 of FDIRCMD register
1371          */
1372         IXGBE_WRITE_REG(hw, IXGBE_FDIRCMD,
1373                         (IXGBE_READ_REG(hw, IXGBE_FDIRCMD) |
1374                          IXGBE_FDIRCMD_CLEARHT));
1375         IXGBE_WRITE_FLUSH(hw);
1376         IXGBE_WRITE_REG(hw, IXGBE_FDIRCMD,
1377                         (IXGBE_READ_REG(hw, IXGBE_FDIRCMD) &
1378                          ~IXGBE_FDIRCMD_CLEARHT));
1379         IXGBE_WRITE_FLUSH(hw);
1380         /*
1381          * Clear FDIR Hash register to clear any leftover hashes
1382          * waiting to be programmed.
1383          */
1384         IXGBE_WRITE_REG(hw, IXGBE_FDIRHASH, 0x00);
1385         IXGBE_WRITE_FLUSH(hw);
1386
1387         IXGBE_WRITE_REG(hw, IXGBE_FDIRCTRL, fdirctrl);
1388         IXGBE_WRITE_FLUSH(hw);
1389
1390         /* Poll init-done after we write FDIRCTRL register */
1391         for (i = 0; i < IXGBE_FDIR_INIT_DONE_POLL; i++) {
1392                 if (IXGBE_READ_REG(hw, IXGBE_FDIRCTRL) &
1393                                    IXGBE_FDIRCTRL_INIT_DONE)
1394                         break;
1395                 usleep_range(1000, 2000);
1396         }
1397         if (i >= IXGBE_FDIR_INIT_DONE_POLL) {
1398                 hw_dbg(hw, "Flow Director Signature poll time exceeded!\n");
1399                 return IXGBE_ERR_FDIR_REINIT_FAILED;
1400         }
1401
1402         /* Clear FDIR statistics registers (read to clear) */
1403         IXGBE_READ_REG(hw, IXGBE_FDIRUSTAT);
1404         IXGBE_READ_REG(hw, IXGBE_FDIRFSTAT);
1405         IXGBE_READ_REG(hw, IXGBE_FDIRMATCH);
1406         IXGBE_READ_REG(hw, IXGBE_FDIRMISS);
1407         IXGBE_READ_REG(hw, IXGBE_FDIRLEN);
1408
1409         return 0;
1410 }
1411
1412 /**
1413  *  ixgbe_fdir_enable_82599 - Initialize Flow Director control registers
1414  *  @hw: pointer to hardware structure
1415  *  @fdirctrl: value to write to flow director control register
1416  **/
1417 static void ixgbe_fdir_enable_82599(struct ixgbe_hw *hw, u32 fdirctrl)
1418 {
1419         int i;
1420
1421         /* Prime the keys for hashing */
1422         IXGBE_WRITE_REG(hw, IXGBE_FDIRHKEY, IXGBE_ATR_BUCKET_HASH_KEY);
1423         IXGBE_WRITE_REG(hw, IXGBE_FDIRSKEY, IXGBE_ATR_SIGNATURE_HASH_KEY);
1424
1425         /*
1426          * Poll init-done after we write the register.  Estimated times:
1427          *      10G: PBALLOC = 11b, timing is 60us
1428          *       1G: PBALLOC = 11b, timing is 600us
1429          *     100M: PBALLOC = 11b, timing is 6ms
1430          *
1431          *     Multiple these timings by 4 if under full Rx load
1432          *
1433          * So we'll poll for IXGBE_FDIR_INIT_DONE_POLL times, sleeping for
1434          * 1 msec per poll time.  If we're at line rate and drop to 100M, then
1435          * this might not finish in our poll time, but we can live with that
1436          * for now.
1437          */
1438         IXGBE_WRITE_REG(hw, IXGBE_FDIRCTRL, fdirctrl);
1439         IXGBE_WRITE_FLUSH(hw);
1440         for (i = 0; i < IXGBE_FDIR_INIT_DONE_POLL; i++) {
1441                 if (IXGBE_READ_REG(hw, IXGBE_FDIRCTRL) &
1442                                    IXGBE_FDIRCTRL_INIT_DONE)
1443                         break;
1444                 usleep_range(1000, 2000);
1445         }
1446
1447         if (i >= IXGBE_FDIR_INIT_DONE_POLL)
1448                 hw_dbg(hw, "Flow Director poll time exceeded!\n");
1449 }
1450
1451 /**
1452  *  ixgbe_init_fdir_signature_82599 - Initialize Flow Director signature filters
1453  *  @hw: pointer to hardware structure
1454  *  @fdirctrl: value to write to flow director control register, initially
1455  *             contains just the value of the Rx packet buffer allocation
1456  **/
1457 s32 ixgbe_init_fdir_signature_82599(struct ixgbe_hw *hw, u32 fdirctrl)
1458 {
1459         /*
1460          * Continue setup of fdirctrl register bits:
1461          *  Move the flexible bytes to use the ethertype - shift 6 words
1462          *  Set the maximum length per hash bucket to 0xA filters
1463          *  Send interrupt when 64 filters are left
1464          */
1465         fdirctrl |= (0x6 << IXGBE_FDIRCTRL_FLEX_SHIFT) |
1466                     (0xA << IXGBE_FDIRCTRL_MAX_LENGTH_SHIFT) |
1467                     (4 << IXGBE_FDIRCTRL_FULL_THRESH_SHIFT);
1468
1469         /* write hashes and fdirctrl register, poll for completion */
1470         ixgbe_fdir_enable_82599(hw, fdirctrl);
1471
1472         return 0;
1473 }
1474
1475 /**
1476  *  ixgbe_init_fdir_perfect_82599 - Initialize Flow Director perfect filters
1477  *  @hw: pointer to hardware structure
1478  *  @fdirctrl: value to write to flow director control register, initially
1479  *             contains just the value of the Rx packet buffer allocation
1480  **/
1481 s32 ixgbe_init_fdir_perfect_82599(struct ixgbe_hw *hw, u32 fdirctrl)
1482 {
1483         /*
1484          * Continue setup of fdirctrl register bits:
1485          *  Turn perfect match filtering on
1486          *  Report hash in RSS field of Rx wb descriptor
1487          *  Initialize the drop queue
1488          *  Move the flexible bytes to use the ethertype - shift 6 words
1489          *  Set the maximum length per hash bucket to 0xA filters
1490          *  Send interrupt when 64 (0x4 * 16) filters are left
1491          */
1492         fdirctrl |= IXGBE_FDIRCTRL_PERFECT_MATCH |
1493                     IXGBE_FDIRCTRL_REPORT_STATUS |
1494                     (IXGBE_FDIR_DROP_QUEUE << IXGBE_FDIRCTRL_DROP_Q_SHIFT) |
1495                     (0x6 << IXGBE_FDIRCTRL_FLEX_SHIFT) |
1496                     (0xA << IXGBE_FDIRCTRL_MAX_LENGTH_SHIFT) |
1497                     (4 << IXGBE_FDIRCTRL_FULL_THRESH_SHIFT);
1498
1499         /* write hashes and fdirctrl register, poll for completion */
1500         ixgbe_fdir_enable_82599(hw, fdirctrl);
1501
1502         return 0;
1503 }
1504
1505 /*
1506  * These defines allow us to quickly generate all of the necessary instructions
1507  * in the function below by simply calling out IXGBE_COMPUTE_SIG_HASH_ITERATION
1508  * for values 0 through 15
1509  */
1510 #define IXGBE_ATR_COMMON_HASH_KEY \
1511                 (IXGBE_ATR_BUCKET_HASH_KEY & IXGBE_ATR_SIGNATURE_HASH_KEY)
1512 #define IXGBE_COMPUTE_SIG_HASH_ITERATION(_n) \
1513 do { \
1514         u32 n = (_n); \
1515         if (IXGBE_ATR_COMMON_HASH_KEY & (0x01 << n)) \
1516                 common_hash ^= lo_hash_dword >> n; \
1517         else if (IXGBE_ATR_BUCKET_HASH_KEY & (0x01 << n)) \
1518                 bucket_hash ^= lo_hash_dword >> n; \
1519         else if (IXGBE_ATR_SIGNATURE_HASH_KEY & (0x01 << n)) \
1520                 sig_hash ^= lo_hash_dword << (16 - n); \
1521         if (IXGBE_ATR_COMMON_HASH_KEY & (0x01 << (n + 16))) \
1522                 common_hash ^= hi_hash_dword >> n; \
1523         else if (IXGBE_ATR_BUCKET_HASH_KEY & (0x01 << (n + 16))) \
1524                 bucket_hash ^= hi_hash_dword >> n; \
1525         else if (IXGBE_ATR_SIGNATURE_HASH_KEY & (0x01 << (n + 16))) \
1526                 sig_hash ^= hi_hash_dword << (16 - n); \
1527 } while (0);
1528
1529 /**
1530  *  ixgbe_atr_compute_sig_hash_82599 - Compute the signature hash
1531  *  @stream: input bitstream to compute the hash on
1532  *
1533  *  This function is almost identical to the function above but contains
1534  *  several optomizations such as unwinding all of the loops, letting the
1535  *  compiler work out all of the conditional ifs since the keys are static
1536  *  defines, and computing two keys at once since the hashed dword stream
1537  *  will be the same for both keys.
1538  **/
1539 static u32 ixgbe_atr_compute_sig_hash_82599(union ixgbe_atr_hash_dword input,
1540                                             union ixgbe_atr_hash_dword common)
1541 {
1542         u32 hi_hash_dword, lo_hash_dword, flow_vm_vlan;
1543         u32 sig_hash = 0, bucket_hash = 0, common_hash = 0;
1544
1545         /* record the flow_vm_vlan bits as they are a key part to the hash */
1546         flow_vm_vlan = ntohl(input.dword);
1547
1548         /* generate common hash dword */
1549         hi_hash_dword = ntohl(common.dword);
1550
1551         /* low dword is word swapped version of common */
1552         lo_hash_dword = (hi_hash_dword >> 16) | (hi_hash_dword << 16);
1553
1554         /* apply flow ID/VM pool/VLAN ID bits to hash words */
1555         hi_hash_dword ^= flow_vm_vlan ^ (flow_vm_vlan >> 16);
1556
1557         /* Process bits 0 and 16 */
1558         IXGBE_COMPUTE_SIG_HASH_ITERATION(0);
1559
1560         /*
1561          * apply flow ID/VM pool/VLAN ID bits to lo hash dword, we had to
1562          * delay this because bit 0 of the stream should not be processed
1563          * so we do not add the vlan until after bit 0 was processed
1564          */
1565         lo_hash_dword ^= flow_vm_vlan ^ (flow_vm_vlan << 16);
1566
1567         /* Process remaining 30 bit of the key */
1568         IXGBE_COMPUTE_SIG_HASH_ITERATION(1);
1569         IXGBE_COMPUTE_SIG_HASH_ITERATION(2);
1570         IXGBE_COMPUTE_SIG_HASH_ITERATION(3);
1571         IXGBE_COMPUTE_SIG_HASH_ITERATION(4);
1572         IXGBE_COMPUTE_SIG_HASH_ITERATION(5);
1573         IXGBE_COMPUTE_SIG_HASH_ITERATION(6);
1574         IXGBE_COMPUTE_SIG_HASH_ITERATION(7);
1575         IXGBE_COMPUTE_SIG_HASH_ITERATION(8);
1576         IXGBE_COMPUTE_SIG_HASH_ITERATION(9);
1577         IXGBE_COMPUTE_SIG_HASH_ITERATION(10);
1578         IXGBE_COMPUTE_SIG_HASH_ITERATION(11);
1579         IXGBE_COMPUTE_SIG_HASH_ITERATION(12);
1580         IXGBE_COMPUTE_SIG_HASH_ITERATION(13);
1581         IXGBE_COMPUTE_SIG_HASH_ITERATION(14);
1582         IXGBE_COMPUTE_SIG_HASH_ITERATION(15);
1583
1584         /* combine common_hash result with signature and bucket hashes */
1585         bucket_hash ^= common_hash;
1586         bucket_hash &= IXGBE_ATR_HASH_MASK;
1587
1588         sig_hash ^= common_hash << 16;
1589         sig_hash &= IXGBE_ATR_HASH_MASK << 16;
1590
1591         /* return completed signature hash */
1592         return sig_hash ^ bucket_hash;
1593 }
1594
1595 /**
1596  *  ixgbe_atr_add_signature_filter_82599 - Adds a signature hash filter
1597  *  @hw: pointer to hardware structure
1598  *  @input: unique input dword
1599  *  @common: compressed common input dword
1600  *  @queue: queue index to direct traffic to
1601  **/
1602 s32 ixgbe_fdir_add_signature_filter_82599(struct ixgbe_hw *hw,
1603                                           union ixgbe_atr_hash_dword input,
1604                                           union ixgbe_atr_hash_dword common,
1605                                           u8 queue)
1606 {
1607         u64  fdirhashcmd;
1608         u32  fdircmd;
1609
1610         /*
1611          * Get the flow_type in order to program FDIRCMD properly
1612          * lowest 2 bits are FDIRCMD.L4TYPE, third lowest bit is FDIRCMD.IPV6
1613          */
1614         switch (input.formatted.flow_type) {
1615         case IXGBE_ATR_FLOW_TYPE_TCPV4:
1616         case IXGBE_ATR_FLOW_TYPE_UDPV4:
1617         case IXGBE_ATR_FLOW_TYPE_SCTPV4:
1618         case IXGBE_ATR_FLOW_TYPE_TCPV6:
1619         case IXGBE_ATR_FLOW_TYPE_UDPV6:
1620         case IXGBE_ATR_FLOW_TYPE_SCTPV6:
1621                 break;
1622         default:
1623                 hw_dbg(hw, " Error on flow type input\n");
1624                 return IXGBE_ERR_CONFIG;
1625         }
1626
1627         /* configure FDIRCMD register */
1628         fdircmd = IXGBE_FDIRCMD_CMD_ADD_FLOW | IXGBE_FDIRCMD_FILTER_UPDATE |
1629                   IXGBE_FDIRCMD_LAST | IXGBE_FDIRCMD_QUEUE_EN;
1630         fdircmd |= input.formatted.flow_type << IXGBE_FDIRCMD_FLOW_TYPE_SHIFT;
1631         fdircmd |= (u32)queue << IXGBE_FDIRCMD_RX_QUEUE_SHIFT;
1632
1633         /*
1634          * The lower 32-bits of fdirhashcmd is for FDIRHASH, the upper 32-bits
1635          * is for FDIRCMD.  Then do a 64-bit register write from FDIRHASH.
1636          */
1637         fdirhashcmd = (u64)fdircmd << 32;
1638         fdirhashcmd |= ixgbe_atr_compute_sig_hash_82599(input, common);
1639         IXGBE_WRITE_REG64(hw, IXGBE_FDIRHASH, fdirhashcmd);
1640
1641         hw_dbg(hw, "Tx Queue=%x hash=%x\n", queue, (u32)fdirhashcmd);
1642
1643         return 0;
1644 }
1645
1646 #define IXGBE_COMPUTE_BKT_HASH_ITERATION(_n) \
1647 do { \
1648         u32 n = (_n); \
1649         if (IXGBE_ATR_BUCKET_HASH_KEY & (0x01 << n)) \
1650                 bucket_hash ^= lo_hash_dword >> n; \
1651         if (IXGBE_ATR_BUCKET_HASH_KEY & (0x01 << (n + 16))) \
1652                 bucket_hash ^= hi_hash_dword >> n; \
1653 } while (0);
1654
1655 /**
1656  *  ixgbe_atr_compute_perfect_hash_82599 - Compute the perfect filter hash
1657  *  @atr_input: input bitstream to compute the hash on
1658  *  @input_mask: mask for the input bitstream
1659  *
1660  *  This function serves two main purposes.  First it applys the input_mask
1661  *  to the atr_input resulting in a cleaned up atr_input data stream.
1662  *  Secondly it computes the hash and stores it in the bkt_hash field at
1663  *  the end of the input byte stream.  This way it will be available for
1664  *  future use without needing to recompute the hash.
1665  **/
1666 void ixgbe_atr_compute_perfect_hash_82599(union ixgbe_atr_input *input,
1667                                           union ixgbe_atr_input *input_mask)
1668 {
1669
1670         u32 hi_hash_dword, lo_hash_dword, flow_vm_vlan;
1671         u32 bucket_hash = 0;
1672
1673         /* Apply masks to input data */
1674         input->dword_stream[0]  &= input_mask->dword_stream[0];
1675         input->dword_stream[1]  &= input_mask->dword_stream[1];
1676         input->dword_stream[2]  &= input_mask->dword_stream[2];
1677         input->dword_stream[3]  &= input_mask->dword_stream[3];
1678         input->dword_stream[4]  &= input_mask->dword_stream[4];
1679         input->dword_stream[5]  &= input_mask->dword_stream[5];
1680         input->dword_stream[6]  &= input_mask->dword_stream[6];
1681         input->dword_stream[7]  &= input_mask->dword_stream[7];
1682         input->dword_stream[8]  &= input_mask->dword_stream[8];
1683         input->dword_stream[9]  &= input_mask->dword_stream[9];
1684         input->dword_stream[10] &= input_mask->dword_stream[10];
1685
1686         /* record the flow_vm_vlan bits as they are a key part to the hash */
1687         flow_vm_vlan = ntohl(input->dword_stream[0]);
1688
1689         /* generate common hash dword */
1690         hi_hash_dword = ntohl(input->dword_stream[1] ^
1691                                     input->dword_stream[2] ^
1692                                     input->dword_stream[3] ^
1693                                     input->dword_stream[4] ^
1694                                     input->dword_stream[5] ^
1695                                     input->dword_stream[6] ^
1696                                     input->dword_stream[7] ^
1697                                     input->dword_stream[8] ^
1698                                     input->dword_stream[9] ^
1699                                     input->dword_stream[10]);
1700
1701         /* low dword is word swapped version of common */
1702         lo_hash_dword = (hi_hash_dword >> 16) | (hi_hash_dword << 16);
1703
1704         /* apply flow ID/VM pool/VLAN ID bits to hash words */
1705         hi_hash_dword ^= flow_vm_vlan ^ (flow_vm_vlan >> 16);
1706
1707         /* Process bits 0 and 16 */
1708         IXGBE_COMPUTE_BKT_HASH_ITERATION(0);
1709
1710         /*
1711          * apply flow ID/VM pool/VLAN ID bits to lo hash dword, we had to
1712          * delay this because bit 0 of the stream should not be processed
1713          * so we do not add the vlan until after bit 0 was processed
1714          */
1715         lo_hash_dword ^= flow_vm_vlan ^ (flow_vm_vlan << 16);
1716
1717         /* Process remaining 30 bit of the key */
1718         IXGBE_COMPUTE_BKT_HASH_ITERATION(1);
1719         IXGBE_COMPUTE_BKT_HASH_ITERATION(2);
1720         IXGBE_COMPUTE_BKT_HASH_ITERATION(3);
1721         IXGBE_COMPUTE_BKT_HASH_ITERATION(4);
1722         IXGBE_COMPUTE_BKT_HASH_ITERATION(5);
1723         IXGBE_COMPUTE_BKT_HASH_ITERATION(6);
1724         IXGBE_COMPUTE_BKT_HASH_ITERATION(7);
1725         IXGBE_COMPUTE_BKT_HASH_ITERATION(8);
1726         IXGBE_COMPUTE_BKT_HASH_ITERATION(9);
1727         IXGBE_COMPUTE_BKT_HASH_ITERATION(10);
1728         IXGBE_COMPUTE_BKT_HASH_ITERATION(11);
1729         IXGBE_COMPUTE_BKT_HASH_ITERATION(12);
1730         IXGBE_COMPUTE_BKT_HASH_ITERATION(13);
1731         IXGBE_COMPUTE_BKT_HASH_ITERATION(14);
1732         IXGBE_COMPUTE_BKT_HASH_ITERATION(15);
1733
1734         /*
1735          * Limit hash to 13 bits since max bucket count is 8K.
1736          * Store result at the end of the input stream.
1737          */
1738         input->formatted.bkt_hash = bucket_hash & 0x1FFF;
1739 }
1740
1741 /**
1742  *  ixgbe_get_fdirtcpm_82599 - generate a tcp port from atr_input_masks
1743  *  @input_mask: mask to be bit swapped
1744  *
1745  *  The source and destination port masks for flow director are bit swapped
1746  *  in that bit 15 effects bit 0, 14 effects 1, 13, 2 etc.  In order to
1747  *  generate a correctly swapped value we need to bit swap the mask and that
1748  *  is what is accomplished by this function.
1749  **/
1750 static u32 ixgbe_get_fdirtcpm_82599(union ixgbe_atr_input *input_mask)
1751 {
1752         u32 mask = ntohs(input_mask->formatted.dst_port);
1753         mask <<= IXGBE_FDIRTCPM_DPORTM_SHIFT;
1754         mask |= ntohs(input_mask->formatted.src_port);
1755         mask = ((mask & 0x55555555) << 1) | ((mask & 0xAAAAAAAA) >> 1);
1756         mask = ((mask & 0x33333333) << 2) | ((mask & 0xCCCCCCCC) >> 2);
1757         mask = ((mask & 0x0F0F0F0F) << 4) | ((mask & 0xF0F0F0F0) >> 4);
1758         return ((mask & 0x00FF00FF) << 8) | ((mask & 0xFF00FF00) >> 8);
1759 }
1760
1761 /*
1762  * These two macros are meant to address the fact that we have registers
1763  * that are either all or in part big-endian.  As a result on big-endian
1764  * systems we will end up byte swapping the value to little-endian before
1765  * it is byte swapped again and written to the hardware in the original
1766  * big-endian format.
1767  */
1768 #define IXGBE_STORE_AS_BE32(_value) \
1769         (((u32)(_value) >> 24) | (((u32)(_value) & 0x00FF0000) >> 8) | \
1770          (((u32)(_value) & 0x0000FF00) << 8) | ((u32)(_value) << 24))
1771
1772 #define IXGBE_WRITE_REG_BE32(a, reg, value) \
1773         IXGBE_WRITE_REG((a), (reg), IXGBE_STORE_AS_BE32(ntohl(value)))
1774
1775 #define IXGBE_STORE_AS_BE16(_value) \
1776         ntohs(((u16)(_value) >> 8) | ((u16)(_value) << 8))
1777
1778 s32 ixgbe_fdir_set_input_mask_82599(struct ixgbe_hw *hw,
1779                                     union ixgbe_atr_input *input_mask)
1780 {
1781         /* mask IPv6 since it is currently not supported */
1782         u32 fdirm = IXGBE_FDIRM_DIPv6;
1783         u32 fdirtcpm;
1784
1785         /*
1786          * Program the relevant mask registers.  If src/dst_port or src/dst_addr
1787          * are zero, then assume a full mask for that field.  Also assume that
1788          * a VLAN of 0 is unspecified, so mask that out as well.  L4type
1789          * cannot be masked out in this implementation.
1790          *
1791          * This also assumes IPv4 only.  IPv6 masking isn't supported at this
1792          * point in time.
1793          */
1794
1795         /* verify bucket hash is cleared on hash generation */
1796         if (input_mask->formatted.bkt_hash)
1797                 hw_dbg(hw, " bucket hash should always be 0 in mask\n");
1798
1799         /* Program FDIRM and verify partial masks */
1800         switch (input_mask->formatted.vm_pool & 0x7F) {
1801         case 0x0:
1802                 fdirm |= IXGBE_FDIRM_POOL;
1803         case 0x7F:
1804                 break;
1805         default:
1806                 hw_dbg(hw, " Error on vm pool mask\n");
1807                 return IXGBE_ERR_CONFIG;
1808         }
1809
1810         switch (input_mask->formatted.flow_type & IXGBE_ATR_L4TYPE_MASK) {
1811         case 0x0:
1812                 fdirm |= IXGBE_FDIRM_L4P;
1813                 if (input_mask->formatted.dst_port ||
1814                     input_mask->formatted.src_port) {
1815                         hw_dbg(hw, " Error on src/dst port mask\n");
1816                         return IXGBE_ERR_CONFIG;
1817                 }
1818         case IXGBE_ATR_L4TYPE_MASK:
1819                 break;
1820         default:
1821                 hw_dbg(hw, " Error on flow type mask\n");
1822                 return IXGBE_ERR_CONFIG;
1823         }
1824
1825         switch (ntohs(input_mask->formatted.vlan_id) & 0xEFFF) {
1826         case 0x0000:
1827                 /* mask VLAN ID, fall through to mask VLAN priority */
1828                 fdirm |= IXGBE_FDIRM_VLANID;
1829         case 0x0FFF:
1830                 /* mask VLAN priority */
1831                 fdirm |= IXGBE_FDIRM_VLANP;
1832                 break;
1833         case 0xE000:
1834                 /* mask VLAN ID only, fall through */
1835                 fdirm |= IXGBE_FDIRM_VLANID;
1836         case 0xEFFF:
1837                 /* no VLAN fields masked */
1838                 break;
1839         default:
1840                 hw_dbg(hw, " Error on VLAN mask\n");
1841                 return IXGBE_ERR_CONFIG;
1842         }
1843
1844         switch (input_mask->formatted.flex_bytes & 0xFFFF) {
1845         case 0x0000:
1846                 /* Mask Flex Bytes, fall through */
1847                 fdirm |= IXGBE_FDIRM_FLEX;
1848         case 0xFFFF:
1849                 break;
1850         default:
1851                 hw_dbg(hw, " Error on flexible byte mask\n");
1852                 return IXGBE_ERR_CONFIG;
1853         }
1854
1855         /* Now mask VM pool and destination IPv6 - bits 5 and 2 */
1856         IXGBE_WRITE_REG(hw, IXGBE_FDIRM, fdirm);
1857
1858         /* store the TCP/UDP port masks, bit reversed from port layout */
1859         fdirtcpm = ixgbe_get_fdirtcpm_82599(input_mask);
1860
1861         /* write both the same so that UDP and TCP use the same mask */
1862         IXGBE_WRITE_REG(hw, IXGBE_FDIRTCPM, ~fdirtcpm);
1863         IXGBE_WRITE_REG(hw, IXGBE_FDIRUDPM, ~fdirtcpm);
1864
1865         /* store source and destination IP masks (big-enian) */
1866         IXGBE_WRITE_REG_BE32(hw, IXGBE_FDIRSIP4M,
1867                              ~input_mask->formatted.src_ip[0]);
1868         IXGBE_WRITE_REG_BE32(hw, IXGBE_FDIRDIP4M,
1869                              ~input_mask->formatted.dst_ip[0]);
1870
1871         return 0;
1872 }
1873
1874 s32 ixgbe_fdir_write_perfect_filter_82599(struct ixgbe_hw *hw,
1875                                           union ixgbe_atr_input *input,
1876                                           u16 soft_id, u8 queue)
1877 {
1878         u32 fdirport, fdirvlan, fdirhash, fdircmd;
1879
1880         /* currently IPv6 is not supported, must be programmed with 0 */
1881         IXGBE_WRITE_REG_BE32(hw, IXGBE_FDIRSIPv6(0),
1882                              input->formatted.src_ip[0]);
1883         IXGBE_WRITE_REG_BE32(hw, IXGBE_FDIRSIPv6(1),
1884                              input->formatted.src_ip[1]);
1885         IXGBE_WRITE_REG_BE32(hw, IXGBE_FDIRSIPv6(2),
1886                              input->formatted.src_ip[2]);
1887
1888         /* record the source address (big-endian) */
1889         IXGBE_WRITE_REG_BE32(hw, IXGBE_FDIRIPSA, input->formatted.src_ip[0]);
1890
1891         /* record the first 32 bits of the destination address (big-endian) */
1892         IXGBE_WRITE_REG_BE32(hw, IXGBE_FDIRIPDA, input->formatted.dst_ip[0]);
1893
1894         /* record source and destination port (little-endian)*/
1895         fdirport = ntohs(input->formatted.dst_port);
1896         fdirport <<= IXGBE_FDIRPORT_DESTINATION_SHIFT;
1897         fdirport |= ntohs(input->formatted.src_port);
1898         IXGBE_WRITE_REG(hw, IXGBE_FDIRPORT, fdirport);
1899
1900         /* record vlan (little-endian) and flex_bytes(big-endian) */
1901         fdirvlan = IXGBE_STORE_AS_BE16(input->formatted.flex_bytes);
1902         fdirvlan <<= IXGBE_FDIRVLAN_FLEX_SHIFT;
1903         fdirvlan |= ntohs(input->formatted.vlan_id);
1904         IXGBE_WRITE_REG(hw, IXGBE_FDIRVLAN, fdirvlan);
1905
1906         /* configure FDIRHASH register */
1907         fdirhash = input->formatted.bkt_hash;
1908         fdirhash |= soft_id << IXGBE_FDIRHASH_SIG_SW_INDEX_SHIFT;
1909         IXGBE_WRITE_REG(hw, IXGBE_FDIRHASH, fdirhash);
1910
1911         /*
1912          * flush all previous writes to make certain registers are
1913          * programmed prior to issuing the command
1914          */
1915         IXGBE_WRITE_FLUSH(hw);
1916
1917         /* configure FDIRCMD register */
1918         fdircmd = IXGBE_FDIRCMD_CMD_ADD_FLOW | IXGBE_FDIRCMD_FILTER_UPDATE |
1919                   IXGBE_FDIRCMD_LAST | IXGBE_FDIRCMD_QUEUE_EN;
1920         if (queue == IXGBE_FDIR_DROP_QUEUE)
1921                 fdircmd |= IXGBE_FDIRCMD_DROP;
1922         fdircmd |= input->formatted.flow_type << IXGBE_FDIRCMD_FLOW_TYPE_SHIFT;
1923         fdircmd |= (u32)queue << IXGBE_FDIRCMD_RX_QUEUE_SHIFT;
1924         fdircmd |= (u32)input->formatted.vm_pool << IXGBE_FDIRCMD_VT_POOL_SHIFT;
1925
1926         IXGBE_WRITE_REG(hw, IXGBE_FDIRCMD, fdircmd);
1927
1928         return 0;
1929 }
1930
1931 s32 ixgbe_fdir_erase_perfect_filter_82599(struct ixgbe_hw *hw,
1932                                           union ixgbe_atr_input *input,
1933                                           u16 soft_id)
1934 {
1935         u32 fdirhash;
1936         u32 fdircmd = 0;
1937         u32 retry_count;
1938         s32 err = 0;
1939
1940         /* configure FDIRHASH register */
1941         fdirhash = input->formatted.bkt_hash;
1942         fdirhash |= soft_id << IXGBE_FDIRHASH_SIG_SW_INDEX_SHIFT;
1943         IXGBE_WRITE_REG(hw, IXGBE_FDIRHASH, fdirhash);
1944
1945         /* flush hash to HW */
1946         IXGBE_WRITE_FLUSH(hw);
1947
1948         /* Query if filter is present */
1949         IXGBE_WRITE_REG(hw, IXGBE_FDIRCMD, IXGBE_FDIRCMD_CMD_QUERY_REM_FILT);
1950
1951         for (retry_count = 10; retry_count; retry_count--) {
1952                 /* allow 10us for query to process */
1953                 udelay(10);
1954                 /* verify query completed successfully */
1955                 fdircmd = IXGBE_READ_REG(hw, IXGBE_FDIRCMD);
1956                 if (!(fdircmd & IXGBE_FDIRCMD_CMD_MASK))
1957                         break;
1958         }
1959
1960         if (!retry_count)
1961                 err = IXGBE_ERR_FDIR_REINIT_FAILED;
1962
1963         /* if filter exists in hardware then remove it */
1964         if (fdircmd & IXGBE_FDIRCMD_FILTER_VALID) {
1965                 IXGBE_WRITE_REG(hw, IXGBE_FDIRHASH, fdirhash);
1966                 IXGBE_WRITE_FLUSH(hw);
1967                 IXGBE_WRITE_REG(hw, IXGBE_FDIRCMD,
1968                                 IXGBE_FDIRCMD_CMD_REMOVE_FLOW);
1969         }
1970
1971         return err;
1972 }
1973
1974 /**
1975  *  ixgbe_read_analog_reg8_82599 - Reads 8 bit Omer analog register
1976  *  @hw: pointer to hardware structure
1977  *  @reg: analog register to read
1978  *  @val: read value
1979  *
1980  *  Performs read operation to Omer analog register specified.
1981  **/
1982 static s32 ixgbe_read_analog_reg8_82599(struct ixgbe_hw *hw, u32 reg, u8 *val)
1983 {
1984         u32  core_ctl;
1985
1986         IXGBE_WRITE_REG(hw, IXGBE_CORECTL, IXGBE_CORECTL_WRITE_CMD |
1987                         (reg << 8));
1988         IXGBE_WRITE_FLUSH(hw);
1989         udelay(10);
1990         core_ctl = IXGBE_READ_REG(hw, IXGBE_CORECTL);
1991         *val = (u8)core_ctl;
1992
1993         return 0;
1994 }
1995
1996 /**
1997  *  ixgbe_write_analog_reg8_82599 - Writes 8 bit Omer analog register
1998  *  @hw: pointer to hardware structure
1999  *  @reg: atlas register to write
2000  *  @val: value to write
2001  *
2002  *  Performs write operation to Omer analog register specified.
2003  **/
2004 static s32 ixgbe_write_analog_reg8_82599(struct ixgbe_hw *hw, u32 reg, u8 val)
2005 {
2006         u32  core_ctl;
2007
2008         core_ctl = (reg << 8) | val;
2009         IXGBE_WRITE_REG(hw, IXGBE_CORECTL, core_ctl);
2010         IXGBE_WRITE_FLUSH(hw);
2011         udelay(10);
2012
2013         return 0;
2014 }
2015
2016 /**
2017  *  ixgbe_start_hw_82599 - Prepare hardware for Tx/Rx
2018  *  @hw: pointer to hardware structure
2019  *
2020  *  Starts the hardware using the generic start_hw function
2021  *  and the generation start_hw function.
2022  *  Then performs revision-specific operations, if any.
2023  **/
2024 static s32 ixgbe_start_hw_82599(struct ixgbe_hw *hw)
2025 {
2026         s32 ret_val = 0;
2027
2028         ret_val = ixgbe_start_hw_generic(hw);
2029         if (ret_val != 0)
2030                 goto out;
2031
2032         ret_val = ixgbe_start_hw_gen2(hw);
2033         if (ret_val != 0)
2034                 goto out;
2035
2036         /* We need to run link autotry after the driver loads */
2037         hw->mac.autotry_restart = true;
2038
2039         if (ret_val == 0)
2040                 ret_val = ixgbe_verify_fw_version_82599(hw);
2041 out:
2042         return ret_val;
2043 }
2044
2045 /**
2046  *  ixgbe_identify_phy_82599 - Get physical layer module
2047  *  @hw: pointer to hardware structure
2048  *
2049  *  Determines the physical layer module found on the current adapter.
2050  *  If PHY already detected, maintains current PHY type in hw struct,
2051  *  otherwise executes the PHY detection routine.
2052  **/
2053 static s32 ixgbe_identify_phy_82599(struct ixgbe_hw *hw)
2054 {
2055         s32 status = IXGBE_ERR_PHY_ADDR_INVALID;
2056
2057         /* Detect PHY if not unknown - returns success if already detected. */
2058         status = ixgbe_identify_phy_generic(hw);
2059         if (status != 0) {
2060                 /* 82599 10GBASE-T requires an external PHY */
2061                 if (hw->mac.ops.get_media_type(hw) == ixgbe_media_type_copper)
2062                         goto out;
2063                 else
2064                         status = ixgbe_identify_module_generic(hw);
2065         }
2066
2067         /* Set PHY type none if no PHY detected */
2068         if (hw->phy.type == ixgbe_phy_unknown) {
2069                 hw->phy.type = ixgbe_phy_none;
2070                 status = 0;
2071         }
2072
2073         /* Return error if SFP module has been detected but is not supported */
2074         if (hw->phy.type == ixgbe_phy_sfp_unsupported)
2075                 status = IXGBE_ERR_SFP_NOT_SUPPORTED;
2076
2077 out:
2078         return status;
2079 }
2080
2081 /**
2082  *  ixgbe_get_supported_physical_layer_82599 - Returns physical layer type
2083  *  @hw: pointer to hardware structure
2084  *
2085  *  Determines physical layer capabilities of the current configuration.
2086  **/
2087 static u32 ixgbe_get_supported_physical_layer_82599(struct ixgbe_hw *hw)
2088 {
2089         u32 physical_layer = IXGBE_PHYSICAL_LAYER_UNKNOWN;
2090         u32 autoc = IXGBE_READ_REG(hw, IXGBE_AUTOC);
2091         u32 autoc2 = IXGBE_READ_REG(hw, IXGBE_AUTOC2);
2092         u32 pma_pmd_10g_serial = autoc2 & IXGBE_AUTOC2_10G_SERIAL_PMA_PMD_MASK;
2093         u32 pma_pmd_10g_parallel = autoc & IXGBE_AUTOC_10G_PMA_PMD_MASK;
2094         u32 pma_pmd_1g = autoc & IXGBE_AUTOC_1G_PMA_PMD_MASK;
2095         u16 ext_ability = 0;
2096         u8 comp_codes_10g = 0;
2097         u8 comp_codes_1g = 0;
2098
2099         hw->phy.ops.identify(hw);
2100
2101         switch (hw->phy.type) {
2102         case ixgbe_phy_tn:
2103         case ixgbe_phy_cu_unknown:
2104                 hw->phy.ops.read_reg(hw, MDIO_PMA_EXTABLE, MDIO_MMD_PMAPMD,
2105                                                          &ext_ability);
2106                 if (ext_ability & MDIO_PMA_EXTABLE_10GBT)
2107                         physical_layer |= IXGBE_PHYSICAL_LAYER_10GBASE_T;
2108                 if (ext_ability & MDIO_PMA_EXTABLE_1000BT)
2109                         physical_layer |= IXGBE_PHYSICAL_LAYER_1000BASE_T;
2110                 if (ext_ability & MDIO_PMA_EXTABLE_100BTX)
2111                         physical_layer |= IXGBE_PHYSICAL_LAYER_100BASE_TX;
2112                 goto out;
2113         default:
2114                 break;
2115         }
2116
2117         switch (autoc & IXGBE_AUTOC_LMS_MASK) {
2118         case IXGBE_AUTOC_LMS_1G_AN:
2119         case IXGBE_AUTOC_LMS_1G_LINK_NO_AN:
2120                 if (pma_pmd_1g == IXGBE_AUTOC_1G_KX_BX) {
2121                         physical_layer = IXGBE_PHYSICAL_LAYER_1000BASE_KX |
2122                             IXGBE_PHYSICAL_LAYER_1000BASE_BX;
2123                         goto out;
2124                 } else
2125                         /* SFI mode so read SFP module */
2126                         goto sfp_check;
2127                 break;
2128         case IXGBE_AUTOC_LMS_10G_LINK_NO_AN:
2129                 if (pma_pmd_10g_parallel == IXGBE_AUTOC_10G_CX4)
2130                         physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_CX4;
2131                 else if (pma_pmd_10g_parallel == IXGBE_AUTOC_10G_KX4)
2132                         physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_KX4;
2133                 else if (pma_pmd_10g_parallel == IXGBE_AUTOC_10G_XAUI)
2134                         physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_XAUI;
2135                 goto out;
2136                 break;
2137         case IXGBE_AUTOC_LMS_10G_SERIAL:
2138                 if (pma_pmd_10g_serial == IXGBE_AUTOC2_10G_KR) {
2139                         physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_KR;
2140                         goto out;
2141                 } else if (pma_pmd_10g_serial == IXGBE_AUTOC2_10G_SFI)
2142                         goto sfp_check;
2143                 break;
2144         case IXGBE_AUTOC_LMS_KX4_KX_KR:
2145         case IXGBE_AUTOC_LMS_KX4_KX_KR_1G_AN:
2146                 if (autoc & IXGBE_AUTOC_KX_SUPP)
2147                         physical_layer |= IXGBE_PHYSICAL_LAYER_1000BASE_KX;
2148                 if (autoc & IXGBE_AUTOC_KX4_SUPP)
2149                         physical_layer |= IXGBE_PHYSICAL_LAYER_10GBASE_KX4;
2150                 if (autoc & IXGBE_AUTOC_KR_SUPP)
2151                         physical_layer |= IXGBE_PHYSICAL_LAYER_10GBASE_KR;
2152                 goto out;
2153                 break;
2154         default:
2155                 goto out;
2156                 break;
2157         }
2158
2159 sfp_check:
2160         /* SFP check must be done last since DA modules are sometimes used to
2161          * test KR mode -  we need to id KR mode correctly before SFP module.
2162          * Call identify_sfp because the pluggable module may have changed */
2163         hw->phy.ops.identify_sfp(hw);
2164         if (hw->phy.sfp_type == ixgbe_sfp_type_not_present)
2165                 goto out;
2166
2167         switch (hw->phy.type) {
2168         case ixgbe_phy_sfp_passive_tyco:
2169         case ixgbe_phy_sfp_passive_unknown:
2170         case ixgbe_phy_qsfp_passive_unknown:
2171                 physical_layer = IXGBE_PHYSICAL_LAYER_SFP_PLUS_CU;
2172                 break;
2173         case ixgbe_phy_sfp_ftl_active:
2174         case ixgbe_phy_sfp_active_unknown:
2175         case ixgbe_phy_qsfp_active_unknown:
2176                 physical_layer = IXGBE_PHYSICAL_LAYER_SFP_ACTIVE_DA;
2177                 break;
2178         case ixgbe_phy_sfp_avago:
2179         case ixgbe_phy_sfp_ftl:
2180         case ixgbe_phy_sfp_intel:
2181         case ixgbe_phy_sfp_unknown:
2182                 hw->phy.ops.read_i2c_eeprom(hw,
2183                       IXGBE_SFF_1GBE_COMP_CODES, &comp_codes_1g);
2184                 hw->phy.ops.read_i2c_eeprom(hw,
2185                       IXGBE_SFF_10GBE_COMP_CODES, &comp_codes_10g);
2186                 if (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)
2187                         physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_SR;
2188                 else if (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)
2189                         physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_LR;
2190                 else if (comp_codes_1g & IXGBE_SFF_1GBASET_CAPABLE)
2191                         physical_layer = IXGBE_PHYSICAL_LAYER_1000BASE_T;
2192                 break;
2193         case ixgbe_phy_qsfp_intel:
2194         case ixgbe_phy_qsfp_unknown:
2195                 hw->phy.ops.read_i2c_eeprom(hw,
2196                         IXGBE_SFF_QSFP_10GBE_COMP, &comp_codes_10g);
2197                 if (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)
2198                         physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_SR;
2199                 else if (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)
2200                         physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_LR;
2201                 break;
2202         default:
2203                 break;
2204         }
2205
2206 out:
2207         return physical_layer;
2208 }
2209
2210 /**
2211  *  ixgbe_enable_rx_dma_82599 - Enable the Rx DMA unit on 82599
2212  *  @hw: pointer to hardware structure
2213  *  @regval: register value to write to RXCTRL
2214  *
2215  *  Enables the Rx DMA unit for 82599
2216  **/
2217 static s32 ixgbe_enable_rx_dma_82599(struct ixgbe_hw *hw, u32 regval)
2218 {
2219         /*
2220          * Workaround for 82599 silicon errata when enabling the Rx datapath.
2221          * If traffic is incoming before we enable the Rx unit, it could hang
2222          * the Rx DMA unit.  Therefore, make sure the security engine is
2223          * completely disabled prior to enabling the Rx unit.
2224          */
2225         hw->mac.ops.disable_rx_buff(hw);
2226
2227         IXGBE_WRITE_REG(hw, IXGBE_RXCTRL, regval);
2228
2229         hw->mac.ops.enable_rx_buff(hw);
2230
2231         return 0;
2232 }
2233
2234 /**
2235  *  ixgbe_verify_fw_version_82599 - verify fw version for 82599
2236  *  @hw: pointer to hardware structure
2237  *
2238  *  Verifies that installed the firmware version is 0.6 or higher
2239  *  for SFI devices. All 82599 SFI devices should have version 0.6 or higher.
2240  *
2241  *  Returns IXGBE_ERR_EEPROM_VERSION if the FW is not present or
2242  *  if the FW version is not supported.
2243  **/
2244 static s32 ixgbe_verify_fw_version_82599(struct ixgbe_hw *hw)
2245 {
2246         s32 status = IXGBE_ERR_EEPROM_VERSION;
2247         u16 fw_offset, fw_ptp_cfg_offset;
2248         u16 offset;
2249         u16 fw_version = 0;
2250
2251         /* firmware check is only necessary for SFI devices */
2252         if (hw->phy.media_type != ixgbe_media_type_fiber) {
2253                 status = 0;
2254                 goto fw_version_out;
2255         }
2256
2257         /* get the offset to the Firmware Module block */
2258         offset = IXGBE_FW_PTR;
2259         if (hw->eeprom.ops.read(hw, offset, &fw_offset))
2260                 goto fw_version_err;
2261
2262         if ((fw_offset == 0) || (fw_offset == 0xFFFF))
2263                 goto fw_version_out;
2264
2265         /* get the offset to the Pass Through Patch Configuration block */
2266         offset = fw_offset + IXGBE_FW_PASSTHROUGH_PATCH_CONFIG_PTR;
2267         if (hw->eeprom.ops.read(hw, offset, &fw_ptp_cfg_offset))
2268                 goto fw_version_err;
2269
2270         if ((fw_ptp_cfg_offset == 0) || (fw_ptp_cfg_offset == 0xFFFF))
2271                 goto fw_version_out;
2272
2273         /* get the firmware version */
2274         offset = fw_ptp_cfg_offset + IXGBE_FW_PATCH_VERSION_4;
2275         if (hw->eeprom.ops.read(hw, offset, &fw_version))
2276                 goto fw_version_err;
2277
2278         if (fw_version > 0x5)
2279                 status = 0;
2280
2281 fw_version_out:
2282         return status;
2283
2284 fw_version_err:
2285         hw_err(hw, "eeprom read at offset %d failed\n", offset);
2286         return IXGBE_ERR_EEPROM_VERSION;
2287 }
2288
2289 /**
2290  *  ixgbe_verify_lesm_fw_enabled_82599 - Checks LESM FW module state.
2291  *  @hw: pointer to hardware structure
2292  *
2293  *  Returns true if the LESM FW module is present and enabled. Otherwise
2294  *  returns false. Smart Speed must be disabled if LESM FW module is enabled.
2295  **/
2296 static bool ixgbe_verify_lesm_fw_enabled_82599(struct ixgbe_hw *hw)
2297 {
2298         bool lesm_enabled = false;
2299         u16 fw_offset, fw_lesm_param_offset, fw_lesm_state;
2300         s32 status;
2301
2302         /* get the offset to the Firmware Module block */
2303         status = hw->eeprom.ops.read(hw, IXGBE_FW_PTR, &fw_offset);
2304
2305         if ((status != 0) ||
2306             (fw_offset == 0) || (fw_offset == 0xFFFF))
2307                 goto out;
2308
2309         /* get the offset to the LESM Parameters block */
2310         status = hw->eeprom.ops.read(hw, (fw_offset +
2311                                      IXGBE_FW_LESM_PARAMETERS_PTR),
2312                                      &fw_lesm_param_offset);
2313
2314         if ((status != 0) ||
2315             (fw_lesm_param_offset == 0) || (fw_lesm_param_offset == 0xFFFF))
2316                 goto out;
2317
2318         /* get the lesm state word */
2319         status = hw->eeprom.ops.read(hw, (fw_lesm_param_offset +
2320                                      IXGBE_FW_LESM_STATE_1),
2321                                      &fw_lesm_state);
2322
2323         if ((status == 0) &&
2324             (fw_lesm_state & IXGBE_FW_LESM_STATE_ENABLED))
2325                 lesm_enabled = true;
2326
2327 out:
2328         return lesm_enabled;
2329 }
2330
2331 /**
2332  *  ixgbe_read_eeprom_buffer_82599 - Read EEPROM word(s) using
2333  *  fastest available method
2334  *
2335  *  @hw: pointer to hardware structure
2336  *  @offset: offset of  word in EEPROM to read
2337  *  @words: number of words
2338  *  @data: word(s) read from the EEPROM
2339  *
2340  *  Retrieves 16 bit word(s) read from EEPROM
2341  **/
2342 static s32 ixgbe_read_eeprom_buffer_82599(struct ixgbe_hw *hw, u16 offset,
2343                                           u16 words, u16 *data)
2344 {
2345         struct ixgbe_eeprom_info *eeprom = &hw->eeprom;
2346         s32 ret_val = IXGBE_ERR_CONFIG;
2347
2348         /*
2349          * If EEPROM is detected and can be addressed using 14 bits,
2350          * use EERD otherwise use bit bang
2351          */
2352         if ((eeprom->type == ixgbe_eeprom_spi) &&
2353             (offset + (words - 1) <= IXGBE_EERD_MAX_ADDR))
2354                 ret_val = ixgbe_read_eerd_buffer_generic(hw, offset, words,
2355                                                          data);
2356         else
2357                 ret_val = ixgbe_read_eeprom_buffer_bit_bang_generic(hw, offset,
2358                                                                     words,
2359                                                                     data);
2360
2361         return ret_val;
2362 }
2363
2364 /**
2365  *  ixgbe_read_eeprom_82599 - Read EEPROM word using
2366  *  fastest available method
2367  *
2368  *  @hw: pointer to hardware structure
2369  *  @offset: offset of  word in the EEPROM to read
2370  *  @data: word read from the EEPROM
2371  *
2372  *  Reads a 16 bit word from the EEPROM
2373  **/
2374 static s32 ixgbe_read_eeprom_82599(struct ixgbe_hw *hw,
2375                                    u16 offset, u16 *data)
2376 {
2377         struct ixgbe_eeprom_info *eeprom = &hw->eeprom;
2378         s32 ret_val = IXGBE_ERR_CONFIG;
2379
2380         /*
2381          * If EEPROM is detected and can be addressed using 14 bits,
2382          * use EERD otherwise use bit bang
2383          */
2384         if ((eeprom->type == ixgbe_eeprom_spi) &&
2385             (offset <= IXGBE_EERD_MAX_ADDR))
2386                 ret_val = ixgbe_read_eerd_generic(hw, offset, data);
2387         else
2388                 ret_val = ixgbe_read_eeprom_bit_bang_generic(hw, offset, data);
2389
2390         return ret_val;
2391 }
2392
2393 /**
2394  * ixgbe_reset_pipeline_82599 - perform pipeline reset
2395  *
2396  * @hw: pointer to hardware structure
2397  *
2398  * Reset pipeline by asserting Restart_AN together with LMS change to ensure
2399  * full pipeline reset.  Note - We must hold the SW/FW semaphore before writing
2400  * to AUTOC, so this function assumes the semaphore is held.
2401  **/
2402 static s32 ixgbe_reset_pipeline_82599(struct ixgbe_hw *hw)
2403 {
2404         s32 ret_val;
2405         u32 anlp1_reg = 0;
2406         u32 i, autoc_reg, autoc2_reg;
2407
2408         /* Enable link if disabled in NVM */
2409         autoc2_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC2);
2410         if (autoc2_reg & IXGBE_AUTOC2_LINK_DISABLE_MASK) {
2411                 autoc2_reg &= ~IXGBE_AUTOC2_LINK_DISABLE_MASK;
2412                 IXGBE_WRITE_REG(hw, IXGBE_AUTOC2, autoc2_reg);
2413                 IXGBE_WRITE_FLUSH(hw);
2414         }
2415
2416         autoc_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC);
2417         autoc_reg |= IXGBE_AUTOC_AN_RESTART;
2418
2419         /* Write AUTOC register with toggled LMS[2] bit and Restart_AN */
2420         IXGBE_WRITE_REG(hw, IXGBE_AUTOC,
2421                         autoc_reg ^ (0x4 << IXGBE_AUTOC_LMS_SHIFT));
2422
2423         /* Wait for AN to leave state 0 */
2424         for (i = 0; i < 10; i++) {
2425                 usleep_range(4000, 8000);
2426                 anlp1_reg = IXGBE_READ_REG(hw, IXGBE_ANLP1);
2427                 if (anlp1_reg & IXGBE_ANLP1_AN_STATE_MASK)
2428                         break;
2429         }
2430
2431         if (!(anlp1_reg & IXGBE_ANLP1_AN_STATE_MASK)) {
2432                 hw_dbg(hw, "auto negotiation not completed\n");
2433                 ret_val = IXGBE_ERR_RESET_FAILED;
2434                 goto reset_pipeline_out;
2435         }
2436
2437         ret_val = 0;
2438
2439 reset_pipeline_out:
2440         /* Write AUTOC register with original LMS field and Restart_AN */
2441         IXGBE_WRITE_REG(hw, IXGBE_AUTOC, autoc_reg);
2442         IXGBE_WRITE_FLUSH(hw);
2443
2444         return ret_val;
2445 }
2446
2447 /**
2448  *  ixgbe_read_i2c_byte_82599 - Reads 8 bit word over I2C
2449  *  @hw: pointer to hardware structure
2450  *  @byte_offset: byte offset to read
2451  *  @data: value read
2452  *
2453  *  Performs byte read operation to SFP module's EEPROM over I2C interface at
2454  *  a specified device address.
2455  **/
2456 static s32 ixgbe_read_i2c_byte_82599(struct ixgbe_hw *hw, u8 byte_offset,
2457                                      u8 dev_addr, u8 *data)
2458 {
2459         u32 esdp;
2460         s32 status;
2461         s32 timeout = 200;
2462
2463         if (hw->phy.qsfp_shared_i2c_bus == true) {
2464                 /* Acquire I2C bus ownership. */
2465                 esdp = IXGBE_READ_REG(hw, IXGBE_ESDP);
2466                 esdp |= IXGBE_ESDP_SDP0;
2467                 IXGBE_WRITE_REG(hw, IXGBE_ESDP, esdp);
2468                 IXGBE_WRITE_FLUSH(hw);
2469
2470                 while (timeout) {
2471                         esdp = IXGBE_READ_REG(hw, IXGBE_ESDP);
2472                         if (esdp & IXGBE_ESDP_SDP1)
2473                                 break;
2474
2475                         usleep_range(5000, 10000);
2476                         timeout--;
2477                 }
2478
2479                 if (!timeout) {
2480                         hw_dbg(hw, "Driver can't access resource, acquiring I2C bus timeout.\n");
2481                         status = IXGBE_ERR_I2C;
2482                         goto release_i2c_access;
2483                 }
2484         }
2485
2486         status = ixgbe_read_i2c_byte_generic(hw, byte_offset, dev_addr, data);
2487
2488 release_i2c_access:
2489         if (hw->phy.qsfp_shared_i2c_bus == true) {
2490                 /* Release I2C bus ownership. */
2491                 esdp = IXGBE_READ_REG(hw, IXGBE_ESDP);
2492                 esdp &= ~IXGBE_ESDP_SDP0;
2493                 IXGBE_WRITE_REG(hw, IXGBE_ESDP, esdp);
2494                 IXGBE_WRITE_FLUSH(hw);
2495         }
2496
2497         return status;
2498 }
2499
2500 /**
2501  *  ixgbe_write_i2c_byte_82599 - Writes 8 bit word over I2C
2502  *  @hw: pointer to hardware structure
2503  *  @byte_offset: byte offset to write
2504  *  @data: value to write
2505  *
2506  *  Performs byte write operation to SFP module's EEPROM over I2C interface at
2507  *  a specified device address.
2508  **/
2509 static s32 ixgbe_write_i2c_byte_82599(struct ixgbe_hw *hw, u8 byte_offset,
2510                                       u8 dev_addr, u8 data)
2511 {
2512         u32 esdp;
2513         s32 status;
2514         s32 timeout = 200;
2515
2516         if (hw->phy.qsfp_shared_i2c_bus == true) {
2517                 /* Acquire I2C bus ownership. */
2518                 esdp = IXGBE_READ_REG(hw, IXGBE_ESDP);
2519                 esdp |= IXGBE_ESDP_SDP0;
2520                 IXGBE_WRITE_REG(hw, IXGBE_ESDP, esdp);
2521                 IXGBE_WRITE_FLUSH(hw);
2522
2523                 while (timeout) {
2524                         esdp = IXGBE_READ_REG(hw, IXGBE_ESDP);
2525                         if (esdp & IXGBE_ESDP_SDP1)
2526                                 break;
2527
2528                         usleep_range(5000, 10000);
2529                         timeout--;
2530                 }
2531
2532                 if (!timeout) {
2533                         hw_dbg(hw, "Driver can't access resource, acquiring I2C bus timeout.\n");
2534                         status = IXGBE_ERR_I2C;
2535                         goto release_i2c_access;
2536                 }
2537         }
2538
2539         status = ixgbe_write_i2c_byte_generic(hw, byte_offset, dev_addr, data);
2540
2541 release_i2c_access:
2542         if (hw->phy.qsfp_shared_i2c_bus == true) {
2543                 /* Release I2C bus ownership. */
2544                 esdp = IXGBE_READ_REG(hw, IXGBE_ESDP);
2545                 esdp &= ~IXGBE_ESDP_SDP0;
2546                 IXGBE_WRITE_REG(hw, IXGBE_ESDP, esdp);
2547                 IXGBE_WRITE_FLUSH(hw);
2548         }
2549
2550         return status;
2551 }
2552
2553 static struct ixgbe_mac_operations mac_ops_82599 = {
2554         .init_hw                = &ixgbe_init_hw_generic,
2555         .reset_hw               = &ixgbe_reset_hw_82599,
2556         .start_hw               = &ixgbe_start_hw_82599,
2557         .clear_hw_cntrs         = &ixgbe_clear_hw_cntrs_generic,
2558         .get_media_type         = &ixgbe_get_media_type_82599,
2559         .get_supported_physical_layer = &ixgbe_get_supported_physical_layer_82599,
2560         .enable_rx_dma          = &ixgbe_enable_rx_dma_82599,
2561         .disable_rx_buff        = &ixgbe_disable_rx_buff_generic,
2562         .enable_rx_buff         = &ixgbe_enable_rx_buff_generic,
2563         .get_mac_addr           = &ixgbe_get_mac_addr_generic,
2564         .get_san_mac_addr       = &ixgbe_get_san_mac_addr_generic,
2565         .get_device_caps        = &ixgbe_get_device_caps_generic,
2566         .get_wwn_prefix         = &ixgbe_get_wwn_prefix_generic,
2567         .stop_adapter           = &ixgbe_stop_adapter_generic,
2568         .get_bus_info           = &ixgbe_get_bus_info_generic,
2569         .set_lan_id             = &ixgbe_set_lan_id_multi_port_pcie,
2570         .read_analog_reg8       = &ixgbe_read_analog_reg8_82599,
2571         .write_analog_reg8      = &ixgbe_write_analog_reg8_82599,
2572         .stop_link_on_d3        = &ixgbe_stop_mac_link_on_d3_82599,
2573         .setup_link             = &ixgbe_setup_mac_link_82599,
2574         .set_rxpba              = &ixgbe_set_rxpba_generic,
2575         .check_link             = &ixgbe_check_mac_link_generic,
2576         .get_link_capabilities  = &ixgbe_get_link_capabilities_82599,
2577         .led_on                 = &ixgbe_led_on_generic,
2578         .led_off                = &ixgbe_led_off_generic,
2579         .blink_led_start        = &ixgbe_blink_led_start_generic,
2580         .blink_led_stop         = &ixgbe_blink_led_stop_generic,
2581         .set_rar                = &ixgbe_set_rar_generic,
2582         .clear_rar              = &ixgbe_clear_rar_generic,
2583         .set_vmdq               = &ixgbe_set_vmdq_generic,
2584         .set_vmdq_san_mac       = &ixgbe_set_vmdq_san_mac_generic,
2585         .clear_vmdq             = &ixgbe_clear_vmdq_generic,
2586         .init_rx_addrs          = &ixgbe_init_rx_addrs_generic,
2587         .update_mc_addr_list    = &ixgbe_update_mc_addr_list_generic,
2588         .enable_mc              = &ixgbe_enable_mc_generic,
2589         .disable_mc             = &ixgbe_disable_mc_generic,
2590         .clear_vfta             = &ixgbe_clear_vfta_generic,
2591         .set_vfta               = &ixgbe_set_vfta_generic,
2592         .fc_enable              = &ixgbe_fc_enable_generic,
2593         .set_fw_drv_ver         = &ixgbe_set_fw_drv_ver_generic,
2594         .init_uta_tables        = &ixgbe_init_uta_tables_generic,
2595         .setup_sfp              = &ixgbe_setup_sfp_modules_82599,
2596         .set_mac_anti_spoofing  = &ixgbe_set_mac_anti_spoofing,
2597         .set_vlan_anti_spoofing = &ixgbe_set_vlan_anti_spoofing,
2598         .acquire_swfw_sync      = &ixgbe_acquire_swfw_sync,
2599         .release_swfw_sync      = &ixgbe_release_swfw_sync,
2600         .get_thermal_sensor_data = &ixgbe_get_thermal_sensor_data_generic,
2601         .init_thermal_sensor_thresh = &ixgbe_init_thermal_sensor_thresh_generic,
2602         .mng_fw_enabled         = &ixgbe_mng_enabled,
2603         .prot_autoc_read        = &prot_autoc_read_82599,
2604         .prot_autoc_write       = &prot_autoc_write_82599,
2605 };
2606
2607 static struct ixgbe_eeprom_operations eeprom_ops_82599 = {
2608         .init_params            = &ixgbe_init_eeprom_params_generic,
2609         .read                   = &ixgbe_read_eeprom_82599,
2610         .read_buffer            = &ixgbe_read_eeprom_buffer_82599,
2611         .write                  = &ixgbe_write_eeprom_generic,
2612         .write_buffer           = &ixgbe_write_eeprom_buffer_bit_bang_generic,
2613         .calc_checksum          = &ixgbe_calc_eeprom_checksum_generic,
2614         .validate_checksum      = &ixgbe_validate_eeprom_checksum_generic,
2615         .update_checksum        = &ixgbe_update_eeprom_checksum_generic,
2616 };
2617
2618 static struct ixgbe_phy_operations phy_ops_82599 = {
2619         .identify               = &ixgbe_identify_phy_82599,
2620         .identify_sfp           = &ixgbe_identify_module_generic,
2621         .init                   = &ixgbe_init_phy_ops_82599,
2622         .reset                  = &ixgbe_reset_phy_generic,
2623         .read_reg               = &ixgbe_read_phy_reg_generic,
2624         .write_reg              = &ixgbe_write_phy_reg_generic,
2625         .setup_link             = &ixgbe_setup_phy_link_generic,
2626         .setup_link_speed       = &ixgbe_setup_phy_link_speed_generic,
2627         .read_i2c_byte          = &ixgbe_read_i2c_byte_generic,
2628         .write_i2c_byte         = &ixgbe_write_i2c_byte_generic,
2629         .read_i2c_sff8472       = &ixgbe_read_i2c_sff8472_generic,
2630         .read_i2c_eeprom        = &ixgbe_read_i2c_eeprom_generic,
2631         .write_i2c_eeprom       = &ixgbe_write_i2c_eeprom_generic,
2632         .check_overtemp         = &ixgbe_tn_check_overtemp,
2633 };
2634
2635 struct ixgbe_info ixgbe_82599_info = {
2636         .mac                    = ixgbe_mac_82599EB,
2637         .get_invariants         = &ixgbe_get_invariants_82599,
2638         .mac_ops                = &mac_ops_82599,
2639         .eeprom_ops             = &eeprom_ops_82599,
2640         .phy_ops                = &phy_ops_82599,
2641         .mbx_ops                = &mbx_ops_generic,
2642 };