31 #include <linux/types.h>
32 #include <linux/module.h>
33 #include <linux/slab.h>
34 #include <linux/pci.h>
35 #include <linux/netdevice.h>
36 #include <linux/ethtool.h>
44 #define IXGBE_ALL_RAR_ENTRIES 16
55 #define IXGBE_STAT(m) IXGBE_STATS, \
56 sizeof(((struct ixgbe_adapter *)0)->m), \
57 offsetof(struct ixgbe_adapter, m)
58 #define IXGBE_NETDEV_STAT(m) NETDEV_STATS, \
59 sizeof(((struct rtnl_link_stats64 *)0)->m), \
60 offsetof(struct rtnl_link_stats64, m)
62 static const struct ixgbe_stats ixgbe_gstrings_stats[] = {
85 {
"hw_rsc_aggregated",
IXGBE_STAT(rsc_total_count)},
86 {
"hw_rsc_flushed",
IXGBE_STAT(rsc_total_flush)},
96 {
"tx_timeout_count",
IXGBE_STAT(tx_timeout_count)},
97 {
"tx_restart_queue",
IXGBE_STAT(restart_queue)},
104 {
"rx_csum_offload_errors",
IXGBE_STAT(hw_csum_rx_error)},
105 {
"alloc_rx_page_failed",
IXGBE_STAT(alloc_rx_page_failed)},
106 {
"alloc_rx_buff_failed",
IXGBE_STAT(alloc_rx_buff_failed)},
107 {
"rx_no_dma_resources",
IXGBE_STAT(hw_rx_no_dma_resources)},
129 #define IXGBE_NUM_RX_QUEUES netdev->num_tx_queues
131 #define IXGBE_QUEUE_STATS_LEN ( \
132 (netdev->num_tx_queues + IXGBE_NUM_RX_QUEUES) * \
133 (sizeof(struct ixgbe_queue_stats) / sizeof(u64)))
134 #define IXGBE_GLOBAL_STATS_LEN ARRAY_SIZE(ixgbe_gstrings_stats)
135 #define IXGBE_PB_STATS_LEN ( \
136 (sizeof(((struct ixgbe_adapter *)0)->stats.pxonrxc) + \
137 sizeof(((struct ixgbe_adapter *)0)->stats.pxontxc) + \
138 sizeof(((struct ixgbe_adapter *)0)->stats.pxoffrxc) + \
139 sizeof(((struct ixgbe_adapter *)0)->stats.pxofftxc)) \
141 #define IXGBE_STATS_LEN (IXGBE_GLOBAL_STATS_LEN + \
142 IXGBE_PB_STATS_LEN + \
143 IXGBE_QUEUE_STATS_LEN)
146 "Register test (offline)",
"Eeprom test (offline)",
147 "Interrupt test (offline)",
"Loopback test (offline)",
148 "Link test (on/offline)"
150 #define IXGBE_TEST_LEN sizeof(ixgbe_gstrings_test) / ETH_GSTRING_LEN
152 static int ixgbe_get_settings(
struct net_device *netdev,
162 hw->
mac.ops.get_link_capabilities(hw, &supported_link, &autoneg);
173 if (hw->
phy.autoneg_advertised) {
174 if (hw->
phy.autoneg_advertised & IXGBE_LINK_SPEED_100_FULL)
176 if (hw->
phy.autoneg_advertised & IXGBE_LINK_SPEED_10GB_FULL)
178 if (hw->
phy.autoneg_advertised & IXGBE_LINK_SPEED_1GB_FULL)
182 if (supported_link & IXGBE_LINK_SPEED_10GB_FULL)
184 if (supported_link & IXGBE_LINK_SPEED_1GB_FULL)
186 if (supported_link & IXGBE_LINK_SPEED_100_FULL)
200 switch (adapter->
hw.phy.type) {
221 switch (adapter->
hw.phy.sfp_type) {
277 hw->
mac.ops.check_link(hw, &link_speed, &link_up,
false);
279 switch (link_speed) {
280 case IXGBE_LINK_SPEED_10GB_FULL:
283 case IXGBE_LINK_SPEED_1GB_FULL:
286 case IXGBE_LINK_SPEED_100_FULL:
294 ethtool_cmd_speed_set(ecmd, -1);
301 static int ixgbe_set_settings(
struct net_device *netdev,
310 (hw->
phy.multispeed_fiber)) {
321 old = hw->
phy.autoneg_advertised;
332 if (old == advertised)
335 hw->
mac.autotry_restart =
true;
336 err = hw->
mac.ops.setup_link(hw, advertised,
true,
true);
338 e_info(probe,
"setup link failed with code %d\n", err);
339 hw->
mac.ops.setup_link(hw, old,
true,
true);
343 u32 speed = ethtool_cmd_speed(ecmd);
353 static void ixgbe_get_pauseparam(
struct net_device *netdev,
359 if (hw->
fc.disable_fc_autoneg)
374 static int ixgbe_set_pauseparam(
struct net_device *netdev,
400 if (netif_running(netdev))
421 static int ixgbe_get_regs_len(
struct net_device *netdev)
423 #define IXGBE_REGS_LEN 1129
427 #define IXGBE_GET_STAT(_A_, _R_) _A_->stats._R_
429 static void ixgbe_get_regs(
struct net_device *netdev,
485 for (i = 0; i < 8; i++) {
486 switch (hw->
mac.type) {
504 for (i = 0; i < 64; i++)
506 for (i = 0; i < 64; i++)
508 for (i = 0; i < 64; i++)
510 for (i = 0; i < 64; i++)
512 for (i = 0; i < 64; i++)
514 for (i = 0; i < 64; i++)
516 for (i = 0; i < 16; i++)
518 for (i = 0; i < 16; i++)
521 for (i = 0; i < 8; i++)
529 for (i = 0; i < 16; i++)
531 for (i = 0; i < 16; i++)
539 for (i = 0; i < 8; i++)
541 for (i = 0; i < 8; i++)
546 for (i = 0; i < 32; i++)
548 for (i = 0; i < 32; i++)
550 for (i = 0; i < 32; i++)
552 for (i = 0; i < 32; i++)
554 for (i = 0; i < 32; i++)
556 for (i = 0; i < 32; i++)
558 for (i = 0; i < 32; i++)
560 for (i = 0; i < 32; i++)
563 for (i = 0; i < 16; i++)
566 for (i = 0; i < 8; i++)
586 for (i = 0; i < 8; i++)
588 for (i = 0; i < 8; i++)
590 for (i = 0; i < 8; i++)
592 for (i = 0; i < 8; i++)
594 for (i = 0; i < 8; i++)
596 for (i = 0; i < 8; i++)
604 for (i = 0; i < 8; i++)
613 for (i = 0; i < 8; i++)
615 for (i = 0; i < 8; i++)
617 for (i = 0; i < 8; i++)
619 for (i = 0; i < 8; i++)
633 for (i = 0; i < 8; i++)
654 for (i = 0; i < 16; i++)
656 for (i = 0; i < 16; i++)
658 for (i = 0; i < 16; i++)
660 for (i = 0; i < 16; i++)
700 for (i = 0; i < 8; i++)
703 for (i = 0; i < 4; i++)
707 for (i = 0; i < 8; i++)
710 for (i = 0; i < 4; i++)
723 for (i = 0; i < 8; i++)
739 static int ixgbe_get_eeprom_len(
struct net_device *netdev)
742 return adapter->
hw.eeprom.word_size * 2;
745 static int ixgbe_get_eeprom(
struct net_device *netdev,
751 int first_word, last_word, eeprom_len;
755 if (eeprom->
len == 0)
760 first_word = eeprom->
offset >> 1;
761 last_word = (eeprom->
offset + eeprom->
len - 1) >> 1;
762 eeprom_len = last_word - first_word + 1;
768 ret_val = hw->
eeprom.ops.read_buffer(hw, first_word, eeprom_len,
772 for (i = 0; i < eeprom_len; i++)
781 static int ixgbe_set_eeprom(
struct net_device *netdev,
788 int max_len, first_word, last_word, ret_val = 0;
791 if (eeprom->
len == 0)
797 max_len = hw->
eeprom.word_size * 2;
799 first_word = eeprom->
offset >> 1;
800 last_word = (eeprom->
offset + eeprom->
len - 1) >> 1;
812 ret_val = hw->
eeprom.ops.read(hw, first_word, &eeprom_buff[0]);
818 if ((eeprom->
offset + eeprom->
len) & 1) {
823 ret_val = hw->
eeprom.ops.read(hw, last_word,
824 &eeprom_buff[last_word - first_word]);
830 for (i = 0; i < last_word - first_word + 1; i++)
835 for (i = 0; i < last_word - first_word + 1; i++)
838 ret_val = hw->
eeprom.ops.write_buffer(hw, first_word,
839 last_word - first_word + 1,
844 hw->
eeprom.ops.update_checksum(hw);
851 static void ixgbe_get_drvinfo(
struct net_device *netdev,
873 static void ixgbe_get_ringparam(
struct net_device *netdev,
886 static int ixgbe_set_ringparam(
struct net_device *netdev,
890 struct ixgbe_ring *temp_tx_ring, *temp_rx_ring;
892 u32 new_rx_count, new_tx_count;
893 bool need_update =
false;
906 if ((new_tx_count == adapter->tx_ring[0]->count) &&
907 (new_rx_count == adapter->
rx_ring[0]->count)) {
915 if (!netif_running(adapter->
netdev)) {
917 adapter->tx_ring[i]->count = new_tx_count;
919 adapter->
rx_ring[i]->count = new_rx_count;
933 memcpy(&temp_tx_ring[i], adapter->tx_ring[i],
935 temp_tx_ring[
i].
count = new_tx_count;
958 temp_rx_ring[
i].
count = new_rx_count;
979 memcpy(adapter->tx_ring[i], &temp_tx_ring[i],
1005 static int ixgbe_get_sset_count(
struct net_device *netdev,
int sset)
1017 static void ixgbe_get_ethtool_stats(
struct net_device *netdev,
1031 switch (ixgbe_gstrings_stats[i].
type) {
1033 p = (
char *) net_stats +
1034 ixgbe_gstrings_stats[i].stat_offset;
1037 p = (
char *) adapter +
1038 ixgbe_gstrings_stats[i].stat_offset;
1046 ring = adapter->tx_ring[
j];
1055 start = u64_stats_fetch_begin_bh(&ring->
syncp);
1056 data[
i] = ring->
stats.packets;
1057 data[i+1] = ring->
stats.bytes;
1058 }
while (u64_stats_fetch_retry_bh(&ring->
syncp, start));
1071 start = u64_stats_fetch_begin_bh(&ring->
syncp);
1072 data[
i] = ring->
stats.packets;
1073 data[i+1] = ring->
stats.bytes;
1074 }
while (u64_stats_fetch_retry_bh(&ring->
syncp, start));
1079 data[i++] = adapter->
stats.pxontxc[
j];
1080 data[i++] = adapter->
stats.pxofftxc[
j];
1083 data[i++] = adapter->
stats.pxonrxc[
j];
1084 data[i++] = adapter->
stats.pxoffrxc[
j];
1088 static void ixgbe_get_strings(
struct net_device *netdev,
u32 stringset,
1091 char *p = (
char *)data;
1094 switch (stringset) {
1096 memcpy(data, *ixgbe_gstrings_test,
1101 memcpy(p, ixgbe_gstrings_stats[i].stat_string,
1106 sprintf(p,
"tx_queue_%u_packets", i);
1108 sprintf(p,
"tx_queue_%u_bytes", i);
1112 sprintf(p,
"rx_queue_%u_packets", i);
1114 sprintf(p,
"rx_queue_%u_bytes", i);
1118 sprintf(p,
"tx_pb_%u_pxon", i);
1120 sprintf(p,
"tx_pb_%u_pxoff", i);
1124 sprintf(p,
"rx_pb_%u_pxon", i);
1126 sprintf(p,
"rx_pb_%u_pxoff", i);
1141 hw->
mac.ops.check_link(hw, &link_speed, &link_up,
true);
1168 #define PATTERN_TEST 1
1169 #define SET_READ_TEST 2
1170 #define WRITE_NO_TEST 3
1171 #define TABLE32_TEST 4
1172 #define TABLE64_TEST_LO 5
1173 #define TABLE64_TEST_HI 6
1231 static const u32 test_pattern[] = {
1232 0x5A5A5A5A, 0xA5A5A5A5, 0x00000000, 0xFFFFFFFF};
1234 for (pat = 0; pat <
ARRAY_SIZE(test_pattern); pat++) {
1235 before =
readl(adapter->
hw.hw_addr + reg);
1236 writel((test_pattern[pat] & write),
1237 (adapter->
hw.hw_addr + reg));
1238 val =
readl(adapter->
hw.hw_addr + reg);
1239 if (val != (test_pattern[pat] & write & mask)) {
1240 e_err(drv,
"pattern test reg %04X failed: got "
1241 "0x%08X expected 0x%08X\n",
1242 reg, val, (test_pattern[pat] & write & mask));
1244 writel(before, adapter->
hw.hw_addr + reg);
1247 writel(before, adapter->
hw.hw_addr + reg);
1252 static bool reg_set_and_check(
struct ixgbe_adapter *adapter,
u64 *data,
int reg,
1256 before =
readl(adapter->
hw.hw_addr + reg);
1257 writel((write & mask), (adapter->
hw.hw_addr + reg));
1258 val =
readl(adapter->
hw.hw_addr + reg);
1259 if ((write & mask) != (val & mask)) {
1260 e_err(drv,
"set/check reg %04X test failed: got 0x%08X "
1261 "expected 0x%08X\n", reg, (val & mask), (write & mask));
1263 writel(before, (adapter->
hw.hw_addr + reg));
1266 writel(before, (adapter->
hw.hw_addr + reg));
1270 #define REG_PATTERN_TEST(reg, mask, write) \
1272 if (reg_pattern_test(adapter, data, reg, mask, write)) \
1277 #define REG_SET_AND_CHECK(reg, mask, write) \
1279 if (reg_set_and_check(adapter, data, reg, mask, write)) \
1289 switch (adapter->
hw.mac.type) {
1291 toggle = 0x7FFFF3FF;
1292 test = reg_test_82598;
1296 toggle = 0x7FFFF30F;
1297 test = reg_test_82599;
1315 if (value != after) {
1316 e_err(drv,
"failed STATUS register test got: 0x%08X "
1317 "expected: 0x%08X\n", after, value);
1343 (adapter->
hw.hw_addr + test->
reg)
1373 if (hw->
eeprom.ops.validate_checksum(hw,
NULL))
1380 static irqreturn_t ixgbe_test_intr(
int irq,
void *data)
1393 u32 mask, i = 0, shared_int =
true;
1410 netdev->
name, netdev)) {
1413 netdev->
name, netdev)) {
1417 e_info(hw,
"testing %s interrupt\n", shared_int ?
1418 "shared" :
"unshared");
1426 for (; i < 10; i++) {
1440 ~mask & 0x00007FFF);
1442 ~mask & 0x00007FFF);
1479 ~mask & 0x00007FFF);
1481 ~mask & 0x00007FFF);
1503 static void ixgbe_free_desc_rings(
struct ixgbe_adapter *adapter)
1523 switch (hw->
mac.type) {
1540 static int ixgbe_setup_desc_rings(
struct ixgbe_adapter *adapter)
1551 tx_ring->
dev = &adapter->
pdev->dev;
1553 tx_ring->
reg_idx = adapter->tx_ring[0]->reg_idx;
1559 switch (adapter->
hw.mac.type) {
1575 rx_ring->
dev = &adapter->
pdev->dev;
1596 ixgbe_free_desc_rings(adapter);
1600 static int ixgbe_setup_loopback_test(
struct ixgbe_adapter *adapter)
1653 static void ixgbe_loopback_cleanup(
struct ixgbe_adapter *adapter)
1662 static void ixgbe_create_lbtest_frame(
struct sk_buff *
skb,
1663 unsigned int frame_size)
1667 memset(&skb->
data[frame_size], 0xAA, frame_size / 2 - 1);
1668 memset(&skb->
data[frame_size + 10], 0xBE, 1);
1669 memset(&skb->
data[frame_size + 12], 0xAF, 1);
1672 static bool ixgbe_check_lbtest_frame(
struct ixgbe_rx_buffer *rx_buffer,
1673 unsigned int frame_size)
1675 unsigned char *
data;
1682 if (data[3] != 0xFF ||
1683 data[frame_size + 10] != 0xBE ||
1684 data[frame_size + 12] != 0xAF)
1692 static u16 ixgbe_clean_test_rings(
struct ixgbe_ring *rx_ring,
1713 ixgbe_rx_bufsz(rx_ring),
1717 if (ixgbe_check_lbtest_frame(rx_buffer, size))
1723 ixgbe_rx_bufsz(rx_ring),
1732 if (rx_ntc == rx_ring->
count)
1735 if (tx_ntc == tx_ring->
count)
1742 netdev_tx_reset_queue(txring_txq(tx_ring));
1752 static int ixgbe_run_loopback_test(
struct ixgbe_adapter *adapter)
1756 int i,
j,
lc, good_cnt, ret_val = 0;
1757 unsigned int size = 1024;
1767 ixgbe_create_lbtest_frame(skb, size);
1777 lc = ((tx_ring->
count / 64) * 2) + 1;
1779 lc = ((rx_ring->
count / 64) * 2) + 1;
1781 for (j = 0; j <=
lc; j++) {
1786 for (i = 0; i < 64; i++) {
1795 if (good_cnt != 64) {
1803 good_cnt = ixgbe_clean_test_rings(rx_ring, tx_ring, size);
1804 if (good_cnt != 64) {
1818 *data = ixgbe_setup_desc_rings(adapter);
1821 *data = ixgbe_setup_loopback_test(adapter);
1824 *data = ixgbe_run_loopback_test(adapter);
1825 ixgbe_loopback_cleanup(adapter);
1828 ixgbe_free_desc_rings(adapter);
1833 static void ixgbe_diag_test(
struct net_device *netdev,
1837 bool if_running = netif_running(netdev);
1843 e_info(hw,
"offline testing starting\n");
1847 if (ixgbe_link_test(adapter, &data[4]))
1852 for (i = 0; i < adapter->
num_vfs; i++) {
1853 if (adapter->
vfinfo[i].clear_to_send) {
1854 netdev_warn(netdev,
"%s",
1855 "offline diagnostic is not "
1856 "supported when VFs are "
1876 e_info(hw,
"register testing starting\n");
1881 e_info(hw,
"eeprom testing starting\n");
1882 if (ixgbe_eeprom_test(adapter, &data[1]))
1886 e_info(hw,
"interrupt testing starting\n");
1887 if (ixgbe_intr_test(adapter, &data[2]))
1894 e_info(hw,
"Skip MAC loopback diagnostic in VT "
1901 e_info(hw,
"loopback testing starting\n");
1902 if (ixgbe_loopback_test(adapter, &data[3]))
1912 e_info(hw,
"online testing starting\n");
1914 if (ixgbe_link_test(adapter, &data[4]))
1929 static int ixgbe_wol_exclusion(
struct ixgbe_adapter *adapter,
1945 static void ixgbe_get_wol(
struct net_device *netdev,
1954 if (ixgbe_wol_exclusion(adapter, wol) ||
1955 !device_can_wakeup(&adapter->
pdev->dev))
1975 if (ixgbe_wol_exclusion(adapter, wol))
1994 static int ixgbe_nway_reset(
struct net_device *netdev)
1998 if (netif_running(netdev))
2004 static int ixgbe_set_phys_id(
struct net_device *netdev,
2032 static int ixgbe_get_coalesce(
struct net_device *netdev,
2074 e_info(probe,
"rx-usecs value high enough "
2075 "to re-enable RSC\n");
2081 e_info(probe,
"rx-usecs set too low, disabling RSC\n");
2087 static int ixgbe_set_coalesce(
struct net_device *netdev,
2093 u16 tx_itr_param, rx_itr_param;
2094 bool need_reset =
false;
2126 need_reset = ixgbe_update_rsc(adapter);
2130 if (q_vector->
tx.count && !q_vector->rx.count)
2132 q_vector->
itr = tx_itr_param;
2135 q_vector->
itr = rx_itr_param;
2150 static int ixgbe_get_ethtool_fdir_entry(
struct ixgbe_adapter *adapter,
2174 switch (
rule->filter.formatted.flow_type) {
2202 fsp->
h_ext.vlan_tci =
rule->filter.formatted.vlan_id;
2204 fsp->
h_ext.vlan_etype =
rule->filter.formatted.flex_bytes;
2219 static int ixgbe_get_ethtool_fdir_all(
struct ixgbe_adapter *adapter,
2243 static int ixgbe_get_rss_hash_opts(
struct ixgbe_adapter *adapter,
2297 ret = ixgbe_get_ethtool_fdir_entry(adapter, cmd);
2300 ret = ixgbe_get_ethtool_fdir_all(adapter, cmd, rule_locs);
2303 ret = ixgbe_get_rss_hash_opts(adapter, cmd);
2312 static int ixgbe_update_ethtool_fdir_entry(
struct ixgbe_adapter *adapter,
2327 if (rule->
sw_idx >= sw_idx)
2333 if (rule && (rule->
sw_idx == sw_idx)) {
2358 hlist_add_after(parent, &input->
fdir_node);
2409 static int ixgbe_add_ethtool_fdir_entry(
struct ixgbe_adapter *adapter,
2432 e_err(drv,
"Location out of range\n");
2446 if (!ixgbe_flowspec_to_flow_type(fsp,
2448 e_err(drv,
"Unrecognized flow type\n");
2476 fsp->
h_ext.vlan_etype;
2493 e_err(drv,
"Error writing mask\n");
2494 goto err_out_w_lock;
2497 e_err(drv,
"Only one mask supported per port\n");
2498 goto err_out_w_lock;
2511 goto err_out_w_lock;
2513 ixgbe_update_ethtool_fdir_entry(adapter, input, input->
sw_idx);
2525 static int ixgbe_del_ethtool_fdir_entry(
struct ixgbe_adapter *adapter,
2533 err = ixgbe_update_ethtool_fdir_entry(adapter,
NULL, fsp->
location);
2539 #define UDP_RSS_FLAGS (IXGBE_FLAG2_RSS_FIELD_IPV4_UDP | \
2540 IXGBE_FLAG2_RSS_FIELD_IPV6_UDP)
2541 static int ixgbe_set_rss_hash_opt(
struct ixgbe_adapter *adapter,
2612 if (flags2 != adapter->
flags2) {
2617 !(adapter->
flags2 & UDP_RSS_FLAGS))
2618 e_warn(drv,
"enabling UDP RSS: fragmented packets"
2619 " may arrive out of order to the stack above\n");
2651 ret = ixgbe_add_ethtool_fdir_entry(adapter, cmd);
2654 ret = ixgbe_del_ethtool_fdir_entry(adapter, cmd);
2657 ret = ixgbe_set_rss_hash_opt(adapter, cmd);
2666 static int ixgbe_get_ts_info(
struct net_device *dev,
2671 switch (adapter->
hw.mac.type) {
2672 #ifdef CONFIG_IXGBE_PTP
2683 if (adapter->ptp_clock)
2706 static const struct ethtool_ops ixgbe_ethtool_ops = {
2707 .get_settings = ixgbe_get_settings,
2708 .set_settings = ixgbe_set_settings,
2709 .get_drvinfo = ixgbe_get_drvinfo,
2710 .get_regs_len = ixgbe_get_regs_len,
2711 .get_regs = ixgbe_get_regs,
2712 .get_wol = ixgbe_get_wol,
2713 .set_wol = ixgbe_set_wol,
2714 .nway_reset = ixgbe_nway_reset,
2716 .get_eeprom_len = ixgbe_get_eeprom_len,
2717 .get_eeprom = ixgbe_get_eeprom,
2718 .set_eeprom = ixgbe_set_eeprom,
2719 .get_ringparam = ixgbe_get_ringparam,
2720 .set_ringparam = ixgbe_set_ringparam,
2721 .get_pauseparam = ixgbe_get_pauseparam,
2722 .set_pauseparam = ixgbe_set_pauseparam,
2723 .get_msglevel = ixgbe_get_msglevel,
2724 .set_msglevel = ixgbe_set_msglevel,
2725 .self_test = ixgbe_diag_test,
2726 .get_strings = ixgbe_get_strings,
2727 .set_phys_id = ixgbe_set_phys_id,
2728 .get_sset_count = ixgbe_get_sset_count,
2729 .get_ethtool_stats = ixgbe_get_ethtool_stats,
2730 .get_coalesce = ixgbe_get_coalesce,
2731 .set_coalesce = ixgbe_set_coalesce,
2732 .get_rxnfc = ixgbe_get_rxnfc,
2733 .set_rxnfc = ixgbe_set_rxnfc,
2734 .get_ts_info = ixgbe_get_ts_info,