aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ixgbe
diff options
context:
space:
mode:
authorNicholas Nunley <nicholasx.d.nunley@intel.com>2010-04-27 22:47:49 -0400
committerDavid S. Miller <davem@davemloft.net>2010-04-27 22:47:49 -0400
commitd5ffd75a27fade39ba5df3b07290c5a2c297b9bd (patch)
tree6dc34ff09fd8fa06809a9f5aea5f876f0b67b1cc /drivers/net/ixgbe
parentafe0159d935ab731c682e811356914bb2be9470c (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.h4
-rw-r--r--drivers/net/ixgbe/ixgbe_main.c17
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
107struct vf_data_storage { 111struct 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 4351try_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;