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