hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
kernel/drivers/net/ethernet/intel/igb/igb_ethtool.c
....@@ -26,7 +26,7 @@
2626
2727 #define IGB_STAT(_name, _stat) { \
2828 .stat_string = _name, \
29
- .sizeof_stat = FIELD_SIZEOF(struct igb_adapter, _stat), \
29
+ .sizeof_stat = sizeof_field(struct igb_adapter, _stat), \
3030 .stat_offset = offsetof(struct igb_adapter, _stat) \
3131 }
3232 static const struct igb_stats igb_gstrings_stats[] = {
....@@ -76,7 +76,7 @@
7676
7777 #define IGB_NETDEV_STAT(_net_stat) { \
7878 .stat_string = __stringify(_net_stat), \
79
- .sizeof_stat = FIELD_SIZEOF(struct rtnl_link_stats64, _net_stat), \
79
+ .sizeof_stat = sizeof_field(struct rtnl_link_stats64, _net_stat), \
8080 .stat_offset = offsetof(struct rtnl_link_stats64, _net_stat) \
8181 }
8282 static const struct igb_stats igb_gstrings_net_stats[] = {
....@@ -397,6 +397,7 @@
397397 struct igb_adapter *adapter = netdev_priv(netdev);
398398 struct e1000_hw *hw = &adapter->hw;
399399 int retval = 0;
400
+ int i;
400401
401402 /* 100basefx does not support setting link flow control */
402403 if (hw->dev_spec._82575.eth_flags.e100_base_fx)
....@@ -429,6 +430,13 @@
429430
430431 retval = ((hw->phy.media_type == e1000_media_type_copper) ?
431432 igb_force_mac_fc(hw) : igb_setup_link(hw));
433
+
434
+ /* Make sure SRRCTL considers new fc settings for each ring */
435
+ for (i = 0; i < adapter->num_rx_queues; i++) {
436
+ struct igb_ring *ring = adapter->rx_ring[i];
437
+
438
+ igb_setup_srrctl(adapter, ring);
439
+ }
432440 }
433441
434442 clear_bit(__IGB_RESETTING, &adapter->state);
....@@ -449,7 +457,7 @@
449457
450458 static int igb_get_regs_len(struct net_device *netdev)
451459 {
452
-#define IGB_REGS_LEN 739
460
+#define IGB_REGS_LEN 740
453461 return IGB_REGS_LEN * sizeof(u32);
454462 }
455463
....@@ -676,41 +684,44 @@
676684 regs_buff[554] = adapter->stats.b2ogprc;
677685 }
678686
679
- if (hw->mac.type != e1000_82576)
680
- return;
681
- for (i = 0; i < 12; i++)
682
- regs_buff[555 + i] = rd32(E1000_SRRCTL(i + 4));
683
- for (i = 0; i < 4; i++)
684
- regs_buff[567 + i] = rd32(E1000_PSRTYPE(i + 4));
685
- for (i = 0; i < 12; i++)
686
- regs_buff[571 + i] = rd32(E1000_RDBAL(i + 4));
687
- for (i = 0; i < 12; i++)
688
- regs_buff[583 + i] = rd32(E1000_RDBAH(i + 4));
689
- for (i = 0; i < 12; i++)
690
- regs_buff[595 + i] = rd32(E1000_RDLEN(i + 4));
691
- for (i = 0; i < 12; i++)
692
- regs_buff[607 + i] = rd32(E1000_RDH(i + 4));
693
- for (i = 0; i < 12; i++)
694
- regs_buff[619 + i] = rd32(E1000_RDT(i + 4));
695
- for (i = 0; i < 12; i++)
696
- regs_buff[631 + i] = rd32(E1000_RXDCTL(i + 4));
687
+ if (hw->mac.type == e1000_82576) {
688
+ for (i = 0; i < 12; i++)
689
+ regs_buff[555 + i] = rd32(E1000_SRRCTL(i + 4));
690
+ for (i = 0; i < 4; i++)
691
+ regs_buff[567 + i] = rd32(E1000_PSRTYPE(i + 4));
692
+ for (i = 0; i < 12; i++)
693
+ regs_buff[571 + i] = rd32(E1000_RDBAL(i + 4));
694
+ for (i = 0; i < 12; i++)
695
+ regs_buff[583 + i] = rd32(E1000_RDBAH(i + 4));
696
+ for (i = 0; i < 12; i++)
697
+ regs_buff[595 + i] = rd32(E1000_RDLEN(i + 4));
698
+ for (i = 0; i < 12; i++)
699
+ regs_buff[607 + i] = rd32(E1000_RDH(i + 4));
700
+ for (i = 0; i < 12; i++)
701
+ regs_buff[619 + i] = rd32(E1000_RDT(i + 4));
702
+ for (i = 0; i < 12; i++)
703
+ regs_buff[631 + i] = rd32(E1000_RXDCTL(i + 4));
697704
698
- for (i = 0; i < 12; i++)
699
- regs_buff[643 + i] = rd32(E1000_TDBAL(i + 4));
700
- for (i = 0; i < 12; i++)
701
- regs_buff[655 + i] = rd32(E1000_TDBAH(i + 4));
702
- for (i = 0; i < 12; i++)
703
- regs_buff[667 + i] = rd32(E1000_TDLEN(i + 4));
704
- for (i = 0; i < 12; i++)
705
- regs_buff[679 + i] = rd32(E1000_TDH(i + 4));
706
- for (i = 0; i < 12; i++)
707
- regs_buff[691 + i] = rd32(E1000_TDT(i + 4));
708
- for (i = 0; i < 12; i++)
709
- regs_buff[703 + i] = rd32(E1000_TXDCTL(i + 4));
710
- for (i = 0; i < 12; i++)
711
- regs_buff[715 + i] = rd32(E1000_TDWBAL(i + 4));
712
- for (i = 0; i < 12; i++)
713
- regs_buff[727 + i] = rd32(E1000_TDWBAH(i + 4));
705
+ for (i = 0; i < 12; i++)
706
+ regs_buff[643 + i] = rd32(E1000_TDBAL(i + 4));
707
+ for (i = 0; i < 12; i++)
708
+ regs_buff[655 + i] = rd32(E1000_TDBAH(i + 4));
709
+ for (i = 0; i < 12; i++)
710
+ regs_buff[667 + i] = rd32(E1000_TDLEN(i + 4));
711
+ for (i = 0; i < 12; i++)
712
+ regs_buff[679 + i] = rd32(E1000_TDH(i + 4));
713
+ for (i = 0; i < 12; i++)
714
+ regs_buff[691 + i] = rd32(E1000_TDT(i + 4));
715
+ for (i = 0; i < 12; i++)
716
+ regs_buff[703 + i] = rd32(E1000_TXDCTL(i + 4));
717
+ for (i = 0; i < 12; i++)
718
+ regs_buff[715 + i] = rd32(E1000_TDWBAL(i + 4));
719
+ for (i = 0; i < 12; i++)
720
+ regs_buff[727 + i] = rd32(E1000_TDWBAH(i + 4));
721
+ }
722
+
723
+ if (hw->mac.type == e1000_i210 || hw->mac.type == e1000_i211)
724
+ regs_buff[739] = rd32(E1000_I210_RR2DCDELAY);
714725 }
715726
716727 static int igb_get_eeprom_len(struct net_device *netdev)
....@@ -840,7 +851,6 @@
840851 struct igb_adapter *adapter = netdev_priv(netdev);
841852
842853 strlcpy(drvinfo->driver, igb_driver_name, sizeof(drvinfo->driver));
843
- strlcpy(drvinfo->version, igb_driver_version, sizeof(drvinfo->version));
844854
845855 /* EEPROM image version # is reported as firmware version # for
846856 * 82575 controllers
....@@ -950,6 +960,10 @@
950960 for (i = 0; i < adapter->num_rx_queues; i++) {
951961 memcpy(&temp_ring[i], adapter->rx_ring[i],
952962 sizeof(struct igb_ring));
963
+
964
+ /* Clear copied XDP RX-queue info */
965
+ memset(&temp_ring[i].xdp_rxq, 0,
966
+ sizeof(temp_ring[i].xdp_rxq));
953967
954968 temp_ring[i].count = new_rx_count;
955969 err = igb_setup_rx_resources(&temp_ring[i]);
....@@ -1399,6 +1413,8 @@
13991413 *data = 1;
14001414 return -1;
14011415 }
1416
+ wr32(E1000_IVAR_MISC, E1000_IVAR_VALID << 8);
1417
+ wr32(E1000_EIMS, BIT(0));
14021418 } else if (adapter->flags & IGB_FLAG_HAS_MSI) {
14031419 shared_int = false;
14041420 if (request_irq(irq,
....@@ -1772,8 +1788,8 @@
17721788 memset(skb->data, 0xFF, frame_size);
17731789 frame_size /= 2;
17741790 memset(&skb->data[frame_size], 0xAA, frame_size - 1);
1775
- memset(&skb->data[frame_size + 10], 0xBE, 1);
1776
- memset(&skb->data[frame_size + 12], 0xAF, 1);
1791
+ skb->data[frame_size + 10] = 0xBE;
1792
+ skb->data[frame_size + 12] = 0xAF;
17771793 }
17781794
17791795 static int igb_check_lbtest_frame(struct igb_rx_buffer *rx_buffer,
....@@ -2114,7 +2130,7 @@
21142130 {
21152131 struct igb_adapter *adapter = netdev_priv(netdev);
21162132
2117
- if (wol->wolopts & (WAKE_ARP | WAKE_MAGICSECURE))
2133
+ if (wol->wolopts & (WAKE_ARP | WAKE_MAGICSECURE | WAKE_FILTER))
21182134 return -EOPNOTSUPP;
21192135
21202136 if (!(adapter->flags & IGB_FLAG_WOL_SUPPORTED))
....@@ -2172,27 +2188,6 @@
21722188 {
21732189 struct igb_adapter *adapter = netdev_priv(netdev);
21742190 int i;
2175
-
2176
- if (ec->rx_max_coalesced_frames ||
2177
- ec->rx_coalesce_usecs_irq ||
2178
- ec->rx_max_coalesced_frames_irq ||
2179
- ec->tx_max_coalesced_frames ||
2180
- ec->tx_coalesce_usecs_irq ||
2181
- ec->stats_block_coalesce_usecs ||
2182
- ec->use_adaptive_rx_coalesce ||
2183
- ec->use_adaptive_tx_coalesce ||
2184
- ec->pkt_rate_low ||
2185
- ec->rx_coalesce_usecs_low ||
2186
- ec->rx_max_coalesced_frames_low ||
2187
- ec->tx_coalesce_usecs_low ||
2188
- ec->tx_max_coalesced_frames_low ||
2189
- ec->pkt_rate_high ||
2190
- ec->rx_coalesce_usecs_high ||
2191
- ec->rx_max_coalesced_frames_high ||
2192
- ec->tx_coalesce_usecs_high ||
2193
- ec->tx_max_coalesced_frames_high ||
2194
- ec->rate_sample_interval)
2195
- return -ENOTSUPP;
21962191
21972192 if ((ec->rx_coalesce_usecs > IGB_MAX_ITR_USECS) ||
21982193 ((ec->rx_coalesce_usecs > 3) &&
....@@ -2528,11 +2523,11 @@
25282523 switch (cmd->flow_type) {
25292524 case TCP_V4_FLOW:
25302525 cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3;
2531
- /* Fall through */
2526
+ fallthrough;
25322527 case UDP_V4_FLOW:
25332528 if (adapter->flags & IGB_FLAG_RSS_FIELD_IPV4_UDP)
25342529 cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3;
2535
- /* Fall through */
2530
+ fallthrough;
25362531 case SCTP_V4_FLOW:
25372532 case AH_ESP_V4_FLOW:
25382533 case AH_V4_FLOW:
....@@ -2542,11 +2537,11 @@
25422537 break;
25432538 case TCP_V6_FLOW:
25442539 cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3;
2545
- /* Fall through */
2540
+ fallthrough;
25462541 case UDP_V6_FLOW:
25472542 if (adapter->flags & IGB_FLAG_RSS_FIELD_IPV6_UDP)
25482543 cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3;
2549
- /* Fall through */
2544
+ fallthrough;
25502545 case SCTP_V6_FLOW:
25512546 case AH_ESP_V6_FLOW:
25522547 case AH_V6_FLOW:
....@@ -3159,8 +3154,8 @@
31593154 } else if (!edata->eee_enabled) {
31603155 dev_err(&adapter->pdev->dev,
31613156 "Setting EEE options are not supported with EEE disabled\n");
3162
- return -EINVAL;
3163
- }
3157
+ return -EINVAL;
3158
+ }
31643159
31653160 adapter->eee_advert = ethtool_adv_to_mmd_eee_adv_t(edata->advertised);
31663161 if (hw->dev_spec._82575.eee_disable != !edata->eee_enabled) {
....@@ -3467,6 +3462,7 @@
34673462 }
34683463
34693464 static const struct ethtool_ops igb_ethtool_ops = {
3465
+ .supported_coalesce_params = ETHTOOL_COALESCE_USECS,
34703466 .get_drvinfo = igb_get_drvinfo,
34713467 .get_regs_len = igb_get_regs_len,
34723468 .get_regs = igb_get_regs,