linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] wifi: mt76: add tx checksum offload for mt7915, mt7921, mt7981 and mt7986
@ 2025-10-19 15:51 Aleksander Jan Bajkowski
  2025-10-19 15:56 ` Christophe JAILLET
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Aleksander Jan Bajkowski @ 2025-10-19 15:51 UTC (permalink / raw)
  To: nbd, lorenzo, ryder.lee, shayne.chen, sean.wang, matthias.bgg,
	angelogioacchino.delregno, howard-yh.hsu, StanleyYP.Wang, rosenp,
	luoxueqin, chad, olek2, linux-wireless, linux-kernel,
	linux-arm-kernel, linux-mediatek

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 <nbd@nbd.name>
[rebased and resolved conflicts]
Signed-off-by: Aleksander Jan Bajkowski <olek2@wp.pl>
---
 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



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH] wifi: mt76: add tx checksum offload for mt7915, mt7921, mt7981 and mt7986
  2025-10-19 15:51 [PATCH] wifi: mt76: add tx checksum offload for mt7915, mt7921, mt7981 and mt7986 Aleksander Jan Bajkowski
@ 2025-10-19 15:56 ` Christophe JAILLET
  2025-10-19 16:26 ` Ben Greear
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 8+ messages in thread
From: Christophe JAILLET @ 2025-10-19 15:56 UTC (permalink / raw)
  To: Aleksander Jan Bajkowski, nbd, lorenzo, ryder.lee, shayne.chen,
	sean.wang, matthias.bgg, angelogioacchino.delregno, howard-yh.hsu,
	StanleyYP.Wang, rosenp, luoxueqin, chad, linux-wireless,
	linux-kernel, linux-arm-kernel, linux-mediatek

Le 19/10/2025 à 17:51, Aleksander Jan Bajkowski a écrit :
> 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 <nbd@nbd.name>
> [rebased and resolved conflicts]
> Signed-off-by: Aleksander Jan Bajkowski <olek2@wp.pl>
> ---
>   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;

This looks strange.

Maybe:
	netdev_features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
?

CJ

> +
>   	hw->radiotap_timestamp.units_pos =
>   		IEEE80211_RADIOTAP_TIMESTAMP_UNIT_US;
>   



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] wifi: mt76: add tx checksum offload for mt7915, mt7921, mt7981 and mt7986
  2025-10-19 15:51 [PATCH] wifi: mt76: add tx checksum offload for mt7915, mt7921, mt7981 and mt7986 Aleksander Jan Bajkowski
  2025-10-19 15:56 ` Christophe JAILLET
@ 2025-10-19 16:26 ` Ben Greear
  2025-10-19 16:43   ` Aleksander Jan Bajkowski
  2025-10-19 17:45 ` kernel test robot
  2025-10-20  4:43 ` kernel test robot
  3 siblings, 1 reply; 8+ messages in thread
From: Ben Greear @ 2025-10-19 16:26 UTC (permalink / raw)
  To: Aleksander Jan Bajkowski, nbd, lorenzo, ryder.lee, shayne.chen,
	sean.wang, matthias.bgg, angelogioacchino.delregno, howard-yh.hsu,
	StanleyYP.Wang, rosenp, luoxueqin, chad, linux-wireless,
	linux-kernel, linux-arm-kernel, linux-mediatek

On 10/19/25 08:51, Aleksander Jan Bajkowski wrote:
> 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.

At least with  7996, tcp csum only worked on the first few vdevs
created in our testing, so we had to add logic to disable that flag
on subsequent vdevs.

Have you tried creating a bunch of station and/or vap vdevs to see if
all of them can still transmit TCP traffic?

Thanks,
Ben


> 
> Signed-off-by: Felix Fietkau <nbd@nbd.name>
> [rebased and resolved conflicts]
> Signed-off-by: Aleksander Jan Bajkowski <olek2@wp.pl>
> ---
>   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;
>   

