diff options
Diffstat (limited to 'drivers/net/ethernet/intel/igb/igb_main.c')
-rw-r--r-- | drivers/net/ethernet/intel/igb/igb_main.c | 40 |
1 files changed, 11 insertions, 29 deletions
diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c index a0a9b1fcb5e8..2f70a9b152bd 100644 --- a/drivers/net/ethernet/intel/igb/igb_main.c +++ b/drivers/net/ethernet/intel/igb/igb_main.c | |||
@@ -58,7 +58,7 @@ | |||
58 | 58 | ||
59 | #define MAJ 5 | 59 | #define MAJ 5 |
60 | #define MIN 2 | 60 | #define MIN 2 |
61 | #define BUILD 15 | 61 | #define BUILD 18 |
62 | #define DRV_VERSION __stringify(MAJ) "." __stringify(MIN) "." \ | 62 | #define DRV_VERSION __stringify(MAJ) "." __stringify(MIN) "." \ |
63 | __stringify(BUILD) "-k" | 63 | __stringify(BUILD) "-k" |
64 | char igb_driver_name[] = "igb"; | 64 | char igb_driver_name[] = "igb"; |
@@ -1836,31 +1836,19 @@ void igb_reinit_locked(struct igb_adapter *adapter) | |||
1836 | * | 1836 | * |
1837 | * @adapter: adapter struct | 1837 | * @adapter: adapter struct |
1838 | **/ | 1838 | **/ |
1839 | static s32 igb_enable_mas(struct igb_adapter *adapter) | 1839 | static void igb_enable_mas(struct igb_adapter *adapter) |
1840 | { | 1840 | { |
1841 | struct e1000_hw *hw = &adapter->hw; | 1841 | struct e1000_hw *hw = &adapter->hw; |
1842 | u32 connsw; | 1842 | u32 connsw = rd32(E1000_CONNSW); |
1843 | s32 ret_val = 0; | ||
1844 | |||
1845 | connsw = rd32(E1000_CONNSW); | ||
1846 | if (!(hw->phy.media_type == e1000_media_type_copper)) | ||
1847 | return ret_val; | ||
1848 | 1843 | ||
1849 | /* configure for SerDes media detect */ | 1844 | /* configure for SerDes media detect */ |
1850 | if (!(connsw & E1000_CONNSW_SERDESD)) { | 1845 | if ((hw->phy.media_type == e1000_media_type_copper) && |
1846 | (!(connsw & E1000_CONNSW_SERDESD))) { | ||
1851 | connsw |= E1000_CONNSW_ENRGSRC; | 1847 | connsw |= E1000_CONNSW_ENRGSRC; |
1852 | connsw |= E1000_CONNSW_AUTOSENSE_EN; | 1848 | connsw |= E1000_CONNSW_AUTOSENSE_EN; |
1853 | wr32(E1000_CONNSW, connsw); | 1849 | wr32(E1000_CONNSW, connsw); |
1854 | wrfl(); | 1850 | wrfl(); |
1855 | } else if (connsw & E1000_CONNSW_SERDESD) { | ||
1856 | /* already SerDes, no need to enable anything */ | ||
1857 | return ret_val; | ||
1858 | } else { | ||
1859 | netdev_info(adapter->netdev, | ||
1860 | "MAS: Unable to configure feature, disabling..\n"); | ||
1861 | adapter->flags &= ~IGB_FLAG_MAS_ENABLE; | ||
1862 | } | 1851 | } |
1863 | return ret_val; | ||
1864 | } | 1852 | } |
1865 | 1853 | ||
1866 | void igb_reset(struct igb_adapter *adapter) | 1854 | void igb_reset(struct igb_adapter *adapter) |
@@ -1980,10 +1968,9 @@ void igb_reset(struct igb_adapter *adapter) | |||
1980 | adapter->ei.get_invariants(hw); | 1968 | adapter->ei.get_invariants(hw); |
1981 | adapter->flags &= ~IGB_FLAG_MEDIA_RESET; | 1969 | adapter->flags &= ~IGB_FLAG_MEDIA_RESET; |
1982 | } | 1970 | } |
1983 | if (adapter->flags & IGB_FLAG_MAS_ENABLE) { | 1971 | if ((mac->type == e1000_82575) && |
1984 | if (igb_enable_mas(adapter)) | 1972 | (adapter->flags & IGB_FLAG_MAS_ENABLE)) { |
1985 | dev_err(&pdev->dev, | 1973 | igb_enable_mas(adapter); |
1986 | "Error enabling Media Auto Sense\n"); | ||
1987 | } | 1974 | } |
1988 | if (hw->mac.ops.init_hw(hw)) | 1975 | if (hw->mac.ops.init_hw(hw)) |
1989 | dev_err(&pdev->dev, "Hardware Error\n"); | 1976 | dev_err(&pdev->dev, "Hardware Error\n"); |
@@ -4989,6 +4976,7 @@ netdev_tx_t igb_xmit_frame_ring(struct sk_buff *skb, | |||
4989 | struct igb_tx_buffer *first; | 4976 | struct igb_tx_buffer *first; |
4990 | int tso; | 4977 | int tso; |
4991 | u32 tx_flags = 0; | 4978 | u32 tx_flags = 0; |
4979 | unsigned short f; | ||
4992 | u16 count = TXD_USE_COUNT(skb_headlen(skb)); | 4980 | u16 count = TXD_USE_COUNT(skb_headlen(skb)); |
4993 | __be16 protocol = vlan_get_protocol(skb); | 4981 | __be16 protocol = vlan_get_protocol(skb); |
4994 | u8 hdr_len = 0; | 4982 | u8 hdr_len = 0; |
@@ -4999,14 +4987,8 @@ netdev_tx_t igb_xmit_frame_ring(struct sk_buff *skb, | |||
4999 | * + 1 desc for context descriptor, | 4987 | * + 1 desc for context descriptor, |
5000 | * otherwise try next time | 4988 | * otherwise try next time |
5001 | */ | 4989 | */ |
5002 | if (NETDEV_FRAG_PAGE_MAX_SIZE > IGB_MAX_DATA_PER_TXD) { | 4990 | for (f = 0; f < skb_shinfo(skb)->nr_frags; f++) |
5003 | unsigned short f; | 4991 | count += TXD_USE_COUNT(skb_shinfo(skb)->frags[f].size); |
5004 | |||
5005 | for (f = 0; f < skb_shinfo(skb)->nr_frags; f++) | ||
5006 | count += TXD_USE_COUNT(skb_shinfo(skb)->frags[f].size); | ||
5007 | } else { | ||
5008 | count += skb_shinfo(skb)->nr_frags; | ||
5009 | } | ||
5010 | 4992 | ||
5011 | if (igb_maybe_stop_tx(tx_ring, count + 3)) { | 4993 | if (igb_maybe_stop_tx(tx_ring, count + 3)) { |
5012 | /* this is a hard error */ | 4994 | /* this is a hard error */ |