aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2012-12-07 12:32:47 -0500
committerDavid S. Miller <davem@davemloft.net>2012-12-07 12:33:53 -0500
commit1d9c5a04d5208c6bc53364a513508ffcab1bc338 (patch)
tree708f9dd953d1117baa2cfa8334d0629cc4139a4f
parent8caaf7b608ae27f7e7d5f5df6f87039db556d4bb (diff)
parent6699938bde8cf9bc3e118077e84484b7587b8533 (diff)
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next
Jeff Kirsher says: ==================== This series contains updates to igb and ixgbe. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/intel/igb/igb_main.c55
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c2
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_common.c26
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_common.h1
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_main.c7
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_type.h11
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_x540.c2
7 files changed, 42 insertions, 62 deletions
diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
index de4ebb306530..06513d9e9fb7 100644
--- a/drivers/net/ethernet/intel/igb/igb_main.c
+++ b/drivers/net/ethernet/intel/igb/igb_main.c
@@ -60,8 +60,8 @@
60#include "igb.h" 60#include "igb.h"
61 61
62#define MAJ 4 62#define MAJ 4
63#define MIN 0 63#define MIN 1
64#define BUILD 17 64#define BUILD 2
65#define DRV_VERSION __stringify(MAJ) "." __stringify(MIN) "." \ 65#define DRV_VERSION __stringify(MAJ) "." __stringify(MIN) "." \
66__stringify(BUILD) "-k" 66__stringify(BUILD) "-k"
67char igb_driver_name[] = "igb"; 67char igb_driver_name[] = "igb";
@@ -122,6 +122,7 @@ static void igb_remove(struct pci_dev *pdev);
122static int igb_sw_init(struct igb_adapter *); 122static int igb_sw_init(struct igb_adapter *);
123static int igb_open(struct net_device *); 123static int igb_open(struct net_device *);
124static int igb_close(struct net_device *); 124static int igb_close(struct net_device *);
125static void igb_configure(struct igb_adapter *);
125static void igb_configure_tx(struct igb_adapter *); 126static void igb_configure_tx(struct igb_adapter *);
126static void igb_configure_rx(struct igb_adapter *); 127static void igb_configure_rx(struct igb_adapter *);
127static void igb_clean_all_tx_rings(struct igb_adapter *); 128static void igb_clean_all_tx_rings(struct igb_adapter *);
@@ -831,17 +832,18 @@ static int igb_request_msix(struct igb_adapter *adapter)
831{ 832{
832 struct net_device *netdev = adapter->netdev; 833 struct net_device *netdev = adapter->netdev;
833 struct e1000_hw *hw = &adapter->hw; 834 struct e1000_hw *hw = &adapter->hw;
834 int i, err = 0, vector = 0; 835 int i, err = 0, vector = 0, free_vector = 0;
835 836
836 err = request_irq(adapter->msix_entries[vector].vector, 837 err = request_irq(adapter->msix_entries[vector].vector,
837 igb_msix_other, 0, netdev->name, adapter); 838 igb_msix_other, 0, netdev->name, adapter);
838 if (err) 839 if (err)
839 goto out; 840 goto err_out;
840 vector++;
841 841
842 for (i = 0; i < adapter->num_q_vectors; i++) { 842 for (i = 0; i < adapter->num_q_vectors; i++) {
843 struct igb_q_vector *q_vector = adapter->q_vector[i]; 843 struct igb_q_vector *q_vector = adapter->q_vector[i];
844 844
845 vector++;
846
845 q_vector->itr_register = hw->hw_addr + E1000_EITR(vector); 847 q_vector->itr_register = hw->hw_addr + E1000_EITR(vector);
846 848
847 if (q_vector->rx.ring && q_vector->tx.ring) 849 if (q_vector->rx.ring && q_vector->tx.ring)
@@ -860,13 +862,22 @@ static int igb_request_msix(struct igb_adapter *adapter)
860 igb_msix_ring, 0, q_vector->name, 862 igb_msix_ring, 0, q_vector->name,
861 q_vector); 863 q_vector);
862 if (err) 864 if (err)
863 goto out; 865 goto err_free;
864 vector++;
865 } 866 }
866 867
867 igb_configure_msix(adapter); 868 igb_configure_msix(adapter);
868 return 0; 869 return 0;
869out: 870
871err_free:
872 /* free already assigned IRQs */
873 free_irq(adapter->msix_entries[free_vector++].vector, adapter);
874
875 vector--;
876 for (i = 0; i < vector; i++) {
877 free_irq(adapter->msix_entries[free_vector++].vector,
878 adapter->q_vector[i]);
879 }
880err_out:
870 return err; 881 return err;
871} 882}
872 883
@@ -948,11 +959,14 @@ static void igb_clear_interrupt_scheme(struct igb_adapter *adapter)
948 * Attempt to configure interrupts using the best available 959 * Attempt to configure interrupts using the best available
949 * capabilities of the hardware and kernel. 960 * capabilities of the hardware and kernel.
950 **/ 961 **/
951static void igb_set_interrupt_capability(struct igb_adapter *adapter) 962static void igb_set_interrupt_capability(struct igb_adapter *adapter, bool msix)
952{ 963{
953 int err; 964 int err;
954 int numvecs, i; 965 int numvecs, i;
955 966
967 if (!msix)
968 goto msi_only;
969
956 /* Number of supported queues. */ 970 /* Number of supported queues. */
957 adapter->num_rx_queues = adapter->rss_queues; 971 adapter->num_rx_queues = adapter->rss_queues;
958 if (adapter->vfs_allocated_count) 972 if (adapter->vfs_allocated_count)
@@ -1199,12 +1213,12 @@ err_out:
1199 * 1213 *
1200 * This function initializes the interrupts and allocates all of the queues. 1214 * This function initializes the interrupts and allocates all of the queues.
1201 **/ 1215 **/
1202static int igb_init_interrupt_scheme(struct igb_adapter *adapter) 1216static int igb_init_interrupt_scheme(struct igb_adapter *adapter, bool msix)
1203{ 1217{
1204 struct pci_dev *pdev = adapter->pdev; 1218 struct pci_dev *pdev = adapter->pdev;
1205 int err; 1219 int err;
1206 1220
1207 igb_set_interrupt_capability(adapter); 1221 igb_set_interrupt_capability(adapter, msix);
1208 1222
1209 err = igb_alloc_q_vectors(adapter); 1223 err = igb_alloc_q_vectors(adapter);
1210 if (err) { 1224 if (err) {
@@ -1240,20 +1254,15 @@ static int igb_request_irq(struct igb_adapter *adapter)
1240 /* fall back to MSI */ 1254 /* fall back to MSI */
1241 igb_free_all_tx_resources(adapter); 1255 igb_free_all_tx_resources(adapter);
1242 igb_free_all_rx_resources(adapter); 1256 igb_free_all_rx_resources(adapter);
1257
1243 igb_clear_interrupt_scheme(adapter); 1258 igb_clear_interrupt_scheme(adapter);
1244 if (!pci_enable_msi(pdev)) 1259 err = igb_init_interrupt_scheme(adapter, false);
1245 adapter->flags |= IGB_FLAG_HAS_MSI; 1260 if (err)
1246 adapter->num_tx_queues = 1;
1247 adapter->num_rx_queues = 1;
1248 adapter->num_q_vectors = 1;
1249 err = igb_alloc_q_vectors(adapter);
1250 if (err) {
1251 dev_err(&pdev->dev,
1252 "Unable to allocate memory for vectors\n");
1253 goto request_done; 1261 goto request_done;
1254 } 1262
1255 igb_setup_all_tx_resources(adapter); 1263 igb_setup_all_tx_resources(adapter);
1256 igb_setup_all_rx_resources(adapter); 1264 igb_setup_all_rx_resources(adapter);
1265 igb_configure(adapter);
1257 } 1266 }
1258 1267
1259 igb_assign_vector(adapter->q_vector[0], 0); 1268 igb_assign_vector(adapter->q_vector[0], 0);
@@ -2444,7 +2453,7 @@ static int igb_sw_init(struct igb_adapter *adapter)
2444 GFP_ATOMIC); 2453 GFP_ATOMIC);
2445 2454
2446 /* This call may decrease the number of queues */ 2455 /* This call may decrease the number of queues */
2447 if (igb_init_interrupt_scheme(adapter)) { 2456 if (igb_init_interrupt_scheme(adapter, true)) {
2448 dev_err(&pdev->dev, "Unable to allocate memory for queues\n"); 2457 dev_err(&pdev->dev, "Unable to allocate memory for queues\n");
2449 return -ENOMEM; 2458 return -ENOMEM;
2450 } 2459 }
@@ -6818,7 +6827,7 @@ static int igb_resume(struct device *dev)
6818 pci_enable_wake(pdev, PCI_D3hot, 0); 6827 pci_enable_wake(pdev, PCI_D3hot, 0);
6819 pci_enable_wake(pdev, PCI_D3cold, 0); 6828 pci_enable_wake(pdev, PCI_D3cold, 0);
6820 6829
6821 if (igb_init_interrupt_scheme(adapter)) { 6830 if (igb_init_interrupt_scheme(adapter, true)) {
6822 dev_err(&pdev->dev, "Unable to allocate memory for queues\n"); 6831 dev_err(&pdev->dev, "Unable to allocate memory for queues\n");
6823 return -ENOMEM; 6832 return -ENOMEM;
6824 } 6833 }
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c
index e75f5a4a2a6d..1073aea5da40 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c
@@ -1078,7 +1078,7 @@ mac_reset_top:
1078 hw->mac.ops.get_san_mac_addr(hw, hw->mac.san_addr); 1078 hw->mac.ops.get_san_mac_addr(hw, hw->mac.san_addr);
1079 1079
1080 /* Add the SAN MAC address to the RAR only if it's a valid address */ 1080 /* Add the SAN MAC address to the RAR only if it's a valid address */
1081 if (ixgbe_validate_mac_addr(hw->mac.san_addr) == 0) { 1081 if (is_valid_ether_addr(hw->mac.san_addr)) {
1082 hw->mac.ops.set_rar(hw, hw->mac.num_rar_entries - 1, 1082 hw->mac.ops.set_rar(hw, hw->mac.num_rar_entries - 1,
1083 hw->mac.san_addr, 0, IXGBE_RAH_AV); 1083 hw->mac.san_addr, 0, IXGBE_RAH_AV);
1084 1084
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c
index 5af1eebc32f1..5e68afdd502a 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c
@@ -1783,29 +1783,6 @@ s32 ixgbe_update_eeprom_checksum_generic(struct ixgbe_hw *hw)
1783} 1783}
1784 1784
1785/** 1785/**
1786 * ixgbe_validate_mac_addr - Validate MAC address
1787 * @mac_addr: pointer to MAC address.
1788 *
1789 * Tests a MAC address to ensure it is a valid Individual Address
1790 **/
1791s32 ixgbe_validate_mac_addr(u8 *mac_addr)
1792{
1793 s32 status = 0;
1794
1795 /* Make sure it is not a multicast address */
1796 if (IXGBE_IS_MULTICAST(mac_addr))
1797 status = IXGBE_ERR_INVALID_MAC_ADDR;
1798 /* Not a broadcast address */
1799 else if (IXGBE_IS_BROADCAST(mac_addr))
1800 status = IXGBE_ERR_INVALID_MAC_ADDR;
1801 /* Reject the zero address */
1802 else if (is_zero_ether_addr(mac_addr))
1803 status = IXGBE_ERR_INVALID_MAC_ADDR;
1804
1805 return status;
1806}
1807
1808/**
1809 * ixgbe_set_rar_generic - Set Rx address register 1786 * ixgbe_set_rar_generic - Set Rx address register
1810 * @hw: pointer to hardware structure 1787 * @hw: pointer to hardware structure
1811 * @index: Receive address register to write 1788 * @index: Receive address register to write
@@ -1909,8 +1886,7 @@ s32 ixgbe_init_rx_addrs_generic(struct ixgbe_hw *hw)
1909 * to the permanent address. 1886 * to the permanent address.
1910 * Otherwise, use the permanent address from the eeprom. 1887 * Otherwise, use the permanent address from the eeprom.
1911 */ 1888 */
1912 if (ixgbe_validate_mac_addr(hw->mac.addr) == 1889 if (!is_valid_ether_addr(hw->mac.addr)) {
1913 IXGBE_ERR_INVALID_MAC_ADDR) {
1914 /* Get the MAC address from the RAR0 for later reference */ 1890 /* Get the MAC address from the RAR0 for later reference */
1915 hw->mac.ops.get_mac_addr(hw, hw->mac.addr); 1891 hw->mac.ops.get_mac_addr(hw, hw->mac.addr);
1916 1892
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_common.h b/drivers/net/ethernet/intel/ixgbe/ixgbe_common.h
index 1b65b6cc07bf..f7a0970a251c 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_common.h
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_common.h
@@ -81,7 +81,6 @@ s32 ixgbe_fc_enable_generic(struct ixgbe_hw *hw);
81s32 ixgbe_device_supports_autoneg_fc(struct ixgbe_hw *hw); 81s32 ixgbe_device_supports_autoneg_fc(struct ixgbe_hw *hw);
82void ixgbe_fc_autoneg(struct ixgbe_hw *hw); 82void ixgbe_fc_autoneg(struct ixgbe_hw *hw);
83 83
84s32 ixgbe_validate_mac_addr(u8 *mac_addr);
85s32 ixgbe_acquire_swfw_sync(struct ixgbe_hw *hw, u16 mask); 84s32 ixgbe_acquire_swfw_sync(struct ixgbe_hw *hw, u16 mask);
86void ixgbe_release_swfw_sync(struct ixgbe_hw *hw, u16 mask); 85void ixgbe_release_swfw_sync(struct ixgbe_hw *hw, u16 mask);
87s32 ixgbe_get_san_mac_addr_generic(struct ixgbe_hw *hw, u8 *san_mac_addr); 86s32 ixgbe_get_san_mac_addr_generic(struct ixgbe_hw *hw, u8 *san_mac_addr);
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index 2fa16de46786..fb165b6ffada 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -4467,6 +4467,7 @@ static int ixgbe_sw_init(struct ixgbe_adapter *adapter)
4467 struct ixgbe_hw *hw = &adapter->hw; 4467 struct ixgbe_hw *hw = &adapter->hw;
4468 struct pci_dev *pdev = adapter->pdev; 4468 struct pci_dev *pdev = adapter->pdev;
4469 unsigned int rss; 4469 unsigned int rss;
4470 u32 fwsm;
4470#ifdef CONFIG_IXGBE_DCB 4471#ifdef CONFIG_IXGBE_DCB
4471 int j; 4472 int j;
4472 struct tc_configuration *tc; 4473 struct tc_configuration *tc;
@@ -4490,7 +4491,9 @@ static int ixgbe_sw_init(struct ixgbe_adapter *adapter)
4490 adapter->max_q_vectors = MAX_Q_VECTORS_82598; 4491 adapter->max_q_vectors = MAX_Q_VECTORS_82598;
4491 break; 4492 break;
4492 case ixgbe_mac_X540: 4493 case ixgbe_mac_X540:
4493 adapter->flags2 |= IXGBE_FLAG2_TEMP_SENSOR_CAPABLE; 4494 fwsm = IXGBE_READ_REG(hw, IXGBE_FWSM);
4495 if (fwsm & IXGBE_FWSM_TS_ENABLED)
4496 adapter->flags2 |= IXGBE_FLAG2_TEMP_SENSOR_CAPABLE;
4494 case ixgbe_mac_82599EB: 4497 case ixgbe_mac_82599EB:
4495 adapter->max_q_vectors = MAX_Q_VECTORS_82599; 4498 adapter->max_q_vectors = MAX_Q_VECTORS_82599;
4496 adapter->flags2 |= IXGBE_FLAG2_RSC_CAPABLE; 4499 adapter->flags2 |= IXGBE_FLAG2_RSC_CAPABLE;
@@ -7444,7 +7447,7 @@ static int ixgbe_probe(struct pci_dev *pdev,
7444 memcpy(netdev->dev_addr, hw->mac.perm_addr, netdev->addr_len); 7447 memcpy(netdev->dev_addr, hw->mac.perm_addr, netdev->addr_len);
7445 memcpy(netdev->perm_addr, hw->mac.perm_addr, netdev->addr_len); 7448 memcpy(netdev->perm_addr, hw->mac.perm_addr, netdev->addr_len);
7446 7449
7447 if (ixgbe_validate_mac_addr(netdev->perm_addr)) { 7450 if (!is_valid_ether_addr(netdev->perm_addr)) {
7448 e_dev_err("invalid MAC address\n"); 7451 e_dev_err("invalid MAC address\n");
7449 err = -EIO; 7452 err = -EIO;
7450 goto err_sw_init; 7453 goto err_sw_init;
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h b/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h
index 21915e20399a..9cd8a13711d3 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h
@@ -1834,15 +1834,6 @@ enum {
1834/* Number of 100 microseconds we wait for PCI Express master disable */ 1834/* Number of 100 microseconds we wait for PCI Express master disable */
1835#define IXGBE_PCI_MASTER_DISABLE_TIMEOUT 800 1835#define IXGBE_PCI_MASTER_DISABLE_TIMEOUT 800
1836 1836
1837/* Check whether address is multicast. This is little-endian specific check.*/
1838#define IXGBE_IS_MULTICAST(Address) \
1839 (bool)(((u8 *)(Address))[0] & ((u8)0x01))
1840
1841/* Check whether an address is broadcast. */
1842#define IXGBE_IS_BROADCAST(Address) \
1843 ((((u8 *)(Address))[0] == ((u8)0xff)) && \
1844 (((u8 *)(Address))[1] == ((u8)0xff)))
1845
1846/* RAH */ 1837/* RAH */
1847#define IXGBE_RAH_VIND_MASK 0x003C0000 1838#define IXGBE_RAH_VIND_MASK 0x003C0000
1848#define IXGBE_RAH_VIND_SHIFT 18 1839#define IXGBE_RAH_VIND_SHIFT 18
@@ -1963,6 +1954,8 @@ enum {
1963#define IXGBE_MRQC_RSS_FIELD_IPV6_EX_UDP 0x01000000 1954#define IXGBE_MRQC_RSS_FIELD_IPV6_EX_UDP 0x01000000
1964#define IXGBE_MRQC_L3L4TXSWEN 0x00008000 1955#define IXGBE_MRQC_L3L4TXSWEN 0x00008000
1965 1956
1957#define IXGBE_FWSM_TS_ENABLED 0x1
1958
1966/* Queue Drop Enable */ 1959/* Queue Drop Enable */
1967#define IXGBE_QDE_ENABLE 0x00000001 1960#define IXGBE_QDE_ENABLE 0x00000001
1968#define IXGBE_QDE_IDX_MASK 0x00007F00 1961#define IXGBE_QDE_IDX_MASK 0x00007F00
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_x540.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_x540.c
index de4da5219b71..c73b92993391 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_x540.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_x540.c
@@ -152,7 +152,7 @@ mac_reset_top:
152 hw->mac.ops.get_san_mac_addr(hw, hw->mac.san_addr); 152 hw->mac.ops.get_san_mac_addr(hw, hw->mac.san_addr);
153 153
154 /* Add the SAN MAC address to the RAR only if it's a valid address */ 154 /* Add the SAN MAC address to the RAR only if it's a valid address */
155 if (ixgbe_validate_mac_addr(hw->mac.san_addr) == 0) { 155 if (is_valid_ether_addr(hw->mac.san_addr)) {
156 hw->mac.ops.set_rar(hw, hw->mac.num_rar_entries - 1, 156 hw->mac.ops.set_rar(hw, hw->mac.num_rar_entries - 1,
157 hw->mac.san_addr, 0, IXGBE_RAH_AV); 157 hw->mac.san_addr, 0, IXGBE_RAH_AV);
158 158