-- 
Ben Greear <greearb@candelatech.com>
Candela Technologies Inc  http://www.candelatech.com



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] wifi: mt76: add tx checksum offload for mt7915, mt7921, mt7981 and mt7986
  2025-10-19 16:26 ` Ben Greear
@ 2025-10-19 16:43   ` Aleksander Jan Bajkowski
  2025-10-19 18:18     ` Ben Greear
  0 siblings, 1 reply; 8+ messages in thread
From: Aleksander Jan Bajkowski @ 2025-10-19 16:43 UTC (permalink / raw)
  To: Ben Greear, nbd, lorenzo, ryder.lee, shayne.chen, sean.wang,
	matthias.bgg, angelogioacchino.delregno, howard-yh.hsu,
	StanleyYP.Wang, rosenp, luoxueqin, chad, linux-wireless,
	linux-kernel, linux-arm-kernel, linux-mediatek

Hi Ben,

On 10/19/25 18:26, Ben Greear wrote:
> On 10/19/25 08:51, Aleksander Jan Bajkowski wrote:
>> 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.
>
> At least with  7996, tcp csum only worked on the first few vdevs
> created in our testing, so we had to add logic to disable that flag
> on subsequent vdevs.
>
> Have you tried creating a bunch of station and/or vap vdevs to see if
> all of them can still transmit TCP traffic?
>
>
Thanks for the useful information. On all tested devices, I had a single
AP configured per device. I will try to create several APs for each device.

I also have a router with MT7996. A quick test shows that checksum
offload doesn't work on this router. MT7996 is visible in the system
as a single DBDC device. I have 3 APs configured there. Each on a
separate band (2.4/5/6 GHz).

Best regards,
Aleksander



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] wifi: mt76: add tx checksum offload for mt7915, mt7921, mt7981 and mt7986
  2025-10-19 15:51 [PATCH] wifi: mt76: add tx checksum offload for mt7915, mt7921, mt7981 and mt7986 Aleksander Jan Bajkowski
  2025-10-19 15:56 ` Christophe JAILLET
  2025-10-19 16:26 ` Ben Greear
@ 2025-10-19 17:45 ` kernel test robot
  2025-10-20  4:43 ` kernel test robot
  3 siblings, 0 replies; 8+ messages in thread
From: kernel test robot @ 2025-10-19 17:45 UTC (permalink / raw)
  To: Aleksander Jan Bajkowski, nbd, lorenzo, ryder.lee, shayne.chen,
	sean.wang, matthias.bgg, angelogioacchino.delregno, howard-yh.hsu,
	StanleyYP.Wang, rosenp, luoxueqin, chad, linux-wireless,
	linux-kernel, linux-arm-kernel, linux-mediatek
  Cc: oe-kbuild-all

Hi Aleksander,

kernel test robot noticed the following build warnings:

[auto build test WARNING on wireless-next/main]
[also build test WARNING on wireless/main linus/master v6.18-rc1 next-20251017]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Aleksander-Jan-Bajkowski/wifi-mt76-add-tx-checksum-offload-for-mt7915-mt7921-mt7981-and-mt7986/20251019-235515
base:   https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-next.git main
patch link:    https://lore.kernel.org/r/20251019155316.3537185-1-olek2%40wp.pl
patch subject: [PATCH] wifi: mt76: add tx checksum offload for mt7915, mt7921, mt7981 and mt7986
config: i386-buildonly-randconfig-003-20251019 (https://download.01.org/0day-ci/archive/20251020/202510200105.T000lujD-lkp@intel.com/config)
compiler: gcc-14 (Debian 14.2.0-19) 14.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20251020/202510200105.T000lujD-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202510200105.T000lujD-lkp@intel.com/

All warnings (new ones prefixed by >>):

   In file included from include/linux/skbuff.h:29,
                    from drivers/net/wireless/mediatek/mt76/mt76.h:12,
                    from drivers/net/wireless/mediatek/mt76/mt76_connac.h:7,
                    from drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h:7,
                    from drivers/net/wireless/mediatek/mt76/mt792x.h:10,
                    from drivers/net/wireless/mediatek/mt76/mt792x_core.c:7:
   drivers/net/wireless/mediatek/mt76/mt792x_core.c: In function 'mt792x_init_wiphy':
>> include/linux/netdev_features.h:104:33: warning: statement with no effect [-Wunused-value]
     104 | #define __NETIF_F_BIT(bit)      ((netdev_features_t)1 << (bit))
         |                                 ^
   include/linux/netdev_features.h:105:33: note: in expansion of macro '__NETIF_F_BIT'
     105 | #define __NETIF_F(name)         __NETIF_F_BIT(NETIF_F_##name##_BIT)
         |                                 ^~~~~~~~~~~~~
   include/linux/netdev_features.h:119:33: note: in expansion of macro '__NETIF_F'
     119 | #define NETIF_F_IP_CSUM         __NETIF_F(IP_CSUM)
         |                                 ^~~~~~~~~
   drivers/net/wireless/mediatek/mt76/mt792x_core.c:636:17: note: in expansion of macro 'NETIF_F_IP_CSUM'
     636 |                 NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
         |                 ^~~~~~~~~~~~~~~


vim +104 include/linux/netdev_features.h

a19f2a6df28e0c Michał Mirosław 2011-11-15  102  
a19f2a6df28e0c Michał Mirosław 2011-11-15  103  /* copy'n'paste compression ;) */
a19f2a6df28e0c Michał Mirosław 2011-11-15 @104  #define __NETIF_F_BIT(bit)	((netdev_features_t)1 << (bit))
a19f2a6df28e0c Michał Mirosław 2011-11-15  105  #define __NETIF_F(name)		__NETIF_F_BIT(NETIF_F_##name##_BIT)
a19f2a6df28e0c Michał Mirosław 2011-11-15  106  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] wifi: mt76: add tx checksum offload for mt7915, mt7921, mt7981 and mt7986
  2025-10-19 16:43   ` Aleksander Jan Bajkowski
