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