Supports IPv4 and IPv6 TCP + UDP In various tests between MT7986 and Intel BE200, I observed a performance boost ranging from 2 to 12%, with an average of 5.5%. I did the tests on the MT7915, MT7981, MT7986, and MT7921 variants. The MT7922, MT7925, and MT799x are untouched for now and still have checksumming disabled. Signed-off-by: Felix Fietkau [rebased and resolved conflicts] Signed-off-by: Aleksander Jan Bajkowski --- drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c | 5 +++++ drivers/net/wireless/mediatek/mt76/mt7915/init.c | 3 ++- drivers/net/wireless/mediatek/mt76/mt792x_core.c | 3 +++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c b/drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c index 0db00efe88b0..e31b3e7e2038 100644 --- a/drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c +++ b/drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c @@ -372,6 +372,9 @@ mt76_connac2_mac_write_txwi_8023(__le32 *txwi, struct sk_buff *skb, wmm = sta->wme; } + val = FIELD_PREP(MT_TXD0_ETH_TYPE_OFFSET, 10); + txwi[0] |= cpu_to_le32(val); + val = FIELD_PREP(MT_TXD1_HDR_FORMAT, MT_HDR_FORMAT_802_3) | FIELD_PREP(MT_TXD1_TID, tid); @@ -391,6 +394,8 @@ mt76_connac2_mac_write_txwi_8023(__le32 *txwi, struct sk_buff *skb, val = FIELD_PREP(MT_TXD7_TYPE, fc_type) | FIELD_PREP(MT_TXD7_SUB_TYPE, fc_stype); + if (skb->ip_summed == CHECKSUM_PARTIAL) + val |= MT_TXD7_IP_SUM | MT_TXD7_UDP_TCP_SUM; txwi[7] |= cpu_to_le32(val); } diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/init.c b/drivers/net/wireless/mediatek/mt76/mt7915/init.c index 5ea8b46e092e..a3bab240afb7 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/init.c +++ b/drivers/net/wireless/mediatek/mt76/mt7915/init.c @@ -359,7 +359,8 @@ mt7915_init_wiphy(struct mt7915_phy *phy) hw->queues = 4; hw->max_rx_aggregation_subframes = IEEE80211_MAX_AMPDU_BUF_HE; hw->max_tx_aggregation_subframes = IEEE80211_MAX_AMPDU_BUF_HE; - hw->netdev_features = NETIF_F_RXCSUM; + hw->netdev_features = NETIF_F_RXCSUM | + NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM; if (mtk_wed_device_active(&mdev->mmio.wed)) hw->netdev_features |= NETIF_F_HW_TC; diff --git a/drivers/net/wireless/mediatek/mt76/mt792x_core.c b/drivers/net/wireless/mediatek/mt76/mt792x_core.c index c0e56541a954..fe138d2e8e62 100644 --- a/drivers/net/wireless/mediatek/mt76/mt792x_core.c +++ b/drivers/net/wireless/mediatek/mt76/mt792x_core.c @@ -632,6 +632,9 @@ int mt792x_init_wiphy(struct ieee80211_hw *hw) } hw->netdev_features = NETIF_F_RXCSUM; + if (is_mt7921(&dev->mt76)) + NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM; + hw->radiotap_timestamp.units_pos = IEEE80211_RADIOTAP_TIMESTAMP_UNIT_US; -- 2.47.3