aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2014-06-04 17:40:17 -0400
committerDavid S. Miller <davem@davemloft.net>2014-06-04 17:40:17 -0400
commit9bcc14d23982491998dc43ef321884f3408399c7 (patch)
tree53f69400cf8518eab42f9c181c601c9614585119
parentc99f7abf0e69987e4add567e155e042cb1f2a20b (diff)
parent1aa65f4d7f8a9c7415224881a2df461ed711d9e3 (diff)
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next
Jeff Kirsher says: ==================== Intel Wired LAN Driver Updates This series contains updates to e1000, igb and ixgbe. Emil provides his version 2 fix for the detection of SFP+ capable interfaces. In cases where the driver is loaded while there are no SFP+ modules in cage, the interface was not being detected as SFP capable. Resolve the issue by identifying interfaces with no PHY type set as SFP capable which allows the driver to detect the SFP module when the interface is brought up. In this version 2 of the patch, the 82599 specific check was removed since we only have 82598 devices that are SFP capable. Jacob removes the including of the export header in the ixgbe PTP core, since it is not needed. Renames igb_ptp_enable() to igb_ptp_feature_enable() to better reflect the actual functions purpose. Todd fixes the ethtool loopback test for i354 backplane devices since we do not know what PHY is to be used for the devices, use MAC loopback for ethtool tests. Todd also sets the packet buffer size register defaults for i210 devices. Yongjian Xu removes the check for skb->len being negative or zero since there is never a case where it would be zero or negative for e1000. Manuel Schölling updates e1000 to use the time_after() helper function. v2: Fix indentation on wrapped line in patch 3 of the series based on feedback from David Miller ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/intel/e1000/e1000_ethtool.c3
-rw-r--r--drivers/net/ethernet/intel/e1000/e1000_main.c5
-rw-r--r--drivers/net/ethernet/intel/igb/e1000_defines.h3
-rw-r--r--drivers/net/ethernet/intel/igb/e1000_regs.h4
-rw-r--r--drivers/net/ethernet/intel/igb/igb_ethtool.c4
-rw-r--r--drivers/net/ethernet/intel/igb/igb_main.c6
-rw-r--r--drivers/net/ethernet/intel/igb/igb_ptp.c10
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c7
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_main.c2
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c1
10 files changed, 24 insertions, 21 deletions
diff --git a/drivers/net/ethernet/intel/e1000/e1000_ethtool.c b/drivers/net/ethernet/intel/e1000/e1000_ethtool.c
index 341889a4ef7f..08b207df1459 100644
--- a/drivers/net/ethernet/intel/e1000/e1000_ethtool.c
+++ b/drivers/net/ethernet/intel/e1000/e1000_ethtool.c
@@ -1460,7 +1460,8 @@ static int e1000_run_loopback_test(struct e1000_adapter *adapter)
1460 * enough time to complete the receives, if it's 1460 * enough time to complete the receives, if it's
1461 * exceeded, break and error off 1461 * exceeded, break and error off
1462 */ 1462 */
1463 } while (good_cnt < 64 && jiffies < (time + 20)); 1463 } while (good_cnt < 64 && time_after(time + 20, jiffies));
1464
1464 if (good_cnt != 64) { 1465 if (good_cnt != 64) {
1465 ret_val = 13; /* ret_val is the same as mis-compare */ 1466 ret_val = 13; /* ret_val is the same as mis-compare */
1466 break; 1467 break;
diff --git a/drivers/net/ethernet/intel/e1000/e1000_main.c b/drivers/net/ethernet/intel/e1000/e1000_main.c
index 27058dfe418b..660971f304b2 100644
--- a/drivers/net/ethernet/intel/e1000/e1000_main.c
+++ b/drivers/net/ethernet/intel/e1000/e1000_main.c
@@ -3105,11 +3105,6 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
3105 */ 3105 */
3106 tx_ring = adapter->tx_ring; 3106 tx_ring = adapter->tx_ring;
3107 3107
3108 if (unlikely(skb->len <= 0)) {
3109 dev_kfree_skb_any(skb);
3110 return NETDEV_TX_OK;
3111 }
3112
3113 /* On PCI/PCI-X HW, if packet size is less than ETH_ZLEN, 3108 /* On PCI/PCI-X HW, if packet size is less than ETH_ZLEN,
3114 * packets may get corrupted during padding by HW. 3109 * packets may get corrupted during padding by HW.
3115 * To WA this issue, pad all small packets manually. 3110 * To WA this issue, pad all small packets manually.
diff --git a/drivers/net/ethernet/intel/igb/e1000_defines.h b/drivers/net/ethernet/intel/igb/e1000_defines.h
index f85be6695e44..11ffdbae9f92 100644
--- a/drivers/net/ethernet/intel/igb/e1000_defines.h
+++ b/drivers/net/ethernet/intel/igb/e1000_defines.h
@@ -329,6 +329,9 @@
329/* Timestamp in Rx buffer */ 329/* Timestamp in Rx buffer */
330#define E1000_RXPBS_CFG_TS_EN 0x80000000 330#define E1000_RXPBS_CFG_TS_EN 0x80000000
331 331
332#define I210_RXPBSIZE_DEFAULT 0x000000A2 /* RXPBSIZE default */
333#define I210_TXPBSIZE_DEFAULT 0x04000014 /* TXPBSIZE default */
334
332/* SerDes Control */ 335/* SerDes Control */
333#define E1000_SCTL_DISABLE_SERDES_LOOPBACK 0x0400 336#define E1000_SCTL_DISABLE_SERDES_LOOPBACK 0x0400
334 337
diff --git a/drivers/net/ethernet/intel/igb/e1000_regs.h b/drivers/net/ethernet/intel/igb/e1000_regs.h
index 833bbb948d97..1cc4b1a7e597 100644
--- a/drivers/net/ethernet/intel/igb/e1000_regs.h
+++ b/drivers/net/ethernet/intel/igb/e1000_regs.h
@@ -192,6 +192,10 @@
192 : (0x0E038 + ((_n) * 0x40))) 192 : (0x0E038 + ((_n) * 0x40)))
193#define E1000_TDWBAH(_n) ((_n) < 4 ? (0x0383C + ((_n) * 0x100)) \ 193#define E1000_TDWBAH(_n) ((_n) < 4 ? (0x0383C + ((_n) * 0x100)) \
194 : (0x0E03C + ((_n) * 0x40))) 194 : (0x0E03C + ((_n) * 0x40)))
195
196#define E1000_RXPBS 0x02404 /* Rx Packet Buffer Size - RW */
197#define E1000_TXPBS 0x03404 /* Tx Packet Buffer Size - RW */
198
195#define E1000_TDFH 0x03410 /* TX Data FIFO Head - RW */ 199#define E1000_TDFH 0x03410 /* TX Data FIFO Head - RW */
196#define E1000_TDFT 0x03418 /* TX Data FIFO Tail - RW */ 200#define E1000_TDFT 0x03418 /* TX Data FIFO Tail - RW */
197#define E1000_TDFHS 0x03420 /* TX Data FIFO Head Saved - RW */ 201#define E1000_TDFHS 0x03420 /* TX Data FIFO Head Saved - RW */
diff --git a/drivers/net/ethernet/intel/igb/igb_ethtool.c b/drivers/net/ethernet/intel/igb/igb_ethtool.c
index d8bbcf1873ca..80e376377c3d 100644
--- a/drivers/net/ethernet/intel/igb/igb_ethtool.c
+++ b/drivers/net/ethernet/intel/igb/igb_ethtool.c
@@ -1665,8 +1665,8 @@ static int igb_setup_loopback_test(struct igb_adapter *adapter)
1665 (hw->device_id == E1000_DEV_ID_DH89XXCC_SERDES) || 1665 (hw->device_id == E1000_DEV_ID_DH89XXCC_SERDES) ||
1666 (hw->device_id == E1000_DEV_ID_DH89XXCC_BACKPLANE) || 1666 (hw->device_id == E1000_DEV_ID_DH89XXCC_BACKPLANE) ||
1667 (hw->device_id == E1000_DEV_ID_DH89XXCC_SFP) || 1667 (hw->device_id == E1000_DEV_ID_DH89XXCC_SFP) ||
1668 (hw->device_id == E1000_DEV_ID_I354_SGMII)) { 1668 (hw->device_id == E1000_DEV_ID_I354_SGMII) ||
1669 1669 (hw->device_id == E1000_DEV_ID_I354_BACKPLANE_2_5GBPS)) {
1670 /* Enable DH89xxCC MPHY for near end loopback */ 1670 /* Enable DH89xxCC MPHY for near end loopback */
1671 reg = rd32(E1000_MPHY_ADDR_CTL); 1671 reg = rd32(E1000_MPHY_ADDR_CTL);
1672 reg = (reg & E1000_MPHY_ADDR_CTL_OFFSET_MASK) | 1672 reg = (reg & E1000_MPHY_ADDR_CTL_OFFSET_MASK) |
diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
index ea2868b22c2d..33b3a16dabe1 100644
--- a/drivers/net/ethernet/intel/igb/igb_main.c
+++ b/drivers/net/ethernet/intel/igb/igb_main.c
@@ -2433,6 +2433,12 @@ static int igb_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
2433 /* get firmware version for ethtool -i */ 2433 /* get firmware version for ethtool -i */
2434 igb_set_fw_version(adapter); 2434 igb_set_fw_version(adapter);
2435 2435
2436 /* configure RXPBSIZE and TXPBSIZE */
2437 if (hw->mac.type == e1000_i210) {
2438 wr32(E1000_RXPBS, I210_RXPBSIZE_DEFAULT);
2439 wr32(E1000_TXPBS, I210_TXPBSIZE_DEFAULT);
2440 }
2441
2436 setup_timer(&adapter->watchdog_timer, igb_watchdog, 2442 setup_timer(&adapter->watchdog_timer, igb_watchdog,
2437 (unsigned long) adapter); 2443 (unsigned long) adapter);
2438 setup_timer(&adapter->phy_info_timer, igb_update_phy_info, 2444 setup_timer(&adapter->phy_info_timer, igb_update_phy_info,
diff --git a/drivers/net/ethernet/intel/igb/igb_ptp.c b/drivers/net/ethernet/intel/igb/igb_ptp.c
index ab25e49365f7..e291be20dc98 100644
--- a/drivers/net/ethernet/intel/igb/igb_ptp.c
+++ b/drivers/net/ethernet/intel/igb/igb_ptp.c
@@ -360,8 +360,8 @@ static int igb_ptp_settime_i210(struct ptp_clock_info *ptp,
360 return 0; 360 return 0;
361} 361}
362 362
363static int igb_ptp_enable(struct ptp_clock_info *ptp, 363static int igb_ptp_feature_enable(struct ptp_clock_info *ptp,
364 struct ptp_clock_request *rq, int on) 364 struct ptp_clock_request *rq, int on)
365{ 365{
366 return -EOPNOTSUPP; 366 return -EOPNOTSUPP;
367} 367}
@@ -745,7 +745,7 @@ void igb_ptp_init(struct igb_adapter *adapter)
745 adapter->ptp_caps.adjtime = igb_ptp_adjtime_82576; 745 adapter->ptp_caps.adjtime = igb_ptp_adjtime_82576;
746 adapter->ptp_caps.gettime = igb_ptp_gettime_82576; 746 adapter->ptp_caps.gettime = igb_ptp_gettime_82576;
747 adapter->ptp_caps.settime = igb_ptp_settime_82576; 747 adapter->ptp_caps.settime = igb_ptp_settime_82576;
748 adapter->ptp_caps.enable = igb_ptp_enable; 748 adapter->ptp_caps.enable = igb_ptp_feature_enable;
749 adapter->cc.read = igb_ptp_read_82576; 749 adapter->cc.read = igb_ptp_read_82576;
750 adapter->cc.mask = CLOCKSOURCE_MASK(64); 750 adapter->cc.mask = CLOCKSOURCE_MASK(64);
751 adapter->cc.mult = 1; 751 adapter->cc.mult = 1;
@@ -765,7 +765,7 @@ void igb_ptp_init(struct igb_adapter *adapter)
765 adapter->ptp_caps.adjtime = igb_ptp_adjtime_82576; 765 adapter->ptp_caps.adjtime = igb_ptp_adjtime_82576;
766 adapter->ptp_caps.gettime = igb_ptp_gettime_82576; 766 adapter->ptp_caps.gettime = igb_ptp_gettime_82576;
767 adapter->ptp_caps.settime = igb_ptp_settime_82576; 767 adapter->ptp_caps.settime = igb_ptp_settime_82576;
768 adapter->ptp_caps.enable = igb_ptp_enable; 768 adapter->ptp_caps.enable = igb_ptp_feature_enable;
769 adapter->cc.read = igb_ptp_read_82580; 769 adapter->cc.read = igb_ptp_read_82580;
770 adapter->cc.mask = CLOCKSOURCE_MASK(IGB_NBITS_82580); 770 adapter->cc.mask = CLOCKSOURCE_MASK(IGB_NBITS_82580);
771 adapter->cc.mult = 1; 771 adapter->cc.mult = 1;
@@ -784,7 +784,7 @@ void igb_ptp_init(struct igb_adapter *adapter)
784 adapter->ptp_caps.adjtime = igb_ptp_adjtime_i210; 784 adapter->ptp_caps.adjtime = igb_ptp_adjtime_i210;
785 adapter->ptp_caps.gettime = igb_ptp_gettime_i210; 785 adapter->ptp_caps.gettime = igb_ptp_gettime_i210;
786 adapter->ptp_caps.settime = igb_ptp_settime_i210; 786 adapter->ptp_caps.settime = igb_ptp_settime_i210;
787 adapter->ptp_caps.enable = igb_ptp_enable; 787 adapter->ptp_caps.enable = igb_ptp_feature_enable;
788 /* Enable the timer functions by clearing bit 31. */ 788 /* Enable the timer functions by clearing bit 31. */
789 wr32(E1000_TSAUXC, 0x0); 789 wr32(E1000_TSAUXC, 0x0);
790 break; 790 break;
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
index cc70de259829..23e4e6a4b4b1 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
@@ -161,13 +161,6 @@ static int ixgbe_get_settings(struct net_device *netdev,
161 bool autoneg = false; 161 bool autoneg = false;
162 bool link_up; 162 bool link_up;
163 163
164 /* SFP type is needed for get_link_capabilities */
165 if (hw->phy.media_type & (ixgbe_media_type_fiber |
166 ixgbe_media_type_fiber_qsfp)) {
167 if (hw->phy.sfp_type == ixgbe_sfp_type_not_present)
168 hw->phy.ops.identify_sfp(hw);
169 }
170
171 hw->mac.ops.get_link_capabilities(hw, &supported_link, &autoneg); 164 hw->mac.ops.get_link_capabilities(hw, &supported_link, &autoneg);
172 165
173 /* set the supported link speeds */ 166 /* set the supported link speeds */
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index ea11e2c8ee8c..e22278a5cbfa 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -4656,6 +4656,8 @@ static inline bool ixgbe_is_sfp(struct ixgbe_hw *hw)
4656 case ixgbe_phy_qsfp_active_unknown: 4656 case ixgbe_phy_qsfp_active_unknown:
4657 case ixgbe_phy_qsfp_intel: 4657 case ixgbe_phy_qsfp_intel:
4658 case ixgbe_phy_qsfp_unknown: 4658 case ixgbe_phy_qsfp_unknown:
4659 /* ixgbe_phy_none is set when no SFP module is present */
4660 case ixgbe_phy_none:
4659 return true; 4661 return true;
4660 case ixgbe_phy_nl: 4662 case ixgbe_phy_nl:
4661 if (hw->mac.type == ixgbe_mac_82598EB) 4663 if (hw->mac.type == ixgbe_mac_82598EB)
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c
index b3266b7536d5..68f87ecb8a76 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c
@@ -26,7 +26,6 @@
26 26
27*******************************************************************************/ 27*******************************************************************************/
28#include "ixgbe.h" 28#include "ixgbe.h"
29#include <linux/export.h>
30#include <linux/ptp_classify.h> 29#include <linux/ptp_classify.h>
31 30
32/* 31/*