[Refactor and sync wifi from Openwrt]

[Description]
Refactor and sync wifi from Openwrt

[Release-log]
N/A

diff --git a/recipes-connectivity/hostapd/files/patches/913-master-add-support-for-runtime-set-in-band-discover.patch b/recipes-connectivity/hostapd/files/patches/913-master-add-support-for-runtime-set-in-band-discover.patch
index d217f5d..dcbe915 100644
--- a/recipes-connectivity/hostapd/files/patches/913-master-add-support-for-runtime-set-in-band-discover.patch
+++ b/recipes-connectivity/hostapd/files/patches/913-master-add-support-for-runtime-set-in-band-discover.patch
@@ -1,4 +1,4 @@
-From 31ec868f23a1bae48fceab6f2fb5f8b1a3a909a1 Mon Sep 17 00:00:00 2001
+From 76d110deecc1705295b3154ce91d046fb6115c66 Mon Sep 17 00:00:00 2001
 From: MeiChia Chiu <meichia.chiu@mediatek.com>
 Date: Tue, 31 May 2022 21:15:54 +0800
 Subject: [PATCH] hostapd: add support for runtime set in-band discovery
@@ -15,12 +15,12 @@
  hostapd/ctrl_iface.c         | 66 ++++++++++++++++++++++++++++++++++++
  hostapd/hostapd_cli.c        | 20 +++++++++++
  src/ap/beacon.c              |  5 ++-
- src/drivers/driver_nl80211.c |  8 +++--
+ src/drivers/driver_nl80211.c | 10 ++++--
  src/drivers/nl80211_copy.h   |  1 +
- 5 files changed, 96 insertions(+), 4 deletions(-)
+ 5 files changed, 98 insertions(+), 4 deletions(-)
 
 diff --git a/hostapd/ctrl_iface.c b/hostapd/ctrl_iface.c
