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