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