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