-index 86adf18e5..ce04cd641 100644
+index 664c59df7..e6a2d4203 100644
 --- a/hostapd/ctrl_iface.c
 +++ b/hostapd/ctrl_iface.c
 @@ -769,6 +769,69 @@ static int hostapd_ctrl_iface_send_qos_map_conf(struct hostapd_data *hapd,
@@ -93,7 +93,7 @@
  
  #ifdef CONFIG_WNM_AP
  
-@@ -3673,6 +3736,9 @@ static int hostapd_ctrl_iface_receive_process(struct hostapd_data *hapd,
+@@ -3336,6 +3399,9 @@ static int hostapd_ctrl_iface_receive_process(struct hostapd_data *hapd,
  		if (hostapd_ctrl_iface_coloc_intf_req(hapd, buf + 15))
  			reply_len = -1;
  #endif /* CONFIG_WNM_AP */
@@ -104,7 +104,7 @@
  		reply_len = hostapd_ctrl_iface_get_config(hapd, reply,
  							  reply_size);
 diff --git a/hostapd/hostapd_cli.c b/hostapd/hostapd_cli.c
-index 260912111..e30c4e7c1 100644
+index 60396f3da..4c4c82c9a 100644
 --- a/hostapd/hostapd_cli.c
 +++ b/hostapd/hostapd_cli.c
 @@ -646,6 +646,24 @@ static int hostapd_cli_cmd_wps_config(struct wpa_ctrl *ctrl, int argc,
@@ -142,10 +142,10 @@
  };
  
 diff --git a/src/ap/beacon.c b/src/ap/beacon.c
-index a96155ada..68e847956 100644
+index 58872bfda..c8db86c6e 100644
 --- a/src/ap/beacon.c
 +++ b/src/ap/beacon.c
-@@ -1408,6 +1408,8 @@ static u8 * hostapd_fils_discovery(struct hostapd_data *hapd,
+@@ -1483,6 +1483,8 @@ static u8 * hostapd_fils_discovery(struct hostapd_data *hapd,
  				   struct wpa_driver_ap_params *params)
  {
  	params->fd_max_int = hapd->conf->fils_discovery_max_int;
@@ -154,21 +154,21 @@
  	if (is_6ghz_op_class(hapd->iconf->op_class) &&
  	    params->fd_max_int > FD_MAX_INTERVAL_6GHZ)
  		params->fd_max_int = FD_MAX_INTERVAL_6GHZ;
-@@ -1416,7 +1418,8 @@ static u8 * hostapd_fils_discovery(struct hostapd_data *hapd,
+@@ -1491,7 +1493,8 @@ static u8 * hostapd_fils_discovery(struct hostapd_data *hapd,
  	if (params->fd_min_int > params->fd_max_int)
  		params->fd_min_int = params->fd_max_int;
  
 -	if (params->fd_max_int)
-+	if (params->fd_max_int ||
-+	    !params->unsol_bcast_probe_resp_interval)
++	if (params->fd_max_int || (is_6ghz_op_class(hapd->iconf->op_class) &&
++	    !params->unsol_bcast_probe_resp_interval))
  		return hostapd_gen_fils_discovery(hapd,
  						  &params->fd_frame_tmpl_len);
  
 diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
-index aec179ac3..6113aff0b 100644
+index 0127a6be2..ee763990f 100644
 --- a/src/drivers/driver_nl80211.c
 +++ b/src/drivers/driver_nl80211.c
-@@ -4491,9 +4491,10 @@ static int nl80211_fils_discovery(struct i802_bss *bss, struct nl_msg *msg,
+@@ -4493,9 +4493,10 @@ static int nl80211_fils_discovery(struct i802_bss *bss, struct nl_msg *msg,
  			params->fd_max_int) ||
  	    (params->fd_frame_tmpl &&
  	     nla_put(msg, NL80211_FILS_DISCOVERY_ATTR_TMPL,
@@ -181,21 +181,23 @@
  	nla_nest_end(msg, attr);
  	return 0;
  }
-@@ -4823,7 +4824,8 @@ static int wpa_driver_nl80211_set_ap(void *priv,
+@@ -4839,7 +4840,10 @@ static int wpa_driver_nl80211_set_ap(void *priv,
  #endif /* CONFIG_SAE */
  
  #ifdef CONFIG_FILS
 -	if (params->fd_max_int && nl80211_fils_discovery(bss, msg, params) < 0)
-+	if ((params->fd_max_int || !(params->unsol_bcast_probe_resp_interval)) &&
++	if ((params->fd_max_int ||
++	    ((params->freq->freq > 5950 && params->freq->freq <= 7115) &&
++	      !(params->unsol_bcast_probe_resp_interval))) &&
 +	     nl80211_fils_discovery(bss, msg, params) < 0)
  		goto fail;
  #endif /* CONFIG_FILS */
  
 diff --git a/src/drivers/nl80211_copy.h b/src/drivers/nl80211_copy.h
-index f962c06e9..6fb7b7fcf 100644
+index 0568a7909..c4bf3ad35 100644
 --- a/src/drivers/nl80211_copy.h
 +++ b/src/drivers/nl80211_copy.h
-@@ -7150,6 +7150,7 @@ enum nl80211_fils_discovery_attributes {
+@@ -7379,6 +7379,7 @@ enum nl80211_fils_discovery_attributes {
  	NL80211_FILS_DISCOVERY_ATTR_INT_MIN,
  	NL80211_FILS_DISCOVERY_ATTR_INT_MAX,
  	NL80211_FILS_DISCOVERY_ATTR_TMPL,
@@ -204,5 +206,5 @@
  	/* keep last */
  	__NL80211_FILS_DISCOVERY_ATTR_LAST,
 -- 
-2.29.2
+2.36.1
 
diff --git a/recipes-connectivity/wpa-supplicant/files/patches/913-master-add-support-for-runtime-set-in-band-discover.patch b/recipes-connectivity/wpa-supplicant/files/patches/913-master-add-support-for-runtime-set-in-band-discover.patch
index d217f5d..dcbe915 100644
--- a/recipes-connectivity/wpa-supplicant/files/patches/913-master-add-support-for-runtime-set-in-band-discover.patch
+++ b/recipes-connectivity/wpa-supplicant/files/patches/913-master-add-support-for-runtime-set-in-band-discover.patch
@@ -1,4 +1,4 @@
-From 31ec868f23a1bae48fceab6f2fb5f8b1a3a909a1 Mon Sep 17 00:00:00 2001
+From 76d110deecc1705295b3154ce91d046fb6115c66 Mon Sep 17 00:00:00 2001
 From: MeiChia Chiu <meichia.chiu@mediatek.com>
 Date: Tue, 31 May 2022 21:15:54 +0800
 Subject: [PATCH] hostapd: add support for runtime set in-band discovery
@@ -15,12 +15,12 @@
  hostapd/ctrl_iface.c         | 66 ++++++++++++++++++++++++++++++++++++
  hostapd/hostapd_cli.c        | 20 +++++++++++
  src/ap/beacon.c              |  5 ++-
- src/drivers/driver_nl80211.c |  8 +++--
+ src/drivers/driver_nl80211.c | 10 ++++--
  src/drivers/nl80211_copy.h   |  1 +
- 5 files changed, 96 insertions(+), 4 deletions(-)
+ 5 files changed, 98 insertions(+), 4 deletions(-)
 
 diff --git a/hostapd/ctrl_iface.c b/hostapd/ctrl_iface.c
-index 86adf18e5..ce04cd641 100644
+index 664c59df7..e6a2d4203 100644
 --- a/hostapd/ctrl_iface.c
 +++ b/hostapd/ctrl_iface.c
 @@ -769,6 +769,69 @@ static int hostapd_ctrl_iface_send_qos_map_conf(struct hostapd_data *hapd,
@@ -93,7 +93,7 @@
  
  #ifdef CONFIG_WNM_AP
  
-@@ -3673,6 +3736,9 @@ static int hostapd_ctrl_iface_receive_process(struct hostapd_data *hapd,
+@@ -3336,6 +3399,9 @@ static int hostapd_ctrl_iface_receive_process(struct hostapd_data *hapd,
  		if (hostapd_ctrl_iface_coloc_intf_req(hapd, buf + 15))
  			reply_len = -1;
  #endif /* CONFIG_WNM_AP */
@@ -104,7 +104,7 @@
  		reply_len = hostapd_ctrl_iface_get_config(hapd, reply,
  							  reply_size);
 diff --git a/hostapd/hostapd_cli.c b/hostapd/hostapd_cli.c
-index 260912111..e30c4e7c1 100644
+index 60396f3da..4c4c82c9a 100644
 --- a/hostapd/hostapd_cli.c
 +++ b/hostapd/hostapd_cli.c
 @@ -646,6 +646,24 @@ static int hostapd_cli_cmd_wps_config(struct wpa_ctrl *ctrl, int argc,
@@ -142,10 +142,10 @@
  };
  
 diff --git a/src/ap/beacon.c b/src/ap/beacon.c
-index a96155ada..68e847956 100644
+index 58872bfda..c8db86c6e 100644
 --- a/src/ap/beacon.c
 +++ b/src/ap/beacon.c
-@@ -1408,6 +1408,8 @@ static u8 * hostapd_fils_discovery(struct hostapd_data *hapd,
+@@ -1483,6 +1483,8 @@ static u8 * hostapd_fils_discovery(struct hostapd_data *hapd,
  				   struct wpa_driver_ap_params *params)
  {
  	params->fd_max_int = hapd->conf->fils_discovery_max_int;
@@ -154,21 +154,21 @@
  	if (is_6ghz_op_class(hapd->iconf->op_class) &&
  	    params->fd_max_int > FD_MAX_INTERVAL_6GHZ)
  		params->fd_max_int = FD_MAX_INTERVAL_6GHZ;
-@@ -1416,7 +1418,8 @@ static u8 * hostapd_fils_discovery(struct hostapd_data *hapd,
+@@ -1491,7 +1493,8 @@ static u8 * hostapd_fils_discovery(struct hostapd_data *hapd,
  	if (params->fd_min_int > params->fd_max_int)
  		params->fd_min_int = params->fd_max_int;
  
 -	if (params->fd_max_int)
-+	if (params->fd_max_int ||
-+	    !params->unsol_bcast_probe_resp_interval)
++	if (params->fd_max_int || (is_6ghz_op_class(hapd->iconf->op_class) &&
++	    !params->unsol_bcast_probe_resp_interval))
  		return hostapd_gen_fils_discovery(hapd,
  						  &params->fd_frame_tmpl_len);
  
 diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
-index aec179ac3..6113aff0b 100644
+index 0127a6be2..ee763990f 100644
 --- a/src/drivers/driver_nl80211.c
 +++ b/src/drivers/driver_nl80211.c
-@@ -4491,9 +4491,10 @@ static int nl80211_fils_discovery(struct i802_bss *bss, struct nl_msg *msg,
+@@ -4493,9 +4493,10 @@ static int nl80211_fils_discovery(struct i802_bss *bss, struct nl_msg *msg,
  			params->fd_max_int) ||
  	    (params->fd_frame_tmpl &&
  	     nla_put(msg, NL80211_FILS_DISCOVERY_ATTR_TMPL,
@@ -181,21 +181,23 @@
  	nla_nest_end(msg, attr);
  	return 0;
  }
-@@ -4823,7 +4824,8 @@ static int wpa_driver_nl80211_set_ap(void *priv,
+@@ -4839,7 +4840,10 @@ static int wpa_driver_nl80211_set_ap(void *priv,
  #endif /* CONFIG_SAE */
  
  #ifdef CONFIG_FILS
 -	if (params->fd_max_int && nl80211_fils_discovery(bss, msg, params) < 0)
-+	if ((params->fd_max_int || !(params->unsol_bcast_probe_resp_interval)) &&
++	if ((params->fd_max_int ||
++	    ((params->freq->freq > 5950 && params->freq->freq <= 7115) &&
++	      !(params->unsol_bcast_probe_resp_interval))) &&
 +	     nl80211_fils_discovery(bss, msg, params) < 0)
  		goto fail;
  #endif /* CONFIG_FILS */
  
 diff --git a/src/drivers/nl80211_copy.h b/src/drivers/nl80211_copy.h
-index f962c06e9..6fb7b7fcf 100644
+index 0568a7909..c4bf3ad35 100644
 --- a/src/drivers/nl80211_copy.h
 +++ b/src/drivers/nl80211_copy.h
-@@ -7150,6 +7150,7 @@ enum nl80211_fils_discovery_attributes {
+@@ -7379,6 +7379,7 @@ enum nl80211_fils_discovery_attributes {
  	NL80211_FILS_DISCOVERY_ATTR_INT_MIN,
  	NL80211_FILS_DISCOVERY_ATTR_INT_MAX,
  	NL80211_FILS_DISCOVERY_ATTR_TMPL,
@@ -204,5 +206,5 @@
  	/* keep last */
  	__NL80211_FILS_DISCOVERY_ATTR_LAST,
 -- 
-2.29.2
+2.36.1
 
diff --git a/recipes-kernel/linux-mt76/files/patches/0001-mt76-mt7915-rework-testmode-init-registers.patch b/recipes-kernel/linux-mt76/files/patches/0001-mt76-mt7915-rework-testmode-init-registers.patch
index abdd03f..d069a4a 100644
--- a/recipes-kernel/linux-mt76/files/patches/0001-mt76-mt7915-rework-testmode-init-registers.patch
+++ b/recipes-kernel/linux-mt76/files/patches/0001-mt76-mt7915-rework-testmode-init-registers.patch
@@ -1,7 +1,7 @@
-From 31be26088119f67efdc8dcb79c64765abb10d356 Mon Sep 17 00:00:00 2001
+From 2692efbe9806361dd71197bdbe3f30ccfcffdb70 Mon Sep 17 00:00:00 2001
 From: Shayne Chen <shayne.chen@mediatek.com>
 Date: Mon, 6 Jun 2022 19:46:26 +0800
-Subject: [PATCH 1/7] mt76: mt7915: rework testmode init registers
+Subject: [PATCH 01/12] mt76: mt7915: rework testmode init registers
 
 ---
  mt7915/mmio.c     |  2 ++
@@ -10,7 +10,7 @@
  3 files changed, 54 insertions(+), 16 deletions(-)
 
 diff --git a/mt7915/mmio.c b/mt7915/mmio.c
-index 46ee8a7d..71945ba9 100644
+index c2646d2..a8e3810 100644
 --- a/mt7915/mmio.c
 +++ b/mt7915/mmio.c
 @@ -59,6 +59,7 @@ static const u32 mt7986_reg[] = {
@@ -30,7 +30,7 @@
  	[TMAC_ODTR]		= 0x0cc,
  	[TMAC_ATCR]		= 0x00c,
 diff --git a/mt7915/regs.h b/mt7915/regs.h
-index 77fd448b..c7c9e411 100644
+index 77fd448..c7c9e41 100644
 --- a/mt7915/regs.h
 +++ b/mt7915/regs.h
 @@ -36,6 +36,7 @@ enum reg_rev {
@@ -78,7 +78,7 @@
  #define MT_AGG_ACR0(_band)		MT_WF_AGG(_band, __OFFS(AGG_ACR0))
  #define MT_AGG_ACR_CFEND_RATE		GENMASK(13, 0)
 diff --git a/mt7915/testmode.c b/mt7915/testmode.c
-index 20f63644..8d7ec9e8 100644
+index 0f5c1e5..20c593d 100644
 --- a/mt7915/testmode.c
 +++ b/mt7915/testmode.c
 @@ -30,7 +30,7 @@ struct reg_band {
@@ -90,7 +90,7 @@
  static struct reg_band reg_backup_list[TM_REG_MAX_ID];
  
  
-@@ -334,7 +334,7 @@ mt7915_tm_reg_backup_restore(struct mt7915_phy *phy)
+@@ -335,7 +335,7 @@ mt7915_tm_reg_backup_restore(struct mt7915_phy *phy)
  {
  	int n_regs = ARRAY_SIZE(reg_backup_list);
  	struct mt7915_dev *dev = phy->dev;
@@ -99,7 +99,7 @@
  	int i;
  
  	REG_BAND_IDX(reg_backup_list[0], AGG_PCR0, 0);
-@@ -346,18 +346,28 @@ mt7915_tm_reg_backup_restore(struct mt7915_phy *phy)
+@@ -347,18 +347,28 @@ mt7915_tm_reg_backup_restore(struct mt7915_phy *phy)
  	REG_BAND(reg_backup_list[6], AGG_MRCR);
  	REG_BAND(reg_backup_list[7], TMAC_TFCR0);
  	REG_BAND(reg_backup_list[8], TMAC_TCR0);
@@ -138,7 +138,7 @@
  		return;
  	}
  
-@@ -377,8 +387,13 @@ mt7915_tm_reg_backup_restore(struct mt7915_phy *phy)
+@@ -378,8 +388,13 @@ mt7915_tm_reg_backup_restore(struct mt7915_phy *phy)
  		   MT_AGG_PCR0_BW40_PROT | MT_AGG_PCR0_BW80_PROT);
  	mt76_set(dev, MT_AGG_PCR0(phy->band_idx, 0), MT_AGG_PCR0_PTA_WIN_DIS);
  
@@ -154,7 +154,7 @@
  
  	mt76_clear(dev, MT_AGG_MRCR(phy->band_idx), MT_AGG_MRCR_BAR_CNT_LIMIT |
  		   MT_AGG_MRCR_LAST_RTS_CTS_RN | MT_AGG_MRCR_RTS_FAIL_LIMIT |
-@@ -391,10 +406,19 @@ mt7915_tm_reg_backup_restore(struct mt7915_phy *phy)
+@@ -392,10 +407,19 @@ mt7915_tm_reg_backup_restore(struct mt7915_phy *phy)
  
  	mt76_wr(dev, MT_TMAC_TFCR0(phy->band_idx), 0);
  	mt76_clear(dev, MT_TMAC_TCR0(phy->band_idx), MT_TMAC_TCR0_TBTT_STOP_CTRL);
diff --git a/recipes-kernel/linux-mt76/files/patches/0002-mt76-testmode-rework-tx-antenna-setting.patch b/recipes-kernel/linux-mt76/files/patches/0002-mt76-testmode-rework-tx-antenna-setting.patch
index 61256ba..5ec911f 100644
--- a/recipes-kernel/linux-mt76/files/patches/0002-mt76-testmode-rework-tx-antenna-setting.patch
+++ b/recipes-kernel/linux-mt76/files/patches/0002-mt76-testmode-rework-tx-antenna-setting.patch
@@ -1,7 +1,7 @@
-From ce19a95831eeb721ce52bb913ac52bd5a0d88bab Mon Sep 17 00:00:00 2001
+From e9dd6f5f862331f44f81d95a786f04bbea6f08f2 Mon Sep 17 00:00:00 2001
 From: Shayne Chen <shayne.chen@mediatek.com>
 Date: Fri, 25 Feb 2022 09:36:01 +0800
-Subject: [PATCH 2/7] mt76: testmode: rework tx antenna setting
+Subject: [PATCH 02/12] mt76: testmode: rework tx antenna setting
 
 ---
  mt7915/mcu.c      | 7 +------
@@ -10,10 +10,10 @@
  3 files changed, 4 insertions(+), 16 deletions(-)
 
 diff --git a/mt7915/mcu.c b/mt7915/mcu.c
-index 2a88c14b..bdef2b37 100644
+index 552352d..f513005 100644
 --- a/mt7915/mcu.c
 +++ b/mt7915/mcu.c
-@@ -2933,14 +2933,9 @@ int mt7915_mcu_set_chan_info(struct mt7915_phy *phy, int cmd)
+@@ -2637,14 +2637,9 @@ int mt7915_mcu_set_chan_info(struct mt7915_phy *phy, int cmd)
  
  #ifdef CONFIG_NL80211_TESTMODE
  	if (phy->mt76->test.tx_antenna_mask &&
@@ -30,10 +30,10 @@
  #endif
  
 diff --git a/mt7915/testmode.c b/mt7915/testmode.c
-index 8d7ec9e8..d6f71436 100644
+index 20c593d..b8c1da1 100644
 --- a/mt7915/testmode.c
 +++ b/mt7915/testmode.c
-@@ -473,11 +473,7 @@ mt7915_tm_set_tx_frames(struct mt7915_phy *phy, bool en)
+@@ -474,11 +474,7 @@ mt7915_tm_set_tx_frames(struct mt7915_phy *phy, bool en)
  		if (td->tx_spe_idx) {
  			phy->test.spe_idx = td->tx_spe_idx;
  		} else {
@@ -46,7 +46,7 @@
  		}
  	}
  
-@@ -728,9 +724,6 @@ mt7915_tm_set_params(struct mt76_phy *mphy, struct nlattr **tb,
+@@ -729,9 +725,6 @@ mt7915_tm_set_params(struct mt76_phy *mphy, struct nlattr **tb,
  	    td->state == MT76_TM_STATE_OFF)
  		return 0;
  
@@ -57,7 +57,7 @@
  		if (tb[tm_change_map[i]])
  			changed |= BIT(i);
 diff --git a/testmode.c b/testmode.c
-index 382b4563..7cd00794 100644
+index 382b456..7cd0079 100644
 --- a/testmode.c
 +++ b/testmode.c
 @@ -446,8 +446,8 @@ int mt76_testmode_cmd(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
diff --git a/recipes-kernel/linux-mt76/files/patches/0003-mt76-mt7915-rework-rx-testmode-stats.patch b/recipes-kernel/linux-mt76/files/patches/0003-mt76-mt7915-rework-rx-testmode-stats.patch
index fd20055..4a210f3 100644
--- a/recipes-kernel/linux-mt76/files/patches/0003-mt76-mt7915-rework-rx-testmode-stats.patch
+++ b/recipes-kernel/linux-mt76/files/patches/0003-mt76-mt7915-rework-rx-testmode-stats.patch
@@ -1,7 +1,7 @@
-From ab8812a820a8b001d5abeb4d73b46db8e6453451 Mon Sep 17 00:00:00 2001
+From 605c1bcc3fbf898506ddb96d98bf3d97db8e5d89 Mon Sep 17 00:00:00 2001
 From: Shayne Chen <shayne.chen@mediatek.com>
 Date: Mon, 3 Jan 2022 17:09:53 +0800
-Subject: [PATCH 3/7] mt76: mt7915: rework rx testmode stats
+Subject: [PATCH 03/12] mt76: mt7915: rework rx testmode stats
 
 ---
  mac80211.c        |  3 +-
@@ -15,10 +15,10 @@
  8 files changed, 109 insertions(+), 17 deletions(-)
 
 diff --git a/mac80211.c b/mac80211.c
-index 5515e169..8c90db87 100644
+index 57e9156..5782244 100644
 --- a/mac80211.c
 +++ b/mac80211.c
-@@ -745,7 +745,8 @@ void mt76_rx(struct mt76_dev *dev, enum mt76_rxq_id q, struct sk_buff *skb)
+@@ -747,7 +747,8 @@ void mt76_rx(struct mt76_dev *dev, enum mt76_rxq_id q, struct sk_buff *skb)
  	}
  
  #ifdef CONFIG_NL80211_TESTMODE
@@ -29,7 +29,7 @@
  		if (status->flag & RX_FLAG_FAILED_FCS_CRC)
  			phy->test.rx_stats.fcs_error[q]++;
 diff --git a/mt76.h b/mt76.h
-index 4e8997c4..28720ee4 100644
+index 4e8997c..28720ee 100644
 --- a/mt76.h
 +++ b/mt76.h
 @@ -604,6 +604,8 @@ struct mt76_testmode_ops {
@@ -59,10 +59,10 @@
  };
  
 diff --git a/mt76_connac_mcu.h b/mt76_connac_mcu.h
-index 561fb036..aa14d2d4 100644
+index f1d7c05..e94d670 100644
 --- a/mt76_connac_mcu.h
 +++ b/mt76_connac_mcu.h
-@@ -979,6 +979,7 @@ enum {
+@@ -1130,6 +1130,7 @@ enum {
  	MCU_EXT_CMD_OFFCH_SCAN_CTRL = 0x9a,
  	MCU_EXT_CMD_SET_RDD_TH = 0x9d,
  	MCU_EXT_CMD_MURU_CTRL = 0x9f,
@@ -71,10 +71,10 @@
  	MCU_EXT_CMD_GROUP_PRE_CAL_INFO = 0xab,
  	MCU_EXT_CMD_DPD_PRE_CAL_INFO = 0xac,
 diff --git a/mt7915/mcu.h b/mt7915/mcu.h
-index 5abde482..21aa9633 100644
+index da4ee0a..bd9c6dc 100644
 --- a/mt7915/mcu.h
 +++ b/mt7915/mcu.h
-@@ -28,6 +28,7 @@ struct mt7915_mcu_txd {
+@@ -9,6 +9,7 @@
  enum {
  	MCU_ATE_SET_TRX = 0x1,
  	MCU_ATE_SET_FREQ_OFFSET = 0xa,
@@ -83,7 +83,7 @@
  	MCU_ATE_CLEAN_TXQUEUE = 0x1c,
  };
 diff --git a/mt7915/testmode.c b/mt7915/testmode.c
-index d6f71436..e8bf616c 100644
+index b8c1da1..123ceaf 100644
 --- a/mt7915/testmode.c
 +++ b/mt7915/testmode.c
 @@ -133,6 +133,21 @@ mt7915_tm_clean_hwq(struct mt7915_phy *phy, u8 wcid)
@@ -108,7 +108,7 @@
  static int
  mt7915_tm_set_slot_time(struct mt7915_phy *phy, u8 slot_time, u8 sifs)
  {
-@@ -438,6 +453,8 @@ mt7915_tm_init(struct mt7915_phy *phy, bool en)
+@@ -439,6 +454,8 @@ mt7915_tm_init(struct mt7915_phy *phy, bool en)
  	mt7915_mcu_add_bss_info(phy, phy->monitor_vif, en);
  	mt7915_mcu_add_sta(dev, phy->monitor_vif, NULL, en);
  
@@ -117,7 +117,7 @@
  	if (!en)
  		mt7915_tm_set_tam_arb(phy, en, 0);
  }
-@@ -503,18 +520,63 @@ mt7915_tm_set_tx_frames(struct mt7915_phy *phy, bool en)
+@@ -504,18 +521,63 @@ mt7915_tm_set_tx_frames(struct mt7915_phy *phy, bool en)
  	mt7915_tm_set_trx(phy, TM_MAC_TX, en);
  }
  
@@ -184,7 +184,7 @@
  		mt7915_tm_set_trx(phy, TM_MAC_RX_RXV, en);
  	}
  }
-@@ -738,12 +800,8 @@ static int
+@@ -739,12 +801,8 @@ static int
  mt7915_tm_dump_stats(struct mt76_phy *mphy, struct sk_buff *msg)
  {
  	struct mt7915_phy *phy = mphy->priv;
@@ -197,7 +197,7 @@
  
  	rx = nla_nest_start(msg, MT76_TM_STATS_ATTR_LAST_RX);
  	if (!rx)
-@@ -787,15 +845,7 @@ mt7915_tm_dump_stats(struct mt76_phy *mphy, struct sk_buff *msg)
+@@ -788,15 +846,7 @@ mt7915_tm_dump_stats(struct mt76_phy *mphy, struct sk_buff *msg)
  
  	nla_nest_end(msg, rx);
  
@@ -215,7 +215,7 @@
  
  const struct mt76_testmode_ops mt7915_testmode_ops = {
 diff --git a/mt7915/testmode.h b/mt7915/testmode.h
-index 5573ac30..a1c54c89 100644
+index 5573ac3..a1c54c8 100644
 --- a/mt7915/testmode.h
 +++ b/mt7915/testmode.h
 @@ -33,6 +33,12 @@ struct mt7915_tm_clean_txq {
@@ -266,7 +266,7 @@
 +
  #endif
 diff --git a/testmode.c b/testmode.c
-index 7cd00794..e6d1f702 100644
+index 7cd0079..e6d1f70 100644
 --- a/testmode.c
 +++ b/testmode.c
 @@ -559,6 +559,9 @@ mt76_testmode_dump_stats(struct mt76_phy *phy, struct sk_buff *msg)
@@ -280,7 +280,7 @@
  		return -EMSGSIZE;
  
 diff --git a/testmode.h b/testmode.h
-index 5e2792d8..89613266 100644
+index 5e2792d..8961326 100644
 --- a/testmode.h
 +++ b/testmode.h
 @@ -101,6 +101,8 @@ enum mt76_testmode_attr {
diff --git a/recipes-kernel/linux-mt76/files/patches/0004-mt76-mt7915-fix-tx-descriptor.patch b/recipes-kernel/linux-mt76/files/patches/0004-mt76-mt7915-fix-tx-descriptor.patch
index acf3a52..9b20ba5 100644
--- a/recipes-kernel/linux-mt76/files/patches/0004-mt76-mt7915-fix-tx-descriptor.patch
+++ b/recipes-kernel/linux-mt76/files/patches/0004-mt76-mt7915-fix-tx-descriptor.patch
@@ -1,17 +1,17 @@
-From 51cffe3e010931c8f070a101ece043072bed2512 Mon Sep 17 00:00:00 2001
+From 3b52f9553517631ce961a5ca808619a918ec5edc Mon Sep 17 00:00:00 2001
 From: Shayne Chen <shayne.chen@mediatek.com>
 Date: Wed, 19 Jan 2022 15:51:01 +0800
-Subject: [PATCH 4/7] mt76: mt7915: fix tx descriptor
+Subject: [PATCH 04/12] mt76: mt7915: fix tx descriptor
 
 ---
  mt7915/mac.c | 1 +
  1 file changed, 1 insertion(+)
 
 diff --git a/mt7915/mac.c b/mt7915/mac.c
-index a57d2732..a3cf1b74 100644
+index b280b0e..9092b40 100644
 --- a/mt7915/mac.c
 +++ b/mt7915/mac.c
-@@ -1002,6 +1002,7 @@ mt7915_mac_write_txwi_tm(struct mt7915_phy *phy, __le32 *txwi,
+@@ -653,6 +653,7 @@ mt7915_mac_write_txwi_tm(struct mt7915_phy *phy, __le32 *txwi,
  	if (td->tx_rate_ldpc || (bw > 0 && mode >= MT_PHY_TYPE_HE_SU))
  		val |= MT_TXD6_LDPC;
  
diff --git a/recipes-kernel/linux-mt76/files/patches/0005-mt76-mt7915-drop-undefined-action-frame.patch b/recipes-kernel/linux-mt76/files/patches/0005-mt76-mt7915-drop-undefined-action-frame.patch
index cfb0764..c6af0f3 100644
--- a/recipes-kernel/linux-mt76/files/patches/0005-mt76-mt7915-drop-undefined-action-frame.patch
+++ b/recipes-kernel/linux-mt76/files/patches/0005-mt76-mt7915-drop-undefined-action-frame.patch
@@ -1,17 +1,17 @@
-From 65c8978578ae5a485455617e5598ec83c2d519ae Mon Sep 17 00:00:00 2001
+From d5aa55dd78e4b047bbf462a65ac47b30409ad8f0 Mon Sep 17 00:00:00 2001
 From: Peter Chiu <chui-hao.chiu@mediatek.com>
 Date: Thu, 14 Apr 2022 15:18:02 +0800
-Subject: [PATCH 5/7] mt76: mt7915: drop undefined action frame
+Subject: [PATCH 05/12] mt76: mt7915: drop undefined action frame
 
 ---
  mt7915/mac.c | 6 ++++++
  1 file changed, 6 insertions(+)
 
 diff --git a/mt7915/mac.c b/mt7915/mac.c
-index a3cf1b74..b0e86968 100644
+index 9092b40..6a4da8e 100644
 --- a/mt7915/mac.c
 +++ b/mt7915/mac.c
-@@ -1281,6 +1281,8 @@ int mt7915_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
+@@ -683,6 +683,8 @@ int mt7915_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
  			  struct mt76_tx_info *tx_info)
  {
  	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx_info->skb->data;
@@ -20,7 +20,7 @@
  	struct mt7915_dev *dev = container_of(mdev, struct mt7915_dev, mt76);
  	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx_info->skb);
  	struct ieee80211_key_conf *key = info->control.hw_key;
-@@ -1311,6 +1313,10 @@ int mt7915_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
+@@ -713,6 +715,10 @@ int mt7915_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
  	t = (struct mt76_txwi_cache *)(txwi + mdev->drv->txwi_size);
  	t->skb = tx_info->skb;
  
diff --git a/recipes-kernel/linux-mt76/files/patches/0006-mt76-mt7915-add-the-maximum-size-of-beacon-offload.patch b/recipes-kernel/linux-mt76/files/patches/0006-mt76-mt7915-add-the-maximum-size-of-beacon-offload.patch
index 5758ac2..8cebede 100644
--- a/recipes-kernel/linux-mt76/files/patches/0006-mt76-mt7915-add-the-maximum-size-of-beacon-offload.patch
+++ b/recipes-kernel/linux-mt76/files/patches/0006-mt76-mt7915-add-the-maximum-size-of-beacon-offload.patch
@@ -1,7 +1,7 @@
-From 29eed004474096aa960336f7850dc0bad49eda6a Mon Sep 17 00:00:00 2001
+From f07ccb594e7e4653db40a84ac34f12958dc7a4bd Mon Sep 17 00:00:00 2001
 From: MeiChia Chiu <meichia.chiu@mediatek.com>
 Date: Mon, 23 May 2022 17:09:52 +0800
-Subject: [PATCH 6/7] mt76: mt7915: add the maximum size of beacon offload
+Subject: [PATCH 06/12] mt76: mt7915: add the maximum size of beacon offload
 
 add the maximum size of beacon offload to avoid exceeding the size limit
 
@@ -13,10 +13,10 @@
  2 files changed, 12 insertions(+), 2 deletions(-)
 
 diff --git a/mt7915/mcu.c b/mt7915/mcu.c
-index bdef2b37..81559002 100644
+index f513005..3a88638 100644
 --- a/mt7915/mcu.c
 +++ b/mt7915/mcu.c
-@@ -2037,6 +2037,13 @@ mt7915_mcu_beacon_inband_discov(struct mt7915_dev *dev, struct ieee80211_vif *vi
+@@ -1937,6 +1937,13 @@ mt7915_mcu_beacon_inband_discov(struct mt7915_dev *dev, struct ieee80211_vif *vi
  	len = sizeof(*discov) + MT_TXD_SIZE + skb->len;
  	len = (len & 0x3) ? ((len | 0x3) + 1) : len;
  
@@ -30,7 +30,7 @@
  	tlv = mt7915_mcu_add_nested_subtlv(rskb, BSS_INFO_BCN_DISCOV,
  					   len, &bcn->sub_ntlv, &bcn->len);
  	discov = (struct bss_info_inband_discovery *)tlv;
-@@ -2059,7 +2066,6 @@ mt7915_mcu_beacon_inband_discov(struct mt7915_dev *dev, struct ieee80211_vif *vi
+@@ -1959,7 +1966,6 @@ mt7915_mcu_beacon_inband_discov(struct mt7915_dev *dev, struct ieee80211_vif *vi
  int mt7915_mcu_add_beacon(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
  			  int en, u32 changed)
  {
@@ -38,7 +38,7 @@
  	struct mt7915_dev *dev = mt7915_hw_dev(hw);
  	struct mt7915_phy *phy = mt7915_hw_phy(hw);
  	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-@@ -2068,7 +2074,8 @@ int mt7915_mcu_add_beacon(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
+@@ -1968,7 +1974,8 @@ int mt7915_mcu_add_beacon(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
  	struct sk_buff *skb, *rskb;
  	struct tlv *tlv;
  	struct bss_info_bcn *bcn;
@@ -49,10 +49,10 @@
  
  	if (vif->bss_conf.nontransmitted)
 diff --git a/mt7915/mcu.h b/mt7915/mcu.h
-index 21aa9633..d46c8da4 100644
+index bd9c6dc..b82f258 100644
 --- a/mt7915/mcu.h
 +++ b/mt7915/mcu.h
-@@ -490,6 +490,9 @@ enum {
+@@ -453,6 +453,9 @@ enum {
  	SER_RECOVER
  };
  
diff --git a/recipes-kernel/linux-mt76/files/patches/0007-mt76-mt7915-update-mpdu-density-in-6g-capability.patch b/recipes-kernel/linux-mt76/files/patches/0007-mt76-mt7915-update-mpdu-density-in-6g-capability.patch
index 371424b..e5fe5f0 100644
--- a/recipes-kernel/linux-mt76/files/patches/0007-mt76-mt7915-update-mpdu-density-in-6g-capability.patch
+++ b/recipes-kernel/linux-mt76/files/patches/0007-mt76-mt7915-update-mpdu-density-in-6g-capability.patch
@@ -1,7 +1,7 @@
-From 173ee8c64b2e4cac133df1fbb1fd676c933fb7b1 Mon Sep 17 00:00:00 2001
+From 90fdd58113eb001c67e05845991b956b6f087880 Mon Sep 17 00:00:00 2001
 From: Peter Chiu <chui-hao.chiu@mediatek.com>
 Date: Mon, 6 Jun 2022 17:03:07 +0800
-Subject: [PATCH 7/7] mt76: mt7915: update mpdu density in 6g capability
+Subject: [PATCH 07/12] mt76: mt7915: update mpdu density in 6g capability
 
 Set mpdu density to 2 usec in 6g capability.
 
@@ -11,10 +11,10 @@
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/mt7915/init.c b/mt7915/init.c
-index b4727526..66884be0 100644
+index 39936b3..8554c9d 100644
 --- a/mt7915/init.c
 +++ b/mt7915/init.c
-@@ -980,7 +980,7 @@ mt7915_init_he_caps(struct mt7915_phy *phy, enum nl80211_band band,
+@@ -982,7 +982,7 @@ mt7915_init_he_caps(struct mt7915_phy *phy, enum nl80211_band band,
  			u16 cap = IEEE80211_HE_6GHZ_CAP_TX_ANTPAT_CONS |
  				  IEEE80211_HE_6GHZ_CAP_RX_ANTPAT_CONS;
  
diff --git a/recipes-kernel/linux-mt76/files/patches/0008-mt76-common-RF-CR-idx-require-8-bits.patch b/recipes-kernel/linux-mt76/files/patches/0008-mt76-common-RF-CR-idx-require-8-bits.patch
index cef3c72..c5df034 100644
--- a/recipes-kernel/linux-mt76/files/patches/0008-mt76-common-RF-CR-idx-require-8-bits.patch
+++ b/recipes-kernel/linux-mt76/files/patches/0008-mt76-common-RF-CR-idx-require-8-bits.patch
@@ -1,7 +1,7 @@
-From 01508ed2c2fb03cdacd855c5a870133cc04048f5 Mon Sep 17 00:00:00 2001
+From d41eeb3c3d0223368644b8e9f01273ba64422038 Mon Sep 17 00:00:00 2001
 From: Evelyn Tsai <evelyn.tsai@mediatek.com>
 Date: Mon, 13 Jun 2022 23:10:26 +0800
-Subject: [PATCH] mt76: common: RF CR idx require 8 bits
+Subject: [PATCH 08/12] mt76: common: RF CR idx require 8 bits
 
 Change-Id: I95af9cca36052be090be776868822d0a74377c9d
 ---
@@ -9,10 +9,10 @@
  1 file changed, 2 insertions(+), 2 deletions(-)
 
 diff --git a/mt7915/mcu.c b/mt7915/mcu.c
-index 9da3e85..3615195 100644
+index 3a88638..1b7a630 100644
 --- a/mt7915/mcu.c
 +++ b/mt7915/mcu.c
-@@ -4479,8 +4479,8 @@ int mt7915_mcu_rf_regval(struct mt7915_dev *dev, u32 regidx, u32 *val, bool set)
+@@ -3444,8 +3444,8 @@ int mt7915_mcu_rf_regval(struct mt7915_dev *dev, u32 regidx, u32 *val, bool set)
  		__le32 ofs;
  		__le32 data;
  	} __packed req = {
diff --git a/recipes-kernel/linux-mt76/files/patches/0009-check-starec-newly.patch b/recipes-kernel/linux-mt76/files/patches/0009-mt76-check-starec-newly.patch
similarity index 76%
rename from recipes-kernel/linux-mt76/files/patches/0009-check-starec-newly.patch
rename to recipes-kernel/linux-mt76/files/patches/0009-mt76-check-starec-newly.patch
index ed3059e..d6be2d2 100644
--- a/recipes-kernel/linux-mt76/files/patches/0009-check-starec-newly.patch
+++ b/recipes-kernel/linux-mt76/files/patches/0009-mt76-check-starec-newly.patch
@@ -1,7 +1,7 @@
-From 03a261c28f08e5c8aae5e4dde8f5f45e841fb0de Mon Sep 17 00:00:00 2001
+From 2c6d87aad4535b918828b5d01e51650901131cd1 Mon Sep 17 00:00:00 2001
 From: Shayne Chen <shayne.chen@mediatek.com>
 Date: Wed, 15 Jun 2022 23:15:13 +0800
-Subject: [PATCH] check starec newly
+Subject: [PATCH 09/12] check starec newly
 
 ---
  mt7915/main.c | 2 +-
@@ -9,10 +9,10 @@
  2 files changed, 4 insertions(+), 2 deletions(-)
 
 diff --git a/mt7915/main.c b/mt7915/main.c
-index 7da3eada..9feba0d6 100644
+index 7934981..3958799 100644
 --- a/mt7915/main.c
 +++ b/mt7915/main.c
-@@ -247,7 +247,6 @@ static int mt7915_add_interface(struct ieee80211_hw *hw,
+@@ -235,7 +235,6 @@ static int mt7915_add_interface(struct ieee80211_hw *hw,
  	mt7915_mac_wtbl_update(dev, idx,
  			       MT_WTBL_UPDATE_ADM_COUNT_CLEAR);
  
@@ -20,7 +20,7 @@
  	if (vif->txq) {
  		mtxq = (struct mt76_txq *)vif->txq->drv_priv;
  		mtxq->wcid = idx;
-@@ -263,6 +262,7 @@ static int mt7915_add_interface(struct ieee80211_hw *hw,
+@@ -251,6 +250,7 @@ static int mt7915_add_interface(struct ieee80211_hw *hw,
  
  	mt7915_mcu_add_bss_info(phy, vif, true);
  	mt7915_mcu_add_sta(dev, vif, NULL, true);
@@ -29,10 +29,10 @@
  out:
  	mutex_unlock(&dev->mt76.mutex);
 diff --git a/mt7915/mcu.c b/mt7915/mcu.c
-index 36151959..ff5a73e3 100755
+index 1b7a630..a726021 100644
 --- a/mt7915/mcu.c
 +++ b/mt7915/mcu.c
-@@ -1803,6 +1803,7 @@ int mt7915_mcu_add_sta(struct mt7915_dev *dev, struct ieee80211_vif *vif,
+@@ -1610,6 +1610,7 @@ int mt7915_mcu_add_sta(struct mt7915_dev *dev, struct ieee80211_vif *vif,
  	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
  	struct mt7915_sta *msta;
  	struct sk_buff *skb;
@@ -40,7 +40,7 @@
  	int ret;
  
  	msta = sta ? (struct mt7915_sta *)sta->drv_priv : &mvif->sta;
-@@ -1813,7 +1814,8 @@ int mt7915_mcu_add_sta(struct mt7915_dev *dev, struct ieee80211_vif *vif,
+@@ -1620,7 +1621,8 @@ int mt7915_mcu_add_sta(struct mt7915_dev *dev, struct ieee80211_vif *vif,
  		return PTR_ERR(skb);
  
  	/* starec basic */
diff --git a/recipes-kernel/linux-mt76/files/patches/0009-mt76-mt7915-4addr-null-frame-using-fixed-rate-to-success-WDS.patch b/recipes-kernel/linux-mt76/files/patches/0009-mt76-mt7915-4addr-null-frame-using-fixed-rate-to-success-WDS.patch
deleted file mode 100755
index 5b61802..0000000
--- a/recipes-kernel/linux-mt76/files/patches/0009-mt76-mt7915-4addr-null-frame-using-fixed-rate-to-success-WDS.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 84ecaf8d9a4c7d0a1eae5b3b0ed20e171a58b3c7 Mon Sep 17 00:00:00 2001
-From: "lian.chen" <lian.chen@mediatek.com>
-Date: Thu, 16 Jun 2022 17:41:28 +0800
-Subject: [PATCH] mt76: mt7915: 4addr null frame using fixed rate to success WDS
-
----
- mt7915/mac.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/mt7915/mac.c b/mt7915/mac.c
-index 094d10a5..b0933625 100644
---- a/mt7915/mac.c
-+++ b/mt7915/mac.c
-@@ -1133,7 +1133,7 @@ mt7915_mac_write_txwi_80211(struct mt7915_dev *dev, __le32 *txwi,
- 		txwi[3] &= ~cpu_to_le32(MT_TXD3_PROTECT_FRAME);
- 	}
- 
--	if (!ieee80211_is_data(fc) || *mcast ||
-+	if (!ieee80211_is_data(fc) || *mcast || ((ieee80211_is_nullfunc(fc) && ieee80211_has_a4(fc))) ||
- 	    info->flags & IEEE80211_TX_CTL_USE_MINRATE)
- 		val |= MT_TXD2_FIX_RATE;
- 
--- 
-2.18.0
-
diff --git a/recipes-kernel/linux-mt76/files/patches/0010-mt76-mt7915-4addr-null-frame-using-fixed-rate-to-suc.patch b/recipes-kernel/linux-mt76/files/patches/0010-mt76-mt7915-4addr-null-frame-using-fixed-rate-to-suc.patch
new file mode 100644
index 0000000..aa3aeae
--- /dev/null
+++ b/recipes-kernel/linux-mt76/files/patches/0010-mt76-mt7915-4addr-null-frame-using-fixed-rate-to-suc.patch
@@ -0,0 +1,27 @@
+From 924bfa3aeb7330cbf5c14c9a0ddebb9567e5f77c Mon Sep 17 00:00:00 2001
+From: "lian.chen" <lian.chen@mediatek.com>
+Date: Wed, 22 Jun 2022 10:31:55 +0800
+Subject: [PATCH 10/12] mt76: mt7915: 4addr null frame using fixed rate to
+ success WDS
+
+---
+ mt76_connac_mac.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/mt76_connac_mac.c b/mt76_connac_mac.c
+index af2b33d..27eaf22 100644
+--- a/mt76_connac_mac.c
++++ b/mt76_connac_mac.c
+@@ -393,7 +393,8 @@ mt76_connac2_mac_write_txwi_80211(struct mt76_dev *dev, __le32 *txwi,
+ 	}
+ 
+ 	if (!ieee80211_is_data(fc) || multicast ||
+-	    info->flags & IEEE80211_TX_CTL_USE_MINRATE)
++	    info->flags & IEEE80211_TX_CTL_USE_MINRATE ||
++	    (ieee80211_is_nullfunc(fc) && ieee80211_has_a4(fc)))
+ 		val |= MT_TXD2_FIX_RATE;
+ 
+ 	txwi[2] |= cpu_to_le32(val);
+-- 
+2.18.0
+
diff --git a/recipes-kernel/linux-mt76/files/patches/0011-mt76-do-not-check-the-ccmp-pn-for-ONLY_MONITOR-frame.patch b/recipes-kernel/linux-mt76/files/patches/0011-mt76-do-not-check-the-ccmp-pn-for-ONLY_MONITOR-frame.patch
new file mode 100644
index 0000000..9616b13
--- /dev/null
+++ b/recipes-kernel/linux-mt76/files/patches/0011-mt76-do-not-check-the-ccmp-pn-for-ONLY_MONITOR-frame.patch
@@ -0,0 +1,31 @@
+From 975fc0afe9673689b2364b261dbe1f8f7fc58c56 Mon Sep 17 00:00:00 2001
+From: MeiChia Chiu <meichia.chiu@mediatek.com>
+Date: Mon, 20 Jun 2022 17:42:19 +0800
+Subject: [PATCH 11/12] mt76: do not check the ccmp pn for ONLY_MONITOR frame
+
+if the received frame enables RX_FLAG_ONLY_MONITOR,
+driver doesn't need to check the ccmp pn of this frame.
+
+Signed-off-by: MeiChia Chiu <MeiChia.Chiu@mediatek.com>
+Change-Id: I85abba5b66ef3b58739069e04830980384f805d1
+---
+ mac80211.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/mac80211.c b/mac80211.c
+index 5782244..c1df063 100644
+--- a/mac80211.c
++++ b/mac80211.c
+@@ -1031,6 +1031,9 @@ mt76_check_ccmp_pn(struct sk_buff *skb)
+ 	if (!(status->flag & RX_FLAG_DECRYPTED))
+ 		return 0;
+ 
++	if (status->flag & RX_FLAG_ONLY_MONITOR)
++		return 0;
++
+ 	if (!wcid || !wcid->rx_check_pn)
+ 		return 0;
+ 
+-- 
+2.18.0
+
diff --git a/recipes-kernel/linux-mt76/files/patches/1001-mt76-mt7915-add-mtk-internal-debug-tools-for-mt76.patch b/recipes-kernel/linux-mt76/files/patches/1001-mt76-mt7915-add-mtk-internal-debug-tools-for-mt76.patch
index 77cbc39..5fe3710 100644
--- a/recipes-kernel/linux-mt76/files/patches/1001-mt76-mt7915-add-mtk-internal-debug-tools-for-mt76.patch
+++ b/recipes-kernel/linux-mt76/files/patches/1001-mt76-mt7915-add-mtk-internal-debug-tools-for-mt76.patch
@@ -1,31 +1,32 @@
-From a9cf0fd711fdccf35e6171dd4aba0eb7f6588148 Mon Sep 17 00:00:00 2001
-From: Bo Jiao <Bo.Jiao@mediatek.com>
-Date: Mon, 6 Jun 2022 20:08:58 +0800
-Subject: [PATCH] mt76: mt7915: add mtk internal debug tools for mt76
+From 4c1658312392db894fd36bbdc98476d6e6b1e32f Mon Sep 17 00:00:00 2001
+From: Shayne Chen <shayne.chen@mediatek.com>
+Date: Wed, 22 Jun 2022 10:39:47 +0800
+Subject: [PATCH 1001/1008] mt76: mt7915: add mtk internal debug tools for mt76
 
 ---
  mt76_connac_mcu.h     |    6 +
  mt7915/Makefile       |    2 +-
  mt7915/debugfs.c      |   73 +-
  mt7915/mac.c          |   14 +
- mt7915/mcu.c          |   41 +
+ mt7915/main.c         |    4 +
+ mt7915/mcu.c          |   44 +
  mt7915/mcu.h          |    4 +
- mt7915/mt7915.h       |   41 +
+ mt7915/mt7915.h       |   43 +
  mt7915/mt7915_debug.h | 1350 +++++++++++++++++++
- mt7915/mtk_debugfs.c  | 2921 +++++++++++++++++++++++++++++++++++++++++
+ mt7915/mtk_debugfs.c  | 2923 +++++++++++++++++++++++++++++++++++++++++
  mt7915/mtk_mcu.c      |   51 +
  tools/fwlog.c         |   44 +-
- 11 files changed, 4534 insertions(+), 13 deletions(-)
+ 12 files changed, 4545 insertions(+), 13 deletions(-)
  mode change 100644 => 100755 mt7915/mcu.c
  create mode 100644 mt7915/mt7915_debug.h
  create mode 100644 mt7915/mtk_debugfs.c
  create mode 100644 mt7915/mtk_mcu.c
 
 diff --git a/mt76_connac_mcu.h b/mt76_connac_mcu.h
-index aa14d2d4..03134066 100644
+index e94d670..333d3a0 100644
 --- a/mt76_connac_mcu.h
 +++ b/mt76_connac_mcu.h
-@@ -968,6 +968,12 @@ enum {
+@@ -1119,6 +1119,12 @@ enum {
  	MCU_EXT_CMD_TX_POWER_FEATURE_CTRL = 0x58,
  	MCU_EXT_CMD_RXDCOC_CAL = 0x59,
  	MCU_EXT_CMD_GET_MIB_INFO = 0x5a,
@@ -39,7 +40,7 @@
  	MCU_EXT_CMD_CAL_CACHE = 0x67,
  	MCU_EXT_CMD_SET_RADAR_TH = 0x7c,
 diff --git a/mt7915/Makefile b/mt7915/Makefile
-index b794ceb7..a3474e2f 100644
+index b794ceb..a3474e2 100644
 --- a/mt7915/Makefile
 +++ b/mt7915/Makefile
 @@ -3,7 +3,7 @@
@@ -53,7 +54,7 @@
  mt7915e-$(CONFIG_MT7986_WMAC) += soc.o
 \ No newline at end of file
 diff --git a/mt7915/debugfs.c b/mt7915/debugfs.c
-index 9f21d978..0cfb6068 100644
+index 9f21d97..0cfb606 100644
 --- a/mt7915/debugfs.c
 +++ b/mt7915/debugfs.c
 @@ -8,6 +8,9 @@
@@ -197,10 +198,10 @@
  
  	if (dev->relay_fwlog)
 diff --git a/mt7915/mac.c b/mt7915/mac.c
-index b0e86968..9e92b32f 100644
+index 6a4da8e..c332e0a 100644
 --- a/mt7915/mac.c
 +++ b/mt7915/mac.c
-@@ -596,6 +596,10 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb)
+@@ -239,6 +239,10 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb)
  	__le16 fc = 0;
  	int idx;
  
@@ -211,7 +212,7 @@
  	memset(status, 0, sizeof(*status));
  
  	if ((rxd1 & MT_RXD1_NORMAL_BAND_IDX) && !phy->band_idx) {
-@@ -780,6 +784,10 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb)
+@@ -421,6 +425,10 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb)
  	}
  
  	hdr_gap = (u8 *)rxd - skb->data + 2 * remove_pad;
@@ -220,9 +221,9 @@
 +		mt7915_packet_log_to_host(dev, skb->data, skb->len, PKT_BIN_DEBUG_RX, hdr_gap);
 +#endif
  	if (hdr_trans && ieee80211_has_morefrags(fc)) {
- 		if (mt7915_reverse_frag0_hdr_trans(skb, hdr_gap))
- 			return -EINVAL;
-@@ -1358,6 +1366,12 @@ int mt7915_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
+ 		struct ieee80211_vif *vif;
+ 		int err;
+@@ -760,6 +768,12 @@ int mt7915_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
  	tx_info->buf[1].skip_unmap = true;
  	tx_info->nbuf = MT_CT_DMA_BUF_NUM;
  
@@ -235,24 +236,50 @@
  	return 0;
  }
  
+diff --git a/mt7915/main.c b/mt7915/main.c
+index 3958799..929c726 100644
+--- a/mt7915/main.c
++++ b/mt7915/main.c
+@@ -62,7 +62,11 @@ static int mt7915_start(struct ieee80211_hw *hw)
+ 	if (ret)
+ 		goto out;
+ 
++#ifdef MTK_DEBUG
++	ret = mt7915_mcu_set_sku_en(phy, !dev->dbg.sku_disable);
++#else
+ 	ret = mt7915_mcu_set_sku_en(phy, true);
++#endif
+ 	if (ret)
+ 		goto out;
+ 
 diff --git a/mt7915/mcu.c b/mt7915/mcu.c
 old mode 100644
 new mode 100755
-index 81559002..6ec321e1
+index a726021..4ff13c7
 --- a/mt7915/mcu.c
 +++ b/mt7915/mcu.c
-@@ -298,6 +298,10 @@ mt7915_mcu_send_message(struct mt76_dev *mdev, struct sk_buff *skb,
- 		mcu_txd->s2d_index = MCU_S2D_H2N;
+@@ -195,6 +195,11 @@ mt7915_mcu_send_message(struct mt76_dev *mdev, struct sk_buff *skb,
+ 	else
+ 		qid = MT_MCUQ_WM;
  
- exit:
 +#ifdef MTK_DEBUG
 +	if (dev->dbg.dump_mcu_pkt)
 +		mt7915_packet_log_to_host(dev, skb->data, skb->len, PKT_BIN_DEBUG_MCU, 0);
 +#endif
- 	if (wait_seq)
- 		*wait_seq = seq;
++
+ 	return mt76_tx_queue_skb_raw(dev, mdev->q_mcu[qid], skb, 0);
+ }
+ 
+@@ -3164,6 +3169,8 @@ int mt7915_mcu_set_sku_en(struct mt7915_phy *phy, bool enable)
+ 		.sku_enable = enable,
+ 	};
  
-@@ -3733,6 +3737,43 @@ int mt7915_mcu_twt_agrt_update(struct mt7915_dev *dev,
++	pr_info("%s: enable = %d\n", __func__, enable);
++
+ 	return mt76_mcu_send_msg(&dev->mt76,
+ 				 MCU_EXT_CMD(TX_POWER_FEATURE_CTRL), &req,
+ 				 sizeof(req), true);
+@@ -3439,6 +3446,43 @@ int mt7915_mcu_twt_agrt_update(struct mt7915_dev *dev,
  				 &req, sizeof(req), true);
  }
  
@@ -297,10 +324,10 @@
  {
  	struct {
 diff --git a/mt7915/mcu.h b/mt7915/mcu.h
-index d46c8da4..2f7007fd 100644
+index b82f258..b2c51bf 100644
 --- a/mt7915/mcu.h
 +++ b/mt7915/mcu.h
-@@ -296,6 +296,10 @@ enum {
+@@ -259,6 +259,10 @@ enum {
  	MCU_WA_PARAM_PDMA_RX = 0x04,
  	MCU_WA_PARAM_CPU_UTIL = 0x0b,
  	MCU_WA_PARAM_RED = 0x0e,
@@ -312,7 +339,7 @@
  
  enum mcu_mmps_mode {
 diff --git a/mt7915/mt7915.h b/mt7915/mt7915.h
-index bd985e6c..001a6015 100644
+index b6a6aa7..594f2fb 100644
 --- a/mt7915/mt7915.h
 +++ b/mt7915/mt7915.h
 @@ -9,6 +9,7 @@
@@ -321,9 +348,9 @@
  
 +#define MTK_DEBUG 1
  #define MT7915_MAX_INTERFACES		19
- #define MT7915_MAX_WMM_SETS		4
  #define MT7915_WTBL_SIZE		288
-@@ -339,6 +340,27 @@ struct mt7915_dev {
+ #define MT7916_WTBL_SIZE		544
+@@ -338,6 +339,29 @@ struct mt7915_dev {
  	struct reset_control *rstc;
  	void __iomem *dcm;
  	void __iomem *sku;
@@ -345,13 +372,15 @@
 +		bool dump_rx_pkt;
 +		bool dump_rx_raw;
 +		u32 token_idx;
++		u8 sku_disable;
++		u8 muru_onoff;
 +	} dbg;
 +	const struct mt7915_dbg_reg_desc *dbg_reg;
 +#endif
  };
  
  enum {
-@@ -608,4 +630,23 @@ void mt7915_sta_add_debugfs(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
+@@ -592,4 +616,23 @@ void mt7915_sta_add_debugfs(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
  			    struct ieee80211_sta *sta, struct dentry *dir);
  #endif
  
@@ -377,7 +406,7 @@
  #endif
 diff --git a/mt7915/mt7915_debug.h b/mt7915/mt7915_debug.h
 new file mode 100644
-index 00000000..58ba2cdf
+index 0000000..58ba2cd
 --- /dev/null
 +++ b/mt7915/mt7915_debug.h
 @@ -0,0 +1,1350 @@
@@ -1733,10 +1762,10 @@
 +#endif
 diff --git a/mt7915/mtk_debugfs.c b/mt7915/mtk_debugfs.c
 new file mode 100644
-index 00000000..ccaaea78
+index 0000000..f18c8b6
 --- /dev/null
 +++ b/mt7915/mtk_debugfs.c
-@@ -0,0 +1,2921 @@
+@@ -0,0 +1,2923 @@
 +#include<linux/inet.h>
 +#include "mt7915.h"
 +#include "mt7915_debug.h"
@@ -4655,12 +4684,14 @@
 +	debugfs_create_file("txpower_level", 0400, dir, dev,
 +			    &fops_txpower_level);
 +
++	debugfs_create_u8("sku_disable", 0600, dir, &dev->dbg.sku_disable);
++
 +	return 0;
 +}
 +#endif
 diff --git a/mt7915/mtk_mcu.c b/mt7915/mtk_mcu.c
 new file mode 100644
-index 00000000..145fe785
+index 0000000..145fe78
 --- /dev/null
 +++ b/mt7915/mtk_mcu.c
 @@ -0,0 +1,51 @@
@@ -4716,7 +4747,7 @@
 +				 sizeof(req), true);
 +}
 diff --git a/tools/fwlog.c b/tools/fwlog.c
-index e5d4a105..3d51d9ec 100644
+index e5d4a10..3d51d9e 100644
 --- a/tools/fwlog.c
 +++ b/tools/fwlog.c
 @@ -26,7 +26,7 @@ static const char *debugfs_path(const char *phyname, const char *file)
diff --git a/recipes-kernel/linux-mt76/files/patches/1002-mt76-mt7915-csi-implement-csi-support.patch b/recipes-kernel/linux-mt76/files/patches/1002-mt76-mt7915-csi-implement-csi-support.patch
index 44dc578..0f2ca39 100644
--- a/recipes-kernel/linux-mt76/files/patches/1002-mt76-mt7915-csi-implement-csi-support.patch
+++ b/recipes-kernel/linux-mt76/files/patches/1002-mt76-mt7915-csi-implement-csi-support.patch
@@ -1,7 +1,7 @@
-From fac076082992f4e6bf576b44778ad6d5c37d9abd Mon Sep 17 00:00:00 2001
+From c2e0f6df51b9b2e681285523b1c4471c7f613c83 Mon Sep 17 00:00:00 2001
 From: Bo Jiao <Bo.Jiao@mediatek.com>
 Date: Mon, 6 Jun 2022 20:13:02 +0800
-Subject: [PATCH 1002/1007] mt76: mt7915: csi: implement csi support
+Subject: [PATCH 1002/1008] mt76: mt7915: csi: implement csi support
 
 ---
  mt76_connac_mcu.h |   2 +
@@ -18,10 +18,10 @@
  create mode 100644 mt7915/vendor.h
 
 diff --git a/mt76_connac_mcu.h b/mt76_connac_mcu.h
-index 03134066..96591a8c 100644
+index 333d3a0..b25807a 100644
 --- a/mt76_connac_mcu.h
 +++ b/mt76_connac_mcu.h
-@@ -820,6 +820,7 @@ enum {
+@@ -971,6 +971,7 @@ enum {
  	MCU_EXT_EVENT_CSA_NOTIFY = 0x4f,
  	MCU_EXT_EVENT_BCC_NOTIFY = 0x75,
  	MCU_EXT_EVENT_MURU_CTRL = 0x9f,
@@ -29,7 +29,7 @@
  };
  
  enum {
-@@ -990,6 +991,7 @@ enum {
+@@ -1141,6 +1142,7 @@ enum {
  	MCU_EXT_CMD_GROUP_PRE_CAL_INFO = 0xab,
  	MCU_EXT_CMD_DPD_PRE_CAL_INFO = 0xac,
  	MCU_EXT_CMD_PHY_STAT_INFO = 0xad,
@@ -38,7 +38,7 @@
  
  enum {
 diff --git a/mt7915/Makefile b/mt7915/Makefile
-index a3474e2f..e272c826 100644
+index a3474e2..e272c82 100644
 --- a/mt7915/Makefile
 +++ b/mt7915/Makefile
 @@ -1,9 +1,9 @@
@@ -55,10 +55,10 @@
  mt7915e-$(CONFIG_MT7986_WMAC) += soc.o
 \ No newline at end of file
 diff --git a/mt7915/init.c b/mt7915/init.c
-index 66884be0..258bb20a 100644
+index 8554c9d..fa9568c 100644
 --- a/mt7915/init.c
 +++ b/mt7915/init.c
-@@ -541,6 +541,12 @@ mt7915_register_ext_phy(struct mt7915_dev *dev, struct mt7915_phy *phy)
+@@ -542,6 +542,12 @@ mt7915_register_ext_phy(struct mt7915_dev *dev, struct mt7915_phy *phy)
  	/* init wiphy according to mphy and phy */
  	mt7915_init_wiphy(mphy->hw);
  
@@ -71,7 +71,7 @@
  	ret = mt76_register_phy(mphy, true, mt76_rates,
  				ARRAY_SIZE(mt76_rates));
  	if (ret)
-@@ -1030,6 +1036,25 @@ void mt7915_set_stream_he_caps(struct mt7915_phy *phy)
+@@ -1032,6 +1038,25 @@ void mt7915_set_stream_he_caps(struct mt7915_phy *phy)
  	}
  }
  
@@ -97,7 +97,7 @@
  static void mt7915_unregister_ext_phy(struct mt7915_dev *dev)
  {
  	struct mt7915_phy *phy = mt7915_ext_phy(dev);
-@@ -1038,6 +1063,10 @@ static void mt7915_unregister_ext_phy(struct mt7915_dev *dev)
+@@ -1040,6 +1065,10 @@ static void mt7915_unregister_ext_phy(struct mt7915_dev *dev)
  	if (!phy)
  		return;
  
@@ -108,7 +108,7 @@
  	mt7915_unregister_thermal(phy);
  	mt76_unregister_phy(mphy);
  	ieee80211_free_hw(mphy->hw);
-@@ -1050,6 +1079,10 @@ static void mt7915_stop_hardware(struct mt7915_dev *dev)
+@@ -1052,6 +1081,10 @@ static void mt7915_stop_hardware(struct mt7915_dev *dev)
  	mt7915_dma_cleanup(dev);
  	tasklet_disable(&dev->irq_tasklet);
  
@@ -119,7 +119,7 @@
  	if (is_mt7986(&dev->mt76))
  		mt7986_wmac_disable(dev);
  }
-@@ -1090,6 +1123,12 @@ int mt7915_register_device(struct mt7915_dev *dev)
+@@ -1092,6 +1125,12 @@ int mt7915_register_device(struct mt7915_dev *dev)
  	dev->mt76.test_ops = &mt7915_testmode_ops;
  #endif
  
@@ -135,10 +135,10 @@
 diff --git a/mt7915/mcu.c b/mt7915/mcu.c
 old mode 100755
 new mode 100644
-index 6ec321e1..18b05b2e
+index 4ff13c7..0941bf3
 --- a/mt7915/mcu.c
 +++ b/mt7915/mcu.c
-@@ -89,6 +89,10 @@ struct mt7915_fw_region {
+@@ -32,6 +32,10 @@
  #define HE_PHY(p, c)			u8_get_bits(c, IEEE80211_HE_PHY_##p)
  #define HE_MAC(m, c)			u8_get_bits(c, IEEE80211_HE_MAC_##m)
  
@@ -149,7 +149,7 @@
  static u8
  mt7915_mcu_get_sta_nss(u16 mcs_map)
  {
-@@ -453,6 +457,11 @@ mt7915_mcu_rx_ext_event(struct mt7915_dev *dev, struct sk_buff *skb)
+@@ -351,6 +355,11 @@ mt7915_mcu_rx_ext_event(struct mt7915_dev *dev, struct sk_buff *skb)
  	case MCU_EXT_EVENT_FW_LOG_2_HOST:
  		mt7915_mcu_rx_log_message(dev, skb);
  		break;
@@ -161,7 +161,7 @@
  	case MCU_EXT_EVENT_BCC_NOTIFY:
  		mt7915_mcu_rx_bcc_notify(dev, skb);
  		break;
-@@ -3737,6 +3746,108 @@ int mt7915_mcu_twt_agrt_update(struct mt7915_dev *dev,
+@@ -3446,6 +3455,108 @@ int mt7915_mcu_twt_agrt_update(struct mt7915_dev *dev,
  				 &req, sizeof(req), true);
  }
  
@@ -188,15 +188,15 @@
 +static int
 +mt7915_mcu_report_csi(struct mt7915_dev *dev, struct sk_buff *skb)
 +{
-+	struct mt7915_mcu_rxd *rxd = (struct mt7915_mcu_rxd *)skb->data;
++	struct mt76_connac2_mcu_rxd *rxd = (struct mt76_connac2_mcu_rxd *)skb->data;
 +	struct mt7915_phy *phy = &dev->phy;
 +	struct mt7915_mcu_csi_report *cr;
 +	struct csi_data *csi;
 +	int len, i;
 +
-+	skb_pull(skb, sizeof(struct mt7915_mcu_rxd));
++	skb_pull(skb, sizeof(struct mt76_connac2_mcu_rxd));
 +
-+	len = le16_to_cpu(rxd->len) - sizeof(struct mt7915_mcu_rxd) + 24;
++	len = le16_to_cpu(rxd->len) - sizeof(struct mt76_connac2_mcu_rxd) + 24;
 +	if (len < sizeof(*cr))
 +		return -EINVAL;
 +
@@ -271,10 +271,10 @@
  int mt7915_dbg_mcu_wa_cmd(struct mt7915_dev *dev, int cmd, u32 a1, u32 a2, u32 a3, bool wait_resp)
  {
 diff --git a/mt7915/mcu.h b/mt7915/mcu.h
-index 2f7007fd..cb854b28 100644
+index b2c51bf..ec8887b 100644
 --- a/mt7915/mcu.h
 +++ b/mt7915/mcu.h
-@@ -513,4 +513,80 @@ enum {
+@@ -476,4 +476,80 @@ enum {
  					 sizeof(struct bss_info_bcn_cont) + \
  					 sizeof(struct bss_info_inband_discovery))
  
@@ -356,10 +356,10 @@
 +
  #endif
 diff --git a/mt7915/mt7915.h b/mt7915/mt7915.h
-index 001a6015..ff957425 100644
+index 594f2fb..5a6224b 100644
 --- a/mt7915/mt7915.h
 +++ b/mt7915/mt7915.h
-@@ -277,6 +277,20 @@ struct mt7915_phy {
+@@ -276,6 +276,20 @@ struct mt7915_phy {
  		u8 spe_idx;
  	} test;
  #endif
@@ -380,7 +380,7 @@
  };
  
  struct mt7915_dev {
-@@ -630,6 +644,12 @@ void mt7915_sta_add_debugfs(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
+@@ -616,6 +630,12 @@ void mt7915_sta_add_debugfs(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
  			    struct ieee80211_sta *sta, struct dentry *dir);
  #endif
  
@@ -395,7 +395,7 @@
  int mt7915_dbg_mcu_wa_cmd(struct mt7915_dev *dev, int cmd, u32 a1, u32 a2, u32 a3, bool wait_resp);
 diff --git a/mt7915/vendor.c b/mt7915/vendor.c
 new file mode 100644
-index 00000000..98fd9c2d
+index 0000000..98fd9c2
 --- /dev/null
 +++ b/mt7915/vendor.c
 @@ -0,0 +1,452 @@
@@ -853,7 +853,7 @@
 +}
 diff --git a/mt7915/vendor.h b/mt7915/vendor.h
 new file mode 100644
-index 00000000..9d3db2a7
+index 0000000..9d3db2a
 --- /dev/null
 +++ b/mt7915/vendor.h
 @@ -0,0 +1,60 @@
diff --git a/recipes-kernel/linux-mt76/files/patches/1003-mt76-mt7915-air-monitor-support.patch b/recipes-kernel/linux-mt76/files/patches/1003-mt76-mt7915-air-monitor-support.patch
index 018c3f0..bff59ad 100644
--- a/recipes-kernel/linux-mt76/files/patches/1003-mt76-mt7915-air-monitor-support.patch
+++ b/recipes-kernel/linux-mt76/files/patches/1003-mt76-mt7915-air-monitor-support.patch
@@ -1,7 +1,7 @@
-From 2722263634d9890cfd956d924341c2239e1507b1 Mon Sep 17 00:00:00 2001
+From f6e5e119c427050f926fd42c1bc271f53dc8cafb Mon Sep 17 00:00:00 2001
 From: Bo Jiao <Bo.Jiao@mediatek.com>
 Date: Tue, 11 Jan 2022 12:03:23 +0800
-Subject: [PATCH 1003/1007] mt76: mt7915: air monitor support
+Subject: [PATCH 1003/1008] mt76: mt7915: air monitor support
 
 ---
  mt76_connac_mcu.h |   2 +
@@ -13,10 +13,10 @@
  6 files changed, 440 insertions(+)
 
 diff --git a/mt76_connac_mcu.h b/mt76_connac_mcu.h
-index 96591a8c..1c24dbf4 100644
+index b25807a..42425f7 100644
 --- a/mt76_connac_mcu.h
 +++ b/mt76_connac_mcu.h
-@@ -991,6 +991,8 @@ enum {
+@@ -1142,6 +1142,8 @@ enum {
  	MCU_EXT_CMD_GROUP_PRE_CAL_INFO = 0xab,
  	MCU_EXT_CMD_DPD_PRE_CAL_INFO = 0xac,
  	MCU_EXT_CMD_PHY_STAT_INFO = 0xad,
@@ -26,10 +26,10 @@
  };
  
 diff --git a/mt7915/mac.c b/mt7915/mac.c
-index 9e92b32f..4989f437 100644
+index c332e0a..69c226f 100644
 --- a/mt7915/mac.c
 +++ b/mt7915/mac.c
-@@ -835,6 +835,10 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb)
+@@ -486,6 +486,10 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb)
  			seq_ctrl = le16_to_cpu(hdr->seq_ctrl);
  			qos_ctl = *ieee80211_get_qos_ctl(hdr);
  		}
@@ -41,10 +41,10 @@
  		status->flag |= RX_FLAG_8023;
  	}
 diff --git a/mt7915/main.c b/mt7915/main.c
-index 79349817..7d4e7838 100644
+index 929c726..e461e0f 100644
 --- a/mt7915/main.c
 +++ b/mt7915/main.c
-@@ -671,6 +671,9 @@ int mt7915_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,
+@@ -675,6 +675,9 @@ int mt7915_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,
  	if (ret)
  		return ret;
  
@@ -55,10 +55,10 @@
  }
  
 diff --git a/mt7915/mt7915.h b/mt7915/mt7915.h
-index ff957425..ace01e15 100644
+index 5a6224b..d702532 100644
 --- a/mt7915/mt7915.h
 +++ b/mt7915/mt7915.h
-@@ -232,6 +232,35 @@ struct mt7915_hif {
+@@ -231,6 +231,35 @@ struct mt7915_hif {
  	int irq;
  };
  
@@ -94,7 +94,7 @@
  struct mt7915_phy {
  	struct mt76_phy *mt76;
  	struct mt7915_dev *dev;
-@@ -290,6 +319,8 @@ struct mt7915_phy {
+@@ -289,6 +318,8 @@ struct mt7915_phy {
  		u32 interval;
  		u32 last_record;
  	} csi;
@@ -103,7 +103,7 @@
  #endif
  };
  
-@@ -648,6 +679,9 @@ void mt7915_sta_add_debugfs(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
+@@ -634,6 +665,9 @@ void mt7915_sta_add_debugfs(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
  void mt7915_vendor_register(struct mt7915_phy *phy);
  int mt7915_mcu_set_csi(struct mt7915_phy *phy, u8 mode,
  			u8 cfg, u8 v1, u32 v2, u8 *mac_addr);
@@ -114,7 +114,7 @@
  
  #ifdef MTK_DEBUG
 diff --git a/mt7915/vendor.c b/mt7915/vendor.c
-index 98fd9c2d..b94d787e 100644
+index 98fd9c2..b94d787 100644
 --- a/mt7915/vendor.c
 +++ b/mt7915/vendor.c
 @@ -430,6 +430,353 @@ out:
@@ -491,7 +491,7 @@
  };
  
 diff --git a/mt7915/vendor.h b/mt7915/vendor.h
-index 9d3db2a7..976817f3 100644
+index 9d3db2a..976817f 100644
 --- a/mt7915/vendor.h
 +++ b/mt7915/vendor.h
 @@ -4,6 +4,7 @@
diff --git a/recipes-kernel/linux-mt76/files/patches/1004-mt76-mt7915-add-support-for-muru_onoff-via-debugfs.patch b/recipes-kernel/linux-mt76/files/patches/1004-mt76-mt7915-add-support-for-muru_onoff-via-debugfs.patch
index 72f8d24..44f9801 100644
--- a/recipes-kernel/linux-mt76/files/patches/1004-mt76-mt7915-add-support-for-muru_onoff-via-debugfs.patch
+++ b/recipes-kernel/linux-mt76/files/patches/1004-mt76-mt7915-add-support-for-muru_onoff-via-debugfs.patch
@@ -1,22 +1,21 @@
-From 37b133c4d8fa05aae067dfb5fb68c24d3cabea2d Mon Sep 17 00:00:00 2001
+From 7bcfae1d261805e54b6e27091dffd4706c4dc046 Mon Sep 17 00:00:00 2001
 From: MeiChia Chiu <meichia.chiu@mediatek.com>
-Date: Mon, 28 Mar 2022 09:19:29 +0800
-Subject: [PATCH 1004/1007] mt76: mt7915: add support for muru_onoff via
+Date: Wed, 22 Jun 2022 10:45:53 +0800
+Subject: [PATCH 1004/1008] mt76: mt7915: add support for muru_onoff via
  debugfs
 
 ---
  mt7915/init.c        |  1 +
- mt7915/mcu.c         | 12 ++++++++----
+ mt7915/mcu.c         |  9 +++++++--
  mt7915/mcu.h         |  6 ++++++
- mt7915/mt7915.h      |  1 +
  mt7915/mtk_debugfs.c | 33 +++++++++++++++++++++++++++++++++
- 5 files changed, 49 insertions(+), 4 deletions(-)
+ 4 files changed, 47 insertions(+), 2 deletions(-)
 
 diff --git a/mt7915/init.c b/mt7915/init.c
-index 258bb20a..2b8d758f 100644
+index fa9568c..6e2a1c1 100644
 --- a/mt7915/init.c
 +++ b/mt7915/init.c
-@@ -576,6 +576,7 @@ static void mt7915_init_work(struct work_struct *work)
+@@ -577,6 +577,7 @@ static void mt7915_init_work(struct work_struct *work)
  	mt7915_init_txpower(dev, &dev->mphy.sband_5g.sband);
  	mt7915_init_txpower(dev, &dev->mphy.sband_6g.sband);
  	mt7915_txbf_init(dev);
@@ -25,18 +24,10 @@
  
  void mt7915_wfsys_reset(struct mt7915_dev *dev)
 diff --git a/mt7915/mcu.c b/mt7915/mcu.c
-index 18b05b2e..5df0b4fd 100644
+index 0941bf3..34cf3e6 100644
 --- a/mt7915/mcu.c
 +++ b/mt7915/mcu.c
-@@ -944,6 +944,7 @@ mt7915_mcu_sta_muru_tlv(struct sk_buff *skb, struct ieee80211_sta *sta,
- 			struct ieee80211_vif *vif)
- {
- 	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-+	struct mt7915_dev *dev = mvif->phy->dev;
- 	struct ieee80211_he_cap_elem *elem = &sta->he_cap.he_cap_elem;
- 	struct sta_rec_muru *muru;
- 	struct tlv *tlv;
-@@ -956,11 +957,14 @@ mt7915_mcu_sta_muru_tlv(struct sk_buff *skb, struct ieee80211_sta *sta,
+@@ -856,13 +856,18 @@ mt7915_mcu_sta_muru_tlv(struct mt7915_dev *dev, struct sk_buff *skb,
  
  	muru = (struct sta_rec_muru *)tlv;
  
@@ -44,46 +35,36 @@
 +	muru->cfg.mimo_dl_en = (mvif->cap.he_mu_ebfer ||
  			       mvif->cap.vht_mu_ebfer ||
 -			       mvif->cap.vht_mu_ebfee;
--	muru->cfg.mimo_ul_en = true;
--	muru->cfg.ofdma_dl_en = true;
 +			       mvif->cap.vht_mu_ebfee) &&
-+			       !!(dev->dbg.muru_onoff & MUMIMO_DL);
-+
++				   !!(dev->dbg.muru_onoff & MUMIMO_DL);
+ 	if (!is_mt7915(&dev->mt76))
+ 		muru->cfg.mimo_ul_en = true;
+ 	muru->cfg.ofdma_dl_en = true;
+ 
 +	muru->cfg.mimo_ul_en = !!(dev->dbg.muru_onoff & MUMIMO_UL);
 +	muru->cfg.ofdma_dl_en = !!(dev->dbg.muru_onoff & OFDMA_DL);
 +	muru->cfg.ofdma_ul_en = !!(dev->dbg.muru_onoff & OFDMA_UL);
- 
++
  	if (sta->vht_cap.vht_supported)
  		muru->mimo_dl.vht_mu_bfee =
+ 			!!(sta->vht_cap.cap & IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE);
 diff --git a/mt7915/mcu.h b/mt7915/mcu.h
-index cb854b28..0ff1fd11 100644
+index ec8887b..07c1f2b 100644
 --- a/mt7915/mcu.h
 +++ b/mt7915/mcu.h
-@@ -589,4 +589,10 @@ struct csi_data {
+@@ -552,4 +552,10 @@ struct csi_data {
  };
  #endif
  
 +/* MURU */
-+#define OFDMA_DL			BIT(0)
-+#define OFDMA_UL			BIT(1)
-+#define MUMIMO_DL			BIT(2)
-+#define MUMIMO_UL			BIT(3)
++#define OFDMA_DL                       BIT(0)
++#define OFDMA_UL                       BIT(1)
++#define MUMIMO_DL                      BIT(2)
++#define MUMIMO_UL                      BIT(3)
 +
  #endif
-diff --git a/mt7915/mt7915.h b/mt7915/mt7915.h
-index ace01e15..06f2737f 100644
---- a/mt7915/mt7915.h
-+++ b/mt7915/mt7915.h
-@@ -403,6 +403,7 @@ struct mt7915_dev {
- 		bool dump_rx_pkt;
- 		bool dump_rx_raw;
- 		u32 token_idx;
-+		u8 muru_onoff;
- 	} dbg;
- 	const struct mt7915_dbg_reg_desc *dbg_reg;
- #endif
 diff --git a/mt7915/mtk_debugfs.c b/mt7915/mtk_debugfs.c
-index ccaaea78..d2dbae45 100644
+index f18c8b6..e239df9 100644
 --- a/mt7915/mtk_debugfs.c
 +++ b/mt7915/mtk_debugfs.c
 @@ -2480,6 +2480,38 @@ static int mt7915_token_txd_read(struct seq_file *s, void *data)
@@ -92,35 +73,35 @@
  
 +static int mt7915_muru_onoff_get(void *data, u64 *val)
 +{
-+	struct mt7915_dev *dev = data;
++       struct mt7915_dev *dev = data;
 +
-+	*val = dev->dbg.muru_onoff;
++       *val = dev->dbg.muru_onoff;
 +
-+	printk("mumimo ul:%d, mumimo dl:%d, ofdma ul:%d, ofdma dl:%d\n",
-+		!!(dev->dbg.muru_onoff & MUMIMO_UL),
-+		!!(dev->dbg.muru_onoff & MUMIMO_DL),
-+		!!(dev->dbg.muru_onoff & OFDMA_UL),
-+		!!(dev->dbg.muru_onoff & OFDMA_DL));
++       printk("mumimo ul:%d, mumimo dl:%d, ofdma ul:%d, ofdma dl:%d\n",
++               !!(dev->dbg.muru_onoff & MUMIMO_UL),
++               !!(dev->dbg.muru_onoff & MUMIMO_DL),
++               !!(dev->dbg.muru_onoff & OFDMA_UL),
++               !!(dev->dbg.muru_onoff & OFDMA_DL));
 +
-+	return 0;
++       return 0;
 +}
 +
 +static int mt7915_muru_onoff_set(void *data, u64 val)
 +{
-+	struct mt7915_dev *dev = data;
++       struct mt7915_dev *dev = data;
 +
-+	if (val > 15) {
-+		printk("Wrong value! The value is between 0 ~ 15.\n");
-+		goto exit;
-+	}
++       if (val > 15) {
++               printk("Wrong value! The value is between 0 ~ 15.\n");
++               goto exit;
++       }
 +
-+	dev->dbg.muru_onoff = val;
++       dev->dbg.muru_onoff = val;
 +exit:
-+	return 0;
++       return 0;
 +}
 +
 +DEFINE_DEBUGFS_ATTRIBUTE(fops_muru_onoff, mt7915_muru_onoff_get,
-+			mt7915_muru_onoff_set, "%llx\n");
++                       mt7915_muru_onoff_set, "%llx\n");
 +
  static int mt7915_amsduinfo_read(struct seq_file *s, void *data)
  {
diff --git a/recipes-kernel/linux-mt76/files/patches/1005-mt76-certification-patches.patch b/recipes-kernel/linux-mt76/files/patches/1005-mt76-certification-patches.patch
index cac0cd4..e73014d 100644
--- a/recipes-kernel/linux-mt76/files/patches/1005-mt76-certification-patches.patch
+++ b/recipes-kernel/linux-mt76/files/patches/1005-mt76-certification-patches.patch
@@ -1,7 +1,7 @@
-From 1482994a9bfbc34fdb5887cd6438eb04be0c9d26 Mon Sep 17 00:00:00 2001
+From a050a241c404f9a56ff84a972b80f744750731ca Mon Sep 17 00:00:00 2001
 From: MeiChia Chiu <meichia.chiu@mediatek.com>
 Date: Mon, 6 Jun 2022 20:15:51 +0800
-Subject: [PATCH 1005/1007] mt76: certification patches
+Subject: [PATCH 1005/1008] mt76: certification patches
 
 ---
  mt76_connac_mcu.h    |   1 +
@@ -9,18 +9,18 @@
  mt7915/mac.c         |  23 +++
  mt7915/main.c        |  15 +-
  mt7915/mcu.c         | 466 +++++++++++++++++++++++++++++++++++++++++++
- mt7915/mcu.h         | 209 ++++++++++++++++++-
+ mt7915/mcu.h         | 207 ++++++++++++++++++-
  mt7915/mt7915.h      |  13 ++
  mt7915/mtk_debugfs.c |   7 +-
  mt7915/vendor.c      | 187 +++++++++++++++++
  mt7915/vendor.h      |  42 ++++
- 10 files changed, 964 insertions(+), 6 deletions(-)
+ 10 files changed, 962 insertions(+), 6 deletions(-)
 
 diff --git a/mt76_connac_mcu.h b/mt76_connac_mcu.h
-index 1c24dbf4..82498039 100644
+index 42425f7..32e540c 100644
 --- a/mt76_connac_mcu.h
 +++ b/mt76_connac_mcu.h
-@@ -993,6 +993,7 @@ enum {
+@@ -1144,6 +1144,7 @@ enum {
  	MCU_EXT_CMD_PHY_STAT_INFO = 0xad,
  	/* for vendor csi and air monitor */
  	MCU_EXT_CMD_SMESH_CTRL = 0xae,
@@ -29,10 +29,10 @@
  };
  
 diff --git a/mt7915/init.c b/mt7915/init.c
-index 2b8d758f..b4404aec 100644
+index 6e2a1c1..02d1b6d 100644
 --- a/mt7915/init.c
 +++ b/mt7915/init.c
-@@ -371,12 +371,17 @@ mt7915_init_wiphy(struct ieee80211_hw *hw)
+@@ -372,12 +372,17 @@ mt7915_init_wiphy(struct ieee80211_hw *hw)
  	if (!phy->dev->dbdc_support)
  		wiphy->txq_memory_limit = 32 << 20; /* 32 MiB */
  
@@ -52,7 +52,7 @@
  			IEEE80211_HT_CAP_LDPC_CODING |
  			IEEE80211_HT_CAP_MAX_AMSDU;
 diff --git a/mt7915/mac.c b/mt7915/mac.c
-index 4989f437..9af0644f 100644
+index 69c226f..9058c75 100644
 --- a/mt7915/mac.c
 +++ b/mt7915/mac.c
 @@ -7,6 +7,7 @@
@@ -63,7 +63,7 @@
  
  #define to_rssi(field, rxv)	((FIELD_GET(field, rxv) - 220) / 2)
  
-@@ -2486,6 +2487,21 @@ static void mt7915_mac_severe_check(struct mt7915_phy *phy)
+@@ -1734,6 +1735,21 @@ static void mt7915_mac_severe_check(struct mt7915_phy *phy)
  	phy->trb_ts = trb;
  }
  
@@ -85,7 +85,7 @@
  void mt7915_mac_sta_rc_work(struct work_struct *work)
  {
  	struct mt7915_dev *dev = container_of(work, struct mt7915_dev, rc_work);
-@@ -2508,6 +2524,13 @@ void mt7915_mac_sta_rc_work(struct work_struct *work)
+@@ -1756,6 +1772,13 @@ void mt7915_mac_sta_rc_work(struct work_struct *work)
  		sta = container_of((void *)msta, struct ieee80211_sta, drv_priv);
  		vif = container_of((void *)msta->vif, struct ieee80211_vif, drv_priv);
  
@@ -100,10 +100,10 @@
  			       IEEE80211_RC_NSS_CHANGED |
  			       IEEE80211_RC_BW_CHANGED))
 diff --git a/mt7915/main.c b/mt7915/main.c
-index 7d4e7838..24bc12f5 100644
+index e461e0f..c2304db 100644
 --- a/mt7915/main.c
 +++ b/mt7915/main.c
-@@ -649,6 +649,9 @@ int mt7915_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,
+@@ -653,6 +653,9 @@ int mt7915_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,
  	struct mt7915_sta *msta = (struct mt7915_sta *)sta->drv_priv;
  	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
  	bool ext_phy = mvif->phy != &dev->phy;
@@ -113,7 +113,7 @@
  	int ret, idx;
  
  	idx = mt76_wcid_alloc(dev->mt76.wcid_mask, MT7915_WTBL_STA);
-@@ -674,7 +677,17 @@ int mt7915_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,
+@@ -678,7 +681,17 @@ int mt7915_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,
  #ifdef CONFIG_MTK_VENDOR
  	mt7915_vendor_amnt_sta_remove(mvif->phy, sta);
  #endif
@@ -133,10 +133,10 @@
  
  void mt7915_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,
 diff --git a/mt7915/mcu.c b/mt7915/mcu.c
-index 5df0b4fd..495f2368 100644
+index 34cf3e6..759d615 100644
 --- a/mt7915/mcu.c
 +++ b/mt7915/mcu.c
-@@ -3850,6 +3850,472 @@ mt7915_mcu_report_csi(struct mt7915_dev *dev, struct sk_buff *skb)
+@@ -3560,6 +3560,472 @@ mt7915_mcu_report_csi(struct mt7915_dev *dev, struct sk_buff *skb)
  
  	return 0;
  }
@@ -610,10 +610,10 @@
  
  #ifdef MTK_DEBUG
 diff --git a/mt7915/mcu.h b/mt7915/mcu.h
-index 0ff1fd11..364ea0dd 100644
+index 07c1f2b..7b1a521 100644
 --- a/mt7915/mcu.h
 +++ b/mt7915/mcu.h
-@@ -433,9 +433,13 @@ enum {
+@@ -396,9 +396,13 @@ enum {
  	RATE_PARAM_FIXED = 3,
  	RATE_PARAM_MMPS_UPDATE = 5,
  	RATE_PARAM_FIXED_HE_LTF = 7,
@@ -628,7 +628,7 @@
  };
  
  #define RATE_CFG_MCS			GENMASK(3, 0)
-@@ -447,6 +451,9 @@ enum {
+@@ -410,6 +414,9 @@ enum {
  #define RATE_CFG_PHY_TYPE		GENMASK(27, 24)
  #define RATE_CFG_HE_LTF			GENMASK(31, 28)
  
@@ -638,100 +638,99 @@
  enum {
  	THERMAL_PROTECT_PARAMETER_CTRL,
  	THERMAL_PROTECT_BASIC_INFO,
-@@ -594,5 +601,205 @@ struct csi_data {
- #define OFDMA_UL			BIT(1)
- #define MUMIMO_DL			BIT(2)
- #define MUMIMO_UL			BIT(3)
-+#define MUMIMO_DL_CERT			BIT(4)
-+
+@@ -557,5 +564,203 @@ struct csi_data {
+ #define OFDMA_UL                       BIT(1)
+ #define MUMIMO_DL                      BIT(2)
+ #define MUMIMO_UL                      BIT(3)
++#define MUMIMO_DL_CERT                 BIT(4)
 +
 +#ifdef CONFIG_MTK_VENDOR
 +struct mt7915_muru_comm {
-+	u8 ppdu_format;
-+	u8 sch_type;
-+	u8 band;
-+	u8 wmm_idx;
-+	u8 spe_idx;
-+	u8 proc_type;
++   u8 ppdu_format;
++   u8 sch_type;
++   u8 band;
++   u8 wmm_idx;
++   u8 spe_idx;
++   u8 proc_type;
 +};
 +
 +struct mt7915_muru_dl {
-+	u8 user_num;
-+	u8 tx_mode;
-+	u8 bw;
-+	u8 gi;
-+	u8 ltf;
-+	/* sigB */
-+	u8 mcs;
-+	u8 dcm;
-+	u8 cmprs;
++   u8 user_num;
++   u8 tx_mode;
++   u8 bw;
++   u8 gi;
++   u8 ltf;
++   /* sigB */
++   u8 mcs;
++   u8 dcm;
++   u8 cmprs;
 +
-+	u8 ru[8];
-+	u8 c26[2];
-+	u8 ack_policy;
++   u8 ru[8];
++   u8 c26[2];
++   u8 ack_policy;
 +
-+	struct {
-+		__le16 wlan_idx;
-+		u8 ru_alloc_seg;
-+		u8 ru_idx;
-+		u8 ldpc;
-+		u8 nss;
-+		u8 mcs;
-+		u8 mu_group_idx;
-+		u8 vht_groud_id;
-+		u8 vht_up;
-+		u8 he_start_stream;
-+		u8 he_mu_spatial;
-+		u8 ack_policy;
-+		__le16 tx_power_alpha;
-+	} usr[16];
++   struct {
++	   __le16 wlan_idx;
++       u8 ru_alloc_seg;
++       u8 ru_idx;
++       u8 ldpc;
++       u8 nss;
++       u8 mcs;
++       u8 mu_group_idx;
++       u8 vht_groud_id;
++       u8 vht_up;
++       u8 he_start_stream;
++       u8 he_mu_spatial;
++       u8 ack_policy;
++       __le16 tx_power_alpha;
++   } usr[16];
 +};
 +
 +struct mt7915_muru_ul {
-+	u8 user_num;
++   u8 user_num;
 +
-+	/* UL TX */
-+	u8 trig_type;
-+	__le16 trig_cnt;
-+	__le16 trig_intv;
-+	u8 bw;
-+	u8 gi_ltf;
-+	__le16 ul_len;
-+	u8 pad;
-+	u8 trig_ta[ETH_ALEN];
-+	u8 ru[8];
-+	u8 c26[2];
++   /* UL TX */
++   u8 trig_type;
++   __le16 trig_cnt;
++   __le16 trig_intv;
++   u8 bw;
++   u8 gi_ltf;
++   __le16 ul_len;
++   u8 pad;
++   u8 trig_ta[ETH_ALEN];
++   u8 ru[8];
++   u8 c26[2];
 +
-+	struct {
-+		__le16 wlan_idx;
-+		u8 ru_alloc;
-+		u8 ru_idx;
-+		u8 ldpc;
-+		u8 nss;
-+		u8 mcs;
-+		u8 target_rssi;
-+		__le32 trig_pkt_size;
-+	} usr[16];
++   struct {
++       __le16 wlan_idx;
++       u8 ru_alloc;
++       u8 ru_idx;
++       u8 ldpc;
++       u8 nss;
++       u8 mcs;
++       u8 target_rssi;
++       __le32 trig_pkt_size;
++   } usr[16];
 +
-+	/* HE TB RX Debug */
-+	__le32 rx_hetb_nonsf_en_bitmap;
-+	__le32 rx_hetb_cfg[2];
++   /* HE TB RX Debug */
++   __le32 rx_hetb_nonsf_en_bitmap;
++   __le32 rx_hetb_cfg[2];
 +
-+	/* DL TX */
-+	u8 ba_type;
++   /* DL TX */
++   u8 ba_type;
 +};
 +
 +struct mt7915_muru {
-+	__le32 cfg_comm;
-+	__le32 cfg_dl;
-+	__le32 cfg_ul;
++   __le32 cfg_comm;
++   __le32 cfg_dl;
++   __le32 cfg_ul;
 +
-+	struct mt7915_muru_comm comm;
-+	struct mt7915_muru_dl dl;
-+	struct mt7915_muru_ul ul;
++   struct mt7915_muru_comm comm;
++   struct mt7915_muru_dl dl;
++   struct mt7915_muru_ul ul;
 +};
 +
-+#define MURU_PPDU_HE_TRIG		BIT(2)
++#define MURU_PPDU_HE_TRIG      BIT(2)
 +#define MURU_PPDU_HE_MU                 BIT(3)
 +
 +#define MURU_OFDMA_SCH_TYPE_DL          BIT(0)
@@ -741,114 +740,113 @@
 +#define MURU_COMM_PPDU_FMT              BIT(0)
 +#define MURU_COMM_SCH_TYPE              BIT(1)
 +#define MURU_COMM_SET                   (MURU_COMM_PPDU_FMT | MURU_COMM_SCH_TYPE)
-+
 +/* DL&UL User config*/
 +#define MURU_USER_CNT                   BIT(4)
 +
 +enum {
-+	CAPI_SU,
-+	CAPI_MU,
-+	CAPI_ER_SU,
-+	CAPI_TB,
-+	CAPI_LEGACY
++   CAPI_SU,
++   CAPI_MU,
++   CAPI_ER_SU,
++   CAPI_TB,
++   CAPI_LEGACY
 +};
 +
 +enum {
-+	CAPI_BASIC,
-+	CAPI_BRP,
-+	CAPI_MU_BAR,
-+	CAPI_MU_RTS,
-+	CAPI_BSRP,
-+	CAPI_GCR_MU_BAR,
-+	CAPI_BQRP,
-+	CAPI_NDP_FRP
++   CAPI_BASIC,
++   CAPI_BRP,
++   CAPI_MU_BAR,
++   CAPI_MU_RTS,
++   CAPI_BSRP,
++   CAPI_GCR_MU_BAR,
++   CAPI_BQRP,
++   CAPI_NDP_FRP
 +};
 +
 +enum {
-+	MURU_SET_BSRP_CTRL = 1,
-+	MURU_SET_SUTX = 16,
-+	MURU_SET_MUMIMO_CTRL = 17,
-+	MURU_SET_MANUAL_CFG = 100,
-+	MURU_SET_MU_DL_ACK_POLICY = 200,
-+	MURU_SET_TRIG_TYPE = 201,
-+	MURU_SET_20M_DYN_ALGO = 202,
-+	MURU_SET_PROT_FRAME_THR = 204,
-+	MURU_SET_CERT_MU_EDCA_OVERRIDE = 205,
++   MURU_SET_BSRP_CTRL = 1,
++   MURU_SET_SUTX = 16,
++   MURU_SET_MUMIMO_CTRL = 17,
++   MURU_SET_MANUAL_CFG = 100,
++   MURU_SET_MU_DL_ACK_POLICY = 200,
++   MURU_SET_TRIG_TYPE = 201,
++   MURU_SET_20M_DYN_ALGO = 202,
++   MURU_SET_PROT_FRAME_THR = 204,
++   MURU_SET_CERT_MU_EDCA_OVERRIDE = 205,
 +};
 +
 +enum {
-+	MU_DL_ACK_POLICY_MU_BAR = 3,
-+	MU_DL_ACK_POLICY_TF_FOR_ACK = 4,
-+	MU_DL_ACK_POLICY_SU_BAR = 5,
++   MU_DL_ACK_POLICY_MU_BAR = 3,
++   MU_DL_ACK_POLICY_TF_FOR_ACK = 4,
++  MU_DL_ACK_POLICY_SU_BAR = 5,
 +};
 +
 +enum {
-+	BF_SOUNDING_OFF = 0,
-+	BF_SOUNDING_ON,
-+	BF_DATA_PACKET_APPLY,
-+	BF_PFMU_MEM_ALLOCATE,
-+	BF_PFMU_MEM_RELEASE,
-+	BF_PFMU_TAG_READ,
-+	BF_PFMU_TAG_WRITE,
-+	BF_PROFILE_READ,
-+	BF_PROFILE_WRITE,
-+	BF_PN_READ,
-+	BF_PN_WRITE,
-+	BF_PFMU_MEM_ALLOC_MAP_READ,
-+	BF_AID_SET,
-+	BF_STA_REC_READ,
-+	BF_PHASE_CALIBRATION,
-+	BF_IBF_PHASE_COMP,
-+	BF_LNA_GAIN_CONFIG,
-+	BF_PROFILE_WRITE_20M_ALL,
-+	BF_APCLIENT_CLUSTER,
-+	BF_AWARE_CTRL,
-+	BF_HW_ENABLE_STATUS_UPDATE,
-+	BF_REPT_CLONED_STA_TO_NORMAL_STA,
-+	BF_GET_QD,
-+	BF_BFEE_HW_CTRL,
-+	BF_PFMU_SW_TAG_WRITE,
-+	BF_MOD_EN_CTRL,
-+	BF_DYNSND_EN_INTR,
-+	BF_DYNSND_CFG_DMCS_TH,
-+	BF_DYNSND_EN_PFID_INTR,
-+	BF_CONFIG,
-+	BF_PFMU_DATA_WRITE,
-+	BF_FBRPT_DBG_INFO_READ,
-+	BF_CMD_TXSND_INFO,
-+	BF_CMD_PLY_INFO,
-+	BF_CMD_MU_METRIC,
-+	BF_CMD_TXCMD,
-+	BF_CMD_CFG_PHY,
-+	BF_CMD_SND_CNT,
-+	BF_CMD_MAX
++   BF_SOUNDING_OFF = 0,
++   BF_SOUNDING_ON,
++   BF_DATA_PACKET_APPLY,
++   BF_PFMU_MEM_ALLOCATE,
++   BF_PFMU_MEM_RELEASE,
++   BF_PFMU_TAG_READ,
++   BF_PFMU_TAG_WRITE,
++   BF_PROFILE_READ,
++   BF_PROFILE_WRITE,
++   BF_PN_READ,
++   BF_PN_WRITE,
++   BF_PFMU_MEM_ALLOC_MAP_READ,
++   BF_AID_SET,
++   BF_STA_REC_READ,
++   BF_PHASE_CALIBRATION,
++   BF_IBF_PHASE_COMP,
++   BF_LNA_GAIN_CONFIG,
++   BF_PROFILE_WRITE_20M_ALL,
++   BF_APCLIENT_CLUSTER,
++   BF_AWARE_CTRL,
++   BF_HW_ENABLE_STATUS_UPDATE,
++   BF_REPT_CLONED_STA_TO_NORMAL_STA,
++   BF_GET_QD,
++   BF_BFEE_HW_CTRL,
++   BF_PFMU_SW_TAG_WRITE,
++   BF_MOD_EN_CTRL,
++   BF_DYNSND_EN_INTR,
++   BF_DYNSND_CFG_DMCS_TH,
++   BF_DYNSND_EN_PFID_INTR,
++   BF_CONFIG,
++   BF_PFMU_DATA_WRITE,
++   BF_FBRPT_DBG_INFO_READ,
++   BF_CMD_TXSND_INFO,
++   BF_CMD_PLY_INFO,
++   BF_CMD_MU_METRIC,
++   BF_CMD_TXCMD,
++   BF_CMD_CFG_PHY,
++   BF_CMD_SND_CNT,
++   BF_CMD_MAX
 +};
 +
 +enum {
-+	BF_SND_READ_INFO = 0,
-+	BF_SND_CFG_OPT,
-+	BF_SND_CFG_INTV,
-+	BF_SND_STA_STOP,
-+	BF_SND_CFG_MAX_STA,
-+	BF_SND_CFG_BFRP,
-+	BF_SND_CFG_INF
++   BF_SND_READ_INFO = 0,
++   BF_SND_CFG_OPT,
++   BF_SND_CFG_INTV,
++   BF_SND_STA_STOP,
++   BF_SND_CFG_MAX_STA,
++   BF_SND_CFG_BFRP,
++   BF_SND_CFG_INF
 +};
 +
 +enum {
-+	MURU_UPDATE = 0,
-+	MURU_DL_USER_CNT,
-+	MURU_UL_USER_CNT,
-+	MURU_DL_INIT,
-+	MURU_UL_INIT,
++   MURU_UPDATE = 0,
++   MURU_DL_USER_CNT,
++   MURU_UL_USER_CNT,
++   MURU_DL_INIT,
++   MURU_UL_INIT,
 +};
 +#endif
  
  #endif
 diff --git a/mt7915/mt7915.h b/mt7915/mt7915.h
-index 06f2737f..80a17a7d 100644
+index d702532..11e92fe 100644
 --- a/mt7915/mt7915.h
 +++ b/mt7915/mt7915.h
-@@ -677,6 +677,19 @@ void mt7915_sta_add_debugfs(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
+@@ -662,6 +662,19 @@ void mt7915_sta_add_debugfs(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
  #endif
  
  #ifdef CONFIG_MTK_VENDOR
@@ -869,32 +867,32 @@
  int mt7915_mcu_set_csi(struct mt7915_phy *phy, u8 mode,
  			u8 cfg, u8 v1, u32 v2, u8 *mac_addr);
 diff --git a/mt7915/mtk_debugfs.c b/mt7915/mtk_debugfs.c
-index d2dbae45..815be6d8 100644
+index e239df9..222268f 100644
 --- a/mt7915/mtk_debugfs.c
 +++ b/mt7915/mtk_debugfs.c
 @@ -2486,7 +2486,8 @@ static int mt7915_muru_onoff_get(void *data, u64 *val)
  
- 	*val = dev->dbg.muru_onoff;
+        *val = dev->dbg.muru_onoff;
  
--	printk("mumimo ul:%d, mumimo dl:%d, ofdma ul:%d, ofdma dl:%d\n",
-+	printk("cert mumimo dl:%d, mumimo ul:%d, mumimo dl:%d, ofdma ul:%d, ofdma dl:%d\n",
-+		!!(dev->dbg.muru_onoff & MUMIMO_DL_CERT),
- 		!!(dev->dbg.muru_onoff & MUMIMO_UL),
- 		!!(dev->dbg.muru_onoff & MUMIMO_DL),
- 		!!(dev->dbg.muru_onoff & OFDMA_UL),
+-       printk("mumimo ul:%d, mumimo dl:%d, ofdma ul:%d, ofdma dl:%d\n",
++	   printk("cert mumimo dl:%d, mumimo ul:%d, mumimo dl:%d, ofdma ul:%d, ofdma dl:%d\n",
++               !!(dev->dbg.muru_onoff & MUMIMO_DL_CERT),
+                !!(dev->dbg.muru_onoff & MUMIMO_UL),
+                !!(dev->dbg.muru_onoff & MUMIMO_DL),
+                !!(dev->dbg.muru_onoff & OFDMA_UL),
 @@ -2499,8 +2500,8 @@ static int mt7915_muru_onoff_set(void *data, u64 val)
  {
- 	struct mt7915_dev *dev = data;
+        struct mt7915_dev *dev = data;
  
--	if (val > 15) {
--		printk("Wrong value! The value is between 0 ~ 15.\n");
-+	if (val > 31) {
-+		printk("Wrong value! The value is between 0 ~ 31.\n");
- 		goto exit;
- 	}
+-       if (val > 15) {
+-               printk("Wrong value! The value is between 0 ~ 15.\n");
++       if (val > 31) {
++               printk("Wrong value! The value is between 0 ~ 31.\n");
+                goto exit;
+        }
  
 diff --git a/mt7915/vendor.c b/mt7915/vendor.c
-index b94d787e..7456c577 100644
+index b94d787..7456c57 100644
 --- a/mt7915/vendor.c
 +++ b/mt7915/vendor.c
 @@ -22,6 +22,29 @@ csi_ctrl_policy[NUM_MTK_VENDOR_ATTRS_CSI_CTRL] = {
@@ -1106,7 +1104,7 @@
  };
  
 diff --git a/mt7915/vendor.h b/mt7915/vendor.h
-index 976817f3..1b08321c 100644
+index 976817f..1b08321 100644
 --- a/mt7915/vendor.h
 +++ b/mt7915/vendor.h
 @@ -6,6 +6,48 @@
diff --git a/recipes-kernel/linux-mt76/files/patches/1006-mt76-mt7915-add-L0.5-system-error-recovery-support.patch b/recipes-kernel/linux-mt76/files/patches/1006-mt76-mt7915-add-L0.5-system-error-recovery-support.patch
index 34b74bb..45c4f47 100644
--- a/recipes-kernel/linux-mt76/files/patches/1006-mt76-mt7915-add-L0.5-system-error-recovery-support.patch
+++ b/recipes-kernel/linux-mt76/files/patches/1006-mt76-mt7915-add-L0.5-system-error-recovery-support.patch
@@ -1,24 +1,24 @@
-From 295dac8799e536a2d5dc53e727e246e469739853 Mon Sep 17 00:00:00 2001
+From e67f8f36aeefd28730ea21dc82b946c7fba4dc09 Mon Sep 17 00:00:00 2001
 From: Bo Jiao <Bo.Jiao@mediatek.com>
-Date: Mon, 6 Jun 2022 20:18:15 +0800
-Subject: [PATCH 1006/1007] mt76: mt7915: add L0.5 system error recovery
+Date: Wed, 22 Jun 2022 10:51:59 +0800
+Subject: [PATCH 1006/1008] mt76: mt7915: add L0.5 system error recovery
  support
 
 ---
  mt7915/debugfs.c |  88 ++++++++++++---
  mt7915/dma.c     |  48 ++++++++
  mt7915/init.c    |   8 +-
- mt7915/mac.c     | 280 +++++++++++++++++++++++++++++++++++++----------
- mt7915/main.c    |  20 +++-
- mt7915/mcu.c     |  96 ++++++++++++++--
+ mt7915/mac.c     | 284 +++++++++++++++++++++++++++++++++++++----------
+ mt7915/main.c    |  19 +++-
+ mt7915/mcu.c     |  95 ++++++++++++++--
  mt7915/mcu.h     |   3 +-
  mt7915/mmio.c    |   8 +-
  mt7915/mt7915.h  |  23 ++++
  mt7915/regs.h    |  16 +++
- 10 files changed, 493 insertions(+), 97 deletions(-)
+ 10 files changed, 493 insertions(+), 99 deletions(-)
 
 diff --git a/mt7915/debugfs.c b/mt7915/debugfs.c
-index 27eae83b..c75d9e5b 100644
+index 0cfb606..07de2ee 100644
 --- a/mt7915/debugfs.c
 +++ b/mt7915/debugfs.c
 @@ -52,12 +52,17 @@ static ssize_t
@@ -142,7 +142,7 @@
  	kfree(buff);
  	return ret;
 diff --git a/mt7915/dma.c b/mt7915/dma.c
-index c2d655cd..9e3d14db 100644
+index c2d655c..9e3d14d 100644
 --- a/mt7915/dma.c
 +++ b/mt7915/dma.c
 @@ -486,6 +486,54 @@ int mt7915_dma_init(struct mt7915_dev *dev, struct mt7915_phy *phy2)
@@ -201,7 +201,7 @@
  {
  	mt7915_dma_disable(dev, true);
 diff --git a/mt7915/init.c b/mt7915/init.c
-index b4404aec..80ada114 100644
+index 02d1b6d..0d5109a 100644
 --- a/mt7915/init.c
 +++ b/mt7915/init.c
 @@ -262,7 +262,7 @@ static void mt7915_led_set_brightness(struct led_classdev *led_cdev,
@@ -213,7 +213,7 @@
  mt7915_init_txpower(struct mt7915_dev *dev,
  		    struct ieee80211_supported_band *sband)
  {
-@@ -448,7 +448,7 @@ mt7915_mac_init_band(struct mt7915_dev *dev, u8 band)
+@@ -449,7 +449,7 @@ mt7915_mac_init_band(struct mt7915_dev *dev, u8 band)
  	mt76_clear(dev, MT_DMA_DCR0(band), MT_DMA_DCR0_RXD_G5_EN);
  }
  
@@ -222,7 +222,7 @@
  {
  	int i;
  	u32 rx_len = is_mt7915(&dev->mt76) ? 0x400 : 0x680;
-@@ -478,7 +478,7 @@ static void mt7915_mac_init(struct mt7915_dev *dev)
+@@ -479,7 +479,7 @@ static void mt7915_mac_init(struct mt7915_dev *dev)
  	}
  }
  
@@ -231,7 +231,7 @@
  {
  	int ret;
  
-@@ -1160,6 +1160,8 @@ int mt7915_register_device(struct mt7915_dev *dev)
+@@ -1162,6 +1162,8 @@ int mt7915_register_device(struct mt7915_dev *dev)
  
  	mt7915_init_debugfs(&dev->phy);
  
@@ -241,7 +241,7 @@
  
  unreg_thermal:
 diff --git a/mt7915/mac.c b/mt7915/mac.c
-index 9af0644f..a9ebbf12 100644
+index 9058c75..0593270 100644
 --- a/mt7915/mac.c
 +++ b/mt7915/mac.c
 @@ -3,6 +3,7 @@
@@ -252,7 +252,7 @@
  #include "mt7915.h"
  #include "../dma.h"
  #include "mac.h"
-@@ -2063,85 +2064,188 @@ mt7915_update_beacons(struct mt7915_dev *dev)
+@@ -1311,85 +1312,188 @@ mt7915_update_beacons(struct mt7915_dev *dev)
  		mt7915_update_vif_beacon, dev->mt76.phy2->hw);
  }
  
@@ -265,10 +265,7 @@
 -	int i;
 +	struct mt76_txwi_cache *txwi;
 +	int id;
- 
--	mt76_clear(dev, MT_WFDMA0_GLO_CFG,
--		   MT_WFDMA0_GLO_CFG_TX_DMA_EN |
--		   MT_WFDMA0_GLO_CFG_RX_DMA_EN);
++
 +	spin_lock_bh(&dev->mt76.token_lock);
 +	idr_for_each_entry(&dev->mt76.token, txwi, id) {
 +		mt7915_txwi_free(dev, txwi, NULL, NULL);
@@ -277,11 +274,7 @@
 +	spin_unlock_bh(&dev->mt76.token_lock);
 +	idr_destroy(&dev->mt76.token);
 +}
- 
--	if (is_mt7915(&dev->mt76))
--		mt76_clear(dev, MT_WFDMA1_GLO_CFG,
--			   MT_WFDMA1_GLO_CFG_TX_DMA_EN |
--			   MT_WFDMA1_GLO_CFG_RX_DMA_EN);
++
 +static int
 +mt7915_mac_reset(struct mt7915_dev *dev)
 +{
@@ -290,10 +283,17 @@
 +	struct mt76_dev *mdev = &dev->mt76;
 +	int i, ret;
 +	u32 irq_mask;
-+
+ 
+-	mt76_clear(dev, MT_WFDMA0_GLO_CFG,
+-		   MT_WFDMA0_GLO_CFG_TX_DMA_EN |
+-		   MT_WFDMA0_GLO_CFG_RX_DMA_EN);
 +	ext_phy = dev->mt76.phy2;
 +	phy2 = ext_phy ? ext_phy->priv : NULL;
-+
+ 
+-	if (is_mt7915(&dev->mt76))
+-		mt76_clear(dev, MT_WFDMA1_GLO_CFG,
+-			   MT_WFDMA1_GLO_CFG_TX_DMA_EN |
+-			   MT_WFDMA1_GLO_CFG_RX_DMA_EN);
 +	/* irq disable */
 +	mt76_wr(dev, MT_INT_MASK_CSR, 0x0);
 +	mt76_wr(dev, MT_INT_SOURCE_CSR, ~0);
@@ -301,6 +301,11 @@
 -		mt76_clear(dev, MT_WFDMA0_GLO_CFG + hif1_ofs,
 -			   MT_WFDMA0_GLO_CFG_TX_DMA_EN |
 -			   MT_WFDMA0_GLO_CFG_RX_DMA_EN);
+-
+-		if (is_mt7915(&dev->mt76))
+-			mt76_clear(dev, MT_WFDMA1_GLO_CFG + hif1_ofs,
+-				   MT_WFDMA1_GLO_CFG_TX_DMA_EN |
+-				   MT_WFDMA1_GLO_CFG_RX_DMA_EN);
 +		mt76_wr(dev, MT_INT1_MASK_CSR, 0x0);
 +		mt76_wr(dev, MT_INT1_SOURCE_CSR, ~0);
 +	}
@@ -308,12 +313,14 @@
 +		mt76_wr(dev, MT_PCIE_MAC_INT_ENABLE, 0x0);
 +		if (dev->hif2)
 +			mt76_wr(dev, MT_PCIE1_MAC_INT_ENABLE, 0x0);
-+	}
+ 	}
  
--		if (is_mt7915(&dev->mt76))
--			mt76_clear(dev, MT_WFDMA1_GLO_CFG + hif1_ofs,
--				   MT_WFDMA1_GLO_CFG_TX_DMA_EN |
--				   MT_WFDMA1_GLO_CFG_RX_DMA_EN);
+-	usleep_range(1000, 2000);
+-
+-	for (i = 0; i < __MT_TXQ_MAX; i++) {
+-		mt76_queue_tx_cleanup(dev, dev->mphy.q_tx[i], true);
+-		if (mphy_ext)
+-			mt76_queue_tx_cleanup(dev, mphy_ext->q_tx[i], true);
 +	set_bit(MT76_RESET, &dev->mphy.state);
 +	set_bit(MT76_MCU_RESET, &dev->mphy.state);
 +	wake_up(&dev->mt76.mcu.wait);
@@ -322,38 +329,40 @@
 +		set_bit(MT76_MCU_RESET, &ext_phy->state);
  	}
  
--	usleep_range(1000, 2000);
+-	for (i = 0; i < __MT_MCUQ_MAX; i++)
+-		mt76_queue_tx_cleanup(dev, dev->mt76.q_mcu[i], true);
 +	/* lock/unlock all queues to ensure that no tx is pending */
 +	mt76_txq_schedule_all(&dev->mphy);
 +	if (ext_phy)
 +		mt76_txq_schedule_all(ext_phy);
  
--	for (i = 0; i < __MT_TXQ_MAX; i++) {
--		mt76_queue_tx_cleanup(dev, dev->mphy.q_tx[i], true);
--		if (mphy_ext)
--			mt76_queue_tx_cleanup(dev, mphy_ext->q_tx[i], true);
+-	mt76_for_each_q_rx(&dev->mt76, i)
+-		mt76_queue_rx_reset(dev, i);
 +	/* disable all tx/rx napi */
 +	mt76_worker_disable(&dev->mt76.tx_worker);
 +	mt76_for_each_q_rx(mdev, i) {
 +		if (mdev->q_rx[i].ndesc)
 +			napi_disable(&dev->mt76.napi[i]);
- 	}
++	}
 +	napi_disable(&dev->mt76.tx_napi);
  
--	for (i = 0; i < __MT_MCUQ_MAX; i++)
--		mt76_queue_tx_cleanup(dev, dev->mt76.q_mcu[i], true);
--
--	mt76_for_each_q_rx(&dev->mt76, i)
--		mt76_queue_rx_reset(dev, i);
+-	mt76_tx_status_check(&dev->mt76, true);
 +	/* token reinit */
 +	mt7915_tx_token_put(dev);
 +	idr_init(&dev->mt76.token);
  
--	mt76_tx_status_check(&dev->mt76, true);
-+	mt7915_dma_reset(dev, true);
- 
 -	/* re-init prefetch settings after reset */
 -	mt7915_dma_prefetch(dev);
++	mt7915_dma_reset(dev, true);
+ 
+-	mt76_set(dev, MT_WFDMA0_GLO_CFG,
+-		 MT_WFDMA0_GLO_CFG_TX_DMA_EN | MT_WFDMA0_GLO_CFG_RX_DMA_EN);
+-	if (is_mt7915(&dev->mt76))
+-		mt76_set(dev, MT_WFDMA1_GLO_CFG,
+-			 MT_WFDMA1_GLO_CFG_TX_DMA_EN |
+-			 MT_WFDMA1_GLO_CFG_RX_DMA_EN |
+-			 MT_WFDMA1_GLO_CFG_OMIT_TX_INFO |
+-			 MT_WFDMA1_GLO_CFG_OMIT_RX_INFO);
 +	local_bh_disable();
 +	mt76_for_each_q_rx(mdev, i) {
 +		if (mdev->q_rx[i].ndesc) {
@@ -364,21 +373,20 @@
 +	local_bh_enable();
 +	clear_bit(MT76_MCU_RESET, &dev->mphy.state);
 +	clear_bit(MT76_STATE_MCU_RUNNING, &dev->mphy.state);
- 
--	mt76_set(dev, MT_WFDMA0_GLO_CFG,
--		 MT_WFDMA0_GLO_CFG_TX_DMA_EN | MT_WFDMA0_GLO_CFG_RX_DMA_EN);
--	if (is_mt7915(&dev->mt76))
--		mt76_set(dev, MT_WFDMA1_GLO_CFG,
--			 MT_WFDMA1_GLO_CFG_TX_DMA_EN |
--			 MT_WFDMA1_GLO_CFG_RX_DMA_EN |
--			 MT_WFDMA1_GLO_CFG_OMIT_TX_INFO |
--			 MT_WFDMA1_GLO_CFG_OMIT_RX_INFO);
++
 +	mt76_wr(dev, MT_INT_MASK_CSR, dev->mt76.mmio.irqmask);
 +	mt76_wr(dev, MT_INT_SOURCE_CSR, ~0);
  	if (dev->hif2) {
 -		mt76_set(dev, MT_WFDMA0_GLO_CFG + hif1_ofs,
 -			 MT_WFDMA0_GLO_CFG_TX_DMA_EN |
 -			 MT_WFDMA0_GLO_CFG_RX_DMA_EN);
+-
+-		if (is_mt7915(&dev->mt76))
+-			mt76_set(dev, MT_WFDMA1_GLO_CFG + hif1_ofs,
+-				 MT_WFDMA1_GLO_CFG_TX_DMA_EN |
+-				 MT_WFDMA1_GLO_CFG_RX_DMA_EN |
+-				 MT_WFDMA1_GLO_CFG_OMIT_TX_INFO |
+-				 MT_WFDMA1_GLO_CFG_OMIT_RX_INFO);
 +		mt76_wr(dev, MT_INT1_MASK_CSR, irq_mask);
 +		mt76_wr(dev, MT_INT1_SOURCE_CSR, ~0);
 +	}
@@ -387,13 +395,7 @@
 +		if (dev->hif2)
 +			mt76_wr(dev, MT_PCIE1_MAC_INT_ENABLE, 0xff);
 +	}
- 
--		if (is_mt7915(&dev->mt76))
--			mt76_set(dev, MT_WFDMA1_GLO_CFG + hif1_ofs,
--				 MT_WFDMA1_GLO_CFG_TX_DMA_EN |
--				 MT_WFDMA1_GLO_CFG_RX_DMA_EN |
--				 MT_WFDMA1_GLO_CFG_OMIT_TX_INFO |
--				 MT_WFDMA1_GLO_CFG_OMIT_RX_INFO);
++
 +	/* load firmware */
 +	ret = mt7915_run_firmware(dev);
 +	if (ret)
@@ -499,7 +501,7 @@
  }
  
  /* system error recovery */
-@@ -2156,6 +2260,36 @@ void mt7915_mac_reset_work(struct work_struct *work)
+@@ -1404,6 +1508,36 @@ void mt7915_mac_reset_work(struct work_struct *work)
  	ext_phy = dev->mt76.phy2;
  	phy2 = ext_phy ? ext_phy->priv : NULL;
  
@@ -536,7 +538,7 @@
  	if (!(READ_ONCE(dev->reset_state) & MT_MCU_CMD_STOP_DMA))
  		return;
  
-@@ -2181,7 +2315,7 @@ void mt7915_mac_reset_work(struct work_struct *work)
+@@ -1429,7 +1563,7 @@ void mt7915_mac_reset_work(struct work_struct *work)
  	mt76_wr(dev, MT_MCU_INT_EVENT, MT_MCU_INT_EVENT_DMA_STOPPED);
  
  	if (mt7915_wait_reset_state(dev, MT_MCU_CMD_RESET_DONE)) {
@@ -545,7 +547,7 @@
  
  		mt7915_tx_token_put(dev);
  		idr_init(&dev->mt76.token);
-@@ -2230,6 +2364,34 @@ void mt7915_mac_reset_work(struct work_struct *work)
+@@ -1478,6 +1612,34 @@ void mt7915_mac_reset_work(struct work_struct *work)
  					     MT7915_WATCHDOG_TIME);
  }
  
@@ -581,7 +583,7 @@
  {
  	struct mt7915_dev *dev = phy->dev;
 diff --git a/mt7915/main.c b/mt7915/main.c
-index 24bc12f5..082e27d4 100644
+index c2304db..dc5e4b0 100644
 --- a/mt7915/main.c
 +++ b/mt7915/main.c
 @@ -20,17 +20,13 @@ static bool mt7915_dev_running(struct mt7915_dev *dev)
@@ -603,7 +605,7 @@
  	running = mt7915_dev_running(dev);
  
  	if (!running) {
-@@ -80,6 +76,19 @@ static int mt7915_start(struct ieee80211_hw *hw)
+@@ -84,6 +80,18 @@ static int mt7915_start(struct ieee80211_hw *hw)
  		mt7915_mac_reset_counters(phy);
  
  out:
@@ -613,7 +615,6 @@
 +static int mt7915_start(struct ieee80211_hw *hw)
 +{
 +	struct mt7915_dev *dev = mt7915_hw_dev(hw);
-+	bool running;
 +	int ret;
 +
 +	flush_work(&dev->init_work);
@@ -623,7 +624,7 @@
  	mutex_unlock(&dev->mt76.mutex);
  
  	return ret;
-@@ -91,6 +100,7 @@ static void mt7915_stop(struct ieee80211_hw *hw)
+@@ -95,6 +103,7 @@ static void mt7915_stop(struct ieee80211_hw *hw)
  	struct mt7915_phy *phy = mt7915_hw_phy(hw);
  
  	cancel_delayed_work_sync(&phy->mt76->mac_work);
@@ -632,10 +633,10 @@
  	mutex_lock(&dev->mt76.mutex);
  
 diff --git a/mt7915/mcu.c b/mt7915/mcu.c
-index 495f2368..4a921a50 100644
+index 759d615..65d21ee 100644
 --- a/mt7915/mcu.c
 +++ b/mt7915/mcu.c
-@@ -207,19 +207,90 @@ mt7915_mcu_set_sta_ht_mcs(struct ieee80211_sta *sta, u8 *ht_mcs,
+@@ -150,19 +150,90 @@ mt7915_mcu_set_sta_ht_mcs(struct ieee80211_sta *sta, u8 *ht_mcs,
  		ht_mcs[nss] = sta->ht_cap.mcs.rx_mask[nss] & mask[nss];
  }
  
@@ -698,7 +699,7 @@
  			  struct sk_buff *skb, int seq)
  {
 +	struct mt7915_dev *dev = container_of(mdev, struct mt7915_dev, mt76);
- 	struct mt7915_mcu_rxd *rxd;
+ 	struct mt76_connac2_mcu_rxd *rxd;
  	int ret = 0;
  
  	if (!skb) {
@@ -723,10 +724,10 @@
  
 +	dev->ser.cmd_fail_cnt = 0;
 +
- 	rxd = (struct mt7915_mcu_rxd *)skb->data;
+ 	rxd = (struct mt76_connac2_mcu_rxd *)skb->data;
  	if (seq != rxd->seq)
  		return -EAGAIN;
-@@ -2549,18 +2620,10 @@ mt7915_mcu_init_rx_airtime(struct mt7915_dev *dev)
+@@ -2257,18 +2328,10 @@ mt7915_mcu_init_rx_airtime(struct mt7915_dev *dev)
  				 sizeof(req), true);
  }
  
@@ -734,7 +735,7 @@
 +int mt7915_run_firmware(struct mt7915_dev *dev)
  {
 -	static const struct mt76_mcu_ops mt7915_mcu_ops = {
--		.headroom = sizeof(struct mt7915_mcu_txd),
+-		.headroom = sizeof(struct mt76_connac2_mcu_txd),
 -		.mcu_skb_send_msg = mt7915_mcu_send_message,
 -		.mcu_parse_response = mt7915_mcu_parse_response,
 -		.mcu_restart = mt76_connac_mcu_restart,
@@ -746,19 +747,18 @@
  	/* force firmware operation mode into normal state,
  	 * which should be set before firmware download stage.
  	 */
-@@ -2609,6 +2672,21 @@ int mt7915_mcu_init(struct mt7915_dev *dev)
+@@ -2317,6 +2380,20 @@ int mt7915_mcu_init(struct mt7915_dev *dev)
  				 MCU_WA_PARAM_RED, 0, 0);
  }
  
 +int mt7915_mcu_init(struct mt7915_dev *dev)
 +{
 +	static const struct mt76_mcu_ops mt7915_mcu_ops = {
-+		.headroom = sizeof(struct mt7915_mcu_txd),
++		.headroom = sizeof(struct mt76_connac2_mcu_txd),
 +		.mcu_skb_send_msg = mt7915_mcu_send_message,
 +		.mcu_parse_response = mt7915_mcu_parse_response,
 +		.mcu_restart = mt76_connac_mcu_restart,
 +	};
-+	int ret;
 +
 +	dev->mt76.mcu_ops = &mt7915_mcu_ops;
 +
@@ -769,10 +769,10 @@
  {
  	__mt76_mcu_restart(&dev->mt76);
 diff --git a/mt7915/mcu.h b/mt7915/mcu.h
-index 364ea0dd..44d3722e 100644
+index 7b1a521..464e771 100644
 --- a/mt7915/mcu.h
 +++ b/mt7915/mcu.h
-@@ -489,8 +489,9 @@ enum {
+@@ -452,8 +452,9 @@ enum {
  
  enum {
  	SER_QUERY,
@@ -784,7 +784,7 @@
  	SER_SET_RECOVER_L3_RX_ABORT,
  	SER_SET_RECOVER_L3_TX_ABORT,
 diff --git a/mt7915/mmio.c b/mt7915/mmio.c
-index 71945ba9..ba61ce2e 100644
+index a8e3810..bccb108 100644
 --- a/mt7915/mmio.c
 +++ b/mt7915/mmio.c
 @@ -24,6 +24,7 @@ static const u32 mt7915_reg[] = {
@@ -825,10 +825,10 @@
  	}
  }
 diff --git a/mt7915/mt7915.h b/mt7915/mt7915.h
-index 80a17a7d..ae5ac72f 100644
+index 11e92fe..9f5da64 100644
 --- a/mt7915/mt7915.h
 +++ b/mt7915/mt7915.h
-@@ -353,6 +353,15 @@ struct mt7915_dev {
+@@ -352,6 +352,15 @@ struct mt7915_dev {
  	struct work_struct reset_work;
  	wait_queue_head_t reset_wait;
  	u32 reset_state;
@@ -855,9 +855,9 @@
 +};
 +
  enum {
- 	MT_CTX0,
- 	MT_HIF0 = 0x0,
-@@ -527,6 +542,14 @@ s8 mt7915_eeprom_get_power_delta(struct mt7915_dev *dev, int band);
+ 	MT_RX_SEL0,
+ 	MT_RX_SEL1,
+@@ -513,6 +528,14 @@ s8 mt7915_eeprom_get_power_delta(struct mt7915_dev *dev, int band);
  int mt7915_dma_init(struct mt7915_dev *dev, struct mt7915_phy *phy2);
  void mt7915_dma_prefetch(struct mt7915_dev *dev);
  void mt7915_dma_cleanup(struct mt7915_dev *dev);
@@ -873,7 +873,7 @@
  int mt7915_mcu_twt_agrt_update(struct mt7915_dev *dev,
  			       struct mt7915_vif *mvif,
 diff --git a/mt7915/regs.h b/mt7915/regs.h
-index c7c9e411..47bae86e 100644
+index c7c9e41..47bae86 100644
 --- a/mt7915/regs.h
 +++ b/mt7915/regs.h
 @@ -32,6 +32,7 @@ enum reg_rev {
diff --git a/recipes-kernel/linux-mt76/files/patches/1007-mt76-mt7915-add-support-for-runtime-set-in-band-disc.patch b/recipes-kernel/linux-mt76/files/patches/1007-mt76-mt7915-add-support-for-runtime-set-in-band-disc.patch
index 85c914e..6b9eb74 100644
--- a/recipes-kernel/linux-mt76/files/patches/1007-mt76-mt7915-add-support-for-runtime-set-in-band-disc.patch
+++ b/recipes-kernel/linux-mt76/files/patches/1007-mt76-mt7915-add-support-for-runtime-set-in-band-disc.patch
@@ -1,7 +1,7 @@
-From eee8cdc1710c18f90b8e5345dc85a0749cffabe3 Mon Sep 17 00:00:00 2001
+From 274c1a2fe580cc2f1948b7f53df228eee8a20ba3 Mon Sep 17 00:00:00 2001
 From: MeiChia Chiu <meichia.chiu@mediatek.com>
 Date: Fri, 27 May 2022 15:51:48 +0800
-Subject: [PATCH 1007/1007] mt76: mt7915:add support for runtime set in-band
+Subject: [PATCH 1007/1008] mt76: mt7915:add support for runtime set in-band
  discovery
 
 Signed-off-by: MeiChia Chiu <MeiChia.Chiu@mediatek.com>
@@ -10,10 +10,10 @@
  1 file changed, 2 insertions(+), 3 deletions(-)
 
 diff --git a/mt7915/mcu.c b/mt7915/mcu.c
-index 4a921a50..5e7b3f4a 100644
+index 65d21ee..7f2161f 100644
 --- a/mt7915/mcu.c
 +++ b/mt7915/mcu.c
-@@ -2102,8 +2102,7 @@ mt7915_mcu_beacon_inband_discov(struct mt7915_dev *dev, struct ieee80211_vif *vi
+@@ -2006,8 +2006,7 @@ mt7915_mcu_beacon_inband_discov(struct mt7915_dev *dev, struct ieee80211_vif *vi
  	u8 *buf, interval;
  	int len;
  
@@ -23,7 +23,7 @@
  		interval = vif->bss_conf.fils_discovery.max_interval;
  		skb = ieee80211_get_fils_discovery_tmpl(hw, vif);
  	} else if (changed & BSS_CHANGED_UNSOL_BCAST_PROBE_RESP &&
-@@ -2140,7 +2139,7 @@ mt7915_mcu_beacon_inband_discov(struct mt7915_dev *dev, struct ieee80211_vif *vi
+@@ -2044,7 +2043,7 @@ mt7915_mcu_beacon_inband_discov(struct mt7915_dev *dev, struct ieee80211_vif *vi
  	discov->tx_type = !!(changed & BSS_CHANGED_FILS_DISCOVERY);
  	discov->tx_interval = interval;
  	discov->prob_rsp_len = cpu_to_le16(MT_TXD_SIZE + skb->len);
diff --git a/recipes-kernel/linux-mt76/files/patches/1008-mt76-mt7915-add-mt76-vendor-muru-onoff-command.patch b/recipes-kernel/linux-mt76/files/patches/1008-mt76-mt7915-add-mt76-vendor-muru-onoff-command.patch
old mode 100755
new mode 100644
index 18be9d3..7d7ce6b
--- a/recipes-kernel/linux-mt76/files/patches/1008-mt76-mt7915-add-mt76-vendor-muru-onoff-command.patch
+++ b/recipes-kernel/linux-mt76/files/patches/1008-mt76-mt7915-add-mt76-vendor-muru-onoff-command.patch
@@ -1,8 +1,20 @@
+From 969161a225dd7a1b4c3ecdd0b6d1376566f32f27 Mon Sep 17 00:00:00 2001
+From: MeiChia Chiu <meichia.chiu@mediatek.com>
+Date: Wed, 22 Jun 2022 10:53:43 +0800
+Subject: [PATCH 1008/1008] mt76: mt7915: add mt76 vendor muru onoff command
+
+---
+ mt7915/mcu.c    |  7 +++++++
+ mt7915/mcu.h    |  1 +
+ mt7915/vendor.c | 43 +++++++++++++++++++++++++++++++++++++++++++
+ mt7915/vendor.h | 12 ++++++++++++
+ 4 files changed, 63 insertions(+)
+
 diff --git a/mt7915/mcu.c b/mt7915/mcu.c
-index d547cf6..bec0cd0 100755
+index 7f2161f..aee3a8c 100644
 --- a/mt7915/mcu.c
 +++ b/mt7915/mcu.c
-@@ -3871,6 +3871,13 @@ void mt7915_set_wireless_vif(void *data, u8 *mac, struct ieee80211_vif *vif)
+@@ -3656,6 +3656,13 @@ void mt7915_set_wireless_vif(void *data, u8 *mac, struct ieee80211_vif *vif)
  		if (val == 0)
  			dev->dbg.muru_onoff = MUMIMO_DL_CERT | MUMIMO_DL;
  		break;
@@ -17,10 +29,10 @@
  }
  
 diff --git a/mt7915/mcu.h b/mt7915/mcu.h
-index af939c4..fc382cd 100644
+index 464e771..75442ba 100644
 --- a/mt7915/mcu.h
 +++ b/mt7915/mcu.h
-@@ -431,6 +431,7 @@ enum {
+@@ -402,6 +402,7 @@ enum {
  #ifdef CONFIG_MTK_VENDOR
  	RATE_PARAM_FIXED_MIMO = 30,
  	RATE_PARAM_FIXED_OFDMA = 31,
@@ -29,7 +41,7 @@
  };
  
 diff --git a/mt7915/vendor.c b/mt7915/vendor.c
-index 7456c57..cb5b60f 100644
+index 7456c57..c755184 100644
 --- a/mt7915/vendor.c
 +++ b/mt7915/vendor.c
 @@ -34,6 +34,11 @@ wireless_ctrl_policy[NUM_MTK_VENDOR_ATTRS_WIRELESS_CTRL] = {
@@ -44,7 +56,7 @@
  static const struct nla_policy
  rfeature_ctrl_policy[NUM_MTK_VENDOR_ATTRS_RFEATURE_CTRL] = {
  	[MTK_VENDOR_ATTR_RFEATURE_CTRL_HE_GI] = {.type = NLA_U8 },
-@@ -942,6 +947,35 @@ static int mt7915_vendor_wireless_ctrl(struct wiphy *wiphy,
+@@ -942,6 +947,33 @@ static int mt7915_vendor_wireless_ctrl(struct wiphy *wiphy,
  	return 0;
  }
  
@@ -54,8 +66,6 @@
 +				  int data_len)
 +{
 +	struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
-+	struct mt7915_phy *phy = mt7915_hw_phy(hw);
-+	struct mt7915_dev *dev = phy->dev;
 +	struct nlattr *tb[NUM_MTK_VENDOR_ATTRS_HEMU_CTRL];
 +	int err;
 +	u8 val8;
@@ -80,7 +90,7 @@
  static const struct wiphy_vendor_command mt7915_vendor_commands[] = {
  	{
  		.info = {
-@@ -988,6 +1022,17 @@ static const struct wiphy_vendor_command mt7915_vendor_commands[] = {
+@@ -988,6 +1020,17 @@ static const struct wiphy_vendor_command mt7915_vendor_commands[] = {
  		.doit = mt7915_vendor_wireless_ctrl,
  		.policy = wireless_ctrl_policy,
  		.maxattr = MTK_VENDOR_ATTR_WIRELESS_CTRL_MAX,
@@ -99,7 +109,7 @@
  };
  
 diff --git a/mt7915/vendor.h b/mt7915/vendor.h
-index 1b08321..b5c1420 100644
+index 1b08321..a8e4ebf 100644
 --- a/mt7915/vendor.h
 +++ b/mt7915/vendor.h
 @@ -8,6 +8,7 @@ enum mtk_nl80211_vendor_subcmds {
@@ -128,3 +138,6 @@
  enum mtk_vendor_attr_rfeature_ctrl {
  	MTK_VENDOR_ATTR_RFEATURE_CTRL_UNSPEC,
  
+-- 
+2.18.0
+
diff --git a/recipes-kernel/linux-mt76/files/patches/1111-mt76-testmode-additional-supports.patch b/recipes-kernel/linux-mt76/files/patches/1111-mt76-testmode-additional-supports.patch
index fcea41b..292e2fc 100644
--- a/recipes-kernel/linux-mt76/files/patches/1111-mt76-testmode-additional-supports.patch
+++ b/recipes-kernel/linux-mt76/files/patches/1111-mt76-testmode-additional-supports.patch
@@ -1,33 +1,33 @@
-From 2e542afa1d9932b4ec588ad2c622c74a16fa1edd Mon Sep 17 00:00:00 2001
+From de93c29a69f28d2cf9d2e10fbd3cb1ebda771548 Mon Sep 17 00:00:00 2001
 From: Shayne Chen <shayne.chen@mediatek.com>
 Date: Thu, 21 Apr 2022 15:43:19 +0800
-Subject: [PATCH] mt76: testmode: additional supports
+Subject: [PATCH 1111/1115] mt76: testmode: additional supports
 
 Signed-off-by: Shayne Chen <shayne.chen@mediatek.com>
 ---
- drivers/net/wireless/mediatek/mt76/dma.c      |    3 +-
- drivers/net/wireless/mediatek/mt76/mac80211.c |   12 +
- drivers/net/wireless/mediatek/mt76/mt76.h     |  111 +-
- .../wireless/mediatek/mt76/mt76_connac_mcu.c  |    4 +
- .../wireless/mediatek/mt76/mt76_connac_mcu.h  |    2 +
- .../net/wireless/mediatek/mt76/mt7915/init.c  |    2 +-
- .../net/wireless/mediatek/mt76/mt7915/mac.c   |   37 +-
- .../net/wireless/mediatek/mt76/mt7915/main.c  |    2 +-
- .../net/wireless/mediatek/mt76/mt7915/mcu.c   |   11 +-
- .../net/wireless/mediatek/mt76/mt7915/mcu.h   |   31 +-
- .../net/wireless/mediatek/mt76/mt7915/mmio.c  |    2 +
- .../wireless/mediatek/mt76/mt7915/mt7915.h    |   14 +-
- .../net/wireless/mediatek/mt76/mt7915/regs.h  |    3 +
- .../wireless/mediatek/mt76/mt7915/testmode.c  | 1171 +++++++++++++++--
- .../wireless/mediatek/mt76/mt7915/testmode.h  |  278 ++++
- drivers/net/wireless/mediatek/mt76/testmode.c |  274 +++-
- drivers/net/wireless/mediatek/mt76/testmode.h |   75 ++
- .../net/wireless/mediatek/mt76/tools/fields.c |   80 ++
- drivers/net/wireless/mediatek/mt76/tx.c       |    3 +-
- 19 files changed, 1963 insertions(+), 152 deletions(-)
+ dma.c             |    3 +-
+ mac80211.c        |   12 +
+ mt76.h            |  111 ++++-
+ mt76_connac_mcu.c |    4 +
+ mt76_connac_mcu.h |    2 +
+ mt7915/init.c     |    2 +-
+ mt7915/mac.c      |   37 +-
+ mt7915/main.c     |    2 +-
+ mt7915/mcu.c      |   10 +-
+ mt7915/mcu.h      |   28 +-
+ mt7915/mmio.c     |    2 +
+ mt7915/mt7915.h   |   14 +-
+ mt7915/regs.h     |    3 +
+ mt7915/testmode.c | 1171 ++++++++++++++++++++++++++++++++++++++++++---
+ mt7915/testmode.h |  278 +++++++++++
+ testmode.c        |  274 +++++++++--
+ testmode.h        |   75 +++
+ tools/fields.c    |   80 ++++
+ tx.c              |    3 +-
+ 19 files changed, 1962 insertions(+), 149 deletions(-)
 
 diff --git a/dma.c b/dma.c
-index 30de8be4..f6f5f129 100644
+index 30de8be..f6f5f12 100644
 --- a/dma.c
 +++ b/dma.c
 @@ -426,8 +426,7 @@ free:
@@ -41,7 +41,7 @@
  #endif
  
 diff --git a/mac80211.c b/mac80211.c
-index 31602d7f..49b99f36 100644
+index c1df063..dc3c63e 100644
 --- a/mac80211.c
 +++ b/mac80211.c
 @@ -55,6 +55,13 @@ static const struct ieee80211_channel mt76_channels_5ghz[] = {
@@ -71,7 +71,7 @@
  
  static const struct ieee80211_channel mt76_channels_6ghz[] = {
 diff --git a/mt76.h b/mt76.h
-index 8f6279c5..3d1e893d 100644
+index 28720ee..062c5ce 100644
 --- a/mt76.h
 +++ b/mt76.h
 @@ -602,6 +602,21 @@ struct mt76_testmode_ops {
@@ -235,10 +235,10 @@
  static inline void mt76_testmode_reset(struct mt76_phy *phy, bool disable)
  {
 diff --git a/mt76_connac_mcu.c b/mt76_connac_mcu.c
-index 4e495d4f..ebb78d33 100644
+index 261181d..cd35068 100644
 --- a/mt76_connac_mcu.c
 +++ b/mt76_connac_mcu.c
-@@ -389,6 +389,7 @@ void mt76_connac_mcu_sta_basic_tlv(struct sk_buff *skb,
+@@ -391,6 +391,7 @@ void mt76_connac_mcu_sta_basic_tlv(struct sk_buff *skb,
  	switch (vif->type) {
  	case NL80211_IFTYPE_MESH_POINT:
  	case NL80211_IFTYPE_AP:
@@ -246,7 +246,7 @@
  		if (vif->p2p)
  			conn_type = CONNECTION_P2P_GC;
  		else
-@@ -570,6 +571,9 @@ void mt76_connac_mcu_wtbl_generic_tlv(struct mt76_dev *dev,
+@@ -572,6 +573,9 @@ void mt76_connac_mcu_wtbl_generic_tlv(struct mt76_dev *dev,
  	rx->rca2 = 1;
  	rx->rv = 1;
  
@@ -257,10 +257,10 @@
  		return;
  
 diff --git a/mt76_connac_mcu.h b/mt76_connac_mcu.h
-index 82498039..a3bbf5ca 100644
+index 32e540c..a0e6fa6 100644
 --- a/mt76_connac_mcu.h
 +++ b/mt76_connac_mcu.h
-@@ -816,6 +816,7 @@ enum {
+@@ -967,6 +967,7 @@ enum {
  	MCU_EXT_EVENT_FW_LOG_2_HOST = 0x13,
  	MCU_EXT_EVENT_THERMAL_PROTECT = 0x22,
  	MCU_EXT_EVENT_ASSERT_DUMP = 0x23,
@@ -268,7 +268,7 @@
  	MCU_EXT_EVENT_RDD_REPORT = 0x3a,
  	MCU_EXT_EVENT_CSA_NOTIFY = 0x4f,
  	MCU_EXT_EVENT_BCC_NOTIFY = 0x75,
-@@ -993,6 +994,7 @@ enum {
+@@ -1144,6 +1145,7 @@ enum {
  	MCU_EXT_CMD_PHY_STAT_INFO = 0xad,
  	/* for vendor csi and air monitor */
  	MCU_EXT_CMD_SMESH_CTRL = 0xae,
@@ -277,10 +277,10 @@
  	MCU_EXT_CMD_CSI_CTRL = 0xc2,
  };
 diff --git a/mt7915/init.c b/mt7915/init.c
-index e4f6617f..25a9b5de 100644
+index 0d5109a..b549fa0 100644
 --- a/mt7915/init.c
 +++ b/mt7915/init.c
-@@ -573,7 +573,7 @@ static void mt7915_init_work(struct work_struct *work)
+@@ -576,7 +576,7 @@ static void mt7915_init_work(struct work_struct *work)
  	struct mt7915_dev *dev = container_of(work, struct mt7915_dev,
  				 init_work);
  
@@ -290,10 +290,10 @@
  	mt7915_init_txpower(dev, &dev->mphy.sband_2g.sband);
  	mt7915_init_txpower(dev, &dev->mphy.sband_5g.sband);
 diff --git a/mt7915/mac.c b/mt7915/mac.c
-index ffb0037b..12afb204 100644
+index 0593270..8fd4618 100644
 --- a/mt7915/mac.c
 +++ b/mt7915/mac.c
-@@ -914,17 +914,39 @@ mt7915_mac_write_txwi_tm(struct mt7915_phy *phy, __le32 *txwi,
+@@ -565,17 +565,39 @@ mt7915_mac_write_txwi_tm(struct mt7915_phy *phy, __le32 *txwi,
  {
  #ifdef CONFIG_NL80211_TESTMODE
  	struct mt76_testmode_data *td = &phy->mt76->test;
@@ -336,7 +336,7 @@
  	switch (td->tx_rate_mode) {
  	case MT76_TM_TX_MODE_HT:
  		nss = 1 + (rate_idx >> 3);
-@@ -1013,14 +1035,13 @@ mt7915_mac_write_txwi_tm(struct mt7915_phy *phy, __le32 *txwi,
+@@ -664,14 +686,13 @@ mt7915_mac_write_txwi_tm(struct mt7915_phy *phy, __le32 *txwi,
  	if (mode >= MT_PHY_TYPE_HE_SU)
  		val |= FIELD_PREP(MT_TXD6_HELTF, td->tx_ltf);
  
@@ -356,10 +356,10 @@
  }
  
 diff --git a/mt7915/main.c b/mt7915/main.c
-index f2a6d9da..942b8a9a 100644
+index dc5e4b0..e4b2076 100644
 --- a/mt7915/main.c
 +++ b/mt7915/main.c
-@@ -221,7 +221,7 @@ static int mt7915_add_interface(struct ieee80211_hw *hw,
+@@ -224,7 +224,7 @@ static int mt7915_add_interface(struct ieee80211_hw *hw,
  	mvif->phy = phy;
  	mvif->mt76.band_idx = phy->band_idx;
  
@@ -369,18 +369,10 @@
  		mvif->mt76.wmm_idx += 2;
  
 diff --git a/mt7915/mcu.c b/mt7915/mcu.c
-index 8a3bd33f..8ed8700d 100755
+index aee3a8c..810d72e 100644
 --- a/mt7915/mcu.c
 +++ b/mt7915/mcu.c
-@@ -360,7 +360,6 @@ mt7915_mcu_send_message(struct mt76_dev *mdev, struct sk_buff *skb,
- 	if (mcu_txd->ext_cid) {
- 		mcu_txd->ext_cid_ack = 1;
- 
--		/* do not use Q_SET for efuse */
- 		if (cmd & __MCU_CMD_FIELD_QUERY)
- 			mcu_txd->set_query = MCU_Q_QUERY;
- 		else
-@@ -536,6 +535,11 @@ mt7915_mcu_rx_ext_event(struct mt7915_dev *dev, struct sk_buff *skb)
+@@ -434,6 +434,11 @@ mt7915_mcu_rx_ext_event(struct mt7915_dev *dev, struct sk_buff *skb)
  	case MCU_EXT_EVENT_BCC_NOTIFY:
  		mt7915_mcu_rx_bcc_notify(dev, skb);
  		break;
@@ -392,7 +384,7 @@
  	default:
  		break;
  	}
-@@ -565,6 +569,7 @@ void mt7915_mcu_rx_event(struct mt7915_dev *dev, struct sk_buff *skb)
+@@ -465,6 +470,7 @@ void mt7915_mcu_rx_event(struct mt7915_dev *dev, struct sk_buff *skb)
  	    rxd->ext_eid == MCU_EXT_EVENT_ASSERT_DUMP ||
  	    rxd->ext_eid == MCU_EXT_EVENT_PS_SYNC ||
  	    rxd->ext_eid == MCU_EXT_EVENT_BCC_NOTIFY ||
@@ -400,7 +392,7 @@
  	    !rxd->seq)
  		mt7915_mcu_rx_unsolicited_event(dev, skb);
  	else
-@@ -3030,14 +3035,14 @@ static int mt7915_mcu_set_eeprom_flash(struct mt7915_dev *dev)
+@@ -2812,14 +2818,14 @@ static int mt7915_mcu_set_eeprom_flash(struct mt7915_dev *dev)
  	return 0;
  }
  
@@ -418,10 +410,10 @@
  
  	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(EFUSE_BUFFER_MODE),
 diff --git a/mt7915/mcu.h b/mt7915/mcu.h
-index adf71f10..82c21168 100644
+index 75442ba..873a805 100644
 --- a/mt7915/mcu.h
 +++ b/mt7915/mcu.h
-@@ -27,10 +27,15 @@ struct mt7915_mcu_txd {
+@@ -8,10 +8,15 @@
  
  enum {
  	MCU_ATE_SET_TRX = 0x1,
@@ -436,8 +428,8 @@
 +	MCU_ATE_SET_MU_RX_AID = 0x1e,
  };
  
- struct mt7915_mcu_rxd {
-@@ -455,6 +460,12 @@ enum {
+ struct mt7915_mcu_thermal_ctrl {
+@@ -431,6 +436,12 @@ enum {
  
  enum {
  	MT_BF_SOUNDING_ON = 1,
@@ -450,38 +442,35 @@
  	MT_BF_TYPE_UPDATE = 20,
  	MT_BF_MODULE_UPDATE = 25
  };
-@@ -681,12 +692,20 @@ struct mt7915_muru {
- #define MURU_OFDMA_SCH_TYPE_DL          BIT(0)
+@@ -661,10 +672,19 @@ struct mt7915_muru {
  #define MURU_OFDMA_SCH_TYPE_UL          BIT(1)
  
--/* Common Config */
+ /* Common Config */
 -#define MURU_COMM_PPDU_FMT              BIT(0)
 -#define MURU_COMM_SCH_TYPE              BIT(1)
 -#define MURU_COMM_SET                   (MURU_COMM_PPDU_FMT | MURU_COMM_SCH_TYPE)
--
 -/* DL&UL User config*/
-+/* Common Config */ 
 +/* #define MURU_COMM_PPDU_FMT              BIT(0) */
 +/* #define MURU_COMM_SCH_TYPE              BIT(1) */
 +/* #define MURU_COMM_SET                   (MURU_COMM_PPDU_FMT | MURU_COMM_SCH_TYPE) */
-+#define MURU_COMM_PPDU_FMT		BIT(0)
-+#define MURU_COMM_SCH_TYPE		BIT(1)
-+#define MURU_COMM_BAND			BIT(2)
-+#define MURU_COMM_WMM			BIT(3)
-+#define MURU_COMM_SPE_IDX		BIT(4)
-+#define MURU_COMM_PROC_TYPE		BIT(5)
-+#define MURU_COMM_SET		(MURU_COMM_PPDU_FMT | MURU_COMM_BAND | \
-+				 MURU_COMM_WMM | MURU_COMM_SPE_IDX)
++#define MURU_COMM_PPDU_FMT     BIT(0)
++#define MURU_COMM_SCH_TYPE     BIT(1)
++#define MURU_COMM_BAND         BIT(2)
++#define MURU_COMM_WMM          BIT(3)
++#define MURU_COMM_SPE_IDX      BIT(4)
++#define MURU_COMM_PROC_TYPE        BIT(5)
++#define MURU_COMM_SET      (MURU_COMM_PPDU_FMT | MURU_COMM_BAND | \
++				MURU_COMM_WMM | MURU_COMM_SPE_IDX)
 +
 +/* DL&UL User config */
  #define MURU_USER_CNT                   BIT(4)
  
  enum {
 diff --git a/mt7915/mmio.c b/mt7915/mmio.c
-index b3de3a7a..bbf8b16c 100644
+index bccb108..a84970d 100644
 --- a/mt7915/mmio.c
 +++ b/mt7915/mmio.c
-@@ -73,6 +73,7 @@ static const u32 mt7915_offs[] = {
+@@ -76,6 +76,7 @@ static const u32 mt7915_offs[] = {
  	[ARB_DRNGR0]		= 0x194,
  	[ARB_SCR]		= 0x080,
  	[RMAC_MIB_AIRTIME14]	= 0x3b8,
@@ -489,7 +478,7 @@
  	[AGG_AWSCR0]		= 0x05c,
  	[AGG_PCR0]		= 0x06c,
  	[AGG_ACR0]		= 0x084,
-@@ -147,6 +148,7 @@ static const u32 mt7916_offs[] = {
+@@ -150,6 +151,7 @@ static const u32 mt7916_offs[] = {
  	[ARB_DRNGR0]		= 0x1e0,
  	[ARB_SCR]		= 0x000,
  	[RMAC_MIB_AIRTIME14]	= 0x0398,
@@ -498,10 +487,10 @@
  	[AGG_PCR0]		= 0x040,
  	[AGG_ACR0]		= 0x054,
 diff --git a/mt7915/mt7915.h b/mt7915/mt7915.h
-index cf0630c8..4b375629 100644
+index 9f5da64..ff92e55 100644
 --- a/mt7915/mt7915.h
 +++ b/mt7915/mt7915.h
-@@ -294,6 +294,9 @@ struct mt7915_phy {
+@@ -303,6 +303,9 @@ struct mt7915_phy {
  		u8 last_snr;
  
  		u8 spe_idx;
@@ -511,7 +500,7 @@
  	} test;
  #endif
  
-@@ -382,6 +385,14 @@ struct mt7915_dev {
+@@ -394,6 +397,14 @@ struct mt7915_dev {
  	void __iomem *dcm;
  	void __iomem *sku;
  
@@ -526,7 +515,7 @@
  #ifdef MTK_DEBUG
  	u16 wlan_idx;
  	struct {
-@@ -572,7 +583,7 @@ int mt7915_mcu_set_fixed_rate_ctrl(struct mt7915_dev *dev,
+@@ -571,7 +582,7 @@ int mt7915_mcu_set_fixed_rate_ctrl(struct mt7915_dev *dev,
  				   struct ieee80211_vif *vif,
  				   struct ieee80211_sta *sta,
  				   void *data, u32 field);
@@ -535,7 +524,7 @@
  int mt7915_mcu_get_eeprom(struct mt7915_dev *dev, u32 offset);
  int mt7915_mcu_get_eeprom_free_block(struct mt7915_dev *dev, u8 *block_num);
  int mt7915_mcu_set_mac(struct mt7915_dev *dev, int band, bool enable,
-@@ -605,6 +616,7 @@ int mt7915_mcu_fw_log_2_host(struct mt7915_dev *dev, u8 type, u8 ctrl);
+@@ -604,6 +615,7 @@ int mt7915_mcu_fw_log_2_host(struct mt7915_dev *dev, u8 type, u8 ctrl);
  int mt7915_mcu_fw_dbg_ctrl(struct mt7915_dev *dev, u32 module, u8 level);
  void mt7915_mcu_rx_event(struct mt7915_dev *dev, struct sk_buff *skb);
  void mt7915_mcu_exit(struct mt7915_dev *dev);
@@ -544,10 +533,10 @@
  static inline u16 mt7915_wtbl_size(struct mt7915_dev *dev)
  {
 diff --git a/mt7915/regs.h b/mt7915/regs.h
-index 99834310..6ba5e9fe 100644
+index 47bae86..444440e 100644
 --- a/mt7915/regs.h
 +++ b/mt7915/regs.h
-@@ -50,6 +50,7 @@ enum offs_rev {
+@@ -51,6 +51,7 @@ enum offs_rev {
  	ARB_DRNGR0,
  	ARB_SCR,
  	RMAC_MIB_AIRTIME14,
@@ -555,7 +544,7 @@
  	AGG_AWSCR0,
  	AGG_PCR0,
  	AGG_ACR0,
-@@ -458,6 +459,8 @@ enum offs_rev {
+@@ -467,6 +468,8 @@ enum offs_rev {
  #define MT_WF_AGG_BASE(_band)		((_band) ? 0x820f2000 : 0x820e2000)
  #define MT_WF_AGG(_band, ofs)		(MT_WF_AGG_BASE(_band) + (ofs))
  
@@ -565,7 +554,7 @@
  							  (_n) * 4))
  #define MT_AGG_PCR0(_band, _n)		MT_WF_AGG(_band, (__OFFS(AGG_PCR0) +	\
 diff --git a/mt7915/testmode.c b/mt7915/testmode.c
-index e8bf616c..16c9e4ae 100644
+index 123ceaf..a0a9f7b 100644
 --- a/mt7915/testmode.c
 +++ b/mt7915/testmode.c
 @@ -9,6 +9,9 @@
@@ -660,7 +649,7 @@
  }
  
  static int
-@@ -182,11 +230,737 @@ mt7915_tm_set_tam_arb(struct mt7915_phy *phy, bool enable, bool mu)
+@@ -182,12 +230,738 @@ mt7915_tm_set_tam_arb(struct mt7915_phy *phy, bool enable, bool mu)
  	return mt7915_mcu_set_muru_ctrl(dev, MURU_SET_ARB_OP_MODE, op_mode);
  }
  
@@ -1225,7 +1214,7 @@
 +#define BF_CAL_PHASE	21
 +	u8 format_id;
 +
-+	skb_pull(skb, sizeof(struct mt7915_mcu_rxd));
++	skb_pull(skb, sizeof(struct mt76_connac2_mcu_rxd));
 +	format_id = *(u8 *)skb->data;
 +
 +	if (format_id == BF_PFMU_TAG) {
@@ -1387,10 +1376,11 @@
 +}
 +
  static int
- mt7915_tm_set_wmm_qid(struct mt7915_dev *dev, u8 qid, u8 aifs, u8 cw_min,
+ mt7915_tm_set_wmm_qid(struct mt7915_phy *phy, u8 qid, u8 aifs, u8 cw_min,
 -		      u16 cw_max, u16 txop)
 +		      u16 cw_max, u16 txop, u8 tx_cmd)
  {
+ 	struct mt7915_vif *mvif = (struct mt7915_vif *)phy->monitor_vif->drv_priv;
 -	struct mt7915_mcu_tx req = { .total = 1 };
 +	struct mt7915_mcu_tx req = {
 +		.valid = true,
@@ -1399,10 +1389,10 @@
 +	};
  	struct edca *e = &req.edca[0];
  
- 	e->queue = qid;
-@@ -261,7 +1035,8 @@ done:
+ 	e->queue = qid + mvif->mt76.wmm_idx * MT76_CONNAC_MAX_WMM_SETS;
+@@ -262,7 +1036,8 @@ done:
  
- 	return mt7915_tm_set_wmm_qid(dev,
+ 	return mt7915_tm_set_wmm_qid(phy,
  				     mt76_connac_lmac_mapping(IEEE80211_AC_BE),
 -				     aifsn, cw, cw, 0);
 +				     aifsn, cw, cw, 0,
@@ -1410,7 +1400,7 @@
  }
  
  static int
-@@ -337,7 +1112,7 @@ mt7915_tm_set_tx_len(struct mt7915_phy *phy, u32 tx_time)
+@@ -338,7 +1113,7 @@ mt7915_tm_set_tx_len(struct mt7915_phy *phy, u32 tx_time)
  	bitrate = cfg80211_calculate_bitrate(&rate);
  	tx_len = bitrate * tx_time / 10 / 8;
  
@@ -1419,7 +1409,7 @@
  	if (ret)
  		return ret;
  
-@@ -455,18 +1230,180 @@ mt7915_tm_init(struct mt7915_phy *phy, bool en)
+@@ -456,18 +1231,180 @@ mt7915_tm_init(struct mt7915_phy *phy, bool en)
  
  	phy->mt76->test.flag |= MT_TM_FW_RX_COUNT;
  
@@ -1606,7 +1596,7 @@
  }
  
  static void
-@@ -475,47 +1412,48 @@ mt7915_tm_set_tx_frames(struct mt7915_phy *phy, bool en)
+@@ -476,47 +1413,48 @@ mt7915_tm_set_tx_frames(struct mt7915_phy *phy, bool en)
  	static const u8 spe_idx_map[] = {0, 0, 1, 0, 3, 2, 4, 0,
  					 9, 8, 6, 10, 16, 12, 18, 0};
  	struct mt76_testmode_data *td = &phy->mt76->test;
@@ -1680,7 +1670,7 @@
  
  	mt7915_tm_set_trx(phy, TM_MAC_TX, en);
  }
-@@ -544,10 +1482,6 @@ mt7915_tm_get_rx_stats(struct mt7915_phy *phy, bool clear)
+@@ -545,10 +1483,6 @@ mt7915_tm_get_rx_stats(struct mt7915_phy *phy, bool clear)
  		return ret;
  
  	rs_band = (struct mt7915_tm_rx_stat_band *)skb->data;
@@ -1691,7 +1681,7 @@
  
  	if (!clear) {
  		enum mt76_rxq_id q = req.band ? MT_RXQ_EXT : MT_RXQ_MAIN;
-@@ -562,13 +1496,61 @@ mt7915_tm_get_rx_stats(struct mt7915_phy *phy, bool clear)
+@@ -563,13 +1497,61 @@ mt7915_tm_get_rx_stats(struct mt7915_phy *phy, bool clear)
  	return 0;
  }
  
@@ -1754,7 +1744,7 @@
  
  		/* read-clear */
  		mt7915_tm_get_rx_stats(phy, true);
-@@ -576,9 +1558,12 @@ mt7915_tm_set_rx_frames(struct mt7915_phy *phy, bool en)
+@@ -577,9 +1559,12 @@ mt7915_tm_set_rx_frames(struct mt7915_phy *phy, bool en)
  		/* clear fw count */
  		mt7915_tm_set_phy_count(phy, 0);
  		mt7915_tm_set_phy_count(phy, 1);
@@ -1769,7 +1759,7 @@
  }
  
  static int
-@@ -615,35 +1600,7 @@ mt7915_tm_set_tx_cont(struct mt7915_phy *phy, bool en)
+@@ -616,35 +1601,7 @@ mt7915_tm_set_tx_cont(struct mt7915_phy *phy, bool en)
  	tx_cont->center_ch = freq1;
  	tx_cont->tx_ant = td->tx_antenna_mask;
  	tx_cont->band = phy != &dev->phy;
@@ -1806,7 +1796,7 @@
  
  	if (!en) {
  		req.op.rf.param.func_data = cpu_to_le32(phy != &dev->phy);
-@@ -727,6 +1684,12 @@ mt7915_tm_update_params(struct mt7915_phy *phy, u32 changed)
+@@ -728,6 +1685,12 @@ mt7915_tm_update_params(struct mt7915_phy *phy, u32 changed)
  		mt7915_tm_set_freq_offset(phy, en, en ? td->freq_offset : 0);
  	if (changed & BIT(TM_CHANGED_TXPOWER))
  		mt7915_tm_set_tx_power(phy);
@@ -1819,7 +1809,7 @@
  }
  
  static int
-@@ -800,6 +1763,7 @@ static int
+@@ -801,6 +1764,7 @@ static int
  mt7915_tm_dump_stats(struct mt76_phy *mphy, struct sk_buff *msg)
  {
  	struct mt7915_phy *phy = mphy->priv;
@@ -1827,7 +1817,7 @@
  	void *rx, *rssi;
  	int i;
  
-@@ -845,11 +1809,68 @@ mt7915_tm_dump_stats(struct mt76_phy *mphy, struct sk_buff *msg)
+@@ -846,11 +1810,68 @@ mt7915_tm_dump_stats(struct mt76_phy *mphy, struct sk_buff *msg)
  
  	nla_nest_end(msg, rx);
  
@@ -1897,7 +1887,7 @@
 +	.set_eeprom = mt7915_tm_set_eeprom,
  };
 diff --git a/mt7915/testmode.h b/mt7915/testmode.h
-index a1c54c89..01b08e9e 100644
+index a1c54c8..01b08e9 100644
 --- a/mt7915/testmode.h
 +++ b/mt7915/testmode.h
 @@ -4,6 +4,8 @@
@@ -2212,7 +2202,7 @@
 +
  #endif
 diff --git a/testmode.c b/testmode.c
-index e6d1f702..2c699ac8 100644
+index e6d1f70..2c699ac 100644
 --- a/testmode.c
 +++ b/testmode.c
 @@ -25,28 +25,15 @@ const struct nla_policy mt76_tm_policy[NUM_MT76_TM_ATTRS] = {
@@ -2678,7 +2668,7 @@
  		a = nla_nest_start(msg, MT76_TM_ATTR_TX_POWER);
  		if (!a)
 diff --git a/testmode.h b/testmode.h
-index 89613266..57949f2b 100644
+index 8961326..57949f2 100644
 --- a/testmode.h
 +++ b/testmode.h
 @@ -6,6 +6,8 @@
@@ -2783,7 +2773,7 @@
 +
  #endif
 diff --git a/tools/fields.c b/tools/fields.c
-index e3f69089..6e36ab27 100644
+index e3f6908..6e36ab2 100644
 --- a/tools/fields.c
 +++ b/tools/fields.c
 @@ -10,6 +10,7 @@ static const char * const testmode_state[] = {
@@ -2909,7 +2899,7 @@
  };
  
 diff --git a/tx.c b/tx.c
-index 02067edc..0457c3eb 100644
+index 02067ed..0457c3e 100644
 --- a/tx.c
 +++ b/tx.c
 @@ -245,8 +245,7 @@ void __mt76_tx_complete_skb(struct mt76_dev *dev, u16 wcid_idx, struct sk_buff *
@@ -2923,5 +2913,5 @@
  			wake_up(&dev->tx_wait);
  
 -- 
-2.25.1
+2.18.0
 
diff --git a/recipes-kernel/linux-mt76/files/patches/1112-mt76-mt7915-init-rssi-in-WTBL-when-add-station.patch b/recipes-kernel/linux-mt76/files/patches/1112-mt76-mt7915-init-rssi-in-WTBL-when-add-station.patch
index 373557f..3bcc928 100644
--- a/recipes-kernel/linux-mt76/files/patches/1112-mt76-mt7915-init-rssi-in-WTBL-when-add-station.patch
+++ b/recipes-kernel/linux-mt76/files/patches/1112-mt76-mt7915-init-rssi-in-WTBL-when-add-station.patch
@@ -1,4 +1,4 @@
-From 3b98e75fc0a9dfd1fbd36bdd98b73bd8bae00f18 Mon Sep 17 00:00:00 2001
+From 40ba703e0b33d0c1ca7532d556ea9fcf9111f5b8 Mon Sep 17 00:00:00 2001
 From: Peter Chiu <chui-hao.chiu@mediatek.com>
 Date: Sun, 24 Apr 2022 10:07:00 +0800
 Subject: [PATCH 1112/1115] mt76: mt7915: init rssi in WTBL when add station
@@ -8,10 +8,10 @@
  1 file changed, 4 insertions(+)
 
 diff --git a/mt7915/main.c b/mt7915/main.c
-index 55b4cefe..e2a3af4d 100644
+index e4b2076..ebff255 100644
 --- a/mt7915/main.c
 +++ b/mt7915/main.c
-@@ -663,6 +663,7 @@ int mt7915_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,
+@@ -666,6 +666,7 @@ int mt7915_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,
  	struct mt7915_phy *phy;
  #endif
  	int ret, idx;
@@ -19,7 +19,7 @@
  
  	idx = mt76_wcid_alloc(dev->mt76.wcid_mask, MT7915_WTBL_STA);
  	if (idx < 0)
-@@ -684,6 +685,9 @@ int mt7915_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,
+@@ -687,6 +688,9 @@ int mt7915_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,
  	if (ret)
  		return ret;
  
diff --git a/recipes-kernel/linux-mt76/files/patches/1113-mt76-mt7915-drop-packets-when-TWT-stations-use-more-.patch b/recipes-kernel/linux-mt76/files/patches/1113-mt76-mt7915-drop-packets-when-TWT-stations-use-more-.patch
index 17142a1..e077acf 100644
--- a/recipes-kernel/linux-mt76/files/patches/1113-mt76-mt7915-drop-packets-when-TWT-stations-use-more-.patch
+++ b/recipes-kernel/linux-mt76/files/patches/1113-mt76-mt7915-drop-packets-when-TWT-stations-use-more-.patch
@@ -1,6 +1,6 @@
-From 7d082308e57e467607e4ca9e63938fea0eb00306 Mon Sep 17 00:00:00 2001
+From 23de5ffe66f73e5fbd22a441f7ca1f612f1bd158 Mon Sep 17 00:00:00 2001
 From: Peter Chiu <chui-hao.chiu@mediatek.com>
-Date: Mon, 6 Jun 2022 20:20:55 +0800
+Date: Wed, 22 Jun 2022 10:58:37 +0800
 Subject: [PATCH 1113/1115] mt76: mt7915: drop packets when TWT stations use
  more tokens than 128
 
@@ -10,18 +10,18 @@
  2 files changed, 20 insertions(+), 3 deletions(-)
 
 diff --git a/mt7915/mac.c b/mt7915/mac.c
-index af72e268..bae700eb 100644
+index 8fd4618..fd0dd50 100644
 --- a/mt7915/mac.c
 +++ b/mt7915/mac.c
-@@ -1322,6 +1322,7 @@ int mt7915_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
+@@ -724,6 +724,7 @@ int mt7915_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
  	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx_info->skb);
  	struct ieee80211_key_conf *key = info->control.hw_key;
  	struct ieee80211_vif *vif = info->control.vif;
 +	struct mt7915_sta *msta = NULL;
+ 	struct mt76_connac_fw_txp *txp;
  	struct mt76_txwi_cache *t;
- 	struct mt7915_txp *txp;
  	int id, i, nbuf = tx_info->nbuf - 1;
-@@ -1335,8 +1336,6 @@ int mt7915_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
+@@ -737,8 +738,6 @@ int mt7915_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
  		wcid = &dev->mt76.global_wcid;
  
  	if (sta) {
@@ -30,7 +30,7 @@
  		msta = (struct mt7915_sta *)sta->drv_priv;
  
  		if (time_after(jiffies, msta->jiffies + HZ / 4)) {
-@@ -1352,10 +1351,22 @@ int mt7915_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
+@@ -754,10 +753,22 @@ int mt7915_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
  	    mgmt->u.action.category == 0xff)
  		return -1;
  
@@ -51,9 +51,9 @@
 +	spin_unlock_bh(&mdev->token_lock);
 +
  	pid = mt76_tx_status_skb_add(mdev, wcid, tx_info->skb);
- 	mt7915_mac_write_txwi(dev, txwi_ptr, tx_info->skb, wcid, pid, key, 0);
+ 	mt7915_mac_write_txwi(mdev, txwi_ptr, tx_info->skb, wcid, pid, key, 0);
  
-@@ -1546,6 +1557,7 @@ mt7915_mac_tx_free(struct mt7915_dev *dev, void *data, int len)
+@@ -937,6 +948,7 @@ mt7915_mac_tx_free(struct mt7915_dev *dev, void *data, int len)
  	struct mt76_dev *mdev = &dev->mt76;
  	struct mt76_txwi_cache *txwi;
  	struct ieee80211_sta *sta = NULL;
@@ -61,7 +61,7 @@
  	LIST_HEAD(free_list);
  	void *end = data + len;
  	bool v3, wake = false;
-@@ -1569,7 +1581,6 @@ mt7915_mac_tx_free(struct mt7915_dev *dev, void *data, int len)
+@@ -960,7 +972,6 @@ mt7915_mac_tx_free(struct mt7915_dev *dev, void *data, int len)
  		 * 1'b0: msdu_id with the same 'wcid pair' as above.
  		 */
  		if (info & MT_TX_FREE_PAIR) {
@@ -69,7 +69,7 @@
  			struct mt76_wcid *wcid;
  			u16 idx;
  
-@@ -1602,6 +1613,10 @@ mt7915_mac_tx_free(struct mt7915_dev *dev, void *data, int len)
+@@ -993,6 +1004,10 @@ mt7915_mac_tx_free(struct mt7915_dev *dev, void *data, int len)
  			txwi = mt76_token_release(mdev, msdu, &wake);
  			if (!txwi)
  				continue;
@@ -81,10 +81,10 @@
  			mt7915_txwi_free(dev, txwi, sta, &free_list);
  		}
 diff --git a/mt7915/mt7915.h b/mt7915/mt7915.h
-index c99e700d..90391a07 100644
+index ff92e55..6235014 100644
 --- a/mt7915/mt7915.h
 +++ b/mt7915/mt7915.h
-@@ -137,6 +137,8 @@ struct mt7915_sta {
+@@ -136,6 +136,8 @@ struct mt7915_sta {
  		u8 flowid_mask;
  		struct mt7915_twt_flow flow[MT7915_MAX_STA_TWT_AGRT];
  	} twt;
diff --git a/recipes-kernel/linux-mt76/files/patches/1114-mt76-airtime-fairness-feature-off-in-mac80211.patch b/recipes-kernel/linux-mt76/files/patches/1114-mt76-airtime-fairness-feature-off-in-mac80211.patch
index dfb8a1e..391933b 100644
--- a/recipes-kernel/linux-mt76/files/patches/1114-mt76-airtime-fairness-feature-off-in-mac80211.patch
+++ b/recipes-kernel/linux-mt76/files/patches/1114-mt76-airtime-fairness-feature-off-in-mac80211.patch
@@ -1,4 +1,4 @@
-From 110b036dfce5d60f59b02385a2d39c766921da30 Mon Sep 17 00:00:00 2001
+From 3cbacf679f9fba714955123374dd59fbe33d7a32 Mon Sep 17 00:00:00 2001
 From: Evelyn Tsai <evelyn.tsai@mediatek.com>
 Date: Fri, 6 May 2022 15:58:42 +0800
 Subject: [PATCH 1114/1115] mt76: airtime fairness feature off in mac80211
@@ -8,10 +8,10 @@
  1 file changed, 1 deletion(-)
 
 diff --git a/mac80211.c b/mac80211.c
-index 022b63e7..4b4d8b99 100644
+index dc3c63e..5600a09 100644
 --- a/mac80211.c
 +++ b/mac80211.c
-@@ -425,7 +425,6 @@ mt76_phy_init(struct mt76_phy *phy, struct ieee80211_hw *hw)
+@@ -427,7 +427,6 @@ mt76_phy_init(struct mt76_phy *phy, struct ieee80211_hw *hw)
  			WIPHY_FLAG_AP_UAPSD;
  
  	wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
diff --git a/recipes-kernel/linux-mt76/files/patches/1115-mt76-mt7915-add-mt7986-and-mt7916-pre-calibration.patch b/recipes-kernel/linux-mt76/files/patches/1115-mt76-mt7915-add-mt7986-and-mt7916-pre-calibration.patch
index 8e53676..0e446a8 100644
--- a/recipes-kernel/linux-mt76/files/patches/1115-mt76-mt7915-add-mt7986-and-mt7916-pre-calibration.patch
+++ b/recipes-kernel/linux-mt76/files/patches/1115-mt76-mt7915-add-mt7986-and-mt7916-pre-calibration.patch
@@ -1,4 +1,4 @@
-From 33d4383e72491f7e8879c6e4334bf36c30704d18 Mon Sep 17 00:00:00 2001
+From c07c8c699e63f32f431a7439145ecf1844690ca3 Mon Sep 17 00:00:00 2001
 From: Peter Chiu <chui-hao.chiu@mediatek.com>
 Date: Fri, 20 May 2022 19:19:25 +0800
 Subject: [PATCH 1115/1115] mt76: mt7915: add mt7986 and mt7916 pre-calibration
@@ -15,7 +15,7 @@
  3 files changed, 90 insertions(+), 32 deletions(-)
 
 diff --git a/mt7915/eeprom.c b/mt7915/eeprom.c
-index 4b1a9811..ee3049e5 100644
+index 4b1a981..ee3049e 100644
 --- a/mt7915/eeprom.c
 +++ b/mt7915/eeprom.c
 @@ -9,23 +9,22 @@ static int mt7915_eeprom_load_precal(struct mt7915_dev *dev)
@@ -50,7 +50,7 @@
  
  static int mt7915_check_eeprom(struct mt7915_dev *dev)
 diff --git a/mt7915/eeprom.h b/mt7915/eeprom.h
-index 7578ac6d..e924baef 100644
+index 7578ac6..e924bae 100644
 --- a/mt7915/eeprom.h
 +++ b/mt7915/eeprom.h
 @@ -19,6 +19,7 @@ enum mt7915_eeprom_field {
@@ -103,10 +103,10 @@
  
  #endif
 diff --git a/mt7915/mcu.c b/mt7915/mcu.c
-index 17a36ea3..2b9797c8 100644
+index 810d72e..a16081d 100644
 --- a/mt7915/mcu.c
 +++ b/mt7915/mcu.c
-@@ -3203,9 +3203,10 @@ static int mt7915_mcu_set_pre_cal(struct mt7915_dev *dev, u8 idx,
+@@ -2911,9 +2911,10 @@ static int mt7915_mcu_set_pre_cal(struct mt7915_dev *dev, u8 idx,
  int mt7915_mcu_apply_group_cal(struct mt7915_dev *dev)
  {
  	u8 idx = 0, *cal = dev->cal, *eep = dev->mt76.eeprom.data;
@@ -119,7 +119,7 @@
  		return 0;
  
  	/*
-@@ -3241,9 +3242,9 @@ static int mt7915_find_freq_idx(const u16 *freqs, int n_freqs, u16 cur)
+@@ -2949,9 +2950,9 @@ static int mt7915_find_freq_idx(const u16 *freqs, int n_freqs, u16 cur)
  	return -1;
  }
  
@@ -131,7 +131,7 @@
  		5180, 5200, 5220, 5240,
  		5260, 5280, 5300, 5320,
  		5500, 5520, 5540, 5560,
-@@ -3251,65 +3252,102 @@ static int mt7915_dpd_freq_idx(u16 freq, u8 bw)
+@@ -2959,65 +2960,102 @@ static int mt7915_dpd_freq_idx(u16 freq, u8 bw)
  		5660, 5680, 5700, 5745,
  		5765, 5785, 5805, 5825
  	};
diff --git a/recipes-kernel/linux-mt76/files/patches/3000-mt76-remove-WED-support-patch-for-build-err.patch b/recipes-kernel/linux-mt76/files/patches/3000-mt76-remove-WED-support-patch-for-build-err.patch
index d637999..2ef225a 100644
--- a/recipes-kernel/linux-mt76/files/patches/3000-mt76-remove-WED-support-patch-for-build-err.patch
+++ b/recipes-kernel/linux-mt76/files/patches/3000-mt76-remove-WED-support-patch-for-build-err.patch
@@ -1,4 +1,4 @@
-From 7caf2dd34d38bd98b5b1087c0f00ccdb009a461a Mon Sep 17 00:00:00 2001
+From f4838210b5e80adfa3af028721ee040edff79a48 Mon Sep 17 00:00:00 2001
 From: Sujuan Chen <sujuan.chen@mediatek.com>
 Date: Mon, 6 Jun 2022 20:22:35 +0800
 Subject: [PATCH] mt76:remove WED support patch for build err
@@ -12,7 +12,7 @@
  mt7615/dma.c    |   6 +-
  mt76x02_mmio.c  |   4 +-
  mt7915/dma.c    |  43 ++-----------
- mt7915/mac.c    | 129 ++++++--------------------------------
+ mt7915/mac.c    | 139 ++++++++++-------------------------------
  mt7915/mac.h    |   2 -
  mt7915/main.c   |  36 -----------
  mt7915/mcu.c    |   3 -
@@ -22,11 +22,10 @@
  mt7915/regs.h   |  17 +----
  mt7921/dma.c    |   2 +-
  tx.c            |  16 +----
- 18 files changed, 94 insertions(+), 497 deletions(-)
- mode change 100644 => 100755 mt7915/mcu.c
+ 18 files changed, 105 insertions(+), 496 deletions(-)
 
 diff --git a/dma.c b/dma.c
-index f6f5f129..3f7456b1 100644
+index f6f5f12..3f7456b 100644
 --- a/dma.c
 +++ b/dma.c
 @@ -7,36 +7,9 @@
@@ -232,10 +231,10 @@
  }
  EXPORT_SYMBOL_GPL(mt76_dma_cleanup);
 diff --git a/mac80211.c b/mac80211.c
-index 4b4d8b99..19a2b849 100644
+index 5600a09..7878446 100644
 --- a/mac80211.c
 +++ b/mac80211.c
-@@ -1600,7 +1600,7 @@ EXPORT_SYMBOL_GPL(mt76_get_antenna);
+@@ -1605,7 +1605,7 @@ EXPORT_SYMBOL_GPL(mt76_get_antenna);
  
  struct mt76_queue *
  mt76_init_queue(struct mt76_dev *dev, int qid, int idx, int n_desc,
@@ -244,7 +243,7 @@
  {
  	struct mt76_queue *hwq;
  	int err;
-@@ -1609,8 +1609,6 @@ mt76_init_queue(struct mt76_dev *dev, int qid, int idx, int n_desc,
+@@ -1614,8 +1614,6 @@ mt76_init_queue(struct mt76_dev *dev, int qid, int idx, int n_desc,
  	if (!hwq)
  		return ERR_PTR(-ENOMEM);
  
@@ -254,7 +253,7 @@
  	if (err < 0)
  		return ERR_PTR(err);
 diff --git a/mmio.c b/mmio.c
-index 86e3d2ac..26353b6b 100644
+index 86e3d2a..26353b6 100644
 --- a/mmio.c
 +++ b/mmio.c
 @@ -73,13 +73,8 @@ void mt76_set_irq_mask(struct mt76_dev *dev, u32 addr,
@@ -274,7 +273,7 @@
  }
  EXPORT_SYMBOL_GPL(mt76_set_irq_mask);
 diff --git a/mt76.h b/mt76.h
-index 062c5ce4..ed1924c1 100644
+index 062c5ce..ed1924c 100644
 --- a/mt76.h
 +++ b/mt76.h
 @@ -13,7 +13,6 @@
@@ -357,7 +356,7 @@
  		return PTR_ERR(q);
  
 diff --git a/mt7603/dma.c b/mt7603/dma.c
-index 590cff9d..37b092e3 100644
+index 590cff9..37b092e 100644
 --- a/mt7603/dma.c
 +++ b/mt7603/dma.c
 @@ -173,13 +173,13 @@ int mt7603_dma_init(struct mt7603_dev *dev)
@@ -392,7 +391,7 @@
  		return ret;
  
 diff --git a/mt7615/dma.c b/mt7615/dma.c
-index 3a79a2d4..00aefea1 100644
+index 3a79a2d..00aefea 100644
 --- a/mt7615/dma.c
 +++ b/mt7615/dma.c
 @@ -26,14 +26,14 @@ mt7622_init_tx_queues_multi(struct mt7615_dev *dev)
@@ -422,7 +421,7 @@
  		return ret;
  
 diff --git a/mt76x02_mmio.c b/mt76x02_mmio.c
-index 0fa3c7c3..8bcd8afa 100644
+index 0fa3c7c..8bcd8af 100644
 --- a/mt76x02_mmio.c
 +++ b/mt76x02_mmio.c
 @@ -191,13 +191,13 @@ int mt76x02_dma_init(struct mt76x02_dev *dev)
@@ -442,7 +441,7 @@
  		return ret;
  
 diff --git a/mt7915/dma.c b/mt7915/dma.c
-index 9e3d14db..4358e9bf 100644
+index 9e3d14d..4358e9b 100644
 --- a/mt7915/dma.c
 +++ b/mt7915/dma.c
 @@ -8,16 +8,9 @@
@@ -527,16 +526,16 @@
  		return ret;
  
 diff --git a/mt7915/mac.c b/mt7915/mac.c
-index bae700eb..094d10a5 100644
+index fd0dd50..1bf3b41 100644
 --- a/mt7915/mac.c
 +++ b/mt7915/mac.c
-@@ -1413,29 +1413,6 @@ int mt7915_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
+@@ -815,29 +815,6 @@ int mt7915_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
  	return 0;
  }
  
 -u32 mt7915_wed_init_buf(void *ptr, dma_addr_t phys, int token_id)
 -{
--	struct mt7915_txp *txp = ptr + MT_TXD_SIZE;
+-	struct mt76_connac_fw_txp *txp = ptr + MT_TXD_SIZE;
 -	__le32 *txwi = ptr;
 -	u32 val;
 -
@@ -560,16 +559,24 @@
  static void
  mt7915_tx_check_aggr(struct ieee80211_sta *sta, __le32 *txwi)
  {
-@@ -1469,7 +1446,7 @@ mt7915_txp_skb_unmap(struct mt76_dev *dev, struct mt76_txwi_cache *t)
- 
- 	txp = mt7915_txwi_to_txp(dev, t);
- 	for (i = 0; i < txp->nbuf; i++)
--		dma_unmap_single(dev->dma_dev, le32_to_cpu(txp->buf[i]),
-+		dma_unmap_single(dev->dev, le32_to_cpu(txp->buf[i]),
- 				 le16_to_cpu(txp->len[i]), DMA_TO_DEVICE);
+@@ -863,12 +840,23 @@ mt7915_tx_check_aggr(struct ieee80211_sta *sta, __le32 *txwi)
+ 		ieee80211_start_tx_ba_session(sta, tid, 0);
  }
  
-@@ -1478,7 +1455,6 @@ mt7915_txwi_free(struct mt7915_dev *dev, struct mt76_txwi_cache *t,
++/* static void */
++/* mt7915_txp_skb_unmap(struct mt76_dev *dev, struct mt76_txwi_cache *t) */
++/* { */
++/* 	struct mt76_connac_fw_txp *txp; */
++/* 	int i; */
++
++/* 	txp = mt76_connac_txwi_to_txp(dev, t); */
++/* 	for (i = 0; i < txp->nbuf; i++) */
++/* 		dma_unmap_single(dev->dev, le32_to_cpu(txp->buf[i]), */
++/* 				 le16_to_cpu(txp->len[i]), DMA_TO_DEVICE); */
++/* } */
++
+ static void
+ mt7915_txwi_free(struct mt7915_dev *dev, struct mt76_txwi_cache *t,
  		 struct ieee80211_sta *sta, struct list_head *free_list)
  {
  	struct mt76_dev *mdev = &dev->mt76;
@@ -577,7 +584,7 @@
  	struct mt76_wcid *wcid;
  	__le32 *txwi;
  	u16 wcid_idx;
-@@ -1491,24 +1467,13 @@ mt7915_txwi_free(struct mt7915_dev *dev, struct mt76_txwi_cache *t,
+@@ -881,24 +869,13 @@ mt7915_txwi_free(struct mt7915_dev *dev, struct mt76_txwi_cache *t,
  	if (sta) {
  		wcid = (struct mt76_wcid *)sta->drv_priv;
  		wcid_idx = wcid->idx;
@@ -605,7 +612,7 @@
  	__mt76_tx_complete_skb(mdev, wcid_idx, t->skb, free_list);
  
  out:
-@@ -1516,56 +1481,30 @@ out:
+@@ -906,57 +883,31 @@ out:
  	mt76_put_txwi(mdev, t);
  }
  
@@ -646,7 +653,8 @@
  static void
  mt7915_mac_tx_free(struct mt7915_dev *dev, void *data, int len)
  {
- 	struct mt7915_tx_free *free = (struct mt7915_tx_free *)data;
+ 	struct mt76_connac_tx_free *free = data;
+ 	__le32 *tx_info = (__le32 *)(data + sizeof(*free));
  	struct mt76_dev *mdev = &dev->mt76;
 +	struct mt76_phy *mphy_ext = mdev->phy2;
  	struct mt76_txwi_cache *txwi;
@@ -671,7 +679,7 @@
  
  	total = le16_get_bits(free->ctrl, MT_TX_FREE_MSDU_CNT);
  	v3 = (FIELD_GET(MT_TX_FREE_VER, txd) == 0x4);
-@@ -1622,38 +1561,17 @@ mt7915_mac_tx_free(struct mt7915_dev *dev, void *data, int len)
+@@ -1013,38 +964,17 @@ mt7915_mac_tx_free(struct mt7915_dev *dev, void *data, int len)
  		}
  	}
  
@@ -681,9 +689,9 @@
 -static void
 -mt7915_mac_tx_free_v0(struct mt7915_dev *dev, void *data, int len)
 -{
--	struct mt7915_tx_free *free = (struct mt7915_tx_free *)data;
+-	struct mt76_connac_tx_free *free = data;
+-	__le16 *info = (__le16 *)(data + sizeof(*free));
 -	struct mt76_dev *mdev = &dev->mt76;
--	__le16 *info = (__le16 *)free->info;
 -	void *end = data + len;
 -	LIST_HEAD(free_list);
 -	bool wake = false;
@@ -716,8 +724,8 @@
 -	mt7915_mac_tx_free_done(dev, &free_list, wake);
  }
  
- static bool
-@@ -1833,9 +1751,6 @@ bool mt7915_rx_check(struct mt76_dev *mdev, void *data, int len)
+ static void mt7915_mac_add_txs(struct mt7915_dev *dev, void *data)
+@@ -1102,9 +1032,6 @@ bool mt7915_rx_check(struct mt76_dev *mdev, void *data, int len)
  	case PKT_TYPE_TXRX_NOTIFY:
  		mt7915_mac_tx_free(dev, data, len);
  		return false;
@@ -727,7 +735,7 @@
  	case PKT_TYPE_TXS:
  		for (rxd += 2; rxd + 8 <= end; rxd += 8)
  		    mt7915_mac_add_txs(dev, rxd);
-@@ -1863,10 +1778,6 @@ void mt7915_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
+@@ -1132,10 +1059,6 @@ void mt7915_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
  		mt7915_mac_tx_free(dev, skb->data, skb->len);
  		napi_consume_skb(skb, 1);
  		break;
@@ -739,19 +747,16 @@
  		mt7915_mcu_rx_event(dev, skb);
  		break;
 diff --git a/mt7915/mac.h b/mt7915/mac.h
-index c5fd1a61..5add1dd3 100644
+index 6fa9c79..9986c03 100644
 --- a/mt7915/mac.h
 +++ b/mt7915/mac.h
-@@ -24,7 +24,6 @@ enum rx_pkt_type {
+@@ -26,12 +26,10 @@ enum rx_pkt_type {
  	PKT_TYPE_TXRX_NOTIFY,
  	PKT_TYPE_RX_EVENT,
  	PKT_TYPE_RX_FW_MONITOR = 0x0c,
 -	PKT_TYPE_TXRX_NOTIFY_V0 = 0x18,
  };
  
- /* RXD DW1 */
-@@ -312,7 +311,6 @@ struct mt7915_tx_free {
- 
  #define MT_TX_FREE_VER			GENMASK(18, 16)
  #define MT_TX_FREE_MSDU_CNT		GENMASK(9, 0)
 -#define MT_TX_FREE_MSDU_CNT_V0	GENMASK(6, 0)
@@ -759,10 +764,10 @@
  #define MT_TX_FREE_LATENCY		GENMASK(12, 0)
  /* 0: success, others: dropped */
 diff --git a/mt7915/main.c b/mt7915/main.c
-index 2d5a46d3..7da3eada 100644
+index ebff255..79127b4 100644
 --- a/mt7915/main.c
 +++ b/mt7915/main.c
-@@ -1421,39 +1421,6 @@ out:
+@@ -1422,39 +1422,6 @@ out:
  	return ret;
  }
  
@@ -802,7 +807,7 @@
  const struct ieee80211_ops mt7915_ops = {
  	.tx = mt7915_tx,
  	.start = mt7915_start,
-@@ -1501,7 +1468,4 @@ const struct ieee80211_ops mt7915_ops = {
+@@ -1502,7 +1469,4 @@ const struct ieee80211_ops mt7915_ops = {
  	.sta_add_debugfs = mt7915_sta_add_debugfs,
  #endif
  	.set_radar_background = mt7915_set_radar_background,
@@ -811,12 +816,10 @@
 -#endif
  };
 diff --git a/mt7915/mcu.c b/mt7915/mcu.c
-old mode 100644
-new mode 100755
-index 2b9797c8..9da3e85c
+index a16081d..46eef36 100644
 --- a/mt7915/mcu.c
 +++ b/mt7915/mcu.c
-@@ -2656,9 +2656,6 @@ int mt7915_run_firmware(struct mt7915_dev *dev)
+@@ -2365,9 +2365,6 @@ int mt7915_run_firmware(struct mt7915_dev *dev)
  	if (ret)
  		return ret;
  
@@ -827,7 +830,7 @@
  	if (ret)
  		return ret;
 diff --git a/mt7915/mmio.c b/mt7915/mmio.c
-index 995c9ee0..4d196d74 100644
+index a84970d..1f58b2f 100644
 --- a/mt7915/mmio.c
 +++ b/mt7915/mmio.c
 @@ -560,21 +560,15 @@ static void mt7915_rx_poll_complete(struct mt76_dev *mdev,
@@ -878,10 +881,10 @@
  	if (!test_bit(MT76_STATE_INITIALIZED, &dev->mphy.state))
  		return IRQ_NONE;
 diff --git a/mt7915/mt7915.h b/mt7915/mt7915.h
-index 90391a07..02a8c424 100644
+index 6235014..ca95948 100644
 --- a/mt7915/mt7915.h
 +++ b/mt7915/mt7915.h
-@@ -541,8 +541,6 @@ struct mt7915_dev *mt7915_mmio_probe(struct device *pdev,
+@@ -527,8 +527,6 @@ struct mt7915_dev *mt7915_mmio_probe(struct device *pdev,
  void mt7915_wfsys_reset(struct mt7915_dev *dev);
  irqreturn_t mt7915_irq_handler(int irq, void *dev_instance);
  u64 __mt7915_get_tsf(struct ieee80211_hw *hw, struct mt7915_vif *mvif);
@@ -891,7 +894,7 @@
  void mt7915_unregister_device(struct mt7915_dev *dev);
  int mt7915_eeprom_init(struct mt7915_dev *dev);
 diff --git a/mt7915/pci.c b/mt7915/pci.c
-index d74f6097..7cea49f2 100644
+index d74f609..7cea49f 100644
 --- a/mt7915/pci.c
 +++ b/mt7915/pci.c
 @@ -12,9 +12,6 @@
@@ -1029,7 +1032,7 @@
  	mt76_free_device(&dev->mt76);
  
 diff --git a/mt7915/regs.h b/mt7915/regs.h
-index 444440e1..1e7fbcee 100644
+index 444440e..1e7fbce 100644
 --- a/mt7915/regs.h
 +++ b/mt7915/regs.h
 @@ -603,31 +603,18 @@ enum offs_rev {
@@ -1067,7 +1070,7 @@
  #define MT_WFDMA0_PCIE1_BASE		__REG(WFDMA0_PCIE1_ADDR)
  #define MT_WFDMA0_PCIE1(ofs)		(MT_WFDMA0_PCIE1_BASE + (ofs))
 diff --git a/mt7921/dma.c b/mt7921/dma.c
-index 2939cf9b..ca7e20fb 100644
+index 2939cf9..ca7e20f 100644
 --- a/mt7921/dma.c
 +++ b/mt7921/dma.c
 @@ -9,7 +9,7 @@ static int mt7921_init_tx_queues(struct mt7921_phy *phy, int idx, int n_desc)
@@ -1080,7 +1083,7 @@
  		return err;
  
 diff --git a/tx.c b/tx.c
-index 0457c3eb..656b7090 100644
+index 0457c3e..656b709 100644
 --- a/tx.c
 +++ b/tx.c
 @@ -725,12 +725,6 @@ int mt76_token_consume(struct mt76_dev *dev, struct mt76_txwi_cache **ptxwi)
diff --git a/recipes-kernel/linux-mt76/files/patches/patches.inc b/recipes-kernel/linux-mt76/files/patches/patches.inc
index 4446a12..f46d62e 100644
--- a/recipes-kernel/linux-mt76/files/patches/patches.inc
+++ b/recipes-kernel/linux-mt76/files/patches/patches.inc
@@ -8,8 +8,9 @@
     file://0006-mt76-mt7915-add-the-maximum-size-of-beacon-offload.patch \
     file://0007-mt76-mt7915-update-mpdu-density-in-6g-capability.patch \
     file://0008-mt76-common-RF-CR-idx-require-8-bits.patch \
-    file://0009-check-starec-newly.patch \
-    file://0009-mt76-mt7915-4addr-null-frame-using-fixed-rate-to-success-WDS.patch \
+    file://0009-mt76-check-starec-newly.patch \
+    file://0010-mt76-mt7915-4addr-null-frame-using-fixed-rate-to-suc.patch \
+    file://0011-mt76-do-not-check-the-ccmp-pn-for-ONLY_MONITOR-frame.patch \
     file://100-Revert-of-net-pass-the-dst-buffer-to-of_get_mac_addr.patch \
     file://1001-mt76-mt7915-add-mtk-internal-debug-tools-for-mt76.patch \
     file://1002-mt76-mt7915-csi-implement-csi-support.patch \
diff --git a/recipes-kernel/linux-mt76/linux-mt76.bb b/recipes-kernel/linux-mt76/linux-mt76.bb
index 7d5d610..dd40a15 100644
--- a/recipes-kernel/linux-mt76/linux-mt76.bb
+++ b/recipes-kernel/linux-mt76/linux-mt76.bb
@@ -7,7 +7,7 @@
 
 PV = "1.0"
 
-SRCREV ?= "1d8af168e86fa4087351b7d10572accd5dee4d36"
+SRCREV ?= "7275f7758090873e120ffe1b3de1ef4da0bc8d47"
 SRC_URI = " \
     git://git@github.com/openwrt/mt76.git;protocol=https \
     file://COPYING;subdir=git \