@ 2025-10-19 18:18     ` Ben Greear
  2025-10-25 22:00       ` Aleksander Jan Bajkowski
  0 siblings, 1 reply; 8+ messages in thread
From: Ben Greear @ 2025-10-19 18:18 UTC (permalink / raw)
  To: Aleksander Jan Bajkowski, nbd, lorenzo, ryder.lee, shayne.chen,
	sean.wang, matthias.bgg, angelogioacchino.delregno, howard-yh.hsu,
	StanleyYP.Wang, rosenp, luoxueqin, chad, linux-wireless,
	linux-kernel, linux-arm-kernel, linux-mediatek

On 10/19/25 09:43, Aleksander Jan Bajkowski wrote:
> Hi Ben,
> 
> On 10/19/25 18:26, Ben Greear wrote:
>> On 10/19/25 08:51, Aleksander Jan Bajkowski wrote:
>>> 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.
>>
>> At least with  7996, tcp csum only worked on the first few vdevs
>> created in our testing, so we had to add logic to disable that flag
>> on subsequent vdevs.
>>
>> Have you tried creating a bunch of station and/or vap vdevs to see if
>> all of them can still transmit TCP traffic?
>>
>>
> Thanks for the useful information. On all tested devices, I had a single
> AP configured per device. I will try to create several APs for each device.

We can try it out as well.

> I also have a router with MT7996. A quick test shows that checksum
> offload doesn't work on this router. MT7996 is visible in the system
> as a single DBDC device. I have 3 APs configured there. Each on a
> separate band (2.4/5/6 GHz).
> 
> Best regards,
> Aleksander

We have it working on 7996, but the patch is tangled in some other changes we made
with how wcid and such are allocated.  We are still cleaning and testing patches
on top of Felix's tree, should have something to post sometime soon.

Thanks,
Ben

-- 
Ben Greear <greearb@candelatech.com>
Candela Technologies Inc  http://www.candelatech.com



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] wifi: mt76: add tx checksum offload for mt7915, mt7921, mt7981 and mt7986
  2025-10-19 15:51 [PATCH] wifi: mt76: add tx checksum offload for mt7915, mt7921, mt7981 and mt7986 Aleksander Jan Bajkowski
                   ` (2 preceding siblings ...)
  2025-10-19 17:45 ` kernel test robot
