diff options
Diffstat (limited to 'drivers/net/igb/igb_ethtool.c')
-rw-r--r-- | drivers/net/igb/igb_ethtool.c | 58 |
1 files changed, 54 insertions, 4 deletions
diff --git a/drivers/net/igb/igb_ethtool.c b/drivers/net/igb/igb_ethtool.c index 743038490104..f2ebf927e4bc 100644 --- a/drivers/net/igb/igb_ethtool.c +++ b/drivers/net/igb/igb_ethtool.c | |||
@@ -902,6 +902,49 @@ struct igb_reg_test { | |||
902 | #define TABLE64_TEST_LO 5 | 902 | #define TABLE64_TEST_LO 5 |
903 | #define TABLE64_TEST_HI 6 | 903 | #define TABLE64_TEST_HI 6 |
904 | 904 | ||
905 | /* i350 reg test */ | ||
906 | static struct igb_reg_test reg_test_i350[] = { | ||
907 | { E1000_FCAL, 0x100, 1, PATTERN_TEST, 0xFFFFFFFF, 0xFFFFFFFF }, | ||
908 | { E1000_FCAH, 0x100, 1, PATTERN_TEST, 0x0000FFFF, 0xFFFFFFFF }, | ||
909 | { E1000_FCT, 0x100, 1, PATTERN_TEST, 0x0000FFFF, 0xFFFFFFFF }, | ||
910 | { E1000_VET, 0x100, 1, PATTERN_TEST, 0xFFFF0000, 0xFFFF0000 }, | ||
911 | { E1000_RDBAL(0), 0x100, 4, PATTERN_TEST, 0xFFFFFF80, 0xFFFFFFFF }, | ||
912 | { E1000_RDBAH(0), 0x100, 4, PATTERN_TEST, 0xFFFFFFFF, 0xFFFFFFFF }, | ||
913 | { E1000_RDLEN(0), 0x100, 4, PATTERN_TEST, 0x000FFF80, 0x000FFFFF }, | ||
914 | { E1000_RDBAL(4), 0x40, 4, PATTERN_TEST, 0xFFFFFF80, 0xFFFFFFFF }, | ||
915 | { E1000_RDBAH(4), 0x40, 4, PATTERN_TEST, 0xFFFFFFFF, 0xFFFFFFFF }, | ||
916 | { E1000_RDLEN(4), 0x40, 4, PATTERN_TEST, 0x000FFF80, 0x000FFFFF }, | ||
917 | /* RDH is read-only for i350, only test RDT. */ | ||
918 | { E1000_RDT(0), 0x100, 4, PATTERN_TEST, 0x0000FFFF, 0x0000FFFF }, | ||
919 | { E1000_RDT(4), 0x40, 4, PATTERN_TEST, 0x0000FFFF, 0x0000FFFF }, | ||
920 | { E1000_FCRTH, 0x100, 1, PATTERN_TEST, 0x0000FFF0, 0x0000FFF0 }, | ||
921 | { E1000_FCTTV, 0x100, 1, PATTERN_TEST, 0x0000FFFF, 0x0000FFFF }, | ||
922 | { E1000_TIPG, 0x100, 1, PATTERN_TEST, 0x3FFFFFFF, 0x3FFFFFFF }, | ||
923 | { E1000_TDBAL(0), 0x100, 4, PATTERN_TEST, 0xFFFFFF80, 0xFFFFFFFF }, | ||
924 | { E1000_TDBAH(0), 0x100, 4, PATTERN_TEST, 0xFFFFFFFF, 0xFFFFFFFF }, | ||
925 | { E1000_TDLEN(0), 0x100, 4, PATTERN_TEST, 0x000FFF80, 0x000FFFFF }, | ||
926 | { E1000_TDBAL(4), 0x40, 4, PATTERN_TEST, 0xFFFFFF80, 0xFFFFFFFF }, | ||
927 | { E1000_TDBAH(4), 0x40, 4, PATTERN_TEST, 0xFFFFFFFF, 0xFFFFFFFF }, | ||
928 | { E1000_TDLEN(4), 0x40, 4, PATTERN_TEST, 0x000FFF80, 0x000FFFFF }, | ||
929 | { E1000_TDT(0), 0x100, 4, PATTERN_TEST, 0x0000FFFF, 0x0000FFFF }, | ||
930 | { E1000_TDT(4), 0x40, 4, PATTERN_TEST, 0x0000FFFF, 0x0000FFFF }, | ||
931 | { E1000_RCTL, 0x100, 1, SET_READ_TEST, 0xFFFFFFFF, 0x00000000 }, | ||
932 | { E1000_RCTL, 0x100, 1, SET_READ_TEST, 0x04CFB0FE, 0x003FFFFB }, | ||
933 | { E1000_RCTL, 0x100, 1, SET_READ_TEST, 0x04CFB0FE, 0xFFFFFFFF }, | ||
934 | { E1000_TCTL, 0x100, 1, SET_READ_TEST, 0xFFFFFFFF, 0x00000000 }, | ||
935 | { E1000_RA, 0, 16, TABLE64_TEST_LO, | ||
936 | 0xFFFFFFFF, 0xFFFFFFFF }, | ||
937 | { E1000_RA, 0, 16, TABLE64_TEST_HI, | ||
938 | 0xC3FFFFFF, 0xFFFFFFFF }, | ||
939 | { E1000_RA2, 0, 16, TABLE64_TEST_LO, | ||
940 | 0xFFFFFFFF, 0xFFFFFFFF }, | ||
941 | { E1000_RA2, 0, 16, TABLE64_TEST_HI, | ||
942 | 0xC3FFFFFF, 0xFFFFFFFF }, | ||
943 | { E1000_MTA, 0, 128, TABLE32_TEST, | ||
944 | 0xFFFFFFFF, 0xFFFFFFFF }, | ||
945 | { 0, 0, 0, 0 } | ||
946 | }; | ||
947 | |||
905 | /* 82580 reg test */ | 948 | /* 82580 reg test */ |
906 | static struct igb_reg_test reg_test_82580[] = { | 949 | static struct igb_reg_test reg_test_82580[] = { |
907 | { E1000_FCAL, 0x100, 1, PATTERN_TEST, 0xFFFFFFFF, 0xFFFFFFFF }, | 950 | { E1000_FCAL, 0x100, 1, PATTERN_TEST, 0xFFFFFFFF, 0xFFFFFFFF }, |
@@ -1077,6 +1120,10 @@ static int igb_reg_test(struct igb_adapter *adapter, u64 *data) | |||
1077 | u32 i, toggle; | 1120 | u32 i, toggle; |
1078 | 1121 | ||
1079 | switch (adapter->hw.mac.type) { | 1122 | switch (adapter->hw.mac.type) { |
1123 | case e1000_i350: | ||
1124 | test = reg_test_i350; | ||
1125 | toggle = 0x7FEFF3FF; | ||
1126 | break; | ||
1080 | case e1000_82580: | 1127 | case e1000_82580: |
1081 | test = reg_test_82580; | 1128 | test = reg_test_82580; |
1082 | toggle = 0x7FEFF3FF; | 1129 | toggle = 0x7FEFF3FF; |
@@ -1238,6 +1285,9 @@ static int igb_intr_test(struct igb_adapter *adapter, u64 *data) | |||
1238 | case e1000_82580: | 1285 | case e1000_82580: |
1239 | ics_mask = 0x77DCFED5; | 1286 | ics_mask = 0x77DCFED5; |
1240 | break; | 1287 | break; |
1288 | case e1000_i350: | ||
1289 | ics_mask = 0x77DCFED5; | ||
1290 | break; | ||
1241 | default: | 1291 | default: |
1242 | ics_mask = 0x7FFFFFFF; | 1292 | ics_mask = 0x7FFFFFFF; |
1243 | break; | 1293 | break; |
@@ -1344,7 +1394,7 @@ static int igb_setup_desc_rings(struct igb_adapter *adapter) | |||
1344 | 1394 | ||
1345 | /* Setup Tx descriptor ring and Tx buffers */ | 1395 | /* Setup Tx descriptor ring and Tx buffers */ |
1346 | tx_ring->count = IGB_DEFAULT_TXD; | 1396 | tx_ring->count = IGB_DEFAULT_TXD; |
1347 | tx_ring->pdev = adapter->pdev; | 1397 | tx_ring->dev = &adapter->pdev->dev; |
1348 | tx_ring->netdev = adapter->netdev; | 1398 | tx_ring->netdev = adapter->netdev; |
1349 | tx_ring->reg_idx = adapter->vfs_allocated_count; | 1399 | tx_ring->reg_idx = adapter->vfs_allocated_count; |
1350 | 1400 | ||
@@ -1358,7 +1408,7 @@ static int igb_setup_desc_rings(struct igb_adapter *adapter) | |||
1358 | 1408 | ||
1359 | /* Setup Rx descriptor ring and Rx buffers */ | 1409 | /* Setup Rx descriptor ring and Rx buffers */ |
1360 | rx_ring->count = IGB_DEFAULT_RXD; | 1410 | rx_ring->count = IGB_DEFAULT_RXD; |
1361 | rx_ring->pdev = adapter->pdev; | 1411 | rx_ring->dev = &adapter->pdev->dev; |
1362 | rx_ring->netdev = adapter->netdev; | 1412 | rx_ring->netdev = adapter->netdev; |
1363 | rx_ring->rx_buffer_len = IGB_RXBUFFER_2048; | 1413 | rx_ring->rx_buffer_len = IGB_RXBUFFER_2048; |
1364 | rx_ring->reg_idx = adapter->vfs_allocated_count; | 1414 | rx_ring->reg_idx = adapter->vfs_allocated_count; |
@@ -1554,10 +1604,10 @@ static int igb_clean_test_rings(struct igb_ring *rx_ring, | |||
1554 | buffer_info = &rx_ring->buffer_info[rx_ntc]; | 1604 | buffer_info = &rx_ring->buffer_info[rx_ntc]; |
1555 | 1605 | ||
1556 | /* unmap rx buffer, will be remapped by alloc_rx_buffers */ | 1606 | /* unmap rx buffer, will be remapped by alloc_rx_buffers */ |
1557 | pci_unmap_single(rx_ring->pdev, | 1607 | dma_unmap_single(rx_ring->dev, |
1558 | buffer_info->dma, | 1608 | buffer_info->dma, |
1559 | rx_ring->rx_buffer_len, | 1609 | rx_ring->rx_buffer_len, |
1560 | PCI_DMA_FROMDEVICE); | 1610 | DMA_FROM_DEVICE); |
1561 | buffer_info->dma = 0; | 1611 | buffer_info->dma = 0; |
1562 | 1612 | ||
1563 | /* verify contents of skb */ | 1613 | /* verify contents of skb */ |