1 /*******************************************************************************
3 Intel 10 Gigabit PCI Express Linux driver
4 Copyright(c) 1999 - 2011 Intel Corporation.
6 This program is free software; you can redistribute it and/or modify it
7 under the terms and conditions of the GNU General Public License,
8 version 2, as published by the Free Software Foundation.
10 This program is distributed in the hope it will be useful, but WITHOUT
11 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
15 You should have received a copy of the GNU General Public License along with
16 this program; if not, write to the Free Software Foundation, Inc.,
17 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
19 The full GNU General Public License is included in this distribution in
20 the file called "COPYING".
24 Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
26 *******************************************************************************/
28 #include <linux/pci.h>
29 #include <linux/delay.h>
30 #include <linux/sched.h>
33 #include "ixgbe_phy.h"
35 #define IXGBE_82598_MAX_TX_QUEUES 32
36 #define IXGBE_82598_MAX_RX_QUEUES 64
37 #define IXGBE_82598_RAR_ENTRIES 16
38 #define IXGBE_82598_MC_TBL_SIZE 128
39 #define IXGBE_82598_VFT_TBL_SIZE 128
40 #define IXGBE_82598_RX_PB_SIZE 512
42 static s32 ixgbe_setup_copper_link_82598(struct ixgbe_hw *hw,
43 ixgbe_link_speed speed,
45 bool autoneg_wait_to_complete);
46 static s32 ixgbe_read_i2c_eeprom_82598(struct ixgbe_hw *hw, u8 byte_offset,
50 * ixgbe_set_pcie_completion_timeout - set pci-e completion timeout
51 * @hw: pointer to the HW structure
53 * The defaults for 82598 should be in the range of 50us to 50ms,
54 * however the hardware default for these parts is 500us to 1ms which is less
55 * than the 10ms recommended by the pci-e spec. To address this we need to
56 * increase the value to either 10ms to 250ms for capability version 1 config,
57 * or 16ms to 55ms for version 2.
59 static void ixgbe_set_pcie_completion_timeout(struct ixgbe_hw *hw)
61 struct ixgbe_adapter *adapter = hw->back;
62 u32 gcr = IXGBE_READ_REG(hw, IXGBE_GCR);
65 /* only take action if timeout value is defaulted to 0 */
66 if (gcr & IXGBE_GCR_CMPL_TMOUT_MASK)
70 * if capababilities version is type 1 we can write the
71 * timeout of 10ms to 250ms through the GCR register
73 if (!(gcr & IXGBE_GCR_CAP_VER2)) {
74 gcr |= IXGBE_GCR_CMPL_TMOUT_10ms;
79 * for version 2 capabilities we need to write the config space
80 * directly in order to set the completion timeout value for
83 pci_read_config_word(adapter->pdev,
84 IXGBE_PCI_DEVICE_CONTROL2, &pcie_devctl2);
85 pcie_devctl2 |= IXGBE_PCI_DEVICE_CONTROL2_16ms;
86 pci_write_config_word(adapter->pdev,
87 IXGBE_PCI_DEVICE_CONTROL2, pcie_devctl2);
89 /* disable completion timeout resend */
90 gcr &= ~IXGBE_GCR_CMPL_TMOUT_RESEND;
91 IXGBE_WRITE_REG(hw, IXGBE_GCR, gcr);
95 * ixgbe_get_pcie_msix_count_82598 - Gets MSI-X vector count
96 * @hw: pointer to hardware structure
98 * Read PCIe configuration space, and get the MSI-X vector count from
99 * the capabilities table.
101 static u16 ixgbe_get_pcie_msix_count_82598(struct ixgbe_hw *hw)
103 struct ixgbe_adapter *adapter = hw->back;
105 pci_read_config_word(adapter->pdev, IXGBE_PCIE_MSIX_82598_CAPS,
107 msix_count &= IXGBE_PCIE_MSIX_TBL_SZ_MASK;
109 /* MSI-X count is zero-based in HW, so increment to give proper value */
117 static s32 ixgbe_get_invariants_82598(struct ixgbe_hw *hw)
119 struct ixgbe_mac_info *mac = &hw->mac;
121 /* Call PHY identify routine to get the phy type */
122 ixgbe_identify_phy_generic(hw);
124 mac->mcft_size = IXGBE_82598_MC_TBL_SIZE;
125 mac->vft_size = IXGBE_82598_VFT_TBL_SIZE;
126 mac->num_rar_entries = IXGBE_82598_RAR_ENTRIES;
127 mac->max_rx_queues = IXGBE_82598_MAX_RX_QUEUES;
128 mac->max_tx_queues = IXGBE_82598_MAX_TX_QUEUES;
129 mac->max_msix_vectors = ixgbe_get_pcie_msix_count_82598(hw);
135 * ixgbe_init_phy_ops_82598 - PHY/SFP specific init
136 * @hw: pointer to hardware structure
138 * Initialize any function pointers that were not able to be
139 * set during get_invariants because the PHY/SFP type was
140 * not known. Perform the SFP init if necessary.
143 static s32 ixgbe_init_phy_ops_82598(struct ixgbe_hw *hw)
145 struct ixgbe_mac_info *mac = &hw->mac;
146 struct ixgbe_phy_info *phy = &hw->phy;
148 u16 list_offset, data_offset;
150 /* Identify the PHY */
151 phy->ops.identify(hw);
153 /* Overwrite the link function pointers if copper PHY */
154 if (mac->ops.get_media_type(hw) == ixgbe_media_type_copper) {
155 mac->ops.setup_link = &ixgbe_setup_copper_link_82598;
156 mac->ops.get_link_capabilities =
157 &ixgbe_get_copper_link_capabilities_generic;
160 switch (hw->phy.type) {
162 phy->ops.setup_link = &ixgbe_setup_phy_link_tnx;
163 phy->ops.check_link = &ixgbe_check_phy_link_tnx;
164 phy->ops.get_firmware_version =
165 &ixgbe_get_phy_firmware_version_tnx;
168 phy->ops.reset = &ixgbe_reset_phy_nl;
170 /* Call SFP+ identify routine to get the SFP+ module type */
171 ret_val = phy->ops.identify_sfp(hw);
174 else if (hw->phy.sfp_type == ixgbe_sfp_type_unknown) {
175 ret_val = IXGBE_ERR_SFP_NOT_SUPPORTED;
179 /* Check to see if SFP+ module is supported */
180 ret_val = ixgbe_get_sfp_init_sequence_offsets(hw,
184 ret_val = IXGBE_ERR_SFP_NOT_SUPPORTED;
197 * ixgbe_start_hw_82598 - Prepare hardware for Tx/Rx
198 * @hw: pointer to hardware structure
200 * Starts the hardware using the generic start_hw function.
201 * Disables relaxed ordering Then set pcie completion timeout
204 static s32 ixgbe_start_hw_82598(struct ixgbe_hw *hw)
210 ret_val = ixgbe_start_hw_generic(hw);
212 /* Disable relaxed ordering */
213 for (i = 0; ((i < hw->mac.max_tx_queues) &&
214 (i < IXGBE_DCA_MAX_QUEUES_82598)); i++) {
215 regval = IXGBE_READ_REG(hw, IXGBE_DCA_TXCTRL(i));
216 regval &= ~IXGBE_DCA_TXCTRL_TX_WB_RO_EN;
217 IXGBE_WRITE_REG(hw, IXGBE_DCA_TXCTRL(i), regval);
220 for (i = 0; ((i < hw->mac.max_rx_queues) &&
221 (i < IXGBE_DCA_MAX_QUEUES_82598)); i++) {
222 regval = IXGBE_READ_REG(hw, IXGBE_DCA_RXCTRL(i));
223 regval &= ~(IXGBE_DCA_RXCTRL_DESC_WRO_EN |
224 IXGBE_DCA_RXCTRL_DESC_HSRO_EN);
225 IXGBE_WRITE_REG(hw, IXGBE_DCA_RXCTRL(i), regval);
228 hw->mac.rx_pb_size = IXGBE_82598_RX_PB_SIZE;
230 /* set the completion timeout for interface */
232 ixgbe_set_pcie_completion_timeout(hw);
238 * ixgbe_get_link_capabilities_82598 - Determines link capabilities
239 * @hw: pointer to hardware structure
240 * @speed: pointer to link speed
241 * @autoneg: boolean auto-negotiation value
243 * Determines the link capabilities by reading the AUTOC register.
245 static s32 ixgbe_get_link_capabilities_82598(struct ixgbe_hw *hw,
246 ixgbe_link_speed *speed,
253 * Determine link capabilities based on the stored value of AUTOC,
254 * which represents EEPROM defaults. If AUTOC value has not been
255 * stored, use the current register value.
257 if (hw->mac.orig_link_settings_stored)
258 autoc = hw->mac.orig_autoc;
260 autoc = IXGBE_READ_REG(hw, IXGBE_AUTOC);
262 switch (autoc & IXGBE_AUTOC_LMS_MASK) {
263 case IXGBE_AUTOC_LMS_1G_LINK_NO_AN:
264 *speed = IXGBE_LINK_SPEED_1GB_FULL;
268 case IXGBE_AUTOC_LMS_10G_LINK_NO_AN:
269 *speed = IXGBE_LINK_SPEED_10GB_FULL;
273 case IXGBE_AUTOC_LMS_1G_AN:
274 *speed = IXGBE_LINK_SPEED_1GB_FULL;
278 case IXGBE_AUTOC_LMS_KX4_AN:
279 case IXGBE_AUTOC_LMS_KX4_AN_1G_AN:
280 *speed = IXGBE_LINK_SPEED_UNKNOWN;
281 if (autoc & IXGBE_AUTOC_KX4_SUPP)
282 *speed |= IXGBE_LINK_SPEED_10GB_FULL;
283 if (autoc & IXGBE_AUTOC_KX_SUPP)
284 *speed |= IXGBE_LINK_SPEED_1GB_FULL;
289 status = IXGBE_ERR_LINK_SETUP;
297 * ixgbe_get_media_type_82598 - Determines media type
298 * @hw: pointer to hardware structure
300 * Returns the media type (fiber, copper, backplane)
302 static enum ixgbe_media_type ixgbe_get_media_type_82598(struct ixgbe_hw *hw)
304 enum ixgbe_media_type media_type;
306 /* Detect if there is a copper PHY attached. */
307 switch (hw->phy.type) {
308 case ixgbe_phy_cu_unknown:
311 media_type = ixgbe_media_type_copper;
317 /* Media type for I82598 is based on device ID */
318 switch (hw->device_id) {
319 case IXGBE_DEV_ID_82598:
320 case IXGBE_DEV_ID_82598_BX:
321 /* Default device ID is mezzanine card KX/KX4 */
322 media_type = ixgbe_media_type_backplane;
324 case IXGBE_DEV_ID_82598AF_DUAL_PORT:
325 case IXGBE_DEV_ID_82598AF_SINGLE_PORT:
326 case IXGBE_DEV_ID_82598_DA_DUAL_PORT:
327 case IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM:
328 case IXGBE_DEV_ID_82598EB_XF_LR:
329 case IXGBE_DEV_ID_82598EB_SFP_LOM:
330 media_type = ixgbe_media_type_fiber;
332 case IXGBE_DEV_ID_82598EB_CX4:
333 case IXGBE_DEV_ID_82598_CX4_DUAL_PORT:
334 media_type = ixgbe_media_type_cx4;
336 case IXGBE_DEV_ID_82598AT:
337 case IXGBE_DEV_ID_82598AT2:
338 media_type = ixgbe_media_type_copper;
341 media_type = ixgbe_media_type_unknown;
349 * ixgbe_fc_enable_82598 - Enable flow control
350 * @hw: pointer to hardware structure
351 * @packetbuf_num: packet buffer number (0-7)
353 * Enable flow control according to the current settings.
355 static s32 ixgbe_fc_enable_82598(struct ixgbe_hw *hw, s32 packetbuf_num)
366 if (hw->fc.requested_mode == ixgbe_fc_pfc)
369 #endif /* CONFIG_DCB */
371 * On 82598 having Rx FC on causes resets while doing 1G
372 * so if it's on turn it off once we know link_speed. For
373 * more details see 82598 Specification update.
375 hw->mac.ops.check_link(hw, &link_speed, &link_up, false);
376 if (link_up && link_speed == IXGBE_LINK_SPEED_1GB_FULL) {
377 switch (hw->fc.requested_mode) {
379 hw->fc.requested_mode = ixgbe_fc_tx_pause;
381 case ixgbe_fc_rx_pause:
382 hw->fc.requested_mode = ixgbe_fc_none;
390 /* Negotiate the fc mode to use */
391 ret_val = ixgbe_fc_autoneg(hw);
392 if (ret_val == IXGBE_ERR_FLOW_CONTROL)
395 /* Disable any previous flow control settings */
396 fctrl_reg = IXGBE_READ_REG(hw, IXGBE_FCTRL);
397 fctrl_reg &= ~(IXGBE_FCTRL_RFCE | IXGBE_FCTRL_RPFCE);
399 rmcs_reg = IXGBE_READ_REG(hw, IXGBE_RMCS);
400 rmcs_reg &= ~(IXGBE_RMCS_TFCE_PRIORITY | IXGBE_RMCS_TFCE_802_3X);
403 * The possible values of fc.current_mode are:
404 * 0: Flow control is completely disabled
405 * 1: Rx flow control is enabled (we can receive pause frames,
406 * but not send pause frames).
407 * 2: Tx flow control is enabled (we can send pause frames but
408 * we do not support receiving pause frames).
409 * 3: Both Rx and Tx flow control (symmetric) are enabled.
411 * 4: Priority Flow Control is enabled.
415 switch (hw->fc.current_mode) {
418 * Flow control is disabled by software override or autoneg.
419 * The code below will actually disable it in the HW.
422 case ixgbe_fc_rx_pause:
424 * Rx Flow control is enabled and Tx Flow control is
425 * disabled by software override. Since there really
426 * isn't a way to advertise that we are capable of RX
427 * Pause ONLY, we will advertise that we support both
428 * symmetric and asymmetric Rx PAUSE. Later, we will
429 * disable the adapter's ability to send PAUSE frames.
431 fctrl_reg |= IXGBE_FCTRL_RFCE;
433 case ixgbe_fc_tx_pause:
435 * Tx Flow control is enabled, and Rx Flow control is
436 * disabled by software override.
438 rmcs_reg |= IXGBE_RMCS_TFCE_802_3X;
441 /* Flow control (both Rx and Tx) is enabled by SW override. */
442 fctrl_reg |= IXGBE_FCTRL_RFCE;
443 rmcs_reg |= IXGBE_RMCS_TFCE_802_3X;
449 #endif /* CONFIG_DCB */
451 hw_dbg(hw, "Flow control param set incorrectly\n");
452 ret_val = IXGBE_ERR_CONFIG;
457 /* Set 802.3x based flow control settings. */
458 fctrl_reg |= IXGBE_FCTRL_DPF;
459 IXGBE_WRITE_REG(hw, IXGBE_FCTRL, fctrl_reg);
460 IXGBE_WRITE_REG(hw, IXGBE_RMCS, rmcs_reg);
462 /* Set up and enable Rx high/low water mark thresholds, enable XON. */
463 if (hw->fc.current_mode & ixgbe_fc_tx_pause) {
464 rx_pba_size = IXGBE_READ_REG(hw, IXGBE_RXPBSIZE(packetbuf_num));
465 rx_pba_size >>= IXGBE_RXPBSIZE_SHIFT;
467 reg = (rx_pba_size - hw->fc.low_water) << 6;
469 reg |= IXGBE_FCRTL_XONE;
471 IXGBE_WRITE_REG(hw, IXGBE_FCRTL(packetbuf_num), reg);
473 reg = (rx_pba_size - hw->fc.high_water) << 6;
474 reg |= IXGBE_FCRTH_FCEN;
476 IXGBE_WRITE_REG(hw, IXGBE_FCRTH(packetbuf_num), reg);
479 /* Configure pause time (2 TCs per register) */
480 reg = IXGBE_READ_REG(hw, IXGBE_FCTTV(packetbuf_num / 2));
481 if ((packetbuf_num & 1) == 0)
482 reg = (reg & 0xFFFF0000) | hw->fc.pause_time;
484 reg = (reg & 0x0000FFFF) | (hw->fc.pause_time << 16);
485 IXGBE_WRITE_REG(hw, IXGBE_FCTTV(packetbuf_num / 2), reg);
487 IXGBE_WRITE_REG(hw, IXGBE_FCRTV, (hw->fc.pause_time >> 1));
494 * ixgbe_start_mac_link_82598 - Configures MAC link settings
495 * @hw: pointer to hardware structure
497 * Configures link settings based on values in the ixgbe_hw struct.
498 * Restarts the link. Performs autonegotiation if needed.
500 static s32 ixgbe_start_mac_link_82598(struct ixgbe_hw *hw,
501 bool autoneg_wait_to_complete)
509 autoc_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC);
510 autoc_reg |= IXGBE_AUTOC_AN_RESTART;
511 IXGBE_WRITE_REG(hw, IXGBE_AUTOC, autoc_reg);
513 /* Only poll for autoneg to complete if specified to do so */
514 if (autoneg_wait_to_complete) {
515 if ((autoc_reg & IXGBE_AUTOC_LMS_MASK) ==
516 IXGBE_AUTOC_LMS_KX4_AN ||
517 (autoc_reg & IXGBE_AUTOC_LMS_MASK) ==
518 IXGBE_AUTOC_LMS_KX4_AN_1G_AN) {
519 links_reg = 0; /* Just in case Autoneg time = 0 */
520 for (i = 0; i < IXGBE_AUTO_NEG_TIME; i++) {
521 links_reg = IXGBE_READ_REG(hw, IXGBE_LINKS);
522 if (links_reg & IXGBE_LINKS_KX_AN_COMP)
526 if (!(links_reg & IXGBE_LINKS_KX_AN_COMP)) {
527 status = IXGBE_ERR_AUTONEG_NOT_COMPLETE;
528 hw_dbg(hw, "Autonegotiation did not complete.\n");
533 /* Add delay to filter out noises during initial link setup */
540 * ixgbe_validate_link_ready - Function looks for phy link
541 * @hw: pointer to hardware structure
543 * Function indicates success when phy link is available. If phy is not ready
544 * within 5 seconds of MAC indicating link, the function returns error.
546 static s32 ixgbe_validate_link_ready(struct ixgbe_hw *hw)
551 if (hw->device_id != IXGBE_DEV_ID_82598AT2)
555 timeout < IXGBE_VALIDATE_LINK_READY_TIMEOUT; timeout++) {
556 hw->phy.ops.read_reg(hw, MDIO_STAT1, MDIO_MMD_AN, &an_reg);
558 if ((an_reg & MDIO_AN_STAT1_COMPLETE) &&
559 (an_reg & MDIO_STAT1_LSTATUS))
565 if (timeout == IXGBE_VALIDATE_LINK_READY_TIMEOUT) {
566 hw_dbg(hw, "Link was indicated but link is down\n");
567 return IXGBE_ERR_LINK_SETUP;
574 * ixgbe_check_mac_link_82598 - Get link/speed status
575 * @hw: pointer to hardware structure
576 * @speed: pointer to link speed
577 * @link_up: true is link is up, false otherwise
578 * @link_up_wait_to_complete: bool used to wait for link up or not
580 * Reads the links register to determine if link is up and the current speed
582 static s32 ixgbe_check_mac_link_82598(struct ixgbe_hw *hw,
583 ixgbe_link_speed *speed, bool *link_up,
584 bool link_up_wait_to_complete)
588 u16 link_reg, adapt_comp_reg;
591 * SERDES PHY requires us to read link status from register 0xC79F.
592 * Bit 0 set indicates link is up/ready; clear indicates link down.
593 * 0xC00C is read to check that the XAUI lanes are active. Bit 0
594 * clear indicates active; set indicates inactive.
596 if (hw->phy.type == ixgbe_phy_nl) {
597 hw->phy.ops.read_reg(hw, 0xC79F, MDIO_MMD_PMAPMD, &link_reg);
598 hw->phy.ops.read_reg(hw, 0xC79F, MDIO_MMD_PMAPMD, &link_reg);
599 hw->phy.ops.read_reg(hw, 0xC00C, MDIO_MMD_PMAPMD,
601 if (link_up_wait_to_complete) {
602 for (i = 0; i < IXGBE_LINK_UP_TIME; i++) {
603 if ((link_reg & 1) &&
604 ((adapt_comp_reg & 1) == 0)) {
611 hw->phy.ops.read_reg(hw, 0xC79F,
614 hw->phy.ops.read_reg(hw, 0xC00C,
619 if ((link_reg & 1) && ((adapt_comp_reg & 1) == 0))
625 if (*link_up == false)
629 links_reg = IXGBE_READ_REG(hw, IXGBE_LINKS);
630 if (link_up_wait_to_complete) {
631 for (i = 0; i < IXGBE_LINK_UP_TIME; i++) {
632 if (links_reg & IXGBE_LINKS_UP) {
639 links_reg = IXGBE_READ_REG(hw, IXGBE_LINKS);
642 if (links_reg & IXGBE_LINKS_UP)
648 if (links_reg & IXGBE_LINKS_SPEED)
649 *speed = IXGBE_LINK_SPEED_10GB_FULL;
651 *speed = IXGBE_LINK_SPEED_1GB_FULL;
653 if ((hw->device_id == IXGBE_DEV_ID_82598AT2) && (*link_up == true) &&
654 (ixgbe_validate_link_ready(hw) != 0))
657 /* if link is down, zero out the current_mode */
658 if (*link_up == false) {
659 hw->fc.current_mode = ixgbe_fc_none;
660 hw->fc.fc_was_autonegged = false;
667 * ixgbe_setup_mac_link_82598 - Set MAC link speed
668 * @hw: pointer to hardware structure
669 * @speed: new link speed
670 * @autoneg: true if auto-negotiation enabled
671 * @autoneg_wait_to_complete: true when waiting for completion is needed
673 * Set the link speed in the AUTOC register and restarts link.
675 static s32 ixgbe_setup_mac_link_82598(struct ixgbe_hw *hw,
676 ixgbe_link_speed speed, bool autoneg,
677 bool autoneg_wait_to_complete)
680 ixgbe_link_speed link_capabilities = IXGBE_LINK_SPEED_UNKNOWN;
681 u32 curr_autoc = IXGBE_READ_REG(hw, IXGBE_AUTOC);
682 u32 autoc = curr_autoc;
683 u32 link_mode = autoc & IXGBE_AUTOC_LMS_MASK;
685 /* Check to see if speed passed in is supported. */
686 ixgbe_get_link_capabilities_82598(hw, &link_capabilities, &autoneg);
687 speed &= link_capabilities;
689 if (speed == IXGBE_LINK_SPEED_UNKNOWN)
690 status = IXGBE_ERR_LINK_SETUP;
692 /* Set KX4/KX support according to speed requested */
693 else if (link_mode == IXGBE_AUTOC_LMS_KX4_AN ||
694 link_mode == IXGBE_AUTOC_LMS_KX4_AN_1G_AN) {
695 autoc &= ~IXGBE_AUTOC_KX4_KX_SUPP_MASK;
696 if (speed & IXGBE_LINK_SPEED_10GB_FULL)
697 autoc |= IXGBE_AUTOC_KX4_SUPP;
698 if (speed & IXGBE_LINK_SPEED_1GB_FULL)
699 autoc |= IXGBE_AUTOC_KX_SUPP;
700 if (autoc != curr_autoc)
701 IXGBE_WRITE_REG(hw, IXGBE_AUTOC, autoc);
706 * Setup and restart the link based on the new values in
707 * ixgbe_hw This will write the AUTOC register based on the new
710 status = ixgbe_start_mac_link_82598(hw,
711 autoneg_wait_to_complete);
719 * ixgbe_setup_copper_link_82598 - Set the PHY autoneg advertised field
720 * @hw: pointer to hardware structure
721 * @speed: new link speed
722 * @autoneg: true if autonegotiation enabled
723 * @autoneg_wait_to_complete: true if waiting is needed to complete
725 * Sets the link speed in the AUTOC register in the MAC and restarts link.
727 static s32 ixgbe_setup_copper_link_82598(struct ixgbe_hw *hw,
728 ixgbe_link_speed speed,
730 bool autoneg_wait_to_complete)
734 /* Setup the PHY according to input speed */
735 status = hw->phy.ops.setup_link_speed(hw, speed, autoneg,
736 autoneg_wait_to_complete);
738 ixgbe_start_mac_link_82598(hw, autoneg_wait_to_complete);
744 * ixgbe_reset_hw_82598 - Performs hardware reset
745 * @hw: pointer to hardware structure
747 * Resets the hardware by resetting the transmit and receive units, masks and
748 * clears all interrupts, performing a PHY reset, and performing a link (MAC)
751 static s32 ixgbe_reset_hw_82598(struct ixgbe_hw *hw)
761 /* Call adapter stop to disable tx/rx and clear interrupts */
762 hw->mac.ops.stop_adapter(hw);
765 * Power up the Atlas Tx lanes if they are currently powered down.
766 * Atlas Tx lanes are powered down for MAC loopback tests, but
767 * they are not automatically restored on reset.
769 hw->mac.ops.read_analog_reg8(hw, IXGBE_ATLAS_PDN_LPBK, &analog_val);
770 if (analog_val & IXGBE_ATLAS_PDN_TX_REG_EN) {
771 /* Enable Tx Atlas so packets can be transmitted again */
772 hw->mac.ops.read_analog_reg8(hw, IXGBE_ATLAS_PDN_LPBK,
774 analog_val &= ~IXGBE_ATLAS_PDN_TX_REG_EN;
775 hw->mac.ops.write_analog_reg8(hw, IXGBE_ATLAS_PDN_LPBK,
778 hw->mac.ops.read_analog_reg8(hw, IXGBE_ATLAS_PDN_10G,
780 analog_val &= ~IXGBE_ATLAS_PDN_TX_10G_QL_ALL;
781 hw->mac.ops.write_analog_reg8(hw, IXGBE_ATLAS_PDN_10G,
784 hw->mac.ops.read_analog_reg8(hw, IXGBE_ATLAS_PDN_1G,
786 analog_val &= ~IXGBE_ATLAS_PDN_TX_1G_QL_ALL;
787 hw->mac.ops.write_analog_reg8(hw, IXGBE_ATLAS_PDN_1G,
790 hw->mac.ops.read_analog_reg8(hw, IXGBE_ATLAS_PDN_AN,
792 analog_val &= ~IXGBE_ATLAS_PDN_TX_AN_QL_ALL;
793 hw->mac.ops.write_analog_reg8(hw, IXGBE_ATLAS_PDN_AN,
798 if (hw->phy.reset_disable == false) {
799 /* PHY ops must be identified and initialized prior to reset */
801 /* Init PHY and function pointers, perform SFP setup */
802 phy_status = hw->phy.ops.init(hw);
803 if (phy_status == IXGBE_ERR_SFP_NOT_SUPPORTED)
805 else if (phy_status == IXGBE_ERR_SFP_NOT_PRESENT)
808 hw->phy.ops.reset(hw);
813 * Prevent the PCI-E bus from from hanging by disabling PCI-E master
814 * access and verify no pending requests before reset
816 ixgbe_disable_pcie_master(hw);
820 * Issue global reset to the MAC. This needs to be a SW reset.
821 * If link reset is used, it might reset the MAC when mng is using it
823 ctrl = IXGBE_READ_REG(hw, IXGBE_CTRL);
824 IXGBE_WRITE_REG(hw, IXGBE_CTRL, (ctrl | IXGBE_CTRL_RST));
825 IXGBE_WRITE_FLUSH(hw);
827 /* Poll for reset bit to self-clear indicating reset is complete */
828 for (i = 0; i < 10; i++) {
830 ctrl = IXGBE_READ_REG(hw, IXGBE_CTRL);
831 if (!(ctrl & IXGBE_CTRL_RST))
834 if (ctrl & IXGBE_CTRL_RST) {
835 status = IXGBE_ERR_RESET_FAILED;
836 hw_dbg(hw, "Reset polling failed to complete.\n");
840 * Double resets are required for recovery from certain error
841 * conditions. Between resets, it is necessary to stall to allow time
842 * for any pending HW events to complete. We use 1usec since that is
843 * what is needed for ixgbe_disable_pcie_master(). The second reset
844 * then clears out any effects of those events.
846 if (hw->mac.flags & IXGBE_FLAGS_DOUBLE_RESET_REQUIRED) {
847 hw->mac.flags &= ~IXGBE_FLAGS_DOUBLE_RESET_REQUIRED;
854 gheccr = IXGBE_READ_REG(hw, IXGBE_GHECCR);
855 gheccr &= ~((1 << 21) | (1 << 18) | (1 << 9) | (1 << 6));
856 IXGBE_WRITE_REG(hw, IXGBE_GHECCR, gheccr);
859 * Store the original AUTOC value if it has not been
860 * stored off yet. Otherwise restore the stored original
861 * AUTOC value since the reset operation sets back to deaults.
863 autoc = IXGBE_READ_REG(hw, IXGBE_AUTOC);
864 if (hw->mac.orig_link_settings_stored == false) {
865 hw->mac.orig_autoc = autoc;
866 hw->mac.orig_link_settings_stored = true;
867 } else if (autoc != hw->mac.orig_autoc) {
868 IXGBE_WRITE_REG(hw, IXGBE_AUTOC, hw->mac.orig_autoc);
871 /* Store the permanent mac address */
872 hw->mac.ops.get_mac_addr(hw, hw->mac.perm_addr);
875 * Store MAC address from RAR0, clear receive address registers, and
876 * clear the multicast table
878 hw->mac.ops.init_rx_addrs(hw);
888 * ixgbe_set_vmdq_82598 - Associate a VMDq set index with a rx address
889 * @hw: pointer to hardware struct
890 * @rar: receive address register index to associate with a VMDq index
891 * @vmdq: VMDq set index
893 static s32 ixgbe_set_vmdq_82598(struct ixgbe_hw *hw, u32 rar, u32 vmdq)
896 u32 rar_entries = hw->mac.num_rar_entries;
898 /* Make sure we are using a valid rar index range */
899 if (rar >= rar_entries) {
900 hw_dbg(hw, "RAR index %d is out of range.\n", rar);
901 return IXGBE_ERR_INVALID_ARGUMENT;
904 rar_high = IXGBE_READ_REG(hw, IXGBE_RAH(rar));
905 rar_high &= ~IXGBE_RAH_VIND_MASK;
906 rar_high |= ((vmdq << IXGBE_RAH_VIND_SHIFT) & IXGBE_RAH_VIND_MASK);
907 IXGBE_WRITE_REG(hw, IXGBE_RAH(rar), rar_high);
912 * ixgbe_clear_vmdq_82598 - Disassociate a VMDq set index from an rx address
913 * @hw: pointer to hardware struct
914 * @rar: receive address register index to associate with a VMDq index
915 * @vmdq: VMDq clear index (not used in 82598, but elsewhere)
917 static s32 ixgbe_clear_vmdq_82598(struct ixgbe_hw *hw, u32 rar, u32 vmdq)
920 u32 rar_entries = hw->mac.num_rar_entries;
923 /* Make sure we are using a valid rar index range */
924 if (rar >= rar_entries) {
925 hw_dbg(hw, "RAR index %d is out of range.\n", rar);
926 return IXGBE_ERR_INVALID_ARGUMENT;
929 rar_high = IXGBE_READ_REG(hw, IXGBE_RAH(rar));
930 if (rar_high & IXGBE_RAH_VIND_MASK) {
931 rar_high &= ~IXGBE_RAH_VIND_MASK;
932 IXGBE_WRITE_REG(hw, IXGBE_RAH(rar), rar_high);
939 * ixgbe_set_vfta_82598 - Set VLAN filter table
940 * @hw: pointer to hardware structure
941 * @vlan: VLAN id to write to VLAN filter
942 * @vind: VMDq output index that maps queue to VLAN id in VFTA
943 * @vlan_on: boolean flag to turn on/off VLAN in VFTA
945 * Turn on/off specified VLAN in the VLAN filter table.
947 static s32 ixgbe_set_vfta_82598(struct ixgbe_hw *hw, u32 vlan, u32 vind,
956 return IXGBE_ERR_PARAM;
958 /* Determine 32-bit word position in array */
959 regindex = (vlan >> 5) & 0x7F; /* upper seven bits */
961 /* Determine the location of the (VMD) queue index */
962 vftabyte = ((vlan >> 3) & 0x03); /* bits (4:3) indicating byte array */
963 bitindex = (vlan & 0x7) << 2; /* lower 3 bits indicate nibble */
965 /* Set the nibble for VMD queue index */
966 bits = IXGBE_READ_REG(hw, IXGBE_VFTAVIND(vftabyte, regindex));
967 bits &= (~(0x0F << bitindex));
968 bits |= (vind << bitindex);
969 IXGBE_WRITE_REG(hw, IXGBE_VFTAVIND(vftabyte, regindex), bits);
971 /* Determine the location of the bit for this VLAN id */
972 bitindex = vlan & 0x1F; /* lower five bits */
974 bits = IXGBE_READ_REG(hw, IXGBE_VFTA(regindex));
976 /* Turn on this VLAN id */
977 bits |= (1 << bitindex);
979 /* Turn off this VLAN id */
980 bits &= ~(1 << bitindex);
981 IXGBE_WRITE_REG(hw, IXGBE_VFTA(regindex), bits);
987 * ixgbe_clear_vfta_82598 - Clear VLAN filter table
988 * @hw: pointer to hardware structure
990 * Clears the VLAN filer table, and the VMDq index associated with the filter
992 static s32 ixgbe_clear_vfta_82598(struct ixgbe_hw *hw)
997 for (offset = 0; offset < hw->mac.vft_size; offset++)
998 IXGBE_WRITE_REG(hw, IXGBE_VFTA(offset), 0);
1000 for (vlanbyte = 0; vlanbyte < 4; vlanbyte++)
1001 for (offset = 0; offset < hw->mac.vft_size; offset++)
1002 IXGBE_WRITE_REG(hw, IXGBE_VFTAVIND(vlanbyte, offset),
1009 * ixgbe_read_analog_reg8_82598 - Reads 8 bit Atlas analog register
1010 * @hw: pointer to hardware structure
1011 * @reg: analog register to read
1014 * Performs read operation to Atlas analog register specified.
1016 static s32 ixgbe_read_analog_reg8_82598(struct ixgbe_hw *hw, u32 reg, u8 *val)
1020 IXGBE_WRITE_REG(hw, IXGBE_ATLASCTL,
1021 IXGBE_ATLASCTL_WRITE_CMD | (reg << 8));
1022 IXGBE_WRITE_FLUSH(hw);
1024 atlas_ctl = IXGBE_READ_REG(hw, IXGBE_ATLASCTL);
1025 *val = (u8)atlas_ctl;
1031 * ixgbe_write_analog_reg8_82598 - Writes 8 bit Atlas analog register
1032 * @hw: pointer to hardware structure
1033 * @reg: atlas register to write
1034 * @val: value to write
1036 * Performs write operation to Atlas analog register specified.
1038 static s32 ixgbe_write_analog_reg8_82598(struct ixgbe_hw *hw, u32 reg, u8 val)
1042 atlas_ctl = (reg << 8) | val;
1043 IXGBE_WRITE_REG(hw, IXGBE_ATLASCTL, atlas_ctl);
1044 IXGBE_WRITE_FLUSH(hw);
1051 * ixgbe_read_i2c_eeprom_82598 - Reads 8 bit word over I2C interface.
1052 * @hw: pointer to hardware structure
1053 * @byte_offset: EEPROM byte offset to read
1054 * @eeprom_data: value read
1056 * Performs 8 byte read operation to SFP module's EEPROM over I2C interface.
1058 static s32 ixgbe_read_i2c_eeprom_82598(struct ixgbe_hw *hw, u8 byte_offset,
1067 if (hw->phy.type == ixgbe_phy_nl) {
1069 * phy SDA/SCL registers are at addresses 0xC30A to
1070 * 0xC30D. These registers are used to talk to the SFP+
1071 * module's EEPROM through the SDA/SCL (I2C) interface.
1073 sfp_addr = (IXGBE_I2C_EEPROM_DEV_ADDR << 8) + byte_offset;
1074 sfp_addr = (sfp_addr | IXGBE_I2C_EEPROM_READ_MASK);
1075 hw->phy.ops.write_reg(hw,
1076 IXGBE_MDIO_PMA_PMD_SDA_SCL_ADDR,
1081 for (i = 0; i < 100; i++) {
1082 hw->phy.ops.read_reg(hw,
1083 IXGBE_MDIO_PMA_PMD_SDA_SCL_STAT,
1086 sfp_stat = sfp_stat & IXGBE_I2C_EEPROM_STATUS_MASK;
1087 if (sfp_stat != IXGBE_I2C_EEPROM_STATUS_IN_PROGRESS)
1089 usleep_range(10000, 20000);
1092 if (sfp_stat != IXGBE_I2C_EEPROM_STATUS_PASS) {
1093 hw_dbg(hw, "EEPROM read did not pass.\n");
1094 status = IXGBE_ERR_SFP_NOT_PRESENT;
1099 hw->phy.ops.read_reg(hw, IXGBE_MDIO_PMA_PMD_SDA_SCL_DATA,
1100 MDIO_MMD_PMAPMD, &sfp_data);
1102 *eeprom_data = (u8)(sfp_data >> 8);
1104 status = IXGBE_ERR_PHY;
1113 * ixgbe_get_supported_physical_layer_82598 - Returns physical layer type
1114 * @hw: pointer to hardware structure
1116 * Determines physical layer capabilities of the current configuration.
1118 static u32 ixgbe_get_supported_physical_layer_82598(struct ixgbe_hw *hw)
1120 u32 physical_layer = IXGBE_PHYSICAL_LAYER_UNKNOWN;
1121 u32 autoc = IXGBE_READ_REG(hw, IXGBE_AUTOC);
1122 u32 pma_pmd_10g = autoc & IXGBE_AUTOC_10G_PMA_PMD_MASK;
1123 u32 pma_pmd_1g = autoc & IXGBE_AUTOC_1G_PMA_PMD_MASK;
1124 u16 ext_ability = 0;
1126 hw->phy.ops.identify(hw);
1128 /* Copper PHY must be checked before AUTOC LMS to determine correct
1129 * physical layer because 10GBase-T PHYs use LMS = KX4/KX */
1130 switch (hw->phy.type) {
1133 case ixgbe_phy_cu_unknown:
1134 hw->phy.ops.read_reg(hw, MDIO_PMA_EXTABLE,
1135 MDIO_MMD_PMAPMD, &ext_ability);
1136 if (ext_ability & MDIO_PMA_EXTABLE_10GBT)
1137 physical_layer |= IXGBE_PHYSICAL_LAYER_10GBASE_T;
1138 if (ext_ability & MDIO_PMA_EXTABLE_1000BT)
1139 physical_layer |= IXGBE_PHYSICAL_LAYER_1000BASE_T;
1140 if (ext_ability & MDIO_PMA_EXTABLE_100BTX)
1141 physical_layer |= IXGBE_PHYSICAL_LAYER_100BASE_TX;
1147 switch (autoc & IXGBE_AUTOC_LMS_MASK) {
1148 case IXGBE_AUTOC_LMS_1G_AN:
1149 case IXGBE_AUTOC_LMS_1G_LINK_NO_AN:
1150 if (pma_pmd_1g == IXGBE_AUTOC_1G_KX)
1151 physical_layer = IXGBE_PHYSICAL_LAYER_1000BASE_KX;
1153 physical_layer = IXGBE_PHYSICAL_LAYER_1000BASE_BX;
1155 case IXGBE_AUTOC_LMS_10G_LINK_NO_AN:
1156 if (pma_pmd_10g == IXGBE_AUTOC_10G_CX4)
1157 physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_CX4;
1158 else if (pma_pmd_10g == IXGBE_AUTOC_10G_KX4)
1159 physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_KX4;
1161 physical_layer = IXGBE_PHYSICAL_LAYER_UNKNOWN;
1163 case IXGBE_AUTOC_LMS_KX4_AN:
1164 case IXGBE_AUTOC_LMS_KX4_AN_1G_AN:
1165 if (autoc & IXGBE_AUTOC_KX_SUPP)
1166 physical_layer |= IXGBE_PHYSICAL_LAYER_1000BASE_KX;
1167 if (autoc & IXGBE_AUTOC_KX4_SUPP)
1168 physical_layer |= IXGBE_PHYSICAL_LAYER_10GBASE_KX4;
1174 if (hw->phy.type == ixgbe_phy_nl) {
1175 hw->phy.ops.identify_sfp(hw);
1177 switch (hw->phy.sfp_type) {
1178 case ixgbe_sfp_type_da_cu:
1179 physical_layer = IXGBE_PHYSICAL_LAYER_SFP_PLUS_CU;
1181 case ixgbe_sfp_type_sr:
1182 physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_SR;
1184 case ixgbe_sfp_type_lr:
1185 physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_LR;
1188 physical_layer = IXGBE_PHYSICAL_LAYER_UNKNOWN;
1193 switch (hw->device_id) {
1194 case IXGBE_DEV_ID_82598_DA_DUAL_PORT:
1195 physical_layer = IXGBE_PHYSICAL_LAYER_SFP_PLUS_CU;
1197 case IXGBE_DEV_ID_82598AF_DUAL_PORT:
1198 case IXGBE_DEV_ID_82598AF_SINGLE_PORT:
1199 case IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM:
1200 physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_SR;
1202 case IXGBE_DEV_ID_82598EB_XF_LR:
1203 physical_layer = IXGBE_PHYSICAL_LAYER_10GBASE_LR;
1210 return physical_layer;
1214 * ixgbe_set_lan_id_multi_port_pcie_82598 - Set LAN id for PCIe multiple
1216 * @hw: pointer to the HW structure
1218 * Calls common function and corrects issue with some single port devices
1219 * that enable LAN1 but not LAN0.
1221 static void ixgbe_set_lan_id_multi_port_pcie_82598(struct ixgbe_hw *hw)
1223 struct ixgbe_bus_info *bus = &hw->bus;
1227 ixgbe_set_lan_id_multi_port_pcie(hw);
1229 /* check if LAN0 is disabled */
1230 hw->eeprom.ops.read(hw, IXGBE_PCIE_GENERAL_PTR, &pci_gen);
1231 if ((pci_gen != 0) && (pci_gen != 0xFFFF)) {
1233 hw->eeprom.ops.read(hw, pci_gen + IXGBE_PCIE_CTRL2, &pci_ctrl2);
1235 /* if LAN0 is completely disabled force function to 0 */
1236 if ((pci_ctrl2 & IXGBE_PCIE_CTRL2_LAN_DISABLE) &&
1237 !(pci_ctrl2 & IXGBE_PCIE_CTRL2_DISABLE_SELECT) &&
1238 !(pci_ctrl2 & IXGBE_PCIE_CTRL2_DUMMY_ENABLE)) {
1245 static struct ixgbe_mac_operations mac_ops_82598 = {
1246 .init_hw = &ixgbe_init_hw_generic,
1247 .reset_hw = &ixgbe_reset_hw_82598,
1248 .start_hw = &ixgbe_start_hw_82598,
1249 .clear_hw_cntrs = &ixgbe_clear_hw_cntrs_generic,
1250 .get_media_type = &ixgbe_get_media_type_82598,
1251 .get_supported_physical_layer = &ixgbe_get_supported_physical_layer_82598,
1252 .enable_rx_dma = &ixgbe_enable_rx_dma_generic,
1253 .get_mac_addr = &ixgbe_get_mac_addr_generic,
1254 .stop_adapter = &ixgbe_stop_adapter_generic,
1255 .get_bus_info = &ixgbe_get_bus_info_generic,
1256 .set_lan_id = &ixgbe_set_lan_id_multi_port_pcie_82598,
1257 .read_analog_reg8 = &ixgbe_read_analog_reg8_82598,
1258 .write_analog_reg8 = &ixgbe_write_analog_reg8_82598,
1259 .setup_link = &ixgbe_setup_mac_link_82598,
1260 .check_link = &ixgbe_check_mac_link_82598,
1261 .get_link_capabilities = &ixgbe_get_link_capabilities_82598,
1262 .led_on = &ixgbe_led_on_generic,
1263 .led_off = &ixgbe_led_off_generic,
1264 .blink_led_start = &ixgbe_blink_led_start_generic,
1265 .blink_led_stop = &ixgbe_blink_led_stop_generic,
1266 .set_rar = &ixgbe_set_rar_generic,
1267 .clear_rar = &ixgbe_clear_rar_generic,
1268 .set_vmdq = &ixgbe_set_vmdq_82598,
1269 .clear_vmdq = &ixgbe_clear_vmdq_82598,
1270 .init_rx_addrs = &ixgbe_init_rx_addrs_generic,
1271 .update_mc_addr_list = &ixgbe_update_mc_addr_list_generic,
1272 .enable_mc = &ixgbe_enable_mc_generic,
1273 .disable_mc = &ixgbe_disable_mc_generic,
1274 .clear_vfta = &ixgbe_clear_vfta_82598,
1275 .set_vfta = &ixgbe_set_vfta_82598,
1276 .fc_enable = &ixgbe_fc_enable_82598,
1277 .acquire_swfw_sync = &ixgbe_acquire_swfw_sync,
1278 .release_swfw_sync = &ixgbe_release_swfw_sync,
1281 static struct ixgbe_eeprom_operations eeprom_ops_82598 = {
1282 .init_params = &ixgbe_init_eeprom_params_generic,
1283 .read = &ixgbe_read_eerd_generic,
1284 .read_buffer = &ixgbe_read_eerd_buffer_generic,
1285 .calc_checksum = &ixgbe_calc_eeprom_checksum_generic,
1286 .validate_checksum = &ixgbe_validate_eeprom_checksum_generic,
1287 .update_checksum = &ixgbe_update_eeprom_checksum_generic,
1290 static struct ixgbe_phy_operations phy_ops_82598 = {
1291 .identify = &ixgbe_identify_phy_generic,
1292 .identify_sfp = &ixgbe_identify_sfp_module_generic,
1293 .init = &ixgbe_init_phy_ops_82598,
1294 .reset = &ixgbe_reset_phy_generic,
1295 .read_reg = &ixgbe_read_phy_reg_generic,
1296 .write_reg = &ixgbe_write_phy_reg_generic,
1297 .setup_link = &ixgbe_setup_phy_link_generic,
1298 .setup_link_speed = &ixgbe_setup_phy_link_speed_generic,
1299 .read_i2c_eeprom = &ixgbe_read_i2c_eeprom_82598,
1300 .check_overtemp = &ixgbe_tn_check_overtemp,
1303 struct ixgbe_info ixgbe_82598_info = {
1304 .mac = ixgbe_mac_82598EB,
1305 .get_invariants = &ixgbe_get_invariants_82598,
1306 .mac_ops = &mac_ops_82598,
1307 .eeprom_ops = &eeprom_ops_82598,
1308 .phy_ops = &phy_ops_82598,