diff options
author | Nicholas Nunley <nicholasx.d.nunley@intel.com> | 2010-04-27 22:47:49 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-04-27 22:47:49 -0400 |
commit | d5ffd75a27fade39ba5df3b07290c5a2c297b9bd (patch) | |
tree | 6dc34ff09fd8fa06809a9f5aea5f876f0b67b1cc /drivers/net/ixgbe | |
parent | afe0159d935ab731c682e811356914bb2be9470c (diff) |
ixgbe: disable MSI-X by default on certain Cisco adapters
Due to an errata in 82598 parts MSI-X needs to be disabled
in certain ixgbe devices designed to transfer peer-to-peer
traffic on the PCIe bus. This patch sets the default
interrupt type to MSI rather than MSI-X for specific Cisco
ixgbe adapters.
Signed-off-by: Nicholas Nunley <nicholasx.d.nunley@intel.com>
Acked-by: John Ronciak <john.ronciak@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ixgbe')
-rw-r--r-- | drivers/net/ixgbe/ixgbe.h | 4 | ||||
-rw-r--r-- | drivers/net/ixgbe/ixgbe_main.c | 17 |
2 files changed, 20 insertions, 1 deletions
diff --git a/drivers/net/ixgbe/ixgbe.h b/drivers/net/ixgbe/ixgbe.h index 79c35ae3718c..ec6bcc0660c6 100644 --- a/drivers/net/ixgbe/ixgbe.h +++ b/drivers/net/ixgbe/ixgbe.h | |||
@@ -104,6 +104,10 @@ | |||
104 | #define MAX_EMULATION_MAC_ADDRS 16 | 104 | #define MAX_EMULATION_MAC_ADDRS 16 |
105 | #define VMDQ_P(p) ((p) + adapter->num_vfs) | 105 | #define VMDQ_P(p) ((p) + adapter->num_vfs) |
106 | 106 | ||
107 | #define IXGBE_SUBDEV_ID_82598AF_MEZZ 0x0049 | ||
108 | #define IXGBE_SUBDEV_ID_82598AF_MENLO_Q_MEZZ 0x004a | ||
109 | #define IXGBE_SUBDEV_ID_82598AF_MENLO_E_MEZZ 0x004b | ||
110 | |||
107 | struct vf_data_storage { | 111 | struct vf_data_storage { |
108 | unsigned char vf_mac_addresses[ETH_ALEN]; | 112 | unsigned char vf_mac_addresses[ETH_ALEN]; |
109 | u16 vf_mc_hashes[IXGBE_MAX_VF_MC_ENTRIES]; | 113 | u16 vf_mc_hashes[IXGBE_MAX_VF_MC_ENTRIES]; |
diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/ixgbe/ixgbe_main.c index 2ae5a5159ce4..ff59f88dc7a1 100644 --- a/drivers/net/ixgbe/ixgbe_main.c +++ b/drivers/net/ixgbe/ixgbe_main.c | |||
@@ -4314,6 +4314,9 @@ static int ixgbe_set_interrupt_capability(struct ixgbe_adapter *adapter) | |||
4314 | int err = 0; | 4314 | int err = 0; |
4315 | int vector, v_budget; | 4315 | int vector, v_budget; |
4316 | 4316 | ||
4317 | if (!(adapter->flags & IXGBE_FLAG_MSIX_CAPABLE)) | ||
4318 | goto try_msi; | ||
4319 | |||
4317 | /* | 4320 | /* |
4318 | * It's easy to be greedy for MSI-X vectors, but it really | 4321 | * It's easy to be greedy for MSI-X vectors, but it really |
4319 | * doesn't do us much good if we have a lot more vectors | 4322 | * doesn't do us much good if we have a lot more vectors |
@@ -4345,7 +4348,7 @@ static int ixgbe_set_interrupt_capability(struct ixgbe_adapter *adapter) | |||
4345 | if (adapter->flags & IXGBE_FLAG_MSIX_ENABLED) | 4348 | if (adapter->flags & IXGBE_FLAG_MSIX_ENABLED) |
4346 | goto out; | 4349 | goto out; |
4347 | } | 4350 | } |
4348 | 4351 | try_msi: | |
4349 | adapter->flags &= ~IXGBE_FLAG_DCB_ENABLED; | 4352 | adapter->flags &= ~IXGBE_FLAG_DCB_ENABLED; |
4350 | adapter->flags &= ~IXGBE_FLAG_RSS_ENABLED; | 4353 | adapter->flags &= ~IXGBE_FLAG_RSS_ENABLED; |
4351 | adapter->flags &= ~IXGBE_FLAG_FDIR_HASH_CAPABLE; | 4354 | adapter->flags &= ~IXGBE_FLAG_FDIR_HASH_CAPABLE; |
@@ -4626,6 +4629,18 @@ static int __devinit ixgbe_sw_init(struct ixgbe_adapter *adapter) | |||
4626 | adapter->ring_feature[RING_F_RSS].indices = rss; | 4629 | adapter->ring_feature[RING_F_RSS].indices = rss; |
4627 | adapter->flags |= IXGBE_FLAG_RSS_ENABLED; | 4630 | adapter->flags |= IXGBE_FLAG_RSS_ENABLED; |
4628 | adapter->ring_feature[RING_F_DCB].indices = IXGBE_MAX_DCB_INDICES; | 4631 | adapter->ring_feature[RING_F_DCB].indices = IXGBE_MAX_DCB_INDICES; |
4632 | adapter->flags |= IXGBE_FLAG_MSIX_CAPABLE; | ||
4633 | if (adapter->hw.device_id == IXGBE_DEV_ID_82598AF_DUAL_PORT) { | ||
4634 | switch (adapter->hw.subsystem_device_id) { | ||
4635 | case IXGBE_SUBDEV_ID_82598AF_MEZZ: | ||
4636 | case IXGBE_SUBDEV_ID_82598AF_MENLO_Q_MEZZ: | ||
4637 | case IXGBE_SUBDEV_ID_82598AF_MENLO_E_MEZZ: | ||
4638 | adapter->flags &= ~IXGBE_FLAG_MSIX_CAPABLE; | ||
4639 | break; | ||
4640 | default: | ||
4641 | break; | ||
4642 | } | ||
4643 | } | ||
4629 | if (hw->mac.type == ixgbe_mac_82598EB) { | 4644 | if (hw->mac.type == ixgbe_mac_82598EB) { |
4630 | if (hw->device_id == IXGBE_DEV_ID_82598AT) | 4645 | if (hw->device_id == IXGBE_DEV_ID_82598AT) |
4631 | adapter->flags |= IXGBE_FLAG_FAN_FAIL_CAPABLE; | 4646 | adapter->flags |= IXGBE_FLAG_FAN_FAIL_CAPABLE; |