aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/intel/e1000e/ethtool.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/ethernet/intel/e1000e/ethtool.c')
-rw-r--r--drivers/net/ethernet/intel/e1000e/ethtool.c240
1 files changed, 111 insertions, 129 deletions
diff --git a/drivers/net/ethernet/intel/e1000e/ethtool.c b/drivers/net/ethernet/intel/e1000e/ethtool.c
index f91a8f3f9d48..7c8ca658d553 100644
--- a/drivers/net/ethernet/intel/e1000e/ethtool.c
+++ b/drivers/net/ethernet/intel/e1000e/ethtool.c
@@ -35,12 +35,11 @@
35#include <linux/slab.h> 35#include <linux/slab.h>
36#include <linux/delay.h> 36#include <linux/delay.h>
37#include <linux/vmalloc.h> 37#include <linux/vmalloc.h>
38#include <linux/mdio.h>
39#include <linux/pm_runtime.h> 38#include <linux/pm_runtime.h>
40 39
41#include "e1000.h" 40#include "e1000.h"
42 41
43enum {NETDEV_STATS, E1000_STATS}; 42enum { NETDEV_STATS, E1000_STATS };
44 43
45struct e1000_stats { 44struct e1000_stats {
46 char stat_string[ETH_GSTRING_LEN]; 45 char stat_string[ETH_GSTRING_LEN];
@@ -121,6 +120,7 @@ static const char e1000_gstrings_test[][ETH_GSTRING_LEN] = {
121 "Interrupt test (offline)", "Loopback test (offline)", 120 "Interrupt test (offline)", "Loopback test (offline)",
122 "Link test (on/offline)" 121 "Link test (on/offline)"
123}; 122};
123
124#define E1000_TEST_LEN ARRAY_SIZE(e1000_gstrings_test) 124#define E1000_TEST_LEN ARRAY_SIZE(e1000_gstrings_test)
125 125
126static int e1000_get_settings(struct net_device *netdev, 126static int e1000_get_settings(struct net_device *netdev,
@@ -197,8 +197,7 @@ static int e1000_get_settings(struct net_device *netdev,
197 /* MDI-X => 2; MDI =>1; Invalid =>0 */ 197 /* MDI-X => 2; MDI =>1; Invalid =>0 */
198 if ((hw->phy.media_type == e1000_media_type_copper) && 198 if ((hw->phy.media_type == e1000_media_type_copper) &&
199 netif_carrier_ok(netdev)) 199 netif_carrier_ok(netdev))
200 ecmd->eth_tp_mdix = hw->phy.is_mdix ? ETH_TP_MDI_X : 200 ecmd->eth_tp_mdix = hw->phy.is_mdix ? ETH_TP_MDI_X : ETH_TP_MDI;
201 ETH_TP_MDI;
202 else 201 else
203 ecmd->eth_tp_mdix = ETH_TP_MDI_INVALID; 202 ecmd->eth_tp_mdix = ETH_TP_MDI_INVALID;
204 203
@@ -224,8 +223,7 @@ static int e1000_set_spd_dplx(struct e1000_adapter *adapter, u32 spd, u8 dplx)
224 223
225 /* Fiber NICs only allow 1000 gbps Full duplex */ 224 /* Fiber NICs only allow 1000 gbps Full duplex */
226 if ((adapter->hw.phy.media_type == e1000_media_type_fiber) && 225 if ((adapter->hw.phy.media_type == e1000_media_type_fiber) &&
227 spd != SPEED_1000 && 226 (spd != SPEED_1000) && (dplx != DUPLEX_FULL)) {
228 dplx != DUPLEX_FULL) {
229 goto err_inval; 227 goto err_inval;
230 } 228 }
231 229
@@ -298,12 +296,10 @@ static int e1000_set_settings(struct net_device *netdev,
298 hw->mac.autoneg = 1; 296 hw->mac.autoneg = 1;
299 if (hw->phy.media_type == e1000_media_type_fiber) 297 if (hw->phy.media_type == e1000_media_type_fiber)
300 hw->phy.autoneg_advertised = ADVERTISED_1000baseT_Full | 298 hw->phy.autoneg_advertised = ADVERTISED_1000baseT_Full |
301 ADVERTISED_FIBRE | 299 ADVERTISED_FIBRE | ADVERTISED_Autoneg;
302 ADVERTISED_Autoneg;
303 else 300 else
304 hw->phy.autoneg_advertised = ecmd->advertising | 301 hw->phy.autoneg_advertised = ecmd->advertising |
305 ADVERTISED_TP | 302 ADVERTISED_TP | ADVERTISED_Autoneg;
306 ADVERTISED_Autoneg;
307 ecmd->advertising = hw->phy.autoneg_advertised; 303 ecmd->advertising = hw->phy.autoneg_advertised;
308 if (adapter->fc_autoneg) 304 if (adapter->fc_autoneg)
309 hw->fc.requested_mode = e1000_fc_default; 305 hw->fc.requested_mode = e1000_fc_default;
@@ -346,7 +342,7 @@ static void e1000_get_pauseparam(struct net_device *netdev,
346 struct e1000_hw *hw = &adapter->hw; 342 struct e1000_hw *hw = &adapter->hw;
347 343
348 pause->autoneg = 344 pause->autoneg =
349 (adapter->fc_autoneg ? AUTONEG_ENABLE : AUTONEG_DISABLE); 345 (adapter->fc_autoneg ? AUTONEG_ENABLE : AUTONEG_DISABLE);
350 346
351 if (hw->fc.current_mode == e1000_fc_rx_pause) { 347 if (hw->fc.current_mode == e1000_fc_rx_pause) {
352 pause->rx_pause = 1; 348 pause->rx_pause = 1;
@@ -435,7 +431,7 @@ static void e1000_get_regs(struct net_device *netdev,
435 memset(p, 0, E1000_REGS_LEN * sizeof(u32)); 431 memset(p, 0, E1000_REGS_LEN * sizeof(u32));
436 432
437 regs->version = (1 << 24) | (adapter->pdev->revision << 16) | 433 regs->version = (1 << 24) | (adapter->pdev->revision << 16) |
438 adapter->pdev->device; 434 adapter->pdev->device;
439 435
440 regs_buff[0] = er32(CTRL); 436 regs_buff[0] = er32(CTRL);
441 regs_buff[1] = er32(STATUS); 437 regs_buff[1] = er32(STATUS);
@@ -503,8 +499,8 @@ static int e1000_get_eeprom(struct net_device *netdev,
503 first_word = eeprom->offset >> 1; 499 first_word = eeprom->offset >> 1;
504 last_word = (eeprom->offset + eeprom->len - 1) >> 1; 500 last_word = (eeprom->offset + eeprom->len - 1) >> 1;
505 501
506 eeprom_buff = kmalloc(sizeof(u16) * 502 eeprom_buff = kmalloc(sizeof(u16) * (last_word - first_word + 1),
507 (last_word - first_word + 1), GFP_KERNEL); 503 GFP_KERNEL);
508 if (!eeprom_buff) 504 if (!eeprom_buff)
509 return -ENOMEM; 505 return -ENOMEM;
510 506
@@ -515,7 +511,7 @@ static int e1000_get_eeprom(struct net_device *netdev,
515 } else { 511 } else {
516 for (i = 0; i < last_word - first_word + 1; i++) { 512 for (i = 0; i < last_word - first_word + 1; i++) {
517 ret_val = e1000_read_nvm(hw, first_word + i, 1, 513 ret_val = e1000_read_nvm(hw, first_word + i, 1,
518 &eeprom_buff[i]); 514 &eeprom_buff[i]);
519 if (ret_val) 515 if (ret_val)
520 break; 516 break;
521 } 517 }
@@ -553,7 +549,8 @@ static int e1000_set_eeprom(struct net_device *netdev,
553 if (eeprom->len == 0) 549 if (eeprom->len == 0)
554 return -EOPNOTSUPP; 550 return -EOPNOTSUPP;
555 551
556 if (eeprom->magic != (adapter->pdev->vendor | (adapter->pdev->device << 16))) 552 if (eeprom->magic !=
553 (adapter->pdev->vendor | (adapter->pdev->device << 16)))
557 return -EFAULT; 554 return -EFAULT;
558 555
559 if (adapter->flags & FLAG_READ_ONLY_NVM) 556 if (adapter->flags & FLAG_READ_ONLY_NVM)
@@ -579,7 +576,7 @@ static int e1000_set_eeprom(struct net_device *netdev,
579 /* need read/modify/write of last changed EEPROM word */ 576 /* need read/modify/write of last changed EEPROM word */
580 /* only the first byte of the word is being modified */ 577 /* only the first byte of the word is being modified */
581 ret_val = e1000_read_nvm(hw, last_word, 1, 578 ret_val = e1000_read_nvm(hw, last_word, 1,
582 &eeprom_buff[last_word - first_word]); 579 &eeprom_buff[last_word - first_word]);
583 580
584 if (ret_val) 581 if (ret_val)
585 goto out; 582 goto out;
@@ -618,8 +615,7 @@ static void e1000_get_drvinfo(struct net_device *netdev,
618{ 615{
619 struct e1000_adapter *adapter = netdev_priv(netdev); 616 struct e1000_adapter *adapter = netdev_priv(netdev);
620 617
621 strlcpy(drvinfo->driver, e1000e_driver_name, 618 strlcpy(drvinfo->driver, e1000e_driver_name, sizeof(drvinfo->driver));
622 sizeof(drvinfo->driver));
623 strlcpy(drvinfo->version, e1000e_driver_version, 619 strlcpy(drvinfo->version, e1000e_driver_version,
624 sizeof(drvinfo->version)); 620 sizeof(drvinfo->version));
625 621
@@ -627,10 +623,10 @@ static void e1000_get_drvinfo(struct net_device *netdev,
627 * PCI-E controllers 623 * PCI-E controllers
628 */ 624 */
629 snprintf(drvinfo->fw_version, sizeof(drvinfo->fw_version), 625 snprintf(drvinfo->fw_version, sizeof(drvinfo->fw_version),
630 "%d.%d-%d", 626 "%d.%d-%d",
631 (adapter->eeprom_vers & 0xF000) >> 12, 627 (adapter->eeprom_vers & 0xF000) >> 12,
632 (adapter->eeprom_vers & 0x0FF0) >> 4, 628 (adapter->eeprom_vers & 0x0FF0) >> 4,
633 (adapter->eeprom_vers & 0x000F)); 629 (adapter->eeprom_vers & 0x000F));
634 630
635 strlcpy(drvinfo->bus_info, pci_name(adapter->pdev), 631 strlcpy(drvinfo->bus_info, pci_name(adapter->pdev),
636 sizeof(drvinfo->bus_info)); 632 sizeof(drvinfo->bus_info));
@@ -756,7 +752,8 @@ static bool reg_pattern_test(struct e1000_adapter *adapter, u64 *data,
756{ 752{
757 u32 pat, val; 753 u32 pat, val;
758 static const u32 test[] = { 754 static const u32 test[] = {
759 0x5A5A5A5A, 0xA5A5A5A5, 0x00000000, 0xFFFFFFFF}; 755 0x5A5A5A5A, 0xA5A5A5A5, 0x00000000, 0xFFFFFFFF
756 };
760 for (pat = 0; pat < ARRAY_SIZE(test); pat++) { 757 for (pat = 0; pat < ARRAY_SIZE(test); pat++) {
761 E1000_WRITE_REG_ARRAY(&adapter->hw, reg, offset, 758 E1000_WRITE_REG_ARRAY(&adapter->hw, reg, offset,
762 (test[pat] & write)); 759 (test[pat] & write));
@@ -786,6 +783,7 @@ static bool reg_set_and_check(struct e1000_adapter *adapter, u64 *data,
786 } 783 }
787 return 0; 784 return 0;
788} 785}
786
789#define REG_PATTERN_TEST_ARRAY(reg, offset, mask, write) \ 787#define REG_PATTERN_TEST_ARRAY(reg, offset, mask, write) \
790 do { \ 788 do { \
791 if (reg_pattern_test(adapter, data, reg, offset, mask, write)) \ 789 if (reg_pattern_test(adapter, data, reg, offset, mask, write)) \
@@ -813,16 +811,16 @@ static int e1000_reg_test(struct e1000_adapter *adapter, u64 *data)
813 u32 wlock_mac = 0; 811 u32 wlock_mac = 0;
814 812
815 /* The status register is Read Only, so a write should fail. 813 /* The status register is Read Only, so a write should fail.
816 * Some bits that get toggled are ignored. 814 * Some bits that get toggled are ignored. There are several bits
815 * on newer hardware that are r/w.
817 */ 816 */
818 switch (mac->type) { 817 switch (mac->type) {
819 /* there are several bits on newer hardware that are r/w */
820 case e1000_82571: 818 case e1000_82571:
821 case e1000_82572: 819 case e1000_82572:
822 case e1000_80003es2lan: 820 case e1000_80003es2lan:
823 toggle = 0x7FFFF3FF; 821 toggle = 0x7FFFF3FF;
824 break; 822 break;
825 default: 823 default:
826 toggle = 0x7FFFF033; 824 toggle = 0x7FFFF033;
827 break; 825 break;
828 } 826 }
@@ -928,7 +926,7 @@ static int e1000_eeprom_test(struct e1000_adapter *adapter, u64 *data)
928 } 926 }
929 927
930 /* If Checksum is not Correct return error else test passed */ 928 /* If Checksum is not Correct return error else test passed */
931 if ((checksum != (u16) NVM_SUM) && !(*data)) 929 if ((checksum != (u16)NVM_SUM) && !(*data))
932 *data = 2; 930 *data = 2;
933 931
934 return *data; 932 return *data;
@@ -936,7 +934,7 @@ static int e1000_eeprom_test(struct e1000_adapter *adapter, u64 *data)
936 934
937static irqreturn_t e1000_test_intr(int __always_unused irq, void *data) 935static irqreturn_t e1000_test_intr(int __always_unused irq, void *data)
938{ 936{
939 struct net_device *netdev = (struct net_device *) data; 937 struct net_device *netdev = (struct net_device *)data;
940 struct e1000_adapter *adapter = netdev_priv(netdev); 938 struct e1000_adapter *adapter = netdev_priv(netdev);
941 struct e1000_hw *hw = &adapter->hw; 939 struct e1000_hw *hw = &adapter->hw;
942 940
@@ -969,8 +967,8 @@ static int e1000_intr_test(struct e1000_adapter *adapter, u64 *data)
969 if (!request_irq(irq, e1000_test_intr, IRQF_PROBE_SHARED, netdev->name, 967 if (!request_irq(irq, e1000_test_intr, IRQF_PROBE_SHARED, netdev->name,
970 netdev)) { 968 netdev)) {
971 shared_int = 0; 969 shared_int = 0;
972 } else if (request_irq(irq, e1000_test_intr, IRQF_SHARED, 970 } else if (request_irq(irq, e1000_test_intr, IRQF_SHARED, netdev->name,
973 netdev->name, netdev)) { 971 netdev)) {
974 *data = 1; 972 *data = 1;
975 ret_val = -1; 973 ret_val = -1;
976 goto out; 974 goto out;
@@ -1080,28 +1078,33 @@ static void e1000_free_desc_rings(struct e1000_adapter *adapter)
1080 struct e1000_ring *tx_ring = &adapter->test_tx_ring; 1078 struct e1000_ring *tx_ring = &adapter->test_tx_ring;
1081 struct e1000_ring *rx_ring = &adapter->test_rx_ring; 1079 struct e1000_ring *rx_ring = &adapter->test_rx_ring;
1082 struct pci_dev *pdev = adapter->pdev; 1080 struct pci_dev *pdev = adapter->pdev;
1081 struct e1000_buffer *buffer_info;
1083 int i; 1082 int i;
1084 1083
1085 if (tx_ring->desc && tx_ring->buffer_info) { 1084 if (tx_ring->desc && tx_ring->buffer_info) {
1086 for (i = 0; i < tx_ring->count; i++) { 1085 for (i = 0; i < tx_ring->count; i++) {
1087 if (tx_ring->buffer_info[i].dma) 1086 buffer_info = &tx_ring->buffer_info[i];
1087
1088 if (buffer_info->dma)
1088 dma_unmap_single(&pdev->dev, 1089 dma_unmap_single(&pdev->dev,
1089 tx_ring->buffer_info[i].dma, 1090 buffer_info->dma,
1090 tx_ring->buffer_info[i].length, 1091 buffer_info->length,
1091 DMA_TO_DEVICE); 1092 DMA_TO_DEVICE);
1092 if (tx_ring->buffer_info[i].skb) 1093 if (buffer_info->skb)
1093 dev_kfree_skb(tx_ring->buffer_info[i].skb); 1094 dev_kfree_skb(buffer_info->skb);
1094 } 1095 }
1095 } 1096 }
1096 1097
1097 if (rx_ring->desc && rx_ring->buffer_info) { 1098 if (rx_ring->desc && rx_ring->buffer_info) {
1098 for (i = 0; i < rx_ring->count; i++) { 1099 for (i = 0; i < rx_ring->count; i++) {
1099 if (rx_ring->buffer_info[i].dma) 1100 buffer_info = &rx_ring->buffer_info[i];
1101
1102 if (buffer_info->dma)
1100 dma_unmap_single(&pdev->dev, 1103 dma_unmap_single(&pdev->dev,
1101 rx_ring->buffer_info[i].dma, 1104 buffer_info->dma,
1102 2048, DMA_FROM_DEVICE); 1105 2048, DMA_FROM_DEVICE);
1103 if (rx_ring->buffer_info[i].skb) 1106 if (buffer_info->skb)
1104 dev_kfree_skb(rx_ring->buffer_info[i].skb); 1107 dev_kfree_skb(buffer_info->skb);
1105 } 1108 }
1106 } 1109 }
1107 1110
@@ -1138,8 +1141,7 @@ static int e1000_setup_desc_rings(struct e1000_adapter *adapter)
1138 tx_ring->count = E1000_DEFAULT_TXD; 1141 tx_ring->count = E1000_DEFAULT_TXD;
1139 1142
1140 tx_ring->buffer_info = kcalloc(tx_ring->count, 1143 tx_ring->buffer_info = kcalloc(tx_ring->count,
1141 sizeof(struct e1000_buffer), 1144 sizeof(struct e1000_buffer), GFP_KERNEL);
1142 GFP_KERNEL);
1143 if (!tx_ring->buffer_info) { 1145 if (!tx_ring->buffer_info) {
1144 ret_val = 1; 1146 ret_val = 1;
1145 goto err_nomem; 1147 goto err_nomem;
@@ -1156,8 +1158,8 @@ static int e1000_setup_desc_rings(struct e1000_adapter *adapter)
1156 tx_ring->next_to_use = 0; 1158 tx_ring->next_to_use = 0;
1157 tx_ring->next_to_clean = 0; 1159 tx_ring->next_to_clean = 0;
1158 1160
1159 ew32(TDBAL(0), ((u64) tx_ring->dma & 0x00000000FFFFFFFF)); 1161 ew32(TDBAL(0), ((u64)tx_ring->dma & 0x00000000FFFFFFFF));
1160 ew32(TDBAH(0), ((u64) tx_ring->dma >> 32)); 1162 ew32(TDBAH(0), ((u64)tx_ring->dma >> 32));
1161 ew32(TDLEN(0), tx_ring->count * sizeof(struct e1000_tx_desc)); 1163 ew32(TDLEN(0), tx_ring->count * sizeof(struct e1000_tx_desc));
1162 ew32(TDH(0), 0); 1164 ew32(TDH(0), 0);
1163 ew32(TDT(0), 0); 1165 ew32(TDT(0), 0);
@@ -1179,8 +1181,8 @@ static int e1000_setup_desc_rings(struct e1000_adapter *adapter)
1179 tx_ring->buffer_info[i].skb = skb; 1181 tx_ring->buffer_info[i].skb = skb;
1180 tx_ring->buffer_info[i].length = skb->len; 1182 tx_ring->buffer_info[i].length = skb->len;
1181 tx_ring->buffer_info[i].dma = 1183 tx_ring->buffer_info[i].dma =
1182 dma_map_single(&pdev->dev, skb->data, skb->len, 1184 dma_map_single(&pdev->dev, skb->data, skb->len,
1183 DMA_TO_DEVICE); 1185 DMA_TO_DEVICE);
1184 if (dma_mapping_error(&pdev->dev, 1186 if (dma_mapping_error(&pdev->dev,
1185 tx_ring->buffer_info[i].dma)) { 1187 tx_ring->buffer_info[i].dma)) {
1186 ret_val = 4; 1188 ret_val = 4;
@@ -1200,8 +1202,7 @@ static int e1000_setup_desc_rings(struct e1000_adapter *adapter)
1200 rx_ring->count = E1000_DEFAULT_RXD; 1202 rx_ring->count = E1000_DEFAULT_RXD;
1201 1203
1202 rx_ring->buffer_info = kcalloc(rx_ring->count, 1204 rx_ring->buffer_info = kcalloc(rx_ring->count,
1203 sizeof(struct e1000_buffer), 1205 sizeof(struct e1000_buffer), GFP_KERNEL);
1204 GFP_KERNEL);
1205 if (!rx_ring->buffer_info) { 1206 if (!rx_ring->buffer_info) {
1206 ret_val = 5; 1207 ret_val = 5;
1207 goto err_nomem; 1208 goto err_nomem;
@@ -1220,16 +1221,16 @@ static int e1000_setup_desc_rings(struct e1000_adapter *adapter)
1220 rctl = er32(RCTL); 1221 rctl = er32(RCTL);
1221 if (!(adapter->flags2 & FLAG2_NO_DISABLE_RX)) 1222 if (!(adapter->flags2 & FLAG2_NO_DISABLE_RX))
1222 ew32(RCTL, rctl & ~E1000_RCTL_EN); 1223 ew32(RCTL, rctl & ~E1000_RCTL_EN);
1223 ew32(RDBAL(0), ((u64) rx_ring->dma & 0xFFFFFFFF)); 1224 ew32(RDBAL(0), ((u64)rx_ring->dma & 0xFFFFFFFF));
1224 ew32(RDBAH(0), ((u64) rx_ring->dma >> 32)); 1225 ew32(RDBAH(0), ((u64)rx_ring->dma >> 32));
1225 ew32(RDLEN(0), rx_ring->size); 1226 ew32(RDLEN(0), rx_ring->size);
1226 ew32(RDH(0), 0); 1227 ew32(RDH(0), 0);
1227 ew32(RDT(0), 0); 1228 ew32(RDT(0), 0);
1228 rctl = E1000_RCTL_EN | E1000_RCTL_BAM | E1000_RCTL_SZ_2048 | 1229 rctl = E1000_RCTL_EN | E1000_RCTL_BAM | E1000_RCTL_SZ_2048 |
1229 E1000_RCTL_UPE | E1000_RCTL_MPE | E1000_RCTL_LPE | 1230 E1000_RCTL_UPE | E1000_RCTL_MPE | E1000_RCTL_LPE |
1230 E1000_RCTL_SBP | E1000_RCTL_SECRC | 1231 E1000_RCTL_SBP | E1000_RCTL_SECRC |
1231 E1000_RCTL_LBM_NO | E1000_RCTL_RDMTS_HALF | 1232 E1000_RCTL_LBM_NO | E1000_RCTL_RDMTS_HALF |
1232 (adapter->hw.mac.mc_filter_type << E1000_RCTL_MO_SHIFT); 1233 (adapter->hw.mac.mc_filter_type << E1000_RCTL_MO_SHIFT);
1233 ew32(RCTL, rctl); 1234 ew32(RCTL, rctl);
1234 1235
1235 for (i = 0; i < rx_ring->count; i++) { 1236 for (i = 0; i < rx_ring->count; i++) {
@@ -1244,8 +1245,8 @@ static int e1000_setup_desc_rings(struct e1000_adapter *adapter)
1244 skb_reserve(skb, NET_IP_ALIGN); 1245 skb_reserve(skb, NET_IP_ALIGN);
1245 rx_ring->buffer_info[i].skb = skb; 1246 rx_ring->buffer_info[i].skb = skb;
1246 rx_ring->buffer_info[i].dma = 1247 rx_ring->buffer_info[i].dma =
1247 dma_map_single(&pdev->dev, skb->data, 2048, 1248 dma_map_single(&pdev->dev, skb->data, 2048,
1248 DMA_FROM_DEVICE); 1249 DMA_FROM_DEVICE);
1249 if (dma_mapping_error(&pdev->dev, 1250 if (dma_mapping_error(&pdev->dev,
1250 rx_ring->buffer_info[i].dma)) { 1251 rx_ring->buffer_info[i].dma)) {
1251 ret_val = 8; 1252 ret_val = 8;
@@ -1296,7 +1297,7 @@ static int e1000_integrated_phy_loopback(struct e1000_adapter *adapter)
1296 1297
1297 ew32(CTRL, ctrl_reg); 1298 ew32(CTRL, ctrl_reg);
1298 e1e_flush(); 1299 e1e_flush();
1299 udelay(500); 1300 usleep_range(500, 1000);
1300 1301
1301 return 0; 1302 return 0;
1302 } 1303 }
@@ -1322,7 +1323,7 @@ static int e1000_integrated_phy_loopback(struct e1000_adapter *adapter)
1322 e1e_wphy(hw, PHY_REG(2, 21), phy_reg); 1323 e1e_wphy(hw, PHY_REG(2, 21), phy_reg);
1323 /* Assert SW reset for above settings to take effect */ 1324 /* Assert SW reset for above settings to take effect */
1324 hw->phy.ops.commit(hw); 1325 hw->phy.ops.commit(hw);
1325 mdelay(1); 1326 usleep_range(1000, 2000);
1326 /* Force Full Duplex */ 1327 /* Force Full Duplex */
1327 e1e_rphy(hw, PHY_REG(769, 16), &phy_reg); 1328 e1e_rphy(hw, PHY_REG(769, 16), &phy_reg);
1328 e1e_wphy(hw, PHY_REG(769, 16), phy_reg | 0x000C); 1329 e1e_wphy(hw, PHY_REG(769, 16), phy_reg | 0x000C);
@@ -1363,7 +1364,7 @@ static int e1000_integrated_phy_loopback(struct e1000_adapter *adapter)
1363 1364
1364 /* force 1000, set loopback */ 1365 /* force 1000, set loopback */
1365 e1e_wphy(hw, MII_BMCR, 0x4140); 1366 e1e_wphy(hw, MII_BMCR, 0x4140);
1366 mdelay(250); 1367 msleep(250);
1367 1368
1368 /* Now set up the MAC to the same speed/duplex as the PHY. */ 1369 /* Now set up the MAC to the same speed/duplex as the PHY. */
1369 ctrl_reg = er32(CTRL); 1370 ctrl_reg = er32(CTRL);
@@ -1395,7 +1396,7 @@ static int e1000_integrated_phy_loopback(struct e1000_adapter *adapter)
1395 if (hw->phy.type == e1000_phy_m88) 1396 if (hw->phy.type == e1000_phy_m88)
1396 e1000_phy_disable_receiver(adapter); 1397 e1000_phy_disable_receiver(adapter);
1397 1398
1398 udelay(500); 1399 usleep_range(500, 1000);
1399 1400
1400 return 0; 1401 return 0;
1401} 1402}
@@ -1431,8 +1432,7 @@ static int e1000_set_82571_fiber_loopback(struct e1000_adapter *adapter)
1431 /* special write to serdes control register to enable SerDes analog 1432 /* special write to serdes control register to enable SerDes analog
1432 * loopback 1433 * loopback
1433 */ 1434 */
1434#define E1000_SERDES_LB_ON 0x410 1435 ew32(SCTL, E1000_SCTL_ENABLE_SERDES_LOOPBACK);
1435 ew32(SCTL, E1000_SERDES_LB_ON);
1436 e1e_flush(); 1436 e1e_flush();
1437 usleep_range(10000, 20000); 1437 usleep_range(10000, 20000);
1438 1438
@@ -1526,8 +1526,7 @@ static void e1000_loopback_cleanup(struct e1000_adapter *adapter)
1526 case e1000_82572: 1526 case e1000_82572:
1527 if (hw->phy.media_type == e1000_media_type_fiber || 1527 if (hw->phy.media_type == e1000_media_type_fiber ||
1528 hw->phy.media_type == e1000_media_type_internal_serdes) { 1528 hw->phy.media_type == e1000_media_type_internal_serdes) {
1529#define E1000_SERDES_LB_OFF 0x400 1529 ew32(SCTL, E1000_SCTL_DISABLE_SERDES_LOOPBACK);
1530 ew32(SCTL, E1000_SERDES_LB_OFF);
1531 e1e_flush(); 1530 e1e_flush();
1532 usleep_range(10000, 20000); 1531 usleep_range(10000, 20000);
1533 break; 1532 break;
@@ -1564,7 +1563,7 @@ static int e1000_check_lbtest_frame(struct sk_buff *skb,
1564 frame_size &= ~1; 1563 frame_size &= ~1;
1565 if (*(skb->data + 3) == 0xFF) 1564 if (*(skb->data + 3) == 0xFF)
1566 if ((*(skb->data + frame_size / 2 + 10) == 0xBE) && 1565 if ((*(skb->data + frame_size / 2 + 10) == 0xBE) &&
1567 (*(skb->data + frame_size / 2 + 12) == 0xAF)) 1566 (*(skb->data + frame_size / 2 + 12) == 0xAF))
1568 return 0; 1567 return 0;
1569 return 13; 1568 return 13;
1570} 1569}
@@ -1575,6 +1574,7 @@ static int e1000_run_loopback_test(struct e1000_adapter *adapter)
1575 struct e1000_ring *rx_ring = &adapter->test_rx_ring; 1574 struct e1000_ring *rx_ring = &adapter->test_rx_ring;
1576 struct pci_dev *pdev = adapter->pdev; 1575 struct pci_dev *pdev = adapter->pdev;
1577 struct e1000_hw *hw = &adapter->hw; 1576 struct e1000_hw *hw = &adapter->hw;
1577 struct e1000_buffer *buffer_info;
1578 int i, j, k, l; 1578 int i, j, k, l;
1579 int lc; 1579 int lc;
1580 int good_cnt; 1580 int good_cnt;
@@ -1595,14 +1595,17 @@ static int e1000_run_loopback_test(struct e1000_adapter *adapter)
1595 1595
1596 k = 0; 1596 k = 0;
1597 l = 0; 1597 l = 0;
1598 for (j = 0; j <= lc; j++) { /* loop count loop */ 1598 /* loop count loop */
1599 for (i = 0; i < 64; i++) { /* send the packets */ 1599 for (j = 0; j <= lc; j++) {
1600 e1000_create_lbtest_frame(tx_ring->buffer_info[k].skb, 1600 /* send the packets */
1601 1024); 1601 for (i = 0; i < 64; i++) {
1602 buffer_info = &tx_ring->buffer_info[k];
1603
1604 e1000_create_lbtest_frame(buffer_info->skb, 1024);
1602 dma_sync_single_for_device(&pdev->dev, 1605 dma_sync_single_for_device(&pdev->dev,
1603 tx_ring->buffer_info[k].dma, 1606 buffer_info->dma,
1604 tx_ring->buffer_info[k].length, 1607 buffer_info->length,
1605 DMA_TO_DEVICE); 1608 DMA_TO_DEVICE);
1606 k++; 1609 k++;
1607 if (k == tx_ring->count) 1610 if (k == tx_ring->count)
1608 k = 0; 1611 k = 0;
@@ -1612,13 +1615,16 @@ static int e1000_run_loopback_test(struct e1000_adapter *adapter)
1612 msleep(200); 1615 msleep(200);
1613 time = jiffies; /* set the start time for the receive */ 1616 time = jiffies; /* set the start time for the receive */
1614 good_cnt = 0; 1617 good_cnt = 0;
1615 do { /* receive the sent packets */ 1618 /* receive the sent packets */
1619 do {
1620 buffer_info = &rx_ring->buffer_info[l];
1621
1616 dma_sync_single_for_cpu(&pdev->dev, 1622 dma_sync_single_for_cpu(&pdev->dev,
1617 rx_ring->buffer_info[l].dma, 2048, 1623 buffer_info->dma, 2048,
1618 DMA_FROM_DEVICE); 1624 DMA_FROM_DEVICE);
1619 1625
1620 ret_val = e1000_check_lbtest_frame( 1626 ret_val = e1000_check_lbtest_frame(buffer_info->skb,
1621 rx_ring->buffer_info[l].skb, 1024); 1627 1024);
1622 if (!ret_val) 1628 if (!ret_val)
1623 good_cnt++; 1629 good_cnt++;
1624 l++; 1630 l++;
@@ -1637,7 +1643,7 @@ static int e1000_run_loopback_test(struct e1000_adapter *adapter)
1637 ret_val = 14; /* error code for time out error */ 1643 ret_val = 14; /* error code for time out error */
1638 break; 1644 break;
1639 } 1645 }
1640 } /* end loop count loop */ 1646 }
1641 return ret_val; 1647 return ret_val;
1642} 1648}
1643 1649
@@ -1696,7 +1702,7 @@ static int e1000_link_test(struct e1000_adapter *adapter, u64 *data)
1696 /* On some Phy/switch combinations, link establishment 1702 /* On some Phy/switch combinations, link establishment
1697 * can take a few seconds more than expected. 1703 * can take a few seconds more than expected.
1698 */ 1704 */
1699 msleep(5000); 1705 msleep_interruptible(5000);
1700 1706
1701 if (!(er32(STATUS) & E1000_STATUS_LU)) 1707 if (!(er32(STATUS) & E1000_STATUS_LU))
1702 *data = 1; 1708 *data = 1;
@@ -1980,12 +1986,12 @@ static void e1000_get_ethtool_stats(struct net_device *netdev,
1980 for (i = 0; i < E1000_GLOBAL_STATS_LEN; i++) { 1986 for (i = 0; i < E1000_GLOBAL_STATS_LEN; i++) {
1981 switch (e1000_gstrings_stats[i].type) { 1987 switch (e1000_gstrings_stats[i].type) {
1982 case NETDEV_STATS: 1988 case NETDEV_STATS:
1983 p = (char *) &net_stats + 1989 p = (char *)&net_stats +
1984 e1000_gstrings_stats[i].stat_offset; 1990 e1000_gstrings_stats[i].stat_offset;
1985 break; 1991 break;
1986 case E1000_STATS: 1992 case E1000_STATS:
1987 p = (char *) adapter + 1993 p = (char *)adapter +
1988 e1000_gstrings_stats[i].stat_offset; 1994 e1000_gstrings_stats[i].stat_offset;
1989 break; 1995 break;
1990 default: 1996 default:
1991 data[i] = 0; 1997 data[i] = 0;
@@ -1993,7 +1999,7 @@ static void e1000_get_ethtool_stats(struct net_device *netdev,
1993 } 1999 }
1994 2000
1995 data[i] = (e1000_gstrings_stats[i].sizeof_stat == 2001 data[i] = (e1000_gstrings_stats[i].sizeof_stat ==
1996 sizeof(u64)) ? *(u64 *)p : *(u32 *)p; 2002 sizeof(u64)) ? *(u64 *)p : *(u32 *)p;
1997 } 2003 }
1998} 2004}
1999 2005
@@ -2069,23 +2075,20 @@ static int e1000e_get_eee(struct net_device *netdev, struct ethtool_eee *edata)
2069{ 2075{
2070 struct e1000_adapter *adapter = netdev_priv(netdev); 2076 struct e1000_adapter *adapter = netdev_priv(netdev);
2071 struct e1000_hw *hw = &adapter->hw; 2077 struct e1000_hw *hw = &adapter->hw;
2072 u16 cap_addr, adv_addr, lpa_addr, pcs_stat_addr, phy_data, lpi_ctrl; 2078 u16 cap_addr, lpa_addr, pcs_stat_addr, phy_data;
2073 u32 status, ret_val; 2079 u32 ret_val;
2074 2080
2075 if (!(adapter->flags & FLAG_IS_ICH) || 2081 if (!(adapter->flags2 & FLAG2_HAS_EEE))
2076 !(adapter->flags2 & FLAG2_HAS_EEE))
2077 return -EOPNOTSUPP; 2082 return -EOPNOTSUPP;
2078 2083
2079 switch (hw->phy.type) { 2084 switch (hw->phy.type) {
2080 case e1000_phy_82579: 2085 case e1000_phy_82579:
2081 cap_addr = I82579_EEE_CAPABILITY; 2086 cap_addr = I82579_EEE_CAPABILITY;
2082 adv_addr = I82579_EEE_ADVERTISEMENT;
2083 lpa_addr = I82579_EEE_LP_ABILITY; 2087 lpa_addr = I82579_EEE_LP_ABILITY;
2084 pcs_stat_addr = I82579_EEE_PCS_STATUS; 2088 pcs_stat_addr = I82579_EEE_PCS_STATUS;
2085 break; 2089 break;
2086 case e1000_phy_i217: 2090 case e1000_phy_i217:
2087 cap_addr = I217_EEE_CAPABILITY; 2091 cap_addr = I217_EEE_CAPABILITY;
2088 adv_addr = I217_EEE_ADVERTISEMENT;
2089 lpa_addr = I217_EEE_LP_ABILITY; 2092 lpa_addr = I217_EEE_LP_ABILITY;
2090 pcs_stat_addr = I217_EEE_PCS_STATUS; 2093 pcs_stat_addr = I217_EEE_PCS_STATUS;
2091 break; 2094 break;
@@ -2104,10 +2107,7 @@ static int e1000e_get_eee(struct net_device *netdev, struct ethtool_eee *edata)
2104 edata->supported = mmd_eee_cap_to_ethtool_sup_t(phy_data); 2107 edata->supported = mmd_eee_cap_to_ethtool_sup_t(phy_data);
2105 2108
2106 /* EEE Advertised */ 2109 /* EEE Advertised */
2107 ret_val = e1000_read_emi_reg_locked(hw, adv_addr, &phy_data); 2110 edata->advertised = mmd_eee_adv_to_ethtool_adv_t(adapter->eee_advert);
2108 if (ret_val)
2109 goto release;
2110 edata->advertised = mmd_eee_adv_to_ethtool_adv_t(phy_data);
2111 2111
2112 /* EEE Link Partner Advertised */ 2112 /* EEE Link Partner Advertised */
2113 ret_val = e1000_read_emi_reg_locked(hw, lpa_addr, &phy_data); 2113 ret_val = e1000_read_emi_reg_locked(hw, lpa_addr, &phy_data);
@@ -2125,25 +2125,11 @@ release:
2125 if (ret_val) 2125 if (ret_val)
2126 return -ENODATA; 2126 return -ENODATA;
2127 2127
2128 e1e_rphy(hw, I82579_LPI_CTRL, &lpi_ctrl);
2129 status = er32(STATUS);
2130
2131 /* Result of the EEE auto negotiation - there is no register that 2128 /* Result of the EEE auto negotiation - there is no register that
2132 * has the status of the EEE negotiation so do a best-guess based 2129 * has the status of the EEE negotiation so do a best-guess based
2133 * on whether both Tx and Rx LPI indications have been received or 2130 * on whether Tx or Rx LPI indications have been received.
2134 * base it on the link speed, the EEE advertised speeds on both ends
2135 * and the speeds on which EEE is enabled locally.
2136 */ 2131 */
2137 if (((phy_data & E1000_EEE_TX_LPI_RCVD) && 2132 if (phy_data & (E1000_EEE_TX_LPI_RCVD | E1000_EEE_RX_LPI_RCVD))
2138 (phy_data & E1000_EEE_RX_LPI_RCVD)) ||
2139 ((status & E1000_STATUS_SPEED_100) &&
2140 (edata->advertised & ADVERTISED_100baseT_Full) &&
2141 (edata->lp_advertised & ADVERTISED_100baseT_Full) &&
2142 (lpi_ctrl & I82579_LPI_CTRL_100_ENABLE)) ||
2143 ((status & E1000_STATUS_SPEED_1000) &&
2144 (edata->advertised & ADVERTISED_1000baseT_Full) &&
2145 (edata->lp_advertised & ADVERTISED_1000baseT_Full) &&
2146 (lpi_ctrl & I82579_LPI_CTRL_1000_ENABLE)))
2147 edata->eee_active = true; 2133 edata->eee_active = true;
2148 2134
2149 edata->eee_enabled = !hw->dev_spec.ich8lan.eee_disable; 2135 edata->eee_enabled = !hw->dev_spec.ich8lan.eee_disable;
@@ -2160,19 +2146,10 @@ static int e1000e_set_eee(struct net_device *netdev, struct ethtool_eee *edata)
2160 struct ethtool_eee eee_curr; 2146 struct ethtool_eee eee_curr;
2161 s32 ret_val; 2147 s32 ret_val;
2162 2148
2163 if (!(adapter->flags & FLAG_IS_ICH) ||
2164 !(adapter->flags2 & FLAG2_HAS_EEE))
2165 return -EOPNOTSUPP;
2166
2167 ret_val = e1000e_get_eee(netdev, &eee_curr); 2149 ret_val = e1000e_get_eee(netdev, &eee_curr);
2168 if (ret_val) 2150 if (ret_val)
2169 return ret_val; 2151 return ret_val;
2170 2152
2171 if (eee_curr.advertised != edata->advertised) {
2172 e_err("Setting EEE advertisement is not supported\n");
2173 return -EINVAL;
2174 }
2175
2176 if (eee_curr.tx_lpi_enabled != edata->tx_lpi_enabled) { 2153 if (eee_curr.tx_lpi_enabled != edata->tx_lpi_enabled) {
2177 e_err("Setting EEE tx-lpi is not supported\n"); 2154 e_err("Setting EEE tx-lpi is not supported\n");
2178 return -EINVAL; 2155 return -EINVAL;
@@ -2183,16 +2160,21 @@ static int e1000e_set_eee(struct net_device *netdev, struct ethtool_eee *edata)
2183 return -EINVAL; 2160 return -EINVAL;
2184 } 2161 }
2185 2162
2186 if (hw->dev_spec.ich8lan.eee_disable != !edata->eee_enabled) { 2163 if (edata->advertised & ~(ADVERTISE_100_FULL | ADVERTISE_1000_FULL)) {
2187 hw->dev_spec.ich8lan.eee_disable = !edata->eee_enabled; 2164 e_err("EEE advertisement supports only 100TX and/or 1000T full-duplex\n");
2188 2165 return -EINVAL;
2189 /* reset the link */
2190 if (netif_running(netdev))
2191 e1000e_reinit_locked(adapter);
2192 else
2193 e1000e_reset(adapter);
2194 } 2166 }
2195 2167
2168 adapter->eee_advert = ethtool_adv_to_mmd_eee_adv_t(edata->advertised);
2169
2170 hw->dev_spec.ich8lan.eee_disable = !edata->eee_enabled;
2171
2172 /* reset the link */
2173 if (netif_running(netdev))
2174 e1000e_reinit_locked(adapter);
2175 else
2176 e1000e_reset(adapter);
2177
2196 return 0; 2178 return 0;
2197} 2179}
2198 2180