@ 2025-10-20  4:43 ` kernel test robot
  3 siblings, 0 replies; 8+ messages in thread
From: kernel test robot @ 2025-10-20  4:43 UTC (permalink / raw)
  To: Aleksander Jan Bajkowski, nbd, lorenzo, ryder.lee, shayne.chen,
	sean.wang, matthias.bgg, angelogioacchino.delregno, howard-yh.hsu,
	StanleyYP.Wang, rosenp, luoxueqin, chad, linux-wireless,
	linux-kernel, linux-arm-kernel, linux-mediatek
  Cc: oe-kbuild-all

Hi Aleksander,

kernel test robot noticed the following build warnings:

[auto build test WARNING on wireless-next/main]
[also build test WARNING on wireless/main linus/master v6.18-rc2 next-20251017]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Aleksander-Jan-Bajkowski/wifi-mt76-add-tx-checksum-offload-for-mt7915-mt7921-mt7981-and-mt7986/20251019-235515
base:   https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-next.git main
patch link:    https://lore.kernel.org/r/20251019155316.3537185-1-olek2%40wp.pl
patch subject: [PATCH] wifi: mt76: add tx checksum offload for mt7915, mt7921, mt7981 and mt7986
config: loongarch-allyesconfig (https://download.01.org/0day-ci/archive/20251020/202510201250.Hpsrohca-lkp@intel.com/config)
compiler: clang version 22.0.0git (https://github.com/llvm/llvm-project 754ebc6ebb9fb9fbee7aef33478c74ea74949853)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20251020/202510201250.Hpsrohca-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202510201250.Hpsrohca-lkp@intel.com/

All warnings (new ones prefixed by >>):

>> drivers/net/wireless/mediatek/mt76/mt792x_core.c:636:19: warning: expression result unused [-Wunused-value]
     636 |                 NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
         |                 ~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~
   1 warning generated.


vim +636 drivers/net/wireless/mediatek/mt76/mt792x_core.c

   618	
   619	int mt792x_init_wiphy(struct ieee80211_hw *hw)
   620	{
   621		struct mt792x_phy *phy = mt792x_hw_phy(hw);
   622		struct mt792x_dev *dev = phy->dev;
   623		struct wiphy *wiphy = hw->wiphy;
   624	
   625		hw->queues = 4;
   626		if (dev->has_eht) {
   627			hw->max_rx_aggregation_subframes = IEEE80211_MAX_AMPDU_BUF_EHT;
   628			hw->max_tx_aggregation_subframes = IEEE80211_MAX_AMPDU_BUF_EHT;
   629		} else {
   630			hw->max_rx_aggregation_subframes = IEEE80211_MAX_AMPDU_BUF_HE;
   631			hw->max_tx_aggregation_subframes = IEEE80211_MAX_AMPDU_BUF_HE;
   632		}
   633		hw->netdev_features = NETIF_F_RXCSUM;
   634	
   635		if (is_mt7921(&dev->mt76))
 > 636			NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
   637	
   638		hw->radiotap_timestamp.units_pos =
   639			IEEE80211_RADIOTAP_TIMESTAMP_UNIT_US;
   640	
   641		phy->slottime = 9;
   642	
   643		hw->sta_data_size = sizeof(struct mt792x_sta);
   644		hw->vif_data_size = sizeof(struct mt792x_vif);
   645		hw->chanctx_data_size = sizeof(struct mt792x_chanctx);
   646	
   647		if (dev->fw_features & MT792x_FW_CAP_CNM) {
   648			wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
   649			wiphy->iface_combinations = if_comb_chanctx;
   650			wiphy->n_iface_combinations = ARRAY_SIZE(if_comb_chanctx);
   651		} else {
   652			wiphy->flags &= ~WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
   653			wiphy->iface_combinations = if_comb;
   654			wiphy->n_iface_combinations = ARRAY_SIZE(if_comb);
   655		}
   656		wiphy->flags &= ~(WIPHY_FLAG_IBSS_RSN | WIPHY_FLAG_4ADDR_AP |
   657				  WIPHY_FLAG_4ADDR_STATION);
   658		wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
   659					 BIT(NL80211_IFTYPE_AP) |
   660					 BIT(NL80211_IFTYPE_P2P_CLIENT) |
   661					 BIT(NL80211_IFTYPE_P2P_GO) |
   662					 BIT(NL80211_IFTYPE_P2P_DEVICE);
   663		wiphy->max_remain_on_channel_duration = 5000;
   664		wiphy->max_scan_ie_len = MT76_CONNAC_SCAN_IE_LEN;
   665		wiphy->max_scan_ssids = 4;
   666		wiphy->max_sched_scan_plan_interval =
   667			MT76_CONNAC_MAX_TIME_SCHED_SCAN_INTERVAL;
   668		wiphy->max_sched_scan_ie_len = IEEE80211_MAX_DATA_LEN;
   669		wiphy->max_sched_scan_ssids = MT76_CONNAC_MAX_SCHED_SCAN_SSID;
   670		wiphy->max_match_sets = MT76_CONNAC_MAX_SCAN_MATCH;
   671		wiphy->max_sched_scan_reqs = 1;
   672		wiphy->flags |= WIPHY_FLAG_HAS_CHANNEL_SWITCH |
   673				WIPHY_FLAG_SPLIT_SCAN_6GHZ;
   674	
   675		wiphy->features |= NL80211_FEATURE_SCHED_SCAN_RANDOM_MAC_ADDR |
   676				   NL80211_FEATURE_SCAN_RANDOM_MAC_ADDR;
   677		wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_SET_SCAN_DWELL);
   678		wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_BEACON_RATE_LEGACY);
   679		wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_BEACON_RATE_HT);
   680		wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_BEACON_RATE_VHT);
   681		wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_BEACON_RATE_HE);
   682		wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_ACK_SIGNAL_SUPPORT);
   683		wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_CAN_REPLACE_PTK0);
   684	
   685		ieee80211_hw_set(hw, SINGLE_SCAN_ON_ALL_BANDS);
   686		ieee80211_hw_set(hw, HAS_RATE_CONTROL);
   687		ieee80211_hw_set(hw, SUPPORTS_TX_ENCAP_OFFLOAD);
   688		ieee80211_hw_set(hw, SUPPORTS_RX_DECAP_OFFLOAD);
   689		ieee80211_hw_set(hw, WANT_MONITOR_VIF);
   690		ieee80211_hw_set(hw, SUPPORTS_PS);
   691		ieee80211_hw_set(hw, SUPPORTS_DYNAMIC_PS);
   692		ieee80211_hw_set(hw, SUPPORTS_VHT_EXT_NSS_BW);
   693		ieee80211_hw_set(hw, CONNECTION_MONITOR);
   694		ieee80211_hw_set(hw, NO_VIRTUAL_MONITOR);
   695		ieee80211_hw_set(hw, SUPPORTS_MULTI_BSSID);
   696		ieee80211_hw_set(hw, SUPPORTS_ONLY_HE_MULTI_BSSID);
   697	
   698		if (is_mt7921(&dev->mt76)) {
   699			ieee80211_hw_set(hw, CHANCTX_STA_CSA);
   700		}
   701	
   702		if (dev->pm.enable)
   703			ieee80211_hw_set(hw, CONNECTION_MONITOR);
   704	
   705		hw->max_tx_fragments = 4;
   706	
   707		return 0;
   708	}
   709	EXPORT_SYMBOL_GPL(mt792x_init_wiphy);
   710	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] wifi: mt76: add tx checksum offload for mt7915, mt7921, mt7981 and mt7986
  2025-10-19 18:18     ` Ben Greear
