]> CyberLeo.Net >> Repos - FreeBSD/releng/9.0.git/blob - sys/dev/ixgbe/ixgbe_82598.c
Copy stable/9 to releng/9.0 as part of the FreeBSD 9.0-RELEASE release
[FreeBSD/releng/9.0.git] / sys / dev / ixgbe / ixgbe_82598.c
1 /******************************************************************************
2
3   Copyright (c) 2001-2010, Intel Corporation 
4   All rights reserved.
5   
6   Redistribution and use in source and binary forms, with or without 
7   modification, are permitted provided that the following conditions are met:
8   
9    1. Redistributions of source code must retain the above copyright notice, 
10       this list of conditions and the following disclaimer.
11   
12    2. Redistributions in binary form must reproduce the above copyright 
13       notice, this list of conditions and the following disclaimer in the 
14       documentation and/or other materials provided with the distribution.
15   
16    3. Neither the name of the Intel Corporation nor the names of its 
17       contributors may be used to endorse or promote products derived from 
18       this software without specific prior written permission.
19   
20   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
22   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
23   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
24   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
25   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
26   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
27   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
28   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
29   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30   POSSIBILITY OF SUCH DAMAGE.
31
32 ******************************************************************************/
33 /*$FreeBSD$*/
34
35 #include "ixgbe_type.h"
36 #include "ixgbe_api.h"
37 #include "ixgbe_common.h"
38 #include "ixgbe_phy.h"
39
40 u32 ixgbe_get_pcie_msix_count_82598(struct ixgbe_hw *hw);
41 s32 ixgbe_init_ops_82598(struct ixgbe_hw *hw);
42 static s32 ixgbe_get_link_capabilities_82598(struct ixgbe_hw *hw,
43                                              ixgbe_link_speed *speed,
44                                              bool *autoneg);
45 static enum ixgbe_media_type ixgbe_get_media_type_82598(struct ixgbe_hw *hw);
46 s32 ixgbe_fc_enable_82598(struct ixgbe_hw *hw, s32 packetbuf_num);
47 static s32 ixgbe_start_mac_link_82598(struct ixgbe_hw *hw,
48                                         bool autoneg_wait_to_complete);
49 static s32 ixgbe_check_mac_link_82598(struct ixgbe_hw *hw,
50                                       ixgbe_link_speed *speed, bool *link_up,
51                                       bool link_up_wait_to_complete);
52 static s32 ixgbe_setup_mac_link_82598(struct ixgbe_hw *hw,
53                                             ixgbe_link_speed speed,
54                                             bool autoneg,
55                                             bool autoneg_wait_to_complete);
56 static s32 ixgbe_setup_copper_link_82598(struct ixgbe_hw *hw,
57                                                ixgbe_link_speed speed,
58                                                bool autoneg,
59                                                bool autoneg_wait_to_complete);
60 static s32 ixgbe_reset_hw_82598(struct ixgbe_hw *hw);
61 s32 ixgbe_start_hw_82598(struct ixgbe_hw *hw);
62 void ixgbe_enable_relaxed_ordering_82598(struct ixgbe_hw *hw);
63 s32 ixgbe_set_vmdq_82598(struct ixgbe_hw *hw, u32 rar, u32 vmdq);
64 static s32 ixgbe_clear_vmdq_82598(struct ixgbe_hw *hw, u32 rar, u32 vmdq);
65 s32 ixgbe_set_vfta_82598(struct ixgbe_hw *hw, u32 vlan,
66                          u32 vind, bool vlan_on);
67 static s32 ixgbe_clear_vfta_82598(struct ixgbe_hw *hw);
68 s32 ixgbe_read_analog_reg8_82598(struct ixgbe_hw *hw, u32 reg, u8 *val);
69 s32 ixgbe_write_analog_reg8_82598(struct ixgbe_hw *hw, u32 reg, u8 val);
70 s32 ixgbe_read_i2c_eeprom_82598(struct ixgbe_hw *hw, u8 byte_offset,
71                                 u8 *eeprom_data);
72 u32 ixgbe_get_supported_physical_layer_82598(struct ixgbe_hw *hw);
73 s32 ixgbe_init_phy_ops_82598(struct ixgbe_hw *hw);
74 void ixgbe_set_lan_id_multi_port_pcie_82598(struct ixgbe_hw *hw);
75 void ixgbe_set_pcie_completion_timeout(struct ixgbe_hw *hw);
76
77 /**
78  *  ixgbe_set_pcie_completion_timeout - set pci-e completion timeout
79  *  @hw: pointer to the HW structure
80  *
81  *  The defaults for 82598 should be in the range of 50us to 50ms,
82  *  however the hardware default for these parts is 500us to 1ms which is less
83  *  than the 10ms recommended by the pci-e spec.  To address this we need to
84  *  increase the value to either 10ms to 250ms for capability version 1 config,
85  *  or 16ms to 55ms for version 2.
86  **/
87 void ixgbe_set_pcie_completion_timeout(struct ixgbe_hw *hw)
88 {
89         u32 gcr = IXGBE_READ_REG(hw, IXGBE_GCR);
90         u16 pcie_devctl2;
91
92         /* only take action if timeout value is defaulted to 0 */
93         if (gcr & IXGBE_GCR_CMPL_TMOUT_MASK)
94                 goto out;
95
96         /*
97          * if capababilities version is type 1 we can write the
98          * timeout of 10ms to 250ms through the GCR register
99          */
100         if (!(gcr & IXGBE_GCR_CAP_VER2)) {
101                 gcr |= IXGBE_GCR_CMPL_TMOUT_10ms;
102                 goto out;
103         }
104
105         /*
106          * for version 2 capabilities we need to write the config space
107          * directly in order to set the completion timeout value for
108          * 16ms to 55ms
109          */
110         pcie_devctl2 = IXGBE_READ_PCIE_WORD(hw, IXGBE_PCI_DEVICE_CONTROL2);
111         pcie_devctl2 |= IXGBE_PCI_DEVICE_CONTROL2_16ms;
112         IXGBE_WRITE_PCIE_WORD(hw, IXGBE_PCI_DEVICE_CONTROL2, pcie_devctl2);
113 out:
114         /* disable completion timeout resend */
115         gcr &= ~IXGBE_GCR_CMPL_TMOUT_RESEND;
116         IXGBE_WRITE_REG(hw, IXGBE_GCR, gcr);
117 }
118
119 /**
120  *  ixgbe_get_pcie_msix_count_82598 - Gets MSI-X vector count
121  *  @hw: pointer to hardware structure
122  *
123  *  Read PCIe configuration space, and get the MSI-X vector count from
124  *  the capabilities table.
125  **/
126 u32 ixgbe_get_pcie_msix_count_82598(struct ixgbe_hw *hw)
127 {
128         u32 msix_count = 18;
129
130         DEBUGFUNC("ixgbe_get_pcie_msix_count_82598");
131
132         if (hw->mac.msix_vectors_from_pcie) {
133                 msix_count = IXGBE_READ_PCIE_WORD(hw,
134                                                   IXGBE_PCIE_MSIX_82598_CAPS);
135                 msix_count &= IXGBE_PCIE_MSIX_TBL_SZ_MASK;
136
137                 /* MSI-X count is zero-based in HW, so increment to give
138                  * proper value */
139                 msix_count++;
140         }
141         return msix_count;
142 }
143
144 /**
145  *  ixgbe_init_ops_82598 - Inits func ptrs and MAC type
146  *  @hw: pointer to hardware structure
147  *
148  *  Initialize the function pointers and assign the MAC type for 82598.
149  *  Does not touch the hardware.
150  **/
151 s32 ixgbe_init_ops_82598(struct ixgbe_hw *hw)
152 {
153         struct ixgbe_mac_info *mac = &hw->mac;
154         struct ixgbe_phy_info *phy = &hw->phy;
155         s32 ret_val;
156
157         DEBUGFUNC("ixgbe_init_ops_82598");
158
159         ret_val = ixgbe_init_phy_ops_generic(hw);
160         ret_val = ixgbe_init_ops_generic(hw);
161
162         /* PHY */
163         phy->ops.init = &ixgbe_init_phy_ops_82598;
164
165         /* MAC */
166         mac->ops.start_hw = &ixgbe_start_hw_82598;
167         mac->ops.enable_relaxed_ordering = &ixgbe_enable_relaxed_ordering_82598;
168         mac->ops.reset_hw = &ixgbe_reset_hw_82598;
169         mac->ops.get_media_type = &ixgbe_get_media_type_82598;
170         mac->ops.get_supported_physical_layer =
171                                     &ixgbe_get_supported_physical_layer_82598;
172         mac->ops.read_analog_reg8 = &ixgbe_read_analog_reg8_82598;
173         mac->ops.write_analog_reg8 = &ixgbe_write_analog_reg8_82598;
174         mac->ops.set_lan_id = &ixgbe_set_lan_id_multi_port_pcie_82598;
175
176         /* RAR, Multicast, VLAN */
177         mac->ops.set_vmdq = &ixgbe_set_vmdq_82598;
178         mac->ops.clear_vmdq = &ixgbe_clear_vmdq_82598;
179         mac->ops.set_vfta = &ixgbe_set_vfta_82598;
180         mac->ops.clear_vfta = &ixgbe_clear_vfta_82598;
181
182         /* Flow Control */
183         mac->ops.fc_enable = &ixgbe_fc_enable_82598;
184
185         mac->mcft_size       = 128;
186         mac->vft_size        = 128;
187         mac->num_rar_entries = 16;
188         mac->rx_pb_size      = 512;
189         mac->max_tx_queues   = 32;
190         mac->max_rx_queues   = 64;
191         mac->max_msix_vectors = ixgbe_get_pcie_msix_count_82598(hw);
192
193         /* SFP+ Module */
194         phy->ops.read_i2c_eeprom = &ixgbe_read_i2c_eeprom_82598;
195
196         /* Link */
197         mac->ops.check_link = &ixgbe_check_mac_link_82598;
198         mac->ops.setup_link = &ixgbe_setup_mac_link_82598;
199         mac->ops.flap_tx_laser = NULL;
200         mac->ops.get_link_capabilities =
201                                &ixgbe_get_link_capabilities_82598;
202
203         return ret_val;
204 }
205
206 /**
207  *  ixgbe_init_phy_ops_82598 - PHY/SFP specific init
208  *  @hw: pointer to hardware structure
209  *
210  *  Initialize any function pointers that were not able to be
211  *  set during init_shared_code because the PHY/SFP type was
212  *  not known.  Perform the SFP init if necessary.
213  *
214  **/
215 s32 ixgbe_init_phy_ops_82598(struct ixgbe_hw *hw)
216 {
217         struct ixgbe_mac_info *mac = &hw->mac;
218         struct ixgbe_phy_info *phy = &hw->phy;
219         s32 ret_val = IXGBE_SUCCESS;
220         u16 list_offset, data_offset;
221
222         DEBUGFUNC("ixgbe_init_phy_ops_82598");
223
224         /* Identify the PHY */
225         phy->ops.identify(hw);
226
227         /* Overwrite the link function pointers if copper PHY */
228         if (mac->ops.get_media_type(hw) == ixgbe_media_type_copper) {
229                 mac->ops.setup_link = &ixgbe_setup_copper_link_82598;
230                 mac->ops.get_link_capabilities =
231                                   &ixgbe_get_copper_link_capabilities_generic;
232         }
233
234         switch (hw->phy.type) {
235         case ixgbe_phy_tn:
236                 phy->ops.setup_link = &ixgbe_setup_phy_link_tnx;
237                 phy->ops.check_link = &ixgbe_check_phy_link_tnx;
238                 phy->ops.get_firmware_version =
239                              &ixgbe_get_phy_firmware_version_tnx;
240                 break;
241         case ixgbe_phy_aq:
242                 phy->ops.get_firmware_version =
243                              &ixgbe_get_phy_firmware_version_generic;
244                 break;
245         case ixgbe_phy_nl:
246                 phy->ops.reset = &ixgbe_reset_phy_nl;
247
248                 /* Call SFP+ identify routine to get the SFP+ module type */
249                 ret_val = phy->ops.identify_sfp(hw);
250                 if (ret_val != IXGBE_SUCCESS)
251                         goto out;
252                 else if (hw->phy.sfp_type == ixgbe_sfp_type_unknown) {
253                         ret_val = IXGBE_ERR_SFP_NOT_SUPPORTED;
254                         goto out;
255                 }
256
257                 /* Check to see if SFP+ module is supported */
258                 ret_val = ixgbe_get_sfp_init_sequence_offsets(hw,
259                                                             &list_offset,
260                                                             &data_offset);
261                 if (ret_val != IXGBE_SUCCESS) {
262                         ret_val = IXGBE_ERR_SFP_NOT_SUPPORTED;
263                         goto out;
264                 }
265                 break;
266         default:
267                 break;
268         }
269
270 out:
271         return ret_val;
272 }
273
274 /**
275  *  ixgbe_start_hw_82598 - Prepare hardware for Tx/Rx
276  *  @hw: pointer to hardware structure
277  *
278  *  Starts the hardware using the generic start_hw function.
279  *  Disables relaxed ordering Then set pcie completion timeout
280  *
281  **/
282 s32 ixgbe_start_hw_82598(struct ixgbe_hw *hw)
283 {
284         u32 regval;
285         u32 i;
286         s32 ret_val = IXGBE_SUCCESS;
287
288         DEBUGFUNC("ixgbe_start_hw_82598");
289
290         ret_val = ixgbe_start_hw_generic(hw);
291
292         /* Disable relaxed ordering */
293         for (i = 0; ((i < hw->mac.max_tx_queues) &&
294              (i < IXGBE_DCA_MAX_QUEUES_82598)); i++) {
295                 regval = IXGBE_READ_REG(hw, IXGBE_DCA_TXCTRL(i));
296                 regval &= ~IXGBE_DCA_TXCTRL_TX_WB_RO_EN;
297                 IXGBE_WRITE_REG(hw, IXGBE_DCA_TXCTRL(i), regval);
298         }
299
300         for (i = 0; ((i < hw->mac.max_rx_queues) &&
301              (i < IXGBE_DCA_MAX_QUEUES_82598)); i++) {
302                 regval = IXGBE_READ_REG(hw, IXGBE_DCA_RXCTRL(i));
303                 regval &= ~(IXGBE_DCA_RXCTRL_DESC_WRO_EN |
304                             IXGBE_DCA_RXCTRL_DESC_HSRO_EN);
305                 IXGBE_WRITE_REG(hw, IXGBE_DCA_RXCTRL(i), regval);
306         }
307
308         /* set the completion timeout for interface */
309         if (ret_val == IXGBE_SUCCESS)
310                 ixgbe_set_pcie_completion_timeout(hw);
311
312         return ret_val;
313 }
314
315 /**
316  *  ixgbe_get_link_capabilities_82598 - Determines link capabilities
317  *  @hw: pointer to hardware structure
318  *  @speed: pointer to link speed
319  *  @autoneg: boolean auto-negotiation value
320  *
321  *  Determines the link capabilities by reading the AUTOC register.
322  **/
323 static s32 ixgbe_get_link_capabilities_82598(struct ixgbe_hw *hw,
324                                              ixgbe_link_speed *speed,
325                                              bool *autoneg)
326 {
327         s32 status = IXGBE_SUCCESS;
328         u32 autoc = 0;
329
330         DEBUGFUNC("ixgbe_get_link_capabilities_82598");
331
332         /*
333          * Determine link capabilities based on the stored value of AUTOC,
334          * which represents EEPROM defaults.  If AUTOC value has not been
335          * stored, use the current register value.
336          */
337         if (hw->mac.orig_link_settings_stored)
338                 autoc = hw->mac.orig_autoc;
339         else
340                 autoc = IXGBE_READ_REG(hw, IXGBE_AUTOC);
341
342         switch (autoc & IXGBE_AUTOC_LMS_MASK) {
343         case IXGBE_AUTOC_LMS_1G_LINK_NO_AN:
344                 *speed = IXGBE_LINK_SPEED_1GB_FULL;
345                 *autoneg = FALSE;
346                 break;
347
348         case IXGBE_AUTOC_LMS_10G_LINK_NO_AN:
349                 *speed = IXGBE_LINK_SPEED_10GB_FULL;
350                 *autoneg = FALSE;
351                 break;
352
353         case IXGBE_AUTOC_LMS_1G_AN:
354                 *speed = IXGBE_LINK_SPEED_1GB_FULL;
355                 *autoneg = TRUE;
356                 break;
357
358         case IXGBE_AUTOC_LMS_KX4_AN:
359         case IXGBE_AUTOC_LMS_KX4_AN_1G_AN:
360                 *speed = IXGBE_LINK_SPEED_UNKNOWN;
361                 if (autoc & IXGBE_AUTOC_KX4_SUPP)
362                         *speed |= IXGBE_LINK_SPEED_10GB_FULL;
363                 if (autoc & IXGBE_AUTOC_KX_SUPP)
364                         *speed |= IXGBE_LINK_SPEED_1GB_FULL;
365                 *autoneg = TRUE;
366                 break;
367
368         default:
369                 status = IXGBE_ERR_LINK_SETUP;
370                 break;
371         }
372
373         return status;
374 }
375
376 /**
377  *  ixgbe_get_media_type_82598 - Determines media type
378  *  @hw: pointer to hardware structure
379  *
380  *  Returns the media type (fiber, copper, backplane)
381  **/
382 static enum ixgbe_media_type ixgbe_get_media_type_82598(struct ixgbe_hw *hw)
383 {
384         enum ixgbe_media_type media_type;
385
386         DEBUGFUNC("ixgbe_get_media_type_82598");
387
388         /* Detect if there is a copper PHY attached. */
389         switch (hw->phy.type) {
390         case ixgbe_phy_cu_unknown:
391         case ixgbe_phy_tn:
392         case ixgbe_phy_aq:
393                 media_type = ixgbe_media_type_copper;
394                 goto out;
395         default:
396                 break;
397         }
398
399         /* Media type for I82598 is based on device ID */
400         switch (hw->device_id) {
401         case IXGBE_DEV_ID_82598:
402         case IXGBE_DEV_ID_82598_BX:
403                 /* Default device ID is mezzanine card KX/KX4 */
404                 media_type = ixgbe_media_type_backplane;
405                 break;
406         case IXGBE_DEV_ID_82598AF_DUAL_PORT:
407         case IXGBE_DEV_ID_82598AF_SINGLE_PORT:
408         case IXGBE_DEV_ID_82598_DA_DUAL_PORT:
409         case IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM:
410         case IXGBE_DEV_ID_82598EB_XF_LR:
411         case IXGBE_DEV_ID_82598EB_SFP_LOM:
412                 media_type = ixgbe_media_type_fiber;
413                 break;
414         case IXGBE_DEV_ID_82598EB_CX4:
415         case IXGBE_DEV_ID_82598_CX4_DUAL_PORT:
416                 media_type = ixgbe_media_type_cx4;
417                 break;
418         case IXGBE_DEV_ID_82598AT:
419         case IXGBE_DEV_ID_82598AT2:
420                 media_type = ixgbe_media_type_copper;
421                 break;
422         default:
423                 media_type = ixgbe_media_type_unknown;
424                 break;
425         }
426 out:
427         return media_type;
428 }
429
430 /**
431  *  ixgbe_fc_enable_82598 - Enable flow control
432  *  @hw: pointer to hardware structure
433  *  @packetbuf_num: packet buffer number (0-7)
434  *
435  *  Enable flow control according to the current settings.
436  **/
437 s32 ixgbe_fc_enable_82598(struct ixgbe_hw *hw, s32 packetbuf_num)
438 {
439         s32 ret_val = IXGBE_SUCCESS;
440         u32 fctrl_reg;
441         u32 rmcs_reg;
442         u32 reg;
443         u32 rx_pba_size;
444         u32 link_speed = 0;
445         bool link_up;
446
447         DEBUGFUNC("ixgbe_fc_enable_82598");
448
449         /*
450          * On 82598 having Rx FC on causes resets while doing 1G
451          * so if it's on turn it off once we know link_speed. For
452          * more details see 82598 Specification update.
453          */
454         hw->mac.ops.check_link(hw, &link_speed, &link_up, FALSE);
455         if (link_up && link_speed == IXGBE_LINK_SPEED_1GB_FULL) {
456                 switch (hw->fc.requested_mode) {
457                 case ixgbe_fc_full:
458                         hw->fc.requested_mode = ixgbe_fc_tx_pause;
459                         break;
460                 case ixgbe_fc_rx_pause:
461                         hw->fc.requested_mode = ixgbe_fc_none;
462                         break;
463                 default:
464                         /* no change */
465                         break;
466                 }
467         }
468
469         /* Negotiate the fc mode to use */
470         ret_val = ixgbe_fc_autoneg(hw);
471         if (ret_val == IXGBE_ERR_FLOW_CONTROL)
472                 goto out;
473
474         /* Disable any previous flow control settings */
475         fctrl_reg = IXGBE_READ_REG(hw, IXGBE_FCTRL);
476         fctrl_reg &= ~(IXGBE_FCTRL_RFCE | IXGBE_FCTRL_RPFCE);
477
478         rmcs_reg = IXGBE_READ_REG(hw, IXGBE_RMCS);
479         rmcs_reg &= ~(IXGBE_RMCS_TFCE_PRIORITY | IXGBE_RMCS_TFCE_802_3X);
480
481         /*
482          * The possible values of fc.current_mode are:
483          * 0: Flow control is completely disabled
484          * 1: Rx flow control is enabled (we can receive pause frames,
485          *    but not send pause frames).
486          * 2: Tx flow control is enabled (we can send pause frames but
487          *     we do not support receiving pause frames).
488          * 3: Both Rx and Tx flow control (symmetric) are enabled.
489          * other: Invalid.
490          */
491         switch (hw->fc.current_mode) {
492         case ixgbe_fc_none:
493                 /*
494                  * Flow control is disabled by software override or autoneg.
495                  * The code below will actually disable it in the HW.
496                  */
497                 break;
498         case ixgbe_fc_rx_pause:
499                 /*
500                  * Rx Flow control is enabled and Tx Flow control is
501                  * disabled by software override. Since there really
502                  * isn't a way to advertise that we are capable of RX
503                  * Pause ONLY, we will advertise that we support both
504                  * symmetric and asymmetric Rx PAUSE.  Later, we will
505                  * disable the adapter's ability to send PAUSE frames.
506                  */
507                 fctrl_reg |= IXGBE_FCTRL_RFCE;
508                 break;
509         case ixgbe_fc_tx_pause:
510                 /*
511                  * Tx Flow control is enabled, and Rx Flow control is
512                  * disabled by software override.
513                  */
514                 rmcs_reg |= IXGBE_RMCS_TFCE_802_3X;
515                 break;
516         case ixgbe_fc_full:
517                 /* Flow control (both Rx and Tx) is enabled by SW override. */
518                 fctrl_reg |= IXGBE_FCTRL_RFCE;
519                 rmcs_reg |= IXGBE_RMCS_TFCE_802_3X;
520                 break;
521         default:
522                 DEBUGOUT("Flow control param set incorrectly\n");
523                 ret_val = IXGBE_ERR_CONFIG;
524                 goto out;
525                 break;
526         }
527
528         /* Set 802.3x based flow control settings. */
529         fctrl_reg |= IXGBE_FCTRL_DPF;
530         IXGBE_WRITE_REG(hw, IXGBE_FCTRL, fctrl_reg);
531         IXGBE_WRITE_REG(hw, IXGBE_RMCS, rmcs_reg);
532
533         /* Set up and enable Rx high/low water mark thresholds, enable XON. */
534         if (hw->fc.current_mode & ixgbe_fc_tx_pause) {
535                 rx_pba_size = IXGBE_READ_REG(hw, IXGBE_RXPBSIZE(packetbuf_num));
536                 rx_pba_size >>= IXGBE_RXPBSIZE_SHIFT;
537
538                 reg = (rx_pba_size - hw->fc.low_water) << 6;
539                 if (hw->fc.send_xon)
540                         reg |= IXGBE_FCRTL_XONE;
541
542                 IXGBE_WRITE_REG(hw, IXGBE_FCRTL(packetbuf_num), reg);
543
544                 reg = (rx_pba_size - hw->fc.high_water) << 6;
545                 reg |= IXGBE_FCRTH_FCEN;
546
547                 IXGBE_WRITE_REG(hw, IXGBE_FCRTH(packetbuf_num), reg);
548         }
549
550         /* Configure pause time (2 TCs per register) */
551         reg = IXGBE_READ_REG(hw, IXGBE_FCTTV(packetbuf_num / 2));
552         if ((packetbuf_num & 1) == 0)
553                 reg = (reg & 0xFFFF0000) | hw->fc.pause_time;
554         else
555                 reg = (reg & 0x0000FFFF) | (hw->fc.pause_time << 16);
556         IXGBE_WRITE_REG(hw, IXGBE_FCTTV(packetbuf_num / 2), reg);
557
558         IXGBE_WRITE_REG(hw, IXGBE_FCRTV, (hw->fc.pause_time >> 1));
559
560 out:
561         return ret_val;
562 }
563
564 /**
565  *  ixgbe_start_mac_link_82598 - Configures MAC link settings
566  *  @hw: pointer to hardware structure
567  *
568  *  Configures link settings based on values in the ixgbe_hw struct.
569  *  Restarts the link.  Performs autonegotiation if needed.
570  **/
571 static s32 ixgbe_start_mac_link_82598(struct ixgbe_hw *hw,
572                                       bool autoneg_wait_to_complete)
573 {
574         u32 autoc_reg;
575         u32 links_reg;
576         u32 i;
577         s32 status = IXGBE_SUCCESS;
578
579         DEBUGFUNC("ixgbe_start_mac_link_82598");
580
581         /* Restart link */
582         autoc_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC);
583         autoc_reg |= IXGBE_AUTOC_AN_RESTART;
584         IXGBE_WRITE_REG(hw, IXGBE_AUTOC, autoc_reg);
585
586         /* Only poll for autoneg to complete if specified to do so */
587         if (autoneg_wait_to_complete) {
588                 if ((autoc_reg & IXGBE_AUTOC_LMS_MASK) ==
589                      IXGBE_AUTOC_LMS_KX4_AN ||
590                     (autoc_reg & IXGBE_AUTOC_LMS_MASK) ==
591                      IXGBE_AUTOC_LMS_KX4_AN_1G_AN) {
592                         links_reg = 0; /* Just in case Autoneg time = 0 */
593                         for (i = 0; i < IXGBE_AUTO_NEG_TIME; i++) {
594                                 links_reg = IXGBE_READ_REG(hw, IXGBE_LINKS);
595                                 if (links_reg & IXGBE_LINKS_KX_AN_COMP)
596                                         break;
597                                 msec_delay(100);
598                         }
599                         if (!(links_reg & IXGBE_LINKS_KX_AN_COMP)) {
600                                 status = IXGBE_ERR_AUTONEG_NOT_COMPLETE;
601                                 DEBUGOUT("Autonegotiation did not complete.\n");
602                         }
603                 }
604         }
605
606         /* Add delay to filter out noises during initial link setup */
607         msec_delay(50);
608
609         return status;
610 }
611
612 /**
613  *  ixgbe_validate_link_ready - Function looks for phy link
614  *  @hw: pointer to hardware structure
615  *
616  *  Function indicates success when phy link is available. If phy is not ready
617  *  within 5 seconds of MAC indicating link, the function returns error.
618  **/
619 static s32 ixgbe_validate_link_ready(struct ixgbe_hw *hw)
620 {
621         u32 timeout;
622         u16 an_reg;
623
624         if (hw->device_id != IXGBE_DEV_ID_82598AT2)
625                 return IXGBE_SUCCESS;
626
627         for (timeout = 0;
628              timeout < IXGBE_VALIDATE_LINK_READY_TIMEOUT; timeout++) {
629                 hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_STATUS,
630                                      IXGBE_MDIO_AUTO_NEG_DEV_TYPE, &an_reg);
631
632                 if ((an_reg & IXGBE_MII_AUTONEG_COMPLETE) &&
633                     (an_reg & IXGBE_MII_AUTONEG_LINK_UP))
634                         break;
635
636                 msec_delay(100);
637         }
638
639         if (timeout == IXGBE_VALIDATE_LINK_READY_TIMEOUT) {
640                 DEBUGOUT("Link was indicated but link is down\n");
641                 return IXGBE_ERR_LINK_SETUP;
642         }
643
644         return IXGBE_SUCCESS;
645 }
646
647 /**
648  *  ixgbe_check_mac_link_82598 - Get link/speed status
649  *  @hw: pointer to hardware structure
650  *  @speed: pointer to link speed
651  *  @link_up: TRUE is link is up, FALSE otherwise
652  *  @link_up_wait_to_complete: bool used to wait for link up or not
653  *
654  *  Reads the links register to determine if link is up and the current speed
655  **/
656 static s32 ixgbe_check_mac_link_82598(struct ixgbe_hw *hw,
657                                       ixgbe_link_speed *speed, bool *link_up,
658                                       bool link_up_wait_to_complete)
659 {
660         u32 links_reg;
661         u32 i;
662         u16 link_reg, adapt_comp_reg;
663
664         DEBUGFUNC("ixgbe_check_mac_link_82598");
665
666         /*
667          * SERDES PHY requires us to read link status from undocumented
668          * register 0xC79F.  Bit 0 set indicates link is up/ready; clear
669          * indicates link down.  OxC00C is read to check that the XAUI lanes
670          * are active.  Bit 0 clear indicates active; set indicates inactive.
671          */
672         if (hw->phy.type == ixgbe_phy_nl) {
673                 hw->phy.ops.read_reg(hw, 0xC79F, IXGBE_TWINAX_DEV, &link_reg);
674                 hw->phy.ops.read_reg(hw, 0xC79F, IXGBE_TWINAX_DEV, &link_reg);
675                 hw->phy.ops.read_reg(hw, 0xC00C, IXGBE_TWINAX_DEV,
676                                      &adapt_comp_reg);
677                 if (link_up_wait_to_complete) {
678                         for (i = 0; i < IXGBE_LINK_UP_TIME; i++) {
679                                 if ((link_reg & 1) &&
680                                     ((adapt_comp_reg & 1) == 0)) {
681                                         *link_up = TRUE;
682                                         break;
683                                 } else {
684                                         *link_up = FALSE;
685                                 }
686                                 msec_delay(100);
687                                 hw->phy.ops.read_reg(hw, 0xC79F,
688                                                      IXGBE_TWINAX_DEV,
689                                                      &link_reg);
690                                 hw->phy.ops.read_reg(hw, 0xC00C,
691                                                      IXGBE_TWINAX_DEV,
692                                                      &adapt_comp_reg);
693                         }
694                 } else {
695                         if ((link_reg & 1) && ((adapt_comp_reg & 1) == 0))
696                                 *link_up = TRUE;
697                         else
698                                 *link_up = FALSE;
699                 }
700
701                 if (*link_up == FALSE)
702                         goto out;
703         }
704
705         links_reg = IXGBE_READ_REG(hw, IXGBE_LINKS);
706         if (link_up_wait_to_complete) {
707                 for (i = 0; i < IXGBE_LINK_UP_TIME; i++) {
708                         if (links_reg & IXGBE_LINKS_UP) {
709                                 *link_up = TRUE;
710                                 break;
711                         } else {
712                                 *link_up = FALSE;
713                         }
714                         msec_delay(100);
715                         links_reg = IXGBE_READ_REG(hw, IXGBE_LINKS);
716                 }
717         } else {
718                 if (links_reg & IXGBE_LINKS_UP)
719                         *link_up = TRUE;
720                 else
721                         *link_up = FALSE;
722         }
723
724         if (links_reg & IXGBE_LINKS_SPEED)
725                 *speed = IXGBE_LINK_SPEED_10GB_FULL;
726         else
727                 *speed = IXGBE_LINK_SPEED_1GB_FULL;
728
729         if ((hw->device_id == IXGBE_DEV_ID_82598AT2) && (*link_up == TRUE) &&
730             (ixgbe_validate_link_ready(hw) != IXGBE_SUCCESS))
731                 *link_up = FALSE;
732
733         /* if link is down, zero out the current_mode */
734         if (*link_up == FALSE) {
735                 hw->fc.current_mode = ixgbe_fc_none;
736                 hw->fc.fc_was_autonegged = FALSE;
737         }
738 out:
739         return IXGBE_SUCCESS;
740 }
741
742 /**
743  *  ixgbe_setup_mac_link_82598 - Set MAC link speed
744  *  @hw: pointer to hardware structure
745  *  @speed: new link speed
746  *  @autoneg: TRUE if autonegotiation enabled
747  *  @autoneg_wait_to_complete: TRUE when waiting for completion is needed
748  *
749  *  Set the link speed in the AUTOC register and restarts link.
750  **/
751 static s32 ixgbe_setup_mac_link_82598(struct ixgbe_hw *hw,
752                                            ixgbe_link_speed speed, bool autoneg,
753                                            bool autoneg_wait_to_complete)
754 {
755         s32              status            = IXGBE_SUCCESS;
756         ixgbe_link_speed link_capabilities = IXGBE_LINK_SPEED_UNKNOWN;
757         u32              curr_autoc        = IXGBE_READ_REG(hw, IXGBE_AUTOC);
758         u32              autoc             = curr_autoc;
759         u32              link_mode         = autoc & IXGBE_AUTOC_LMS_MASK;
760
761         DEBUGFUNC("ixgbe_setup_mac_link_82598");
762
763         /* Check to see if speed passed in is supported. */
764         ixgbe_get_link_capabilities(hw, &link_capabilities, &autoneg);
765         speed &= link_capabilities;
766
767         if (speed == IXGBE_LINK_SPEED_UNKNOWN)
768                 status = IXGBE_ERR_LINK_SETUP;
769
770         /* Set KX4/KX support according to speed requested */
771         else if (link_mode == IXGBE_AUTOC_LMS_KX4_AN ||
772                  link_mode == IXGBE_AUTOC_LMS_KX4_AN_1G_AN) {
773                 autoc &= ~IXGBE_AUTOC_KX4_KX_SUPP_MASK;
774                 if (speed & IXGBE_LINK_SPEED_10GB_FULL)
775                         autoc |= IXGBE_AUTOC_KX4_SUPP;
776                 if (speed & IXGBE_LINK_SPEED_1GB_FULL)
777                         autoc |= IXGBE_AUTOC_KX_SUPP;
778                 if (autoc != curr_autoc)
779                         IXGBE_WRITE_REG(hw, IXGBE_AUTOC, autoc);
780         }
781
782         if (status == IXGBE_SUCCESS) {
783                 /*
784                  * Setup and restart the link based on the new values in
785                  * ixgbe_hw This will write the AUTOC register based on the new
786                  * stored values
787                  */
788                 status = ixgbe_start_mac_link_82598(hw,
789                                                     autoneg_wait_to_complete);
790         }
791
792         return status;
793 }
794
795
796 /**
797  *  ixgbe_setup_copper_link_82598 - Set the PHY autoneg advertised field
798  *  @hw: pointer to hardware structure
799  *  @speed: new link speed
800  *  @autoneg: TRUE if autonegotiation enabled
801  *  @autoneg_wait_to_complete: TRUE if waiting is needed to complete
802  *
803  *  Sets the link speed in the AUTOC register in the MAC and restarts link.
804  **/
805 static s32 ixgbe_setup_copper_link_82598(struct ixgbe_hw *hw,
806                                                ixgbe_link_speed speed,
807                                                bool autoneg,
808                                                bool autoneg_wait_to_complete)
809 {
810         s32 status;
811
812         DEBUGFUNC("ixgbe_setup_copper_link_82598");
813
814         /* Setup the PHY according to input speed */
815         status = hw->phy.ops.setup_link_speed(hw, speed, autoneg,
816                                               autoneg_wait_to_complete);
817         /* Set up MAC */
818         ixgbe_start_mac_link_82598(hw, autoneg_wait_to_complete);
819
820         return status;
821 }
822
823 /**
824  *  ixgbe_reset_hw_82598 - Performs hardware reset
825  *  @hw: pointer to hardware structure
826  *
827  *  Resets the hardware by resetting the transmit and receive units, masks and
828  *  clears all interrupts, performing a PHY reset, and performing a link (MAC)
829  *  reset.
830  **/
831 static s32 ixgbe_reset_hw_82598(struct ixgbe_hw *hw)
832 {
833         s32 status = IXGBE_SUCCESS;
834         s32 phy_status = IXGBE_SUCCESS;
835         u32 ctrl;
836         u32 gheccr;
837         u32 i;
838         u32 autoc;
839         u8  analog_val;
840
841         DEBUGFUNC("ixgbe_reset_hw_82598");
842
843         /* Call adapter stop to disable tx/rx and clear interrupts */
844         hw->mac.ops.stop_adapter(hw);
845
846         /*
847          * Power up the Atlas Tx lanes if they are currently powered down.
848          * Atlas Tx lanes are powered down for MAC loopback tests, but
849          * they are not automatically restored on reset.
850          */
851         hw->mac.ops.read_analog_reg8(hw, IXGBE_ATLAS_PDN_LPBK, &analog_val);
852         if (analog_val & IXGBE_ATLAS_PDN_TX_REG_EN) {
853                 /* Enable Tx Atlas so packets can be transmitted again */
854                 hw->mac.ops.read_analog_reg8(hw, IXGBE_ATLAS_PDN_LPBK,
855                                              &analog_val);
856                 analog_val &= ~IXGBE_ATLAS_PDN_TX_REG_EN;
857                 hw->mac.ops.write_analog_reg8(hw, IXGBE_ATLAS_PDN_LPBK,
858                                               analog_val);
859
860                 hw->mac.ops.read_analog_reg8(hw, IXGBE_ATLAS_PDN_10G,
861                                              &analog_val);
862                 analog_val &= ~IXGBE_ATLAS_PDN_TX_10G_QL_ALL;
863                 hw->mac.ops.write_analog_reg8(hw, IXGBE_ATLAS_PDN_10G,
864                                               analog_val);
865
866                 hw->mac.ops.read_analog_reg8(hw, IXGBE_ATLAS_PDN_1G,
867                                              &analog_val);
868                 analog_val &= ~IXGBE_ATLAS_PDN_TX_1G_QL_ALL;
869                 hw->mac.ops.write_analog_reg8(hw, IXGBE_ATLAS_PDN_1G,
870                                               analog_val);
871
872                 hw->mac.ops.read_analog_reg8(hw, IXGBE_ATLAS_PDN_AN,
873                                              &analog_val);
874                 analog_val &= ~IXGBE_ATLAS_PDN_TX_AN_QL_ALL;
875                 hw->mac.ops.write_analog_reg8(hw, IXGBE_ATLAS_PDN_AN,
876                                               analog_val);
877         }
878
879         /* Reset PHY */
880         if (hw->phy.reset_disable == FALSE) {
881                 /* PHY ops must be identified and initialized prior to reset */
882
883                 /* Init PHY and function pointers, perform SFP setup */
884                 phy_status = hw->phy.ops.init(hw);
885                 if (phy_status == IXGBE_ERR_SFP_NOT_SUPPORTED)
886                         goto reset_hw_out;
887                 else if (phy_status == IXGBE_ERR_SFP_NOT_PRESENT)
888                         goto no_phy_reset;
889
890                 hw->phy.ops.reset(hw);
891         }
892
893 no_phy_reset:
894         /*
895          * Prevent the PCI-E bus from from hanging by disabling PCI-E master
896          * access and verify no pending requests before reset
897          */
898         ixgbe_disable_pcie_master(hw);
899
900 mac_reset_top:
901         /*
902          * Issue global reset to the MAC.  This needs to be a SW reset.
903          * If link reset is used, it might reset the MAC when mng is using it
904          */
905         ctrl = IXGBE_READ_REG(hw, IXGBE_CTRL);
906         IXGBE_WRITE_REG(hw, IXGBE_CTRL, (ctrl | IXGBE_CTRL_RST));
907         IXGBE_WRITE_FLUSH(hw);
908
909         /* Poll for reset bit to self-clear indicating reset is complete */
910         for (i = 0; i < 10; i++) {
911                 usec_delay(1);
912                 ctrl = IXGBE_READ_REG(hw, IXGBE_CTRL);
913                 if (!(ctrl & IXGBE_CTRL_RST))
914                         break;
915         }
916         if (ctrl & IXGBE_CTRL_RST) {
917                 status = IXGBE_ERR_RESET_FAILED;
918                 DEBUGOUT("Reset polling failed to complete.\n");
919         }
920
921         /*
922          * Double resets are required for recovery from certain error
923          * conditions.  Between resets, it is necessary to stall to allow time
924          * for any pending HW events to complete.  We use 1usec since that is
925          * what is needed for ixgbe_disable_pcie_master().  The second reset
926          * then clears out any effects of those events.
927          */
928         if (hw->mac.flags & IXGBE_FLAGS_DOUBLE_RESET_REQUIRED) {
929                 hw->mac.flags &= ~IXGBE_FLAGS_DOUBLE_RESET_REQUIRED;
930                 usec_delay(1);
931                 goto mac_reset_top;
932         }
933
934         msec_delay(50);
935
936         gheccr = IXGBE_READ_REG(hw, IXGBE_GHECCR);
937         gheccr &= ~((1 << 21) | (1 << 18) | (1 << 9) | (1 << 6));
938         IXGBE_WRITE_REG(hw, IXGBE_GHECCR, gheccr);
939
940         /*
941          * Store the original AUTOC value if it has not been
942          * stored off yet.  Otherwise restore the stored original
943          * AUTOC value since the reset operation sets back to deaults.
944          */
945         autoc = IXGBE_READ_REG(hw, IXGBE_AUTOC);
946         if (hw->mac.orig_link_settings_stored == FALSE) {
947                 hw->mac.orig_autoc = autoc;
948                 hw->mac.orig_link_settings_stored = TRUE;
949         } else if (autoc != hw->mac.orig_autoc) {
950                 IXGBE_WRITE_REG(hw, IXGBE_AUTOC, hw->mac.orig_autoc);
951         }
952
953         /* Store the permanent mac address */
954         hw->mac.ops.get_mac_addr(hw, hw->mac.perm_addr);
955
956         /*
957          * Store MAC address from RAR0, clear receive address registers, and
958          * clear the multicast table
959          */
960         hw->mac.ops.init_rx_addrs(hw);
961
962 reset_hw_out:
963         if (phy_status != IXGBE_SUCCESS)
964                 status = phy_status;
965
966         return status;
967 }
968
969 /**
970  *  ixgbe_set_vmdq_82598 - Associate a VMDq set index with a rx address
971  *  @hw: pointer to hardware struct
972  *  @rar: receive address register index to associate with a VMDq index
973  *  @vmdq: VMDq set index
974  **/
975 s32 ixgbe_set_vmdq_82598(struct ixgbe_hw *hw, u32 rar, u32 vmdq)
976 {
977         u32 rar_high;
978         u32 rar_entries = hw->mac.num_rar_entries;
979
980         DEBUGFUNC("ixgbe_set_vmdq_82598");
981
982         /* Make sure we are using a valid rar index range */
983         if (rar >= rar_entries) {
984                 DEBUGOUT1("RAR index %d is out of range.\n", rar);
985                 return IXGBE_ERR_INVALID_ARGUMENT;
986         }
987
988         rar_high = IXGBE_READ_REG(hw, IXGBE_RAH(rar));
989         rar_high &= ~IXGBE_RAH_VIND_MASK;
990         rar_high |= ((vmdq << IXGBE_RAH_VIND_SHIFT) & IXGBE_RAH_VIND_MASK);
991         IXGBE_WRITE_REG(hw, IXGBE_RAH(rar), rar_high);
992         return IXGBE_SUCCESS;
993 }
994
995 /**
996  *  ixgbe_clear_vmdq_82598 - Disassociate a VMDq set index from an rx address
997  *  @hw: pointer to hardware struct
998  *  @rar: receive address register index to associate with a VMDq index
999  *  @vmdq: VMDq clear index (not used in 82598, but elsewhere)
1000  **/
1001 static s32 ixgbe_clear_vmdq_82598(struct ixgbe_hw *hw, u32 rar, u32 vmdq)
1002 {
1003         u32 rar_high;
1004         u32 rar_entries = hw->mac.num_rar_entries;
1005
1006         UNREFERENCED_PARAMETER(vmdq);
1007
1008         /* Make sure we are using a valid rar index range */
1009         if (rar >= rar_entries) {
1010                 DEBUGOUT1("RAR index %d is out of range.\n", rar);
1011                 return IXGBE_ERR_INVALID_ARGUMENT;
1012         }
1013
1014         rar_high = IXGBE_READ_REG(hw, IXGBE_RAH(rar));
1015         if (rar_high & IXGBE_RAH_VIND_MASK) {
1016                 rar_high &= ~IXGBE_RAH_VIND_MASK;
1017                 IXGBE_WRITE_REG(hw, IXGBE_RAH(rar), rar_high);
1018         }
1019
1020         return IXGBE_SUCCESS;
1021 }
1022
1023 /**
1024  *  ixgbe_set_vfta_82598 - Set VLAN filter table
1025  *  @hw: pointer to hardware structure
1026  *  @vlan: VLAN id to write to VLAN filter
1027  *  @vind: VMDq output index that maps queue to VLAN id in VFTA
1028  *  @vlan_on: boolean flag to turn on/off VLAN in VFTA
1029  *
1030  *  Turn on/off specified VLAN in the VLAN filter table.
1031  **/
1032 s32 ixgbe_set_vfta_82598(struct ixgbe_hw *hw, u32 vlan, u32 vind,
1033                                                       bool vlan_on)
1034 {
1035         u32 regindex;
1036         u32 bitindex;
1037         u32 bits;
1038         u32 vftabyte;
1039
1040         DEBUGFUNC("ixgbe_set_vfta_82598");
1041
1042         if (vlan > 4095)
1043                 return IXGBE_ERR_PARAM;
1044
1045         /* Determine 32-bit word position in array */
1046         regindex = (vlan >> 5) & 0x7F;   /* upper seven bits */
1047
1048         /* Determine the location of the (VMD) queue index */
1049         vftabyte =  ((vlan >> 3) & 0x03); /* bits (4:3) indicating byte array */
1050         bitindex = (vlan & 0x7) << 2;    /* lower 3 bits indicate nibble */
1051
1052         /* Set the nibble for VMD queue index */
1053         bits = IXGBE_READ_REG(hw, IXGBE_VFTAVIND(vftabyte, regindex));
1054         bits &= (~(0x0F << bitindex));
1055         bits |= (vind << bitindex);
1056         IXGBE_WRITE_REG(hw, IXGBE_VFTAVIND(vftabyte, regindex), bits);
1057
1058         /* Determine the location of the bit for this VLAN id */
1059         bitindex = vlan & 0x1F;   /* lower five bits */
1060
1061         bits = IXGBE_READ_REG(hw, IXGBE_VFTA(regindex));
1062         if (vlan_on)
1063                 /* Turn on this VLAN id */
1064                 bits |= (1 << bitindex);
1065         else
1066                 /* Turn off this VLAN id */
1067                 bits &= ~(1 << bitindex);
1068         IXGBE_WRITE_REG(hw, IXGBE_VFTA(regindex), bits);
1069
1070         return IXGBE_SUCCESS;
1071 }
1072
1073 /**
1074  *  ixgbe_clear_vfta_82598 - Clear VLAN filter table
1075  *  @hw: pointer to hardware structure
1076  *
1077  *  Clears the VLAN filer table, and the VMDq index associated with the filter
1078  **/
1079 static s32 ixgbe_clear_vfta_82598(struct ixgbe_hw *hw)
1080 {
1081         u32 offset;
1082         u32 vlanbyte;
1083
1084         DEBUGFUNC("ixgbe_clear_vfta_82598");
1085
1086         for (offset = 0; offset < hw->mac.vft_size; offset++)
1087                 IXGBE_WRITE_REG(hw, IXGBE_VFTA(offset), 0);
1088
1089         for (vlanbyte = 0; vlanbyte < 4; vlanbyte++)
1090                 for (offset = 0; offset < hw->mac.vft_size; offset++)
1091                         IXGBE_WRITE_REG(hw, IXGBE_VFTAVIND(vlanbyte, offset),
1092                                         0);
1093
1094         return IXGBE_SUCCESS;
1095 }
1096
1097 /**
1098  *  ixgbe_read_analog_reg8_82598 - Reads 8 bit Atlas analog register
1099  *  @hw: pointer to hardware structure
1100  *  @reg: analog register to read
1101  *  @val: read value
1102  *
1103  *  Performs read operation to Atlas analog register specified.
1104  **/
1105 s32 ixgbe_read_analog_reg8_82598(struct ixgbe_hw *hw, u32 reg, u8 *val)
1106 {
1107         u32  atlas_ctl;
1108
1109         DEBUGFUNC("ixgbe_read_analog_reg8_82598");
1110
1111         IXGBE_WRITE_REG(hw, IXGBE_ATLASCTL,
1112                         IXGBE_ATLASCTL_WRITE_CMD | (reg << 8));
1113         IXGBE_WRITE_FLUSH(hw);
1114         usec_delay(10);
1115         atlas_ctl = IXGBE_READ_REG(hw, IXGBE_ATLASCTL);
1116         *val = (u8)atlas_ctl;
1117
1118         return IXGBE_SUCCESS;
1119 }
1120
1121 /**
1122  *  ixgbe_write_analog_reg8_82598 - Writes 8 bit Atlas analog register
1123  *  @hw: pointer to hardware structure
1124  *  @reg: atlas register to write
1125  *  @val: value to write
1126  *
1127  *  Performs write operation to Atlas analog register specified.
1128  **/
1129 s32 ixgbe_write_analog_reg8_82598(struct ixgbe_hw *hw, u32 reg, u8 val)
1130 {
1131         u32  atlas_ctl;
1132
1133         DEBUGFUNC("ixgbe_write_analog_reg8_82598");
1134
1135         atlas_ctl = (reg << 8) | val;
1136         IXGBE_WRITE_REG(hw, IXGBE_ATLASCTL, atlas_ctl);
1137         IXGBE_WRITE_FLUSH(hw);
1138         usec_delay(10);
1139
1140         return IXGBE_SUCCESS;
1141 }
1142
1143 /**
1144  *  ixgbe_read_i2c_eeprom_82598 - Reads 8 bit word over I2C interface.
1145  *  @hw: pointer to hardware structure
1146  *  @byte_offset: EEPROM byte offset to read
1147  *  @eeprom_data: value read
1148  *
1149  *  Performs 8 byte read operation to SFP module's EEPROM over I2C interface.
1150  **/
1151 s32 ixgbe_read_i2c_eeprom_82598(struct ixgbe_hw *hw, u8 byte_offset,
1152                                 u8 *eeprom_data)
1153 {
1154         s32 status = IXGBE_SUCCESS;
1155         u16 sfp_addr = 0;
1156         u16 sfp_data = 0;
1157         u16 sfp_stat = 0;
1158         u32 i;
1159
1160         DEBUGFUNC("ixgbe_read_i2c_eeprom_82598");
1161
1162         if (hw->phy.type == ixgbe_phy_nl) {
1163                 /*
1164                  * NetLogic phy SDA/SCL registers are at addresses 0xC30A to
1165                  * 0xC30D. These registers are used to talk to the SFP+
1166                  * module's EEPROM through the SDA/SCL (I2C) interface.
1167                  */
1168                 sfp_addr = (IXGBE_I2C_EEPROM_DEV_ADDR << 8) + byte_offset;
1169                 sfp_addr = (sfp_addr | IXGBE_I2C_EEPROM_READ_MASK);
1170                 hw->phy.ops.write_reg(hw,
1171                                       IXGBE_MDIO_PMA_PMD_SDA_SCL_ADDR,
1172                                       IXGBE_MDIO_PMA_PMD_DEV_TYPE,
1173                                       sfp_addr);
1174
1175                 /* Poll status */
1176                 for (i = 0; i < 100; i++) {
1177                         hw->phy.ops.read_reg(hw,
1178                                              IXGBE_MDIO_PMA_PMD_SDA_SCL_STAT,
1179                                              IXGBE_MDIO_PMA_PMD_DEV_TYPE,
1180                                              &sfp_stat);
1181                         sfp_stat = sfp_stat & IXGBE_I2C_EEPROM_STATUS_MASK;
1182                         if (sfp_stat != IXGBE_I2C_EEPROM_STATUS_IN_PROGRESS)
1183                                 break;
1184                         msec_delay(10);
1185                 }
1186
1187                 if (sfp_stat != IXGBE_I2C_EEPROM_STATUS_PASS) {
1188                         DEBUGOUT("EEPROM read did not pass.\n");
1189                         status = IXGBE_ERR_SFP_NOT_PRESENT;
1190                         goto out;
1191                 }
1192
1193                 /* Read data */
1194                 hw->phy.ops.read_reg(hw, IXGBE_MDIO_PMA_PMD_SDA_SCL_DATA,
1195                                      IXGBE_MDIO_PMA_PMD_DEV_TYPE, &sfp_data);
1196
1197                 *eeprom_data = (u8)(sfp_data >> 8);
1198         } else {
1199                 status = IXGBE_ERR_PHY;
1200                 goto out;
1201         }
1202
1203 out:
1204         return status;
1205 }
1206
1207 /**
1208  *  ixgbe_get_supported_physical_layer_82598 - Returns physical layer type
1209  *  @hw: pointer to hardware structure
1210  *
1211  *  Determines physical layer capabilities of the current configuration.
1212  **/
1213 u32 ixgbe_get_supported_physical_layer_82598(struct ixgbe_hw *hw)
1214 {
1215         u32 physical_layer = IXGBE_PHYSICAL_LAYER_UNKNOWN;
1216         u32 autoc = IXGBE_READ_REG(hw, IXGBE_AUTOC);
1217         u32 pma_pmd_10g = autoc & IXGBE_AUTOC_10G_PMA_PMD_MASK;
1218         u32 pma_pmd_1g = autoc & IXGBE_AUTOC_1G_PMA_PMD_MASK;
1219         u16 ext_ability = 0;
1220
1221         DEBUGFUNC("ixgbe_get_supported_physical_layer_82598");
1222
1223         hw->phy.ops.identify(hw);
1224
1225         /* Copper PHY must be checked before AUTOC LMS to determine correct
1226          * physical layer because 10GBase-T PHYs use LMS = KX4/KX */
1227         switch (hw->phy.type) {
1228         case ixgbe_phy_tn:
1229         case ixgbe_phy_aq:
1230         case ixgbe_phy_cu_unknown:
1231                 hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_EXT_ABILITY,
1232                 IXGBE_MDIO_PMA_PMD_DEV_TYPE, &ext_ability);
1233                 if (ext_ability & IXGBE_MDIO_PHY_10GBASET_ABILITY)
1234                         physical_layer |= IXGBE_PHYSICAL_LAYER_10GBASE_T;
1235                 if (ext_ability & IXGBE_MDIO_PHY_1000BASET_ABILITY)
1236                         physical_layer |= IXGBE_PHYSICAL_LAYER_1000BASE_T;
1237                 if (ext_ability & IXGBE_MDIO_PHY_100BASETX_ABILITY)
1238                         physical_layer |= IXGBE_PHYSICAL_LAYER_100BASE_TX;
1239                 goto out;
1240         default:
1241                 break;
1242         }
1243
1244         switch (autoc & IXGBE_AUTOC_LMS_MASK) {
1245         case IXGBE_AUTOC_LMS_1G_AN:
1246         case IXGBE_AUTOC_LMS_1G_LINK_NO_AN:
1247                 if (pma_pmd_1g == IXGBE_AUTOC_1G_KX)
1248                         physical_layer = IXGBE_PHYSICAL_LAYER_1000BASE_KX;
1249                 else
1250                         physical_layer = IXGBE_PHYSICAL_LAYER_1000BASE_BX;
1251                 break;
1252         case IXGBE_AUTOC_LMS_10G_LINK_NO_AN:
1253                 if (pma_pmd_10g == IXGBE_AUTOC_10G_CX4)
1254                         physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_CX4;
1255                 else if (pma_pmd_10g == IXGBE_AUTOC_10G_KX4)
1256                         physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_KX4;
1257                 else /* XAUI */
1258                         physical_layer = IXGBE_PHYSICAL_LAYER_UNKNOWN;
1259                 break;
1260         case IXGBE_AUTOC_LMS_KX4_AN:
1261         case IXGBE_AUTOC_LMS_KX4_AN_1G_AN:
1262                 if (autoc & IXGBE_AUTOC_KX_SUPP)
1263                         physical_layer |= IXGBE_PHYSICAL_LAYER_1000BASE_KX;
1264                 if (autoc & IXGBE_AUTOC_KX4_SUPP)
1265                         physical_layer |= IXGBE_PHYSICAL_LAYER_10GBASE_KX4;
1266                 break;
1267         default:
1268                 break;
1269         }
1270
1271         if (hw->phy.type == ixgbe_phy_nl) {
1272                 hw->phy.ops.identify_sfp(hw);
1273
1274                 switch (hw->phy.sfp_type) {
1275                 case ixgbe_sfp_type_da_cu:
1276                         physical_layer = IXGBE_PHYSICAL_LAYER_SFP_PLUS_CU;
1277                         break;
1278                 case ixgbe_sfp_type_sr:
1279                         physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_SR;
1280                         break;
1281                 case ixgbe_sfp_type_lr:
1282                         physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_LR;
1283                         break;
1284                 default:
1285                         physical_layer = IXGBE_PHYSICAL_LAYER_UNKNOWN;
1286                         break;
1287                 }
1288         }
1289
1290         switch (hw->device_id) {
1291         case IXGBE_DEV_ID_82598_DA_DUAL_PORT:
1292                 physical_layer = IXGBE_PHYSICAL_LAYER_SFP_PLUS_CU;
1293                 break;
1294         case IXGBE_DEV_ID_82598AF_DUAL_PORT:
1295         case IXGBE_DEV_ID_82598AF_SINGLE_PORT:
1296         case IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM:
1297                 physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_SR;
1298                 break;
1299         case IXGBE_DEV_ID_82598EB_XF_LR:
1300                 physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_LR;
1301                 break;
1302         default:
1303                 break;
1304         }
1305
1306 out:
1307         return physical_layer;
1308 }
1309
1310 /**
1311  *  ixgbe_set_lan_id_multi_port_pcie_82598 - Set LAN id for PCIe multiple
1312  *  port devices.
1313  *  @hw: pointer to the HW structure
1314  *
1315  *  Calls common function and corrects issue with some single port devices
1316  *  that enable LAN1 but not LAN0.
1317  **/
1318 void ixgbe_set_lan_id_multi_port_pcie_82598(struct ixgbe_hw *hw)
1319 {
1320         struct ixgbe_bus_info *bus = &hw->bus;
1321         u16 pci_gen = 0;
1322         u16 pci_ctrl2 = 0;
1323
1324         DEBUGFUNC("ixgbe_set_lan_id_multi_port_pcie_82598");
1325
1326         ixgbe_set_lan_id_multi_port_pcie(hw);
1327
1328         /* check if LAN0 is disabled */
1329         hw->eeprom.ops.read(hw, IXGBE_PCIE_GENERAL_PTR, &pci_gen);
1330         if ((pci_gen != 0) && (pci_gen != 0xFFFF)) {
1331
1332                 hw->eeprom.ops.read(hw, pci_gen + IXGBE_PCIE_CTRL2, &pci_ctrl2);
1333
1334                 /* if LAN0 is completely disabled force function to 0 */
1335                 if ((pci_ctrl2 & IXGBE_PCIE_CTRL2_LAN_DISABLE) &&
1336                     !(pci_ctrl2 & IXGBE_PCIE_CTRL2_DISABLE_SELECT) &&
1337                     !(pci_ctrl2 & IXGBE_PCIE_CTRL2_DUMMY_ENABLE)) {
1338
1339                         bus->func = 0;
1340                 }
1341         }
1342 }
1343
1344 /**
1345  *  ixgbe_enable_relaxed_ordering_82598 - enable relaxed ordering
1346  *  @hw: pointer to hardware structure
1347  *
1348  **/
1349 void ixgbe_enable_relaxed_ordering_82598(struct ixgbe_hw *hw)
1350 {
1351         u32 regval;
1352         u32 i;
1353
1354         DEBUGFUNC("ixgbe_enable_relaxed_ordering_82598");
1355
1356         /* Enable relaxed ordering */
1357         for (i = 0; ((i < hw->mac.max_tx_queues) &&
1358              (i < IXGBE_DCA_MAX_QUEUES_82598)); i++) {
1359                 regval = IXGBE_READ_REG(hw, IXGBE_DCA_TXCTRL(i));
1360                 regval |= IXGBE_DCA_TXCTRL_TX_WB_RO_EN;
1361                 IXGBE_WRITE_REG(hw, IXGBE_DCA_TXCTRL(i), regval);
1362         }
1363
1364         for (i = 0; ((i < hw->mac.max_rx_queues) &&
1365              (i < IXGBE_DCA_MAX_QUEUES_82598)); i++) {
1366                 regval = IXGBE_READ_REG(hw, IXGBE_DCA_RXCTRL(i));
1367                 regval |= (IXGBE_DCA_RXCTRL_DESC_WRO_EN |
1368                            IXGBE_DCA_RXCTRL_DESC_HSRO_EN);
1369                 IXGBE_WRITE_REG(hw, IXGBE_DCA_RXCTRL(i), regval);
1370         }
1371
1372 }