hc
2024-10-12 a5969cabbb4660eab42b6ef0412cbbd1200cf14d
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)
....@@ -811,6 +822,8 @@
811822 */
812823 ret_val = hw->nvm.ops.read(hw, last_word, 1,
813824 &eeprom_buff[last_word - first_word]);
825
+ if (ret_val)
826
+ goto out;
814827 }
815828
816829 /* Device's eeprom is always little-endian, word addressable */
....@@ -830,6 +843,7 @@
830843 hw->nvm.ops.update(hw);
831844
832845 igb_set_fw_version(adapter);
846
+out:
833847 kfree(eeprom_buff);
834848 return ret_val;
835849 }
....@@ -840,7 +854,6 @@
840854 struct igb_adapter *adapter = netdev_priv(netdev);
841855
842856 strlcpy(drvinfo->driver, igb_driver_name, sizeof(drvinfo->driver));
843
- strlcpy(drvinfo->version, igb_driver_version, sizeof(drvinfo->version));
844857
845858 /* EEPROM image version # is reported as firmware version # for
846859 * 82575 controllers
....@@ -950,6 +963,10 @@
950963 for (i = 0; i < adapter->num_rx_queues; i++) {
951964 memcpy(&temp_ring[i], adapter->rx_ring[i],
952965 sizeof(struct igb_ring));
966
+
967
+ /* Clear copied XDP RX-queue info */
968
+ memset(&temp_ring[i].xdp_rxq, 0,
969
+ sizeof(temp_ring[i].xdp_rxq));
953970
954971 temp_ring[i].count = new_rx_count;
955972 err = igb_setup_rx_resources(&temp_ring[i]);
....@@ -1399,6 +1416,8 @@
13991416 *data = 1;
14001417 return -1;
14011418 }
1419
+ wr32(E1000_IVAR_MISC, E1000_IVAR_VALID << 8);
1420
+ wr32(E1000_EIMS, BIT(0));
14021421 } else if (adapter->flags & IGB_FLAG_HAS_MSI) {
14031422 shared_int = false;
14041423 if (request_irq(irq,
....@@ -1772,8 +1791,8 @@
17721791 memset(skb->data, 0xFF, frame_size);
17731792 frame_size /= 2;
17741793 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);
1794
+ skb->data[frame_size + 10] = 0xBE;
1795
+ skb->data[frame_size + 12] = 0xAF;
17771796 }
17781797
17791798 static int igb_check_lbtest_frame(struct igb_rx_buffer *rx_buffer,
....@@ -2114,7 +2133,7 @@
21142133 {
21152134 struct igb_adapter *adapter = netdev_priv(netdev);
21162135
2117
- if (wol->wolopts & (WAKE_ARP | WAKE_MAGICSECURE))
2136
+ if (wol->wolopts & (WAKE_ARP | WAKE_MAGICSECURE | WAKE_FILTER))
21182137 return -EOPNOTSUPP;
21192138
21202139 if (!(adapter->flags & IGB_FLAG_WOL_SUPPORTED))
....@@ -2172,27 +2191,6 @@
21722191 {
21732192 struct igb_adapter *adapter = netdev_priv(netdev);
21742193 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;
21962194
21972195 if ((ec->rx_coalesce_usecs > IGB_MAX_ITR_USECS) ||
21982196 ((ec->rx_coalesce_usecs > 3) &&
....@@ -2528,11 +2526,11 @@
25282526 switch (cmd->flow_type) {
25292527 case TCP_V4_FLOW:
25302528 cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3;
2531
- /* Fall through */
2529
+ fallthrough;
25322530 case UDP_V4_FLOW:
25332531 if (adapter->flags & IGB_FLAG_RSS_FIELD_IPV4_UDP)
25342532 cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3;
2535
- /* Fall through */
2533
+ fallthrough;
25362534 case SCTP_V4_FLOW:
25372535 case AH_ESP_V4_FLOW:
25382536 case AH_V4_FLOW:
....@@ -2542,11 +2540,11 @@
25422540 break;
25432541 case TCP_V6_FLOW:
25442542 cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3;
2545
- /* Fall through */
2543
+ fallthrough;
25462544 case UDP_V6_FLOW:
25472545 if (adapter->flags & IGB_FLAG_RSS_FIELD_IPV6_UDP)
25482546 cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3;
2549
- /* Fall through */
2547
+ fallthrough;
25502548 case SCTP_V6_FLOW:
25512549 case AH_ESP_V6_FLOW:
25522550 case AH_V6_FLOW:
....@@ -3159,8 +3157,8 @@
31593157 } else if (!edata->eee_enabled) {
31603158 dev_err(&adapter->pdev->dev,
31613159 "Setting EEE options are not supported with EEE disabled\n");
3162
- return -EINVAL;
3163
- }
3160
+ return -EINVAL;
3161
+ }
31643162
31653163 adapter->eee_advert = ethtool_adv_to_mmd_eee_adv_t(edata->advertised);
31663164 if (hw->dev_spec._82575.eee_disable != !edata->eee_enabled) {
....@@ -3467,6 +3465,7 @@
34673465 }
34683466
34693467 static const struct ethtool_ops igb_ethtool_ops = {
3468
+ .supported_coalesce_params = ETHTOOL_COALESCE_USECS,
34703469 .get_drvinfo = igb_get_drvinfo,
34713470 .get_regs_len = igb_get_regs_len,
34723471 .get_regs = igb_get_regs,