@ 2025-10-25 22:00       ` Aleksander Jan Bajkowski
  0 siblings, 0 replies; 8+ messages in thread
From: Aleksander Jan Bajkowski @ 2025-10-25 22:00 UTC (permalink / raw)
  To: Ben Greear, nbd, lorenzo, ryder.lee, shayne.chen, sean.wang,
	matthias.bgg, angelogioacchino.delregno, howard-yh.hsu,
	StanleyYP.Wang, rosenp, luoxueqin, chad, linux-wireless,
	linux-kernel, linux-arm-kernel, linux-mediatek


On 10/19/25 20:18, Ben Greear wrote:
> On 10/19/25 09:43, Aleksander Jan Bajkowski wrote:
>> Hi Ben,
>>
>> On 10/19/25 18:26, Ben Greear wrote:
>>> On 10/19/25 08:51, Aleksander Jan Bajkowski wrote:
>>>> 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.
>>>
>>> At least with  7996, tcp csum only worked on the first few vdevs
>>> created in our testing, so we had to add logic to disable that flag
>>> on subsequent vdevs.
>>>
>>> Have you tried creating a bunch of station and/or vap vdevs to see if
>>> all of them can still transmit TCP traffic?
>>>
>>>
>> Thanks for the useful information. On all tested devices, I had a single
>> AP configured per device. I will try to create several APs for each 
>> device.
>
> We can try it out as well.


I've tested multiple VAPs (15x AP + 1x station). It seems that everything
works fine on MT7915, MT7981, and MT7986. By connecting to the first
and last AP, tx checksum offload works correctly. MT7921 only supports
a single VAP, so I skipped testing it.

>
>> I also have a router with MT7996. A quick test shows that checksum
>> offload doesn't work on this router. MT7996 is visible in the system
>> as a single DBDC device. I have 3 APs configured there. Each on a
>> separate band (2.4/5/6 GHz).
>>
>> Best regards,
>> Aleksander
>
> We have it working on 7996, but the patch is tangled in some other 
> changes we made
> with how wcid and such are allocated.  We are still cleaning and 
> testing patches
> on top of Felix's tree, should have something to post sometime soon.
>

Maybe only the MT7996 is affected?


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2025-10-25 22:01 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-10-19 15:51 [PATCH] wifi: mt76: add tx checksum offload for mt7915, mt7921, mt7981 and mt7986 Aleksander Jan Bajkowski
2025-10-19 15:56 ` Christophe JAILLET
2025-10-19 16:26 ` Ben Greear
2025-10-19 16:43   ` Aleksander Jan Bajkowski
2025-10-19 18:18     ` Ben Greear
2025-10-25 22:00       ` Aleksander Jan Bajkowski
2025-10-19 17:45 ` kernel test robot
2025-10-20  4:43 ` kernel test robot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).