xref: /freebsd/sys/dev/ixgbe/ixgbe_82598.c (revision bb15ca603fa442c72dde3f3cb8b46db6970e3950)
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 }
1373