public inbox for linux-wireless@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 01/11] wifi: mt76: connac: use is_connac2() to replace is_mt7921() checks
@ 2026-02-19  0:39 sean.wang
  2026-02-19  0:39 ` [PATCH 02/11] wifi: mt76: mt7921: use mt76_for_each_q_rx() in reset path sean.wang
                   ` (10 more replies)
  0 siblings, 11 replies; 16+ messages in thread
From: sean.wang @ 2026-02-19  0:39 UTC (permalink / raw)
  To: nbd, lorenzo.bianconi; +Cc: linux-wireless, linux-mediatek, Sean Wang

From: Sean Wang <sean.wang@mediatek.com>

Unify all per-chip conditionals under the new is_connac2() helper. This
avoids confusion caused by the previous is_mt7921() check, which
implicitly covered multiple connac2 chipsets and no longer reflected its
actual scope. This is a clean-up only change with no functional impact.

Signed-off-by: Sean Wang <sean.wang@mediatek.com>
---
 .../net/wireless/mediatek/mt76/mt76_connac.h  |  2 +-
 .../wireless/mediatek/mt76/mt76_connac_mac.c  | 16 ++++++------
 .../wireless/mediatek/mt76/mt76_connac_mcu.c  | 26 +++++++++----------
 .../wireless/mediatek/mt76/mt76_connac_mcu.h  |  2 +-
 .../net/wireless/mediatek/mt76/mt792x_core.c  |  2 +-
 .../net/wireless/mediatek/mt76/mt792x_dma.c   |  2 +-
 6 files changed, 25 insertions(+), 25 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac.h b/drivers/net/wireless/mediatek/mt76/mt76_connac.h
index 813d61bffc2c..02bea67d37c3 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76_connac.h
+++ b/drivers/net/wireless/mediatek/mt76/mt76_connac.h
@@ -187,7 +187,7 @@ static inline bool is_mt7922(struct mt76_dev *dev)
 	return mt76_chip(dev) == 0x7922;
 }
 
-static inline bool is_mt7921(struct mt76_dev *dev)
+static inline bool is_connac2(struct mt76_dev *dev)
 {
 	return mt76_chip(dev) == 0x7961 || is_mt7922(dev) || is_mt7920(dev);
 }
diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c b/drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c
index 4ef44514d48d..e76f6e28b7f0 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c
@@ -173,7 +173,7 @@ void mt76_connac_write_hw_txp(struct mt76_dev *dev,
 
 	txp->msdu_id[0] = cpu_to_le16(id | MT_MSDU_ID_VALID);
 
-	if (is_mt7663(dev) || is_mt7921(dev) || is_mt7925(dev))
+	if (is_mt7663(dev) || is_connac2(dev) || is_mt7925(dev))
 		last_mask = MT_TXD_LEN_LAST;
 	else
 		last_mask = MT_TXD_LEN_AMSDU_LAST |
@@ -217,7 +217,7 @@ mt76_connac_txp_skb_unmap_hw(struct mt76_dev *dev,
 	u32 last_mask;
 	int i;
 
-	if (is_mt7663(dev) || is_mt7921(dev) || is_mt7925(dev))
+	if (is_mt7663(dev) || is_connac2(dev) || is_mt7925(dev))
 		last_mask = MT_TXD_LEN_LAST;
 	else
 		last_mask = MT_TXD_LEN_MSDU_LAST;
@@ -309,7 +309,7 @@ u16 mt76_connac2_mac_tx_rate_val(struct mt76_phy *mphy,
 	chandef = mvif->ctx ? &mvif->ctx->def : &mphy->chandef;
 	band = chandef->chan->band;
 
-	if (is_mt7921(mphy->dev)) {
+	if (is_connac2(mphy->dev)) {
 		rateidx = ffs(conf->basic_rates) - 1;
 		goto legacy;
 	}
@@ -547,7 +547,7 @@ void mt76_connac2_mac_write_txwi(struct mt76_dev *dev, __le32 *txwi,
 	val = MT_TXD1_LONG_FORMAT |
 	      FIELD_PREP(MT_TXD1_WLAN_IDX, wcid->idx) |
 	      FIELD_PREP(MT_TXD1_OWN_MAC, omac_idx);
-	if (!is_mt7921(dev))
+	if (!is_connac2(dev))
 		val |= MT_TXD1_VTA;
 	if (phy_idx || band_idx)
 		val |= MT_TXD1_TGID;
@@ -556,7 +556,7 @@ void mt76_connac2_mac_write_txwi(struct mt76_dev *dev, __le32 *txwi,
 	txwi[2] = 0;
 
 	val = FIELD_PREP(MT_TXD3_REM_TX_COUNT, 15);
-	if (!is_mt7921(dev))
+	if (!is_connac2(dev))
 		val |= MT_TXD3_SW_POWER_MGMT;
 	if (key)
 		val |= MT_TXD3_PROTECT_FRAME;
@@ -598,7 +598,7 @@ void mt76_connac2_mac_write_txwi(struct mt76_dev *dev, __le32 *txwi,
 		txwi[6] |= cpu_to_le32(val);
 		txwi[3] |= cpu_to_le32(MT_TXD3_BA_DISABLE);
 
-		if (!is_mt7921(dev)) {
+		if (!is_connac2(dev)) {
 			u8 spe_idx = mt76_connac_spe_idx(mphy->antenna_mask);
 
 			if (!spe_idx)
@@ -830,7 +830,7 @@ mt76_connac2_mac_decode_he_mu_radiotap(struct mt76_dev *dev, struct sk_buff *skb
 	};
 	struct ieee80211_radiotap_he_mu *he_mu;
 
-	if (is_mt7921(dev)) {
+	if (is_connac2(dev)) {
 		mu_known.flags1 |= HE_BITS(MU_FLAGS1_SIG_B_COMP_KNOWN);
 		mu_known.flags2 |= HE_BITS(MU_FLAGS2_PUNC_FROM_SIG_A_BW_KNOWN);
 	}
@@ -1046,7 +1046,7 @@ int mt76_connac2_mac_fill_rx_rate(struct mt76_dev *dev,
 		stbc = FIELD_GET(MT_PRXV_HT_STBC, v0);
 		gi = FIELD_GET(MT_PRXV_HT_SGI, v0);
 		*mode = FIELD_GET(MT_PRXV_TX_MODE, v0);
-		if (is_mt7921(dev))
+		if (is_connac2(dev))
 			dcm = !!(idx & MT_PRXV_TX_DCM);
 		else
 			dcm = FIELD_GET(MT_PRXV_DCM, v0);
diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c
index 3f583e2a1dc1..d7fbf3454bb8 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c
@@ -65,7 +65,7 @@ int mt76_connac_mcu_init_download(struct mt76_dev *dev, u32 addr, u32 len,
 	int cmd;
 
 	if ((!is_connac_v1(dev) && addr == MCU_PATCH_ADDRESS) ||
-	    (is_mt7921(dev) && addr == 0x900000) ||
+	    (is_connac2(dev) && addr == 0x900000) ||
 	    (is_mt7925(dev) && (addr == 0x900000 || addr == 0xe0002800)) ||
 	    (is_mt799x(dev) && addr == 0x900000))
 		cmd = MCU_CMD(PATCH_START_REQ);
@@ -402,7 +402,7 @@ void mt76_connac_mcu_sta_basic_tlv(struct mt76_dev *dev, struct sk_buff *skb,
 	switch (vif->type) {
 	case NL80211_IFTYPE_MESH_POINT:
 	case NL80211_IFTYPE_AP:
-		if (vif->p2p && !is_mt7921(dev))
+		if (vif->p2p && !is_connac2(dev))
 			conn_type = CONNECTION_P2P_GC;
 		else
 			conn_type = CONNECTION_INFRA_STA;
@@ -410,7 +410,7 @@ void mt76_connac_mcu_sta_basic_tlv(struct mt76_dev *dev, struct sk_buff *skb,
 		basic->aid = cpu_to_le16(link_sta->sta->aid);
 		break;
 	case NL80211_IFTYPE_STATION:
-		if (vif->p2p && !is_mt7921(dev))
+		if (vif->p2p && !is_connac2(dev))
 			conn_type = CONNECTION_P2P_GO;
 		else
 			conn_type = CONNECTION_INFRA_AP;
@@ -874,7 +874,7 @@ void mt76_connac_mcu_sta_tlv(struct mt76_phy *mphy, struct sk_buff *skb,
 		struct sta_rec_vht *vht;
 		int len;
 
-		len = is_mt7921(dev) ? sizeof(*vht) : sizeof(*vht) - 4;
+		len = is_connac2(dev) ? sizeof(*vht) : sizeof(*vht) - 4;
 		tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_VHT, len);
 		vht = (struct sta_rec_vht *)tlv;
 		vht->vht_cap = cpu_to_le32(sta->deflink.vht_cap.cap);
@@ -885,7 +885,7 @@ void mt76_connac_mcu_sta_tlv(struct mt76_phy *mphy, struct sk_buff *skb,
 	/* starec uapsd */
 	mt76_connac_mcu_sta_uapsd(skb, vif, sta);
 
-	if (!is_mt7921(dev))
+	if (!is_connac2(dev))
 		return;
 
 	if (sta->deflink.ht_cap.ht_supported || sta->deflink.he_cap.has_he)
@@ -1778,7 +1778,7 @@ int mt76_connac_mcu_hw_scan(struct mt76_phy *phy, struct ieee80211_vif *vif,
 	req->ssid_type_ext = n_ssids ? BIT(0) : 0;
 	req->ssids_num = n_ssids;
 
-	duration = is_mt7921(phy->dev) ? 0 : MT76_CONNAC_SCAN_CHANNEL_TIME;
+	duration = is_connac2(phy->dev) ? 0 : MT76_CONNAC_SCAN_CHANNEL_TIME;
 	/* increase channel time for passive scan */
 	if (!sreq->n_ssids)
 		duration *= 2;
@@ -1821,7 +1821,7 @@ int mt76_connac_mcu_hw_scan(struct mt76_phy *phy, struct ieee80211_vif *vif,
 		req->ies_len = cpu_to_le16(sreq->ie_len);
 	}
 
-	if (is_mt7921(phy->dev))
+	if (is_connac2(phy->dev))
 		req->scan_func |= SCAN_FUNC_SPLIT_SCAN;
 
 	memcpy(req->bssid, sreq->bssid, ETH_ALEN);
@@ -1897,7 +1897,7 @@ int mt76_connac_mcu_sched_scan_req(struct mt76_phy *phy,
 		get_random_mask_addr(addr, sreq->mac_addr,
 				     sreq->mac_addr_mask);
 	}
-	if (is_mt7921(phy->dev)) {
+	if (is_connac2(phy->dev)) {
 		req->mt7921.bss_idx = mvif->idx;
 		req->mt7921.delay = cpu_to_le32(sreq->delay);
 	}
@@ -2037,7 +2037,7 @@ mt76_connac_mcu_build_sku(struct mt76_dev *dev, s8 *sku,
 			  struct mt76_power_limits *limits,
 			  enum nl80211_band band)
 {
-	int max_power = is_mt7921(dev) ? 127 : 63;
+	int max_power = is_connac2(dev) ? 127 : 63;
 	int i, offset = sizeof(limits->cck);
 
 	memset(sku, max_power, MT_SKU_POWER_LIMIT);
@@ -2065,7 +2065,7 @@ mt76_connac_mcu_build_sku(struct mt76_dev *dev, s8 *sku,
 		offset += 12;
 	}
 
-	if (!is_mt7921(dev))
+	if (!is_connac2(dev))
 		return;
 
 	/* he */
@@ -2121,7 +2121,7 @@ mt76_connac_mcu_rate_txpower_band(struct mt76_phy *phy,
 				  enum nl80211_band band)
 {
 	struct mt76_dev *dev = phy->dev;
-	int sku_len, batch_len = is_mt7921(dev) ? 8 : 16;
+	int sku_len, batch_len = is_connac2(dev) ? 8 : 16;
 	static const u8 chan_list_2ghz[] = {
 		1, 2,  3,  4,  5,  6,  7,
 		8, 9, 10, 11, 12, 13, 14
@@ -2162,7 +2162,7 @@ mt76_connac_mcu_rate_txpower_band(struct mt76_phy *phy,
 	if (!limits)
 		return -ENOMEM;
 
-	sku_len = is_mt7921(dev) ? sizeof(sku_tlbv) : sizeof(sku_tlbv) - 92;
+	sku_len = is_connac2(dev) ? sizeof(sku_tlbv) : sizeof(sku_tlbv) - 92;
 	tx_power = 2 * phy->hw->conf.power_level;
 	if (!tx_power)
 		tx_power = 127;
@@ -3080,7 +3080,7 @@ static u32 mt76_connac2_get_data_mode(struct mt76_dev *dev, u32 info)
 {
 	u32 mode = DL_MODE_NEED_RSP;
 
-	if ((!is_mt7921(dev) && !is_mt7925(dev)) || info == PATCH_SEC_NOT_SUPPORT)
+	if ((!is_connac2(dev) && !is_mt7925(dev)) || info == PATCH_SEC_NOT_SUPPORT)
 		return mode;
 
 	switch (FIELD_GET(PATCH_SEC_ENC_TYPE_MASK, info)) {
diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h
index f44977f9093d..1ef25385f3c6 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h
+++ b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h
@@ -1866,7 +1866,7 @@ mt76_connac_mcu_gen_dl_mode(struct mt76_dev *dev, u8 feature_set, bool is_wa)
 
 	ret |= feature_set & FW_FEATURE_SET_ENCRYPT ?
 	       DL_MODE_ENCRYPT | DL_MODE_RESET_SEC_IV : 0;
-	if (is_mt7921(dev) || is_mt7925(dev))
+	if (is_connac2(dev) || is_mt7925(dev))
 		ret |= feature_set & FW_FEATURE_ENCRY_MODE ?
 		       DL_CONFIG_ENCRY_MODE_SEL : 0;
 	ret |= FIELD_PREP(DL_MODE_KEY_IDX,
diff --git a/drivers/net/wireless/mediatek/mt76/mt792x_core.c b/drivers/net/wireless/mediatek/mt76/mt792x_core.c
index f318a53e4deb..2142fcc4ae27 100644
--- a/drivers/net/wireless/mediatek/mt76/mt792x_core.c
+++ b/drivers/net/wireless/mediatek/mt76/mt792x_core.c
@@ -151,7 +151,7 @@ void mt792x_stop(struct ieee80211_hw *hw, bool suspend)
 	cancel_work_sync(&dev->reset_work);
 	mt76_connac_free_pending_tx_skbs(&dev->pm, NULL);
 
-	if (is_mt7921(&dev->mt76)) {
+	if (is_connac2(&dev->mt76)) {
 		mt792x_mutex_acquire(dev);
 		mt76_connac_mcu_set_mac_enable(&dev->mt76, 0, false, false);
 		mt792x_mutex_release(dev);
diff --git a/drivers/net/wireless/mediatek/mt76/mt792x_dma.c b/drivers/net/wireless/mediatek/mt76/mt792x_dma.c
index 1ddec7788b66..34f07bd3097d 100644
--- a/drivers/net/wireless/mediatek/mt76/mt792x_dma.c
+++ b/drivers/net/wireless/mediatek/mt76/mt792x_dma.c
@@ -356,7 +356,7 @@ EXPORT_SYMBOL_GPL(mt792x_poll_rx);
 
 int mt792x_wfsys_reset(struct mt792x_dev *dev)
 {
-	u32 addr = is_mt7921(&dev->mt76) ? 0x18000140 : 0x7c000140;
+	u32 addr = is_connac2(&dev->mt76) ? 0x18000140 : 0x7c000140;
 
 	mt76_clear(dev, addr, WFSYS_SW_RST_B);
 	msleep(50);
-- 
2.43.0


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

* [PATCH 02/11] wifi: mt76: mt7921: use mt76_for_each_q_rx() in reset path
  2026-02-19  0:39 [PATCH 01/11] wifi: mt76: connac: use is_connac2() to replace is_mt7921() checks sean.wang
@ 2026-02-19  0:39 ` sean.wang
  2026-02-19  0:39 ` [PATCH 03/11] wifi: mt76: mt7921: handle MT7902 irq_map quirk with mutable copy sean.wang
                   ` (9 subsequent siblings)
  10 siblings, 0 replies; 16+ messages in thread
From: sean.wang @ 2026-02-19  0:39 UTC (permalink / raw)
  To: nbd, lorenzo.bianconi; +Cc: linux-wireless, linux-mediatek, Sean Wang

From: Sean Wang <sean.wang@mediatek.com>

Replace explicit napi_disable() calls for RX queues with
mt76_for_each_q_rx() in mt7921e_mac_reset().

This removes hardcoded queue indices and disables all configured
RX queues during reset.

Signed-off-by: Sean Wang <sean.wang@mediatek.com>
---
 drivers/net/wireless/mediatek/mt76/mt7921/pci_mac.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/pci_mac.c b/drivers/net/wireless/mediatek/mt76/mt7921/pci_mac.c
index 5ec084432ae3..0db7acb3a637 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7921/pci_mac.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/pci_mac.c
@@ -71,9 +71,9 @@ int mt7921e_mac_reset(struct mt792x_dev *dev)
 	mt76_txq_schedule_all(&dev->mphy);
 
 	mt76_worker_disable(&dev->mt76.tx_worker);
-	napi_disable(&dev->mt76.napi[MT_RXQ_MAIN]);
-	napi_disable(&dev->mt76.napi[MT_RXQ_MCU]);
-	napi_disable(&dev->mt76.napi[MT_RXQ_MCU_WA]);
+	mt76_for_each_q_rx(&dev->mt76, i) {
+		napi_disable(&dev->mt76.napi[i]);
+	}
 	napi_disable(&dev->mt76.tx_napi);
 
 	mt76_connac2_tx_token_put(&dev->mt76);
-- 
2.43.0


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

* [PATCH 03/11] wifi: mt76: mt7921: handle MT7902 irq_map quirk with mutable copy
  2026-02-19  0:39 [PATCH 01/11] wifi: mt76: connac: use is_connac2() to replace is_mt7921() checks sean.wang
  2026-02-19  0:39 ` [PATCH 02/11] wifi: mt76: mt7921: use mt76_for_each_q_rx() in reset path sean.wang
@ 2026-02-19  0:39 ` sean.wang
  2026-02-20 10:09   ` Philip Müller
  2026-02-19  0:40 ` [PATCH 04/11] wifi: mt76: mt7921: add MT7902e DMA layout support sean.wang
                   ` (8 subsequent siblings)
  10 siblings, 1 reply; 16+ messages in thread
From: sean.wang @ 2026-02-19  0:39 UTC (permalink / raw)
  To: nbd, lorenzo.bianconi
  Cc: linux-wireless, linux-mediatek, Sean Wang, Xiong Huang

From: Sean Wang <sean.wang@mediatek.com>

MT7902 PCIe requires a different wm2_complete_mask value, so introduce a
mutable per-device copy of the default irq_map and override the field
only for this chip. Other devices continue using the shared const
template.

This is a prerequisite patch before enabling MT7902 PCIe support.

Co-developed-by: Xiong Huang <xiong.huang@mediatek.com>
Signed-off-by: Xiong Huang <xiong.huang@mediatek.com>
Signed-off-by: Sean Wang <sean.wang@mediatek.com>
---
 drivers/net/wireless/mediatek/mt76/mt7921/pci.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/pci.c b/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
index 65c7fe671137..5f857a21f362 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
@@ -327,6 +327,20 @@ static int mt7921_pci_probe(struct pci_dev *pdev,
 	dev->hif_ops = &mt7921_pcie_ops;
 	dev->irq_map = &irq_map;
 	mt76_mmio_init(&dev->mt76, regs);
+
+	if (id->device == 0x7902) {
+		struct mt792x_irq_map *map;
+
+		/* MT7902 needs a mutable copy because wm2_complete_mask differs */
+		map = devm_kmemdup(&pdev->dev, &irq_map,
+				   sizeof(irq_map), GFP_KERNEL);
+		if (!map)
+			return -ENOMEM;
+
+		map->rx.wm2_complete_mask = 0;
+		dev->irq_map = map;
+	}
+
 	tasklet_init(&mdev->irq_tasklet, mt792x_irq_tasklet, (unsigned long)dev);
 
 	dev->phy.dev = dev;
-- 
2.43.0


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

* [PATCH 04/11] wifi: mt76: mt7921: add MT7902e DMA layout support
  2026-02-19  0:39 [PATCH 01/11] wifi: mt76: connac: use is_connac2() to replace is_mt7921() checks sean.wang
  2026-02-19  0:39 ` [PATCH 02/11] wifi: mt76: mt7921: use mt76_for_each_q_rx() in reset path sean.wang
  2026-02-19  0:39 ` [PATCH 03/11] wifi: mt76: mt7921: handle MT7902 irq_map quirk with mutable copy sean.wang
@ 2026-02-19  0:40 ` sean.wang
  2026-02-19  0:40 ` [PATCH 05/11] wifi: mt76: connac: mark MT7902 as hw txp devices sean.wang
                   ` (7 subsequent siblings)
  10 siblings, 0 replies; 16+ messages in thread
From: sean.wang @ 2026-02-19  0:40 UTC (permalink / raw)
  To: nbd, lorenzo.bianconi
  Cc: linux-wireless, linux-mediatek, Sean Wang, Xiong Huang

From: Sean Wang <sean.wang@mediatek.com>

Add MT7902 PCIe specific DMA layout overrides for MCU TXQ index, RX ring
size, and MCU_WA usage. Common layout remains the default for other chips.

This is a prerequisite patch before enabling MT7902 PCIe support.

Co-developed-by: Xiong Huang <xiong.huang@mediatek.com>
Signed-off-by: Xiong Huang <xiong.huang@mediatek.com>
Signed-off-by: Sean Wang <sean.wang@mediatek.com>
---
 .../wireless/mediatek/mt76/mt7921/mt7921.h    | 14 +++++++
 .../net/wireless/mediatek/mt76/mt7921/pci.c   | 41 +++++++++++++++----
 2 files changed, 46 insertions(+), 9 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h b/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h
index ad92af98e314..64f60c4fc60c 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h
@@ -17,6 +17,9 @@
 #define MT7921_RX_MCU_RING_SIZE		8
 #define MT7921_RX_MCU_WA_RING_SIZE	512
 
+/* MT7902 Rx Ring0 is for both Rx Event and Tx Done Event */
+#define MT7902_RX_MCU_RING_SIZE		512
+
 #define MT7921_EEPROM_SIZE		3584
 #define MT7921_TOKEN_SIZE		8192
 
@@ -119,6 +122,17 @@ enum mt7921_rxq_id {
 	MT7921_RXQ_MCU_WM = 0,
 };
 
+/* MT7902 assigns its MCU-WM TXQ at index 15 */
+enum mt7902_txq_id {
+	MT7902_TXQ_MCU_WM = 15,
+};
+
+struct mt7921_dma_layout {
+	u8 mcu_wm_txq;
+	u16 mcu_rxdone_ring_size;
+	bool has_mcu_wa;
+};
+
 enum {
 	MT7921_CLC_POWER,
 	MT7921_CLC_CHAN,
diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/pci.c b/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
index 5f857a21f362..6bb3c6a1cf6a 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
@@ -167,8 +167,29 @@ static u32 mt7921_rmw(struct mt76_dev *mdev, u32 offset, u32 mask, u32 val)
 
 static int mt7921_dma_init(struct mt792x_dev *dev)
 {
+	struct mt7921_dma_layout layout = {
+		/* General case: MT7921 / MT7922 /MT7920 */
+		.mcu_wm_txq            = MT7921_TXQ_MCU_WM,
+		.mcu_rxdone_ring_size  = MT7921_RX_MCU_RING_SIZE,
+		.has_mcu_wa            = true,
+	};
+	bool is_mt7902;
 	int ret;
 
+	is_mt7902 = mt7921_l1_rr(dev, MT_HW_CHIPID) == 0x7902;
+
+	/*
+	 * MT7902 special case:
+	 *   - MCU-WM TXQ uses index 15
+	 *   - RX Ring0 is larger and shared for event/TX-done
+	 *   - MT7902 does not use the MCU_WA ring
+	 */
+	if (is_mt7902) {
+		layout.mcu_wm_txq           = MT7902_TXQ_MCU_WM;
+		layout.mcu_rxdone_ring_size = MT7902_RX_MCU_RING_SIZE;
+		layout.has_mcu_wa           = false;
+	}
+
 	mt76_dma_attach(&dev->mt76);
 
 	ret = mt792x_dma_disable(dev, true);
@@ -185,7 +206,7 @@ static int mt7921_dma_init(struct mt792x_dev *dev)
 	mt76_wr(dev, MT_WFDMA0_TX_RING0_EXT_CTRL, 0x4);
 
 	/* command to WM */
-	ret = mt76_init_mcu_queue(&dev->mt76, MT_MCUQ_WM, MT7921_TXQ_MCU_WM,
+	ret = mt76_init_mcu_queue(&dev->mt76, MT_MCUQ_WM, layout.mcu_wm_txq,
 				  MT7921_TX_MCU_RING_SIZE, MT_TX_RING_BASE);
 	if (ret)
 		return ret;
@@ -199,18 +220,20 @@ static int mt7921_dma_init(struct mt792x_dev *dev)
 	/* event from WM before firmware download */
 	ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_MCU],
 			       MT7921_RXQ_MCU_WM,
-			       MT7921_RX_MCU_RING_SIZE,
+			       layout.mcu_rxdone_ring_size,
 			       MT_RX_BUF_SIZE, MT_RX_EVENT_RING_BASE);
 	if (ret)
 		return ret;
 
-	/* Change mcu queue after firmware download */
-	ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_MCU_WA],
-			       MT7921_RXQ_MCU_WM,
-			       MT7921_RX_MCU_WA_RING_SIZE,
-			       MT_RX_BUF_SIZE, MT_WFDMA0(0x540));
-	if (ret)
-		return ret;
+	if (layout.has_mcu_wa) {
+		/* Change mcu queue after firmware download */
+		ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_MCU_WA],
+				       MT7921_RXQ_MCU_WM,
+				       MT7921_RX_MCU_WA_RING_SIZE,
+				       MT_RX_BUF_SIZE, MT_WFDMA0(0x540));
+		if (ret)
+			return ret;
+	}
 
 	/* rx data */
 	ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_MAIN],
-- 
2.43.0


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

* [PATCH 05/11] wifi: mt76: connac: mark MT7902 as hw txp devices
  2026-02-19  0:39 [PATCH 01/11] wifi: mt76: connac: use is_connac2() to replace is_mt7921() checks sean.wang
                   ` (2 preceding siblings ...)
  2026-02-19  0:40 ` [PATCH 04/11] wifi: mt76: mt7921: add MT7902e DMA layout support sean.wang
@ 2026-02-19  0:40 ` sean.wang
  2026-02-19  0:40 ` [PATCH 06/11] wifi: mt76: mt792x: add PSE handling barrier for the large MCU cmd sean.wang
                   ` (6 subsequent siblings)
  10 siblings, 0 replies; 16+ messages in thread
From: sean.wang @ 2026-02-19  0:40 UTC (permalink / raw)
  To: nbd, lorenzo.bianconi
  Cc: linux-wireless, linux-mediatek, Sean Wang, Xiong Huang

From: Sean Wang <sean.wang@mediatek.com>

Add MT7902 to is_mt76_fw_txp() so it follows the legacy TX descriptor
path like the other connac2 chips that return false.

This is a prerequisite patch before enabling MT7902 pcie support.

Co-developed-by: Xiong Huang <xiong.huang@mediatek.com>
Signed-off-by: Xiong Huang <xiong.huang@mediatek.com>
Signed-off-by: Sean Wang <sean.wang@mediatek.com>
---
 drivers/net/wireless/mediatek/mt76/mt76_connac.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac.h b/drivers/net/wireless/mediatek/mt76/mt76_connac.h
index 02bea67d37c3..d868bb7c7ab8 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76_connac.h
+++ b/drivers/net/wireless/mediatek/mt76/mt76_connac.h
@@ -271,6 +271,7 @@ static inline bool is_mt76_fw_txp(struct mt76_dev *dev)
 	case 0x7961:
 	case 0x7920:
 	case 0x7922:
+	case 0x7902:
 	case 0x7925:
 	case 0x7663:
 	case 0x7622:
-- 
2.43.0


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

* [PATCH 06/11] wifi: mt76: mt792x: add PSE handling barrier for the large MCU cmd
  2026-02-19  0:39 [PATCH 01/11] wifi: mt76: connac: use is_connac2() to replace is_mt7921() checks sean.wang
                   ` (3 preceding siblings ...)
  2026-02-19  0:40 ` [PATCH 05/11] wifi: mt76: connac: mark MT7902 as hw txp devices sean.wang
@ 2026-02-19  0:40 ` sean.wang
  2026-02-19  0:40 ` [PATCH 07/11] wifi: mt76: mt792x: ensure MCU ready before ROM patch download sean.wang
                   ` (5 subsequent siblings)
  10 siblings, 0 replies; 16+ messages in thread
From: sean.wang @ 2026-02-19  0:40 UTC (permalink / raw)
  To: nbd, lorenzo.bianconi
  Cc: linux-wireless, linux-mediatek, Sean Wang, Xiong Huang

From: Sean Wang <sean.wang@mediatek.com>

Add a dummy register read in mt76_connac_mcu_rate_txpower_band() to act as
a PSE barrier. This would release PSE pages and prevents buffer underflow
issues when handling MCU commands with larger payloads without the response
in mt76_connac_mcu_set_rate_txpower().

This is a prerequisite patch before enabling MT7902 PCIe and SDIO support.

Co-developed-by: Xiong Huang <xiong.huang@mediatek.com>
Signed-off-by: Xiong Huang <xiong.huang@mediatek.com>
Signed-off-by: Sean Wang <sean.wang@mediatek.com>
---
 drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c | 4 ++++
 drivers/net/wireless/mediatek/mt76/mt792x_regs.h     | 2 ++
 2 files changed, 6 insertions(+)

diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c
index d7fbf3454bb8..89bd52ea8bf7 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c
@@ -4,6 +4,7 @@
 #include <linux/firmware.h>
 #include "mt76_connac2_mac.h"
 #include "mt76_connac_mcu.h"
+#include "mt792x_regs.h"
 
 int mt76_connac_mcu_start_firmware(struct mt76_dev *dev, u32 addr, u32 option)
 {
@@ -2246,6 +2247,9 @@ mt76_connac_mcu_rate_txpower_band(struct mt76_phy *phy,
 					    false);
 		if (err < 0)
 			goto out;
+
+		/* read a CR to avoid PSE buffer underflow */
+		mt76_connac_mcu_reg_rr(dev, MT_PSE_BASE);
 	}
 
 out:
diff --git a/drivers/net/wireless/mediatek/mt76/mt792x_regs.h b/drivers/net/wireless/mediatek/mt76/mt792x_regs.h
index acf627aed609..7ddde9286861 100644
--- a/drivers/net/wireless/mediatek/mt76/mt792x_regs.h
+++ b/drivers/net/wireless/mediatek/mt76/mt792x_regs.h
@@ -25,6 +25,8 @@
 #define MT_PLE_AC_QEMPTY(_n)		MT_PLE(0x500 + 0x40 * (_n))
 #define MT_PLE_AMSDU_PACK_MSDU_CNT(n)	MT_PLE(0x10e0 + ((n) << 2))
 
+#define MT_PSE_BASE			0x820c8000
+
 /* TMAC: band 0(0x21000), band 1(0xa1000) */
 #define MT_WF_TMAC_BASE(_band)		((_band) ? 0x820f4000 : 0x820e4000)
 #define MT_WF_TMAC(_band, ofs)		(MT_WF_TMAC_BASE(_band) + (ofs))
-- 
2.43.0


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

* [PATCH 07/11] wifi: mt76: mt792x: ensure MCU ready before ROM patch download
  2026-02-19  0:39 [PATCH 01/11] wifi: mt76: connac: use is_connac2() to replace is_mt7921() checks sean.wang
                   ` (4 preceding siblings ...)
  2026-02-19  0:40 ` [PATCH 06/11] wifi: mt76: mt792x: add PSE handling barrier for the large MCU cmd sean.wang
@ 2026-02-19  0:40 ` sean.wang
  2026-02-19  0:40 ` [PATCH 08/11] wifi: mt76: mt7921: add MT7902 MCU support sean.wang
                   ` (4 subsequent siblings)
  10 siblings, 0 replies; 16+ messages in thread
From: sean.wang @ 2026-02-19  0:40 UTC (permalink / raw)
  To: nbd, lorenzo.bianconi; +Cc: linux-wireless, linux-mediatek, Sean Wang

From: Sean Wang <sean.wang@mediatek.com>

Restart the MCU and poll FW state to ensure correct MCU status
before downloading the ROM patch.

This is a prerequisite for enabling MT7902 PCIe and has been
validated on MT7921 and MT7925 since they share the common code path.

Signed-off-by: Sean Wang <sean.wang@mediatek.com>
---
 drivers/net/wireless/mediatek/mt76/mt792x_core.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/net/wireless/mediatek/mt76/mt792x_core.c b/drivers/net/wireless/mediatek/mt76/mt792x_core.c
index 2142fcc4ae27..152cfcca2f90 100644
--- a/drivers/net/wireless/mediatek/mt76/mt792x_core.c
+++ b/drivers/net/wireless/mediatek/mt76/mt792x_core.c
@@ -926,6 +926,13 @@ int mt792x_load_firmware(struct mt792x_dev *dev)
 {
 	int ret;
 
+	mt76_connac_mcu_restart(&dev->mt76);
+
+	if (!mt76_poll_msec(dev, MT_CONN_ON_MISC, MT_TOP_MISC_FW_STATE,
+			    MT_TOP_MISC2_FW_PWR_ON, 1000))
+		dev_warn(dev->mt76.dev,
+			 "MCU is not ready for firmware download\n");
+
 	ret = mt76_connac2_load_patch(&dev->mt76, mt792x_patch_name(dev));
 	if (ret)
 		return ret;
-- 
2.43.0


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

* [PATCH 08/11] wifi: mt76: mt7921: add MT7902 MCU support
  2026-02-19  0:39 [PATCH 01/11] wifi: mt76: connac: use is_connac2() to replace is_mt7921() checks sean.wang
                   ` (5 preceding siblings ...)
  2026-02-19  0:40 ` [PATCH 07/11] wifi: mt76: mt792x: ensure MCU ready before ROM patch download sean.wang
@ 2026-02-19  0:40 ` sean.wang
  2026-02-19  0:40 ` [PATCH 09/11] wifi: mt76: mt792x: add MT7902 WFDMA prefetch configuration sean.wang
                   ` (3 subsequent siblings)
  10 siblings, 0 replies; 16+ messages in thread
From: sean.wang @ 2026-02-19  0:40 UTC (permalink / raw)
  To: nbd, lorenzo.bianconi; +Cc: linux-wireless, linux-mediatek, Sean Wang

From: Sean Wang <sean.wang@mediatek.com>

Add MCU support for the MT7902 chipset.

runtime pm is not yet supported by the driver, but normal mac80211
operation is unaffected.

Signed-off-by: Sean Wang <sean.wang@mediatek.com>
---
 drivers/net/wireless/mediatek/mt76/mt76_connac.h | 8 +++++++-
 drivers/net/wireless/mediatek/mt76/mt7921/init.c | 4 +++-
 drivers/net/wireless/mediatek/mt76/mt792x.h      | 6 ++++++
 3 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac.h b/drivers/net/wireless/mediatek/mt76/mt76_connac.h
index d868bb7c7ab8..51423c7740bd 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76_connac.h
+++ b/drivers/net/wireless/mediatek/mt76/mt76_connac.h
@@ -182,6 +182,11 @@ static inline bool is_mt7920(struct mt76_dev *dev)
 	return mt76_chip(dev) == 0x7920;
 }
 
+static inline bool is_mt7902(struct mt76_dev *dev)
+{
+	return mt76_chip(dev) == 0x7902;
+}
+
 static inline bool is_mt7922(struct mt76_dev *dev)
 {
 	return mt76_chip(dev) == 0x7922;
@@ -189,7 +194,8 @@ static inline bool is_mt7922(struct mt76_dev *dev)
 
 static inline bool is_connac2(struct mt76_dev *dev)
 {
-	return mt76_chip(dev) == 0x7961 || is_mt7922(dev) || is_mt7920(dev);
+	return mt76_chip(dev) == 0x7961 || is_mt7922(dev) || is_mt7920(dev) ||
+				is_mt7902(dev);
 }
 
 static inline bool is_mt7663(struct mt76_dev *dev)
diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/init.c b/drivers/net/wireless/mediatek/mt76/mt7921/init.c
index 29732315af1c..8e7790702191 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7921/init.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/init.c
@@ -302,7 +302,9 @@ int mt7921_register_device(struct mt792x_dev *dev)
 	dev->pm.idle_timeout = MT792x_PM_TIMEOUT;
 	dev->pm.stats.last_wake_event = jiffies;
 	dev->pm.stats.last_doze_event = jiffies;
-	if (!mt76_is_usb(&dev->mt76)) {
+
+	if (!mt76_is_usb(&dev->mt76) &&
+	    !is_mt7902(&dev->mt76)) {
 		dev->pm.enable_user = true;
 		dev->pm.enable = true;
 		dev->pm.ds_enable_user = true;
diff --git a/drivers/net/wireless/mediatek/mt76/mt792x.h b/drivers/net/wireless/mediatek/mt76/mt792x.h
index 8388638ed550..1f381ab356bc 100644
--- a/drivers/net/wireless/mediatek/mt76/mt792x.h
+++ b/drivers/net/wireless/mediatek/mt76/mt792x.h
@@ -41,11 +41,13 @@
 #define MT792x_MCU_INIT_RETRY_COUNT	10
 #define MT792x_WFSYS_INIT_RETRY_COUNT	2
 
+#define MT7902_FIRMWARE_WM	"mediatek/WIFI_RAM_CODE_MT7902_1.bin"
 #define MT7920_FIRMWARE_WM	"mediatek/WIFI_RAM_CODE_MT7961_1a.bin"
 #define MT7921_FIRMWARE_WM	"mediatek/WIFI_RAM_CODE_MT7961_1.bin"
 #define MT7922_FIRMWARE_WM	"mediatek/WIFI_RAM_CODE_MT7922_1.bin"
 #define MT7925_FIRMWARE_WM	"mediatek/mt7925/WIFI_RAM_CODE_MT7925_1_1.bin"
 
+#define MT7902_ROM_PATCH	"mediatek/WIFI_MT7902_patch_mcu_1_1_hdr.bin"
 #define MT7920_ROM_PATCH	"mediatek/WIFI_MT7961_patch_mcu_1a_2_hdr.bin"
 #define MT7921_ROM_PATCH	"mediatek/WIFI_MT7961_patch_mcu_1_2_hdr.bin"
 #define MT7922_ROM_PATCH	"mediatek/WIFI_MT7922_patch_mcu_1_1_hdr.bin"
@@ -448,6 +450,8 @@ void mt792x_config_mac_addr_list(struct mt792x_dev *dev);
 static inline char *mt792x_ram_name(struct mt792x_dev *dev)
 {
 	switch (mt76_chip(&dev->mt76)) {
+	case 0x7902:
+		return MT7902_FIRMWARE_WM;
 	case 0x7920:
 		return MT7920_FIRMWARE_WM;
 	case 0x7922:
@@ -462,6 +466,8 @@ static inline char *mt792x_ram_name(struct mt792x_dev *dev)
 static inline char *mt792x_patch_name(struct mt792x_dev *dev)
 {
 	switch (mt76_chip(&dev->mt76)) {
+	case 0x7902:
+		return MT7902_ROM_PATCH;
 	case 0x7920:
 		return MT7920_ROM_PATCH;
 	case 0x7922:
-- 
2.43.0


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

* [PATCH 09/11] wifi: mt76: mt792x: add MT7902 WFDMA prefetch configuration
  2026-02-19  0:39 [PATCH 01/11] wifi: mt76: connac: use is_connac2() to replace is_mt7921() checks sean.wang
                   ` (6 preceding siblings ...)
  2026-02-19  0:40 ` [PATCH 08/11] wifi: mt76: mt7921: add MT7902 MCU support sean.wang
@ 2026-02-19  0:40 ` sean.wang
  2026-02-19  0:40 ` [PATCH 10/11] wifi: mt76: mt7921: add MT7902 PCIe device support sean.wang
                   ` (2 subsequent siblings)
  10 siblings, 0 replies; 16+ messages in thread
From: sean.wang @ 2026-02-19  0:40 UTC (permalink / raw)
  To: nbd, lorenzo.bianconi
  Cc: linux-wireless, linux-mediatek, Sean Wang, Xiong Huang

From: Sean Wang <sean.wang@mediatek.com>

Configure the RX/TX ring prefetch setting for MT7902 PCIe device.

This is a prerequisite patch before enabling MT7902 PCIe support.

Co-developed-by: Xiong Huang <xiong.huang@mediatek.com>
Signed-off-by: Xiong Huang <xiong.huang@mediatek.com>
Signed-off-by: Sean Wang <sean.wang@mediatek.com>
---
 drivers/net/wireless/mediatek/mt76/mt792x_dma.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/drivers/net/wireless/mediatek/mt76/mt792x_dma.c b/drivers/net/wireless/mediatek/mt76/mt792x_dma.c
index 34f07bd3097d..002aece857b2 100644
--- a/drivers/net/wireless/mediatek/mt76/mt792x_dma.c
+++ b/drivers/net/wireless/mediatek/mt76/mt792x_dma.c
@@ -103,6 +103,22 @@ static void mt792x_dma_prefetch(struct mt792x_dev *dev)
 		mt76_wr(dev, MT_WFDMA0_TX_RING3_EXT_CTRL, PREFETCH(0x0400, 0x10));
 		mt76_wr(dev, MT_WFDMA0_TX_RING15_EXT_CTRL, PREFETCH(0x0500, 0x4));
 		mt76_wr(dev, MT_WFDMA0_TX_RING16_EXT_CTRL, PREFETCH(0x0540, 0x4));
+	} else if (is_mt7902(&dev->mt76)) {
+		/* rx ring */
+		mt76_wr(dev, MT_WFDMA0_RX_RING0_EXT_CTRL, PREFETCH(0x0000, 0x4));
+		mt76_wr(dev, MT_WFDMA0_RX_RING1_EXT_CTRL, PREFETCH(0x0040, 0x4));
+		mt76_wr(dev, MT_WFDMA0_RX_RING2_EXT_CTRL, PREFETCH(0x0080, 0x4));
+		mt76_wr(dev, MT_WFDMA0_RX_RING3_EXT_CTRL, PREFETCH(0x00c0, 0x4));
+		/* tx ring */
+		mt76_wr(dev, MT_WFDMA0_TX_RING0_EXT_CTRL, PREFETCH(0x0100, 0x4));
+		mt76_wr(dev, MT_WFDMA0_TX_RING1_EXT_CTRL, PREFETCH(0x0140, 0x4));
+		mt76_wr(dev, MT_WFDMA0_TX_RING2_EXT_CTRL, PREFETCH(0x0180, 0x4));
+		mt76_wr(dev, MT_WFDMA0_TX_RING3_EXT_CTRL, PREFETCH(0x01c0, 0x4));
+		mt76_wr(dev, MT_WFDMA0_TX_RING4_EXT_CTRL, PREFETCH(0x0200, 0x4));
+		mt76_wr(dev, MT_WFDMA0_TX_RING5_EXT_CTRL, PREFETCH(0x0240, 0x4));
+		mt76_wr(dev, MT_WFDMA0_TX_RING6_EXT_CTRL, PREFETCH(0x0280, 0x4));
+		mt76_wr(dev, MT_WFDMA0_TX_RING15_EXT_CTRL, PREFETCH(0x02c0, 0x4));
+		mt76_wr(dev, MT_WFDMA0_TX_RING16_EXT_CTRL, PREFETCH(0x0300, 0x4));
 	} else {
 		/* rx ring */
 		mt76_wr(dev, MT_WFDMA0_RX_RING0_EXT_CTRL, PREFETCH(0x0, 0x4));
-- 
2.43.0


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

* [PATCH 10/11] wifi: mt76: mt7921: add MT7902 PCIe device support
  2026-02-19  0:39 [PATCH 01/11] wifi: mt76: connac: use is_connac2() to replace is_mt7921() checks sean.wang
                   ` (7 preceding siblings ...)
  2026-02-19  0:40 ` [PATCH 09/11] wifi: mt76: mt792x: add MT7902 WFDMA prefetch configuration sean.wang
@ 2026-02-19  0:40 ` sean.wang
  2026-02-19  0:40 ` [PATCH 11/11] wifi: mt76: mt7921: add MT7902 SDIO " sean.wang
  2026-02-20 20:41 ` [PATCH 01/11] wifi: mt76: connac: use is_connac2() to replace is_mt7921() checks Philip Müller
  10 siblings, 0 replies; 16+ messages in thread
From: sean.wang @ 2026-02-19  0:40 UTC (permalink / raw)
  To: nbd, lorenzo.bianconi
  Cc: linux-wireless, linux-mediatek, Sean Wang, Xiong Huang

From: Sean Wang <sean.wang@mediatek.com>

Register the MT7902 PCI device ID in the mt7921 driver and add its
corresponding firmware and ROM patch names.

Co-developed-by: Xiong Huang <xiong.huang@mediatek.com>
Signed-off-by: Xiong Huang <xiong.huang@mediatek.com>
Signed-off-by: Sean Wang <sean.wang@mediatek.com>
---
 drivers/net/wireless/mediatek/mt76/mt7921/pci.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/pci.c b/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
index 6bb3c6a1cf6a..7a790ddf43bb 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
@@ -26,6 +26,8 @@ static const struct pci_device_id mt7921_pci_device_table[] = {
 		.driver_data = (kernel_ulong_t)MT7922_FIRMWARE_WM },
 	{ PCI_DEVICE(PCI_VENDOR_ID_MEDIATEK, 0x7920),
 		.driver_data = (kernel_ulong_t)MT7920_FIRMWARE_WM },
+	{ PCI_DEVICE(PCI_VENDOR_ID_MEDIATEK, 0x7902),
+		.driver_data = (kernel_ulong_t)MT7902_FIRMWARE_WM },
 	{ },
 };
 
@@ -617,6 +619,8 @@ MODULE_FIRMWARE(MT7921_FIRMWARE_WM);
 MODULE_FIRMWARE(MT7921_ROM_PATCH);
 MODULE_FIRMWARE(MT7922_FIRMWARE_WM);
 MODULE_FIRMWARE(MT7922_ROM_PATCH);
+MODULE_FIRMWARE(MT7902_FIRMWARE_WM);
+MODULE_FIRMWARE(MT7902_ROM_PATCH);
 MODULE_AUTHOR("Sean Wang <sean.wang@mediatek.com>");
 MODULE_AUTHOR("Lorenzo Bianconi <lorenzo@kernel.org>");
 MODULE_DESCRIPTION("MediaTek MT7921E (PCIe) wireless driver");
-- 
2.43.0


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

* [PATCH 11/11] wifi: mt76: mt7921: add MT7902 SDIO device support
  2026-02-19  0:39 [PATCH 01/11] wifi: mt76: connac: use is_connac2() to replace is_mt7921() checks sean.wang
                   ` (8 preceding siblings ...)
  2026-02-19  0:40 ` [PATCH 10/11] wifi: mt76: mt7921: add MT7902 PCIe device support sean.wang
@ 2026-02-19  0:40 ` sean.wang
  2026-02-20 20:41 ` [PATCH 01/11] wifi: mt76: connac: use is_connac2() to replace is_mt7921() checks Philip Müller
  10 siblings, 0 replies; 16+ messages in thread
From: sean.wang @ 2026-02-19  0:40 UTC (permalink / raw)
  To: nbd, lorenzo.bianconi; +Cc: linux-wireless, linux-mediatek, Sean Wang

From: Sean Wang <sean.wang@mediatek.com>

Register the MT7902 SDIO device ID in the mt7921 driver and add its
corresponding firmware and ROM patch names.

Signed-off-by: Sean Wang <sean.wang@mediatek.com>
---
 drivers/net/wireless/mediatek/mt76/mt7921/sdio.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/sdio.c b/drivers/net/wireless/mediatek/mt76/mt7921/sdio.c
index 3421e53dc948..9150f185716c 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7921/sdio.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/sdio.c
@@ -19,6 +19,8 @@
 static const struct sdio_device_id mt7921s_table[] = {
 	{ SDIO_DEVICE(SDIO_VENDOR_ID_MEDIATEK, 0x7901),
 		.driver_data = (kernel_ulong_t)MT7921_FIRMWARE_WM },
+	{ SDIO_DEVICE(SDIO_VENDOR_ID_MEDIATEK, 0x7902),
+		.driver_data = (kernel_ulong_t)MT7902_FIRMWARE_WM },
 	{ }	/* Terminating entry */
 };
 
@@ -317,6 +319,8 @@ static int mt7921s_resume(struct device *__dev)
 MODULE_DEVICE_TABLE(sdio, mt7921s_table);
 MODULE_FIRMWARE(MT7921_FIRMWARE_WM);
 MODULE_FIRMWARE(MT7921_ROM_PATCH);
+MODULE_FIRMWARE(MT7902_FIRMWARE_WM);
+MODULE_FIRMWARE(MT7902_ROM_PATCH);
 
 static DEFINE_SIMPLE_DEV_PM_OPS(mt7921s_pm_ops, mt7921s_suspend, mt7921s_resume);
 
-- 
2.43.0


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

* Re: [PATCH 03/11] wifi: mt76: mt7921: handle MT7902 irq_map quirk with mutable copy
  2026-02-19  0:39 ` [PATCH 03/11] wifi: mt76: mt7921: handle MT7902 irq_map quirk with mutable copy sean.wang
@ 2026-02-20 10:09   ` Philip Müller
  2026-02-20 18:39     ` Sean Wang
  0 siblings, 1 reply; 16+ messages in thread
From: Philip Müller @ 2026-02-20 10:09 UTC (permalink / raw)
  To: sean.wang, nbd, lorenzo.bianconi
  Cc: linux-wireless, linux-mediatek, Sean Wang, Xiong Huang

Hi Sean,

on Linus master tree we still have 'mt76_mmio_init(&dev->mt76, 
pcim_iomap_table(pdev)[0]);', hence your patch currently won't apply.

On 2/19/26 01:39, sean.wang@kernel.org wrote:
> From: Sean Wang <sean.wang@mediatek.com>
>
> MT7902 PCIe requires a different wm2_complete_mask value, so introduce a
> mutable per-device copy of the default irq_map and override the field
> only for this chip. Other devices continue using the shared const
> template.
>
> This is a prerequisite patch before enabling MT7902 PCIe support.
>
> Co-developed-by: Xiong Huang <xiong.huang@mediatek.com>
> Signed-off-by: Xiong Huang <xiong.huang@mediatek.com>
> Signed-off-by: Sean Wang <sean.wang@mediatek.com>
> ---
>   drivers/net/wireless/mediatek/mt76/mt7921/pci.c | 14 ++++++++++++++
>   1 file changed, 14 insertions(+)
>
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/pci.c b/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
> index 65c7fe671137..5f857a21f362 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
> @@ -327,6 +327,20 @@ static int mt7921_pci_probe(struct pci_dev *pdev,
>   	dev->hif_ops = &mt7921_pcie_ops;
>   	dev->irq_map = &irq_map;
>   	mt76_mmio_init(&dev->mt76, regs);
> +
> +	if (id->device == 0x7902) {
> +		struct mt792x_irq_map *map;
> +
> +		/* MT7902 needs a mutable copy because wm2_complete_mask differs */
> +		map = devm_kmemdup(&pdev->dev, &irq_map,
> +				   sizeof(irq_map), GFP_KERNEL);
> +		if (!map)
> +			return -ENOMEM;
> +
> +		map->rx.wm2_complete_mask = 0;
> +		dev->irq_map = map;
> +	}
> +
>   	tasklet_init(&mdev->irq_tasklet, mt792x_irq_tasklet, (unsigned long)dev);
>   
>   	dev->phy.dev = dev;


-- 
Best, Philip


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

* Re: [PATCH 03/11] wifi: mt76: mt7921: handle MT7902 irq_map quirk with mutable copy
  2026-02-20 10:09   ` Philip Müller
@ 2026-02-20 18:39     ` Sean Wang
  0 siblings, 0 replies; 16+ messages in thread
From: Sean Wang @ 2026-02-20 18:39 UTC (permalink / raw)
  To: Philip Müller
  Cc: nbd, lorenzo.bianconi, linux-wireless, linux-mediatek, Sean Wang,
	Xiong Huang

Hi Philip,

On Fri, Feb 20, 2026 at 4:09 AM Philip Müller <philm@manjaro.org> wrote:
>
> Hi Sean,
>
> on Linus master tree we still have 'mt76_mmio_init(&dev->mt76,
> pcim_iomap_table(pdev)[0]);', hence your patch currently won't apply.

The patchset is based on the latest mt76 tree.
If needed, please apply the following commit first so the series
applies cleanly:
https://github.com/nbd168/wireless/commit/4eefc435c985f4dfdba9afb1c705f0e17377c084
That patch will go to Linus’ master first, then this series.

>
> On 2/19/26 01:39, sean.wang@kernel.org wrote:
> > From: Sean Wang <sean.wang@mediatek.com>
> >
> > MT7902 PCIe requires a different wm2_complete_mask value, so introduce a
> > mutable per-device copy of the default irq_map and override the field
> > only for this chip. Other devices continue using the shared const
> > template.
> >
> > This is a prerequisite patch before enabling MT7902 PCIe support.
> >
> > Co-developed-by: Xiong Huang <xiong.huang@mediatek.com>
> > Signed-off-by: Xiong Huang <xiong.huang@mediatek.com>
> > Signed-off-by: Sean Wang <sean.wang@mediatek.com>
> > ---
> >   drivers/net/wireless/mediatek/mt76/mt7921/pci.c | 14 ++++++++++++++
> >   1 file changed, 14 insertions(+)
> >
> > diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/pci.c b/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
> > index 65c7fe671137..5f857a21f362 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
> > +++ b/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
> > @@ -327,6 +327,20 @@ static int mt7921_pci_probe(struct pci_dev *pdev,
> >       dev->hif_ops = &mt7921_pcie_ops;
> >       dev->irq_map = &irq_map;
> >       mt76_mmio_init(&dev->mt76, regs);
> > +
> > +     if (id->device == 0x7902) {
> > +             struct mt792x_irq_map *map;
> > +
> > +             /* MT7902 needs a mutable copy because wm2_complete_mask differs */
> > +             map = devm_kmemdup(&pdev->dev, &irq_map,
> > +                                sizeof(irq_map), GFP_KERNEL);
> > +             if (!map)
> > +                     return -ENOMEM;
> > +
> > +             map->rx.wm2_complete_mask = 0;
> > +             dev->irq_map = map;
> > +     }
> > +
> >       tasklet_init(&mdev->irq_tasklet, mt792x_irq_tasklet, (unsigned long)dev);
> >
> >       dev->phy.dev = dev;
>
>
> --
> Best, Philip
>

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

* Re: [PATCH 01/11] wifi: mt76: connac: use is_connac2() to replace is_mt7921() checks
  2026-02-19  0:39 [PATCH 01/11] wifi: mt76: connac: use is_connac2() to replace is_mt7921() checks sean.wang
                   ` (9 preceding siblings ...)
  2026-02-19  0:40 ` [PATCH 11/11] wifi: mt76: mt7921: add MT7902 SDIO " sean.wang
@ 2026-02-20 20:41 ` Philip Müller
  2026-02-21 20:19   ` Sean Wang
  10 siblings, 1 reply; 16+ messages in thread
From: Philip Müller @ 2026-02-20 20:41 UTC (permalink / raw)
  To: sean.wang, nbd, lorenzo.bianconi
  Cc: linux-wireless, linux-mediatek, Sean Wang

Hi Sean,

this patch needed the following lines additionally to compile cleanly:

drivers/net/wireless/mediatek/mt76/mt792x_core.c

@@ -691,7 +691,7 @@ int mt792x_init_wiphy(struct ieee80211_h
      ieee80211_hw_set(hw, SUPPORTS_MULTI_BSSID);
      ieee80211_hw_set(hw, SUPPORTS_ONLY_HE_MULTI_BSSID);

-    if (is_mt7921(&dev->mt76)) {
+    if (is_connac2(&dev->mt76)) {
          ieee80211_hw_set(hw, CHANCTX_STA_CSA);
      }

On 2/19/26 01:39, sean.wang@kernel.org wrote:
> From: Sean Wang <sean.wang@mediatek.com>
>
> Unify all per-chip conditionals under the new is_connac2() helper. This
> avoids confusion caused by the previous is_mt7921() check, which
> implicitly covered multiple connac2 chipsets and no longer reflected its
> actual scope. This is a clean-up only change with no functional impact.
>
> Signed-off-by: Sean Wang <sean.wang@mediatek.com>
> ---
>   .../net/wireless/mediatek/mt76/mt76_connac.h  |  2 +-
>   .../wireless/mediatek/mt76/mt76_connac_mac.c  | 16 ++++++------
>   .../wireless/mediatek/mt76/mt76_connac_mcu.c  | 26 +++++++++----------
>   .../wireless/mediatek/mt76/mt76_connac_mcu.h  |  2 +-
>   .../net/wireless/mediatek/mt76/mt792x_core.c  |  2 +-
>   .../net/wireless/mediatek/mt76/mt792x_dma.c   |  2 +-
>   6 files changed, 25 insertions(+), 25 deletions(-)
>
> diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac.h b/drivers/net/wireless/mediatek/mt76/mt76_connac.h
> index 813d61bffc2c..02bea67d37c3 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt76_connac.h
> +++ b/drivers/net/wireless/mediatek/mt76/mt76_connac.h
> @@ -187,7 +187,7 @@ static inline bool is_mt7922(struct mt76_dev *dev)
>   	return mt76_chip(dev) == 0x7922;
>   }
>   
> -static inline bool is_mt7921(struct mt76_dev *dev)
> +static inline bool is_connac2(struct mt76_dev *dev)
>   {
>   	return mt76_chip(dev) == 0x7961 || is_mt7922(dev) || is_mt7920(dev);
>   }
> diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c b/drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c
> index 4ef44514d48d..e76f6e28b7f0 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c
> @@ -173,7 +173,7 @@ void mt76_connac_write_hw_txp(struct mt76_dev *dev,
>   
>   	txp->msdu_id[0] = cpu_to_le16(id | MT_MSDU_ID_VALID);
>   
> -	if (is_mt7663(dev) || is_mt7921(dev) || is_mt7925(dev))
> +	if (is_mt7663(dev) || is_connac2(dev) || is_mt7925(dev))
>   		last_mask = MT_TXD_LEN_LAST;
>   	else
>   		last_mask = MT_TXD_LEN_AMSDU_LAST |
> @@ -217,7 +217,7 @@ mt76_connac_txp_skb_unmap_hw(struct mt76_dev *dev,
>   	u32 last_mask;
>   	int i;
>   
> -	if (is_mt7663(dev) || is_mt7921(dev) || is_mt7925(dev))
> +	if (is_mt7663(dev) || is_connac2(dev) || is_mt7925(dev))
>   		last_mask = MT_TXD_LEN_LAST;
>   	else
>   		last_mask = MT_TXD_LEN_MSDU_LAST;
> @@ -309,7 +309,7 @@ u16 mt76_connac2_mac_tx_rate_val(struct mt76_phy *mphy,
>   	chandef = mvif->ctx ? &mvif->ctx->def : &mphy->chandef;
>   	band = chandef->chan->band;
>   
> -	if (is_mt7921(mphy->dev)) {
> +	if (is_connac2(mphy->dev)) {
>   		rateidx = ffs(conf->basic_rates) - 1;
>   		goto legacy;
>   	}
> @@ -547,7 +547,7 @@ void mt76_connac2_mac_write_txwi(struct mt76_dev *dev, __le32 *txwi,
>   	val = MT_TXD1_LONG_FORMAT |
>   	      FIELD_PREP(MT_TXD1_WLAN_IDX, wcid->idx) |
>   	      FIELD_PREP(MT_TXD1_OWN_MAC, omac_idx);
> -	if (!is_mt7921(dev))
> +	if (!is_connac2(dev))
>   		val |= MT_TXD1_VTA;
>   	if (phy_idx || band_idx)
>   		val |= MT_TXD1_TGID;
> @@ -556,7 +556,7 @@ void mt76_connac2_mac_write_txwi(struct mt76_dev *dev, __le32 *txwi,
>   	txwi[2] = 0;
>   
>   	val = FIELD_PREP(MT_TXD3_REM_TX_COUNT, 15);
> -	if (!is_mt7921(dev))
> +	if (!is_connac2(dev))
>   		val |= MT_TXD3_SW_POWER_MGMT;
>   	if (key)
>   		val |= MT_TXD3_PROTECT_FRAME;
> @@ -598,7 +598,7 @@ void mt76_connac2_mac_write_txwi(struct mt76_dev *dev, __le32 *txwi,
>   		txwi[6] |= cpu_to_le32(val);
>   		txwi[3] |= cpu_to_le32(MT_TXD3_BA_DISABLE);
>   
> -		if (!is_mt7921(dev)) {
> +		if (!is_connac2(dev)) {
>   			u8 spe_idx = mt76_connac_spe_idx(mphy->antenna_mask);
>   
>   			if (!spe_idx)
> @@ -830,7 +830,7 @@ mt76_connac2_mac_decode_he_mu_radiotap(struct mt76_dev *dev, struct sk_buff *skb
>   	};
>   	struct ieee80211_radiotap_he_mu *he_mu;
>   
> -	if (is_mt7921(dev)) {
> +	if (is_connac2(dev)) {
>   		mu_known.flags1 |= HE_BITS(MU_FLAGS1_SIG_B_COMP_KNOWN);
>   		mu_known.flags2 |= HE_BITS(MU_FLAGS2_PUNC_FROM_SIG_A_BW_KNOWN);
>   	}
> @@ -1046,7 +1046,7 @@ int mt76_connac2_mac_fill_rx_rate(struct mt76_dev *dev,
>   		stbc = FIELD_GET(MT_PRXV_HT_STBC, v0);
>   		gi = FIELD_GET(MT_PRXV_HT_SGI, v0);
>   		*mode = FIELD_GET(MT_PRXV_TX_MODE, v0);
> -		if (is_mt7921(dev))
> +		if (is_connac2(dev))
>   			dcm = !!(idx & MT_PRXV_TX_DCM);
>   		else
>   			dcm = FIELD_GET(MT_PRXV_DCM, v0);
> diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c
> index 3f583e2a1dc1..d7fbf3454bb8 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c
> @@ -65,7 +65,7 @@ int mt76_connac_mcu_init_download(struct mt76_dev *dev, u32 addr, u32 len,
>   	int cmd;
>   
>   	if ((!is_connac_v1(dev) && addr == MCU_PATCH_ADDRESS) ||
> -	    (is_mt7921(dev) && addr == 0x900000) ||
> +	    (is_connac2(dev) && addr == 0x900000) ||
>   	    (is_mt7925(dev) && (addr == 0x900000 || addr == 0xe0002800)) ||
>   	    (is_mt799x(dev) && addr == 0x900000))
>   		cmd = MCU_CMD(PATCH_START_REQ);
> @@ -402,7 +402,7 @@ void mt76_connac_mcu_sta_basic_tlv(struct mt76_dev *dev, struct sk_buff *skb,
>   	switch (vif->type) {
>   	case NL80211_IFTYPE_MESH_POINT:
>   	case NL80211_IFTYPE_AP:
> -		if (vif->p2p && !is_mt7921(dev))
> +		if (vif->p2p && !is_connac2(dev))
>   			conn_type = CONNECTION_P2P_GC;
>   		else
>   			conn_type = CONNECTION_INFRA_STA;
> @@ -410,7 +410,7 @@ void mt76_connac_mcu_sta_basic_tlv(struct mt76_dev *dev, struct sk_buff *skb,
>   		basic->aid = cpu_to_le16(link_sta->sta->aid);
>   		break;
>   	case NL80211_IFTYPE_STATION:
> -		if (vif->p2p && !is_mt7921(dev))
> +		if (vif->p2p && !is_connac2(dev))
>   			conn_type = CONNECTION_P2P_GO;
>   		else
>   			conn_type = CONNECTION_INFRA_AP;
> @@ -874,7 +874,7 @@ void mt76_connac_mcu_sta_tlv(struct mt76_phy *mphy, struct sk_buff *skb,
>   		struct sta_rec_vht *vht;
>   		int len;
>   
> -		len = is_mt7921(dev) ? sizeof(*vht) : sizeof(*vht) - 4;
> +		len = is_connac2(dev) ? sizeof(*vht) : sizeof(*vht) - 4;
>   		tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_VHT, len);
>   		vht = (struct sta_rec_vht *)tlv;
>   		vht->vht_cap = cpu_to_le32(sta->deflink.vht_cap.cap);
> @@ -885,7 +885,7 @@ void mt76_connac_mcu_sta_tlv(struct mt76_phy *mphy, struct sk_buff *skb,
>   	/* starec uapsd */
>   	mt76_connac_mcu_sta_uapsd(skb, vif, sta);
>   
> -	if (!is_mt7921(dev))
> +	if (!is_connac2(dev))
>   		return;
>   
>   	if (sta->deflink.ht_cap.ht_supported || sta->deflink.he_cap.has_he)
> @@ -1778,7 +1778,7 @@ int mt76_connac_mcu_hw_scan(struct mt76_phy *phy, struct ieee80211_vif *vif,
>   	req->ssid_type_ext = n_ssids ? BIT(0) : 0;
>   	req->ssids_num = n_ssids;
>   
> -	duration = is_mt7921(phy->dev) ? 0 : MT76_CONNAC_SCAN_CHANNEL_TIME;
> +	duration = is_connac2(phy->dev) ? 0 : MT76_CONNAC_SCAN_CHANNEL_TIME;
>   	/* increase channel time for passive scan */
>   	if (!sreq->n_ssids)
>   		duration *= 2;
> @@ -1821,7 +1821,7 @@ int mt76_connac_mcu_hw_scan(struct mt76_phy *phy, struct ieee80211_vif *vif,
>   		req->ies_len = cpu_to_le16(sreq->ie_len);
>   	}
>   
> -	if (is_mt7921(phy->dev))
> +	if (is_connac2(phy->dev))
>   		req->scan_func |= SCAN_FUNC_SPLIT_SCAN;
>   
>   	memcpy(req->bssid, sreq->bssid, ETH_ALEN);
> @@ -1897,7 +1897,7 @@ int mt76_connac_mcu_sched_scan_req(struct mt76_phy *phy,
>   		get_random_mask_addr(addr, sreq->mac_addr,
>   				     sreq->mac_addr_mask);
>   	}
> -	if (is_mt7921(phy->dev)) {
> +	if (is_connac2(phy->dev)) {
>   		req->mt7921.bss_idx = mvif->idx;
>   		req->mt7921.delay = cpu_to_le32(sreq->delay);
>   	}
> @@ -2037,7 +2037,7 @@ mt76_connac_mcu_build_sku(struct mt76_dev *dev, s8 *sku,
>   			  struct mt76_power_limits *limits,
>   			  enum nl80211_band band)
>   {
> -	int max_power = is_mt7921(dev) ? 127 : 63;
> +	int max_power = is_connac2(dev) ? 127 : 63;
>   	int i, offset = sizeof(limits->cck);
>   
>   	memset(sku, max_power, MT_SKU_POWER_LIMIT);
> @@ -2065,7 +2065,7 @@ mt76_connac_mcu_build_sku(struct mt76_dev *dev, s8 *sku,
>   		offset += 12;
>   	}
>   
> -	if (!is_mt7921(dev))
> +	if (!is_connac2(dev))
>   		return;
>   
>   	/* he */
> @@ -2121,7 +2121,7 @@ mt76_connac_mcu_rate_txpower_band(struct mt76_phy *phy,
>   				  enum nl80211_band band)
>   {
>   	struct mt76_dev *dev = phy->dev;
> -	int sku_len, batch_len = is_mt7921(dev) ? 8 : 16;
> +	int sku_len, batch_len = is_connac2(dev) ? 8 : 16;
>   	static const u8 chan_list_2ghz[] = {
>   		1, 2,  3,  4,  5,  6,  7,
>   		8, 9, 10, 11, 12, 13, 14
> @@ -2162,7 +2162,7 @@ mt76_connac_mcu_rate_txpower_band(struct mt76_phy *phy,
>   	if (!limits)
>   		return -ENOMEM;
>   
> -	sku_len = is_mt7921(dev) ? sizeof(sku_tlbv) : sizeof(sku_tlbv) - 92;
> +	sku_len = is_connac2(dev) ? sizeof(sku_tlbv) : sizeof(sku_tlbv) - 92;
>   	tx_power = 2 * phy->hw->conf.power_level;
>   	if (!tx_power)
>   		tx_power = 127;
> @@ -3080,7 +3080,7 @@ static u32 mt76_connac2_get_data_mode(struct mt76_dev *dev, u32 info)
>   {
>   	u32 mode = DL_MODE_NEED_RSP;
>   
> -	if ((!is_mt7921(dev) && !is_mt7925(dev)) || info == PATCH_SEC_NOT_SUPPORT)
> +	if ((!is_connac2(dev) && !is_mt7925(dev)) || info == PATCH_SEC_NOT_SUPPORT)
>   		return mode;
>   
>   	switch (FIELD_GET(PATCH_SEC_ENC_TYPE_MASK, info)) {
> diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h
> index f44977f9093d..1ef25385f3c6 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h
> +++ b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h
> @@ -1866,7 +1866,7 @@ mt76_connac_mcu_gen_dl_mode(struct mt76_dev *dev, u8 feature_set, bool is_wa)
>   
>   	ret |= feature_set & FW_FEATURE_SET_ENCRYPT ?
>   	       DL_MODE_ENCRYPT | DL_MODE_RESET_SEC_IV : 0;
> -	if (is_mt7921(dev) || is_mt7925(dev))
> +	if (is_connac2(dev) || is_mt7925(dev))
>   		ret |= feature_set & FW_FEATURE_ENCRY_MODE ?
>   		       DL_CONFIG_ENCRY_MODE_SEL : 0;
>   	ret |= FIELD_PREP(DL_MODE_KEY_IDX,
> diff --git a/drivers/net/wireless/mediatek/mt76/mt792x_core.c b/drivers/net/wireless/mediatek/mt76/mt792x_core.c
> index f318a53e4deb..2142fcc4ae27 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt792x_core.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt792x_core.c
> @@ -151,7 +151,7 @@ void mt792x_stop(struct ieee80211_hw *hw, bool suspend)
>   	cancel_work_sync(&dev->reset_work);
>   	mt76_connac_free_pending_tx_skbs(&dev->pm, NULL);
>   
> -	if (is_mt7921(&dev->mt76)) {
> +	if (is_connac2(&dev->mt76)) {
>   		mt792x_mutex_acquire(dev);
>   		mt76_connac_mcu_set_mac_enable(&dev->mt76, 0, false, false);
>   		mt792x_mutex_release(dev);
> diff --git a/drivers/net/wireless/mediatek/mt76/mt792x_dma.c b/drivers/net/wireless/mediatek/mt76/mt792x_dma.c
> index 1ddec7788b66..34f07bd3097d 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt792x_dma.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt792x_dma.c
> @@ -356,7 +356,7 @@ EXPORT_SYMBOL_GPL(mt792x_poll_rx);
>   
>   int mt792x_wfsys_reset(struct mt792x_dev *dev)
>   {
> -	u32 addr = is_mt7921(&dev->mt76) ? 0x18000140 : 0x7c000140;
> +	u32 addr = is_connac2(&dev->mt76) ? 0x18000140 : 0x7c000140;
>   
>   	mt76_clear(dev, addr, WFSYS_SW_RST_B);
>   	msleep(50);


-- 
Best, Philip


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

* Re: [PATCH 01/11] wifi: mt76: connac: use is_connac2() to replace is_mt7921() checks
  2026-02-20 20:41 ` [PATCH 01/11] wifi: mt76: connac: use is_connac2() to replace is_mt7921() checks Philip Müller
@ 2026-02-21 20:19   ` Sean Wang
  2026-03-22  8:04     ` Philip Müller
  0 siblings, 1 reply; 16+ messages in thread
From: Sean Wang @ 2026-02-21 20:19 UTC (permalink / raw)
  To: Philip Müller
  Cc: nbd, lorenzo.bianconi, linux-wireless, linux-mediatek, Sean Wang

On Fri, Feb 20, 2026 at 2:41 PM Philip Müller <philm@manjaro.org> wrote:
>
> Hi Sean,
>
> this patch needed the following lines additionally to compile cleanly:
>

Hi Philip,

Thanks for the catch I’ll update this in the next version.

Best,
Sean

> drivers/net/wireless/mediatek/mt76/mt792x_core.c
>
> @@ -691,7 +691,7 @@ int mt792x_init_wiphy(struct ieee80211_h
>       ieee80211_hw_set(hw, SUPPORTS_MULTI_BSSID);
>       ieee80211_hw_set(hw, SUPPORTS_ONLY_HE_MULTI_BSSID);
>
> -    if (is_mt7921(&dev->mt76)) {
> +    if (is_connac2(&dev->mt76)) {
>           ieee80211_hw_set(hw, CHANCTX_STA_CSA);
>       }
>
> On 2/19/26 01:39, sean.wang@kernel.org wrote:
> > From: Sean Wang <sean.wang@mediatek.com>
> >
> > Unify all per-chip conditionals under the new is_connac2() helper. This
> > avoids confusion caused by the previous is_mt7921() check, which
> > implicitly covered multiple connac2 chipsets and no longer reflected its
> > actual scope. This is a clean-up only change with no functional impact.
> >
> > Signed-off-by: Sean Wang <sean.wang@mediatek.com>
> > ---
> >   .../net/wireless/mediatek/mt76/mt76_connac.h  |  2 +-
> >   .../wireless/mediatek/mt76/mt76_connac_mac.c  | 16 ++++++------
> >   .../wireless/mediatek/mt76/mt76_connac_mcu.c  | 26 +++++++++----------
> >   .../wireless/mediatek/mt76/mt76_connac_mcu.h  |  2 +-
> >   .../net/wireless/mediatek/mt76/mt792x_core.c  |  2 +-
> >   .../net/wireless/mediatek/mt76/mt792x_dma.c   |  2 +-
> >   6 files changed, 25 insertions(+), 25 deletions(-)
> >
> > diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac.h b/drivers/net/wireless/mediatek/mt76/mt76_connac.h
> > index 813d61bffc2c..02bea67d37c3 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt76_connac.h
> > +++ b/drivers/net/wireless/mediatek/mt76/mt76_connac.h
> > @@ -187,7 +187,7 @@ static inline bool is_mt7922(struct mt76_dev *dev)
> >       return mt76_chip(dev) == 0x7922;
> >   }
> >
> > -static inline bool is_mt7921(struct mt76_dev *dev)
> > +static inline bool is_connac2(struct mt76_dev *dev)
> >   {
> >       return mt76_chip(dev) == 0x7961 || is_mt7922(dev) || is_mt7920(dev);
> >   }
> > diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c b/drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c
> > index 4ef44514d48d..e76f6e28b7f0 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c
> > +++ b/drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c
> > @@ -173,7 +173,7 @@ void mt76_connac_write_hw_txp(struct mt76_dev *dev,
> >
> >       txp->msdu_id[0] = cpu_to_le16(id | MT_MSDU_ID_VALID);
> >
> > -     if (is_mt7663(dev) || is_mt7921(dev) || is_mt7925(dev))
> > +     if (is_mt7663(dev) || is_connac2(dev) || is_mt7925(dev))
> >               last_mask = MT_TXD_LEN_LAST;
> >       else
> >               last_mask = MT_TXD_LEN_AMSDU_LAST |
> > @@ -217,7 +217,7 @@ mt76_connac_txp_skb_unmap_hw(struct mt76_dev *dev,
> >       u32 last_mask;
> >       int i;
> >
> > -     if (is_mt7663(dev) || is_mt7921(dev) || is_mt7925(dev))
> > +     if (is_mt7663(dev) || is_connac2(dev) || is_mt7925(dev))
> >               last_mask = MT_TXD_LEN_LAST;
> >       else
> >               last_mask = MT_TXD_LEN_MSDU_LAST;
> > @@ -309,7 +309,7 @@ u16 mt76_connac2_mac_tx_rate_val(struct mt76_phy *mphy,
> >       chandef = mvif->ctx ? &mvif->ctx->def : &mphy->chandef;
> >       band = chandef->chan->band;
> >
> > -     if (is_mt7921(mphy->dev)) {
> > +     if (is_connac2(mphy->dev)) {
> >               rateidx = ffs(conf->basic_rates) - 1;
> >               goto legacy;
> >       }
> > @@ -547,7 +547,7 @@ void mt76_connac2_mac_write_txwi(struct mt76_dev *dev, __le32 *txwi,
> >       val = MT_TXD1_LONG_FORMAT |
> >             FIELD_PREP(MT_TXD1_WLAN_IDX, wcid->idx) |
> >             FIELD_PREP(MT_TXD1_OWN_MAC, omac_idx);
> > -     if (!is_mt7921(dev))
> > +     if (!is_connac2(dev))
> >               val |= MT_TXD1_VTA;
> >       if (phy_idx || band_idx)
> >               val |= MT_TXD1_TGID;
> > @@ -556,7 +556,7 @@ void mt76_connac2_mac_write_txwi(struct mt76_dev *dev, __le32 *txwi,
> >       txwi[2] = 0;
> >
> >       val = FIELD_PREP(MT_TXD3_REM_TX_COUNT, 15);
> > -     if (!is_mt7921(dev))
> > +     if (!is_connac2(dev))
> >               val |= MT_TXD3_SW_POWER_MGMT;
> >       if (key)
> >               val |= MT_TXD3_PROTECT_FRAME;
> > @@ -598,7 +598,7 @@ void mt76_connac2_mac_write_txwi(struct mt76_dev *dev, __le32 *txwi,
> >               txwi[6] |= cpu_to_le32(val);
> >               txwi[3] |= cpu_to_le32(MT_TXD3_BA_DISABLE);
> >
> > -             if (!is_mt7921(dev)) {
> > +             if (!is_connac2(dev)) {
> >                       u8 spe_idx = mt76_connac_spe_idx(mphy->antenna_mask);
> >
> >                       if (!spe_idx)
> > @@ -830,7 +830,7 @@ mt76_connac2_mac_decode_he_mu_radiotap(struct mt76_dev *dev, struct sk_buff *skb
> >       };
> >       struct ieee80211_radiotap_he_mu *he_mu;
> >
> > -     if (is_mt7921(dev)) {
> > +     if (is_connac2(dev)) {
> >               mu_known.flags1 |= HE_BITS(MU_FLAGS1_SIG_B_COMP_KNOWN);
> >               mu_known.flags2 |= HE_BITS(MU_FLAGS2_PUNC_FROM_SIG_A_BW_KNOWN);
> >       }
> > @@ -1046,7 +1046,7 @@ int mt76_connac2_mac_fill_rx_rate(struct mt76_dev *dev,
> >               stbc = FIELD_GET(MT_PRXV_HT_STBC, v0);
> >               gi = FIELD_GET(MT_PRXV_HT_SGI, v0);
> >               *mode = FIELD_GET(MT_PRXV_TX_MODE, v0);
> > -             if (is_mt7921(dev))
> > +             if (is_connac2(dev))
> >                       dcm = !!(idx & MT_PRXV_TX_DCM);
> >               else
> >                       dcm = FIELD_GET(MT_PRXV_DCM, v0);
> > diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c
> > index 3f583e2a1dc1..d7fbf3454bb8 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c
> > +++ b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c
> > @@ -65,7 +65,7 @@ int mt76_connac_mcu_init_download(struct mt76_dev *dev, u32 addr, u32 len,
> >       int cmd;
> >
> >       if ((!is_connac_v1(dev) && addr == MCU_PATCH_ADDRESS) ||
> > -         (is_mt7921(dev) && addr == 0x900000) ||
> > +         (is_connac2(dev) && addr == 0x900000) ||
> >           (is_mt7925(dev) && (addr == 0x900000 || addr == 0xe0002800)) ||
> >           (is_mt799x(dev) && addr == 0x900000))
> >               cmd = MCU_CMD(PATCH_START_REQ);
> > @@ -402,7 +402,7 @@ void mt76_connac_mcu_sta_basic_tlv(struct mt76_dev *dev, struct sk_buff *skb,
> >       switch (vif->type) {
> >       case NL80211_IFTYPE_MESH_POINT:
> >       case NL80211_IFTYPE_AP:
> > -             if (vif->p2p && !is_mt7921(dev))
> > +             if (vif->p2p && !is_connac2(dev))
> >                       conn_type = CONNECTION_P2P_GC;
> >               else
> >                       conn_type = CONNECTION_INFRA_STA;
> > @@ -410,7 +410,7 @@ void mt76_connac_mcu_sta_basic_tlv(struct mt76_dev *dev, struct sk_buff *skb,
> >               basic->aid = cpu_to_le16(link_sta->sta->aid);
> >               break;
> >       case NL80211_IFTYPE_STATION:
> > -             if (vif->p2p && !is_mt7921(dev))
> > +             if (vif->p2p && !is_connac2(dev))
> >                       conn_type = CONNECTION_P2P_GO;
> >               else
> >                       conn_type = CONNECTION_INFRA_AP;
> > @@ -874,7 +874,7 @@ void mt76_connac_mcu_sta_tlv(struct mt76_phy *mphy, struct sk_buff *skb,
> >               struct sta_rec_vht *vht;
> >               int len;
> >
> > -             len = is_mt7921(dev) ? sizeof(*vht) : sizeof(*vht) - 4;
> > +             len = is_connac2(dev) ? sizeof(*vht) : sizeof(*vht) - 4;
> >               tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_VHT, len);
> >               vht = (struct sta_rec_vht *)tlv;
> >               vht->vht_cap = cpu_to_le32(sta->deflink.vht_cap.cap);
> > @@ -885,7 +885,7 @@ void mt76_connac_mcu_sta_tlv(struct mt76_phy *mphy, struct sk_buff *skb,
> >       /* starec uapsd */
> >       mt76_connac_mcu_sta_uapsd(skb, vif, sta);
> >
> > -     if (!is_mt7921(dev))
> > +     if (!is_connac2(dev))
> >               return;
> >
> >       if (sta->deflink.ht_cap.ht_supported || sta->deflink.he_cap.has_he)
> > @@ -1778,7 +1778,7 @@ int mt76_connac_mcu_hw_scan(struct mt76_phy *phy, struct ieee80211_vif *vif,
> >       req->ssid_type_ext = n_ssids ? BIT(0) : 0;
> >       req->ssids_num = n_ssids;
> >
> > -     duration = is_mt7921(phy->dev) ? 0 : MT76_CONNAC_SCAN_CHANNEL_TIME;
> > +     duration = is_connac2(phy->dev) ? 0 : MT76_CONNAC_SCAN_CHANNEL_TIME;
> >       /* increase channel time for passive scan */
> >       if (!sreq->n_ssids)
> >               duration *= 2;
> > @@ -1821,7 +1821,7 @@ int mt76_connac_mcu_hw_scan(struct mt76_phy *phy, struct ieee80211_vif *vif,
> >               req->ies_len = cpu_to_le16(sreq->ie_len);
> >       }
> >
> > -     if (is_mt7921(phy->dev))
> > +     if (is_connac2(phy->dev))
> >               req->scan_func |= SCAN_FUNC_SPLIT_SCAN;
> >
> >       memcpy(req->bssid, sreq->bssid, ETH_ALEN);
> > @@ -1897,7 +1897,7 @@ int mt76_connac_mcu_sched_scan_req(struct mt76_phy *phy,
> >               get_random_mask_addr(addr, sreq->mac_addr,
> >                                    sreq->mac_addr_mask);
> >       }
> > -     if (is_mt7921(phy->dev)) {
> > +     if (is_connac2(phy->dev)) {
> >               req->mt7921.bss_idx = mvif->idx;
> >               req->mt7921.delay = cpu_to_le32(sreq->delay);
> >       }
> > @@ -2037,7 +2037,7 @@ mt76_connac_mcu_build_sku(struct mt76_dev *dev, s8 *sku,
> >                         struct mt76_power_limits *limits,
> >                         enum nl80211_band band)
> >   {
> > -     int max_power = is_mt7921(dev) ? 127 : 63;
> > +     int max_power = is_connac2(dev) ? 127 : 63;
> >       int i, offset = sizeof(limits->cck);
> >
> >       memset(sku, max_power, MT_SKU_POWER_LIMIT);
> > @@ -2065,7 +2065,7 @@ mt76_connac_mcu_build_sku(struct mt76_dev *dev, s8 *sku,
> >               offset += 12;
> >       }
> >
> > -     if (!is_mt7921(dev))
> > +     if (!is_connac2(dev))
> >               return;
> >
> >       /* he */
> > @@ -2121,7 +2121,7 @@ mt76_connac_mcu_rate_txpower_band(struct mt76_phy *phy,
> >                                 enum nl80211_band band)
> >   {
> >       struct mt76_dev *dev = phy->dev;
> > -     int sku_len, batch_len = is_mt7921(dev) ? 8 : 16;
> > +     int sku_len, batch_len = is_connac2(dev) ? 8 : 16;
> >       static const u8 chan_list_2ghz[] = {
> >               1, 2,  3,  4,  5,  6,  7,
> >               8, 9, 10, 11, 12, 13, 14
> > @@ -2162,7 +2162,7 @@ mt76_connac_mcu_rate_txpower_band(struct mt76_phy *phy,
> >       if (!limits)
> >               return -ENOMEM;
> >
> > -     sku_len = is_mt7921(dev) ? sizeof(sku_tlbv) : sizeof(sku_tlbv) - 92;
> > +     sku_len = is_connac2(dev) ? sizeof(sku_tlbv) : sizeof(sku_tlbv) - 92;
> >       tx_power = 2 * phy->hw->conf.power_level;
> >       if (!tx_power)
> >               tx_power = 127;
> > @@ -3080,7 +3080,7 @@ static u32 mt76_connac2_get_data_mode(struct mt76_dev *dev, u32 info)
> >   {
> >       u32 mode = DL_MODE_NEED_RSP;
> >
> > -     if ((!is_mt7921(dev) && !is_mt7925(dev)) || info == PATCH_SEC_NOT_SUPPORT)
> > +     if ((!is_connac2(dev) && !is_mt7925(dev)) || info == PATCH_SEC_NOT_SUPPORT)
> >               return mode;
> >
> >       switch (FIELD_GET(PATCH_SEC_ENC_TYPE_MASK, info)) {
> > diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h
> > index f44977f9093d..1ef25385f3c6 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h
> > +++ b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h
> > @@ -1866,7 +1866,7 @@ mt76_connac_mcu_gen_dl_mode(struct mt76_dev *dev, u8 feature_set, bool is_wa)
> >
> >       ret |= feature_set & FW_FEATURE_SET_ENCRYPT ?
> >              DL_MODE_ENCRYPT | DL_MODE_RESET_SEC_IV : 0;
> > -     if (is_mt7921(dev) || is_mt7925(dev))
> > +     if (is_connac2(dev) || is_mt7925(dev))
> >               ret |= feature_set & FW_FEATURE_ENCRY_MODE ?
> >                      DL_CONFIG_ENCRY_MODE_SEL : 0;
> >       ret |= FIELD_PREP(DL_MODE_KEY_IDX,
> > diff --git a/drivers/net/wireless/mediatek/mt76/mt792x_core.c b/drivers/net/wireless/mediatek/mt76/mt792x_core.c
> > index f318a53e4deb..2142fcc4ae27 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt792x_core.c
> > +++ b/drivers/net/wireless/mediatek/mt76/mt792x_core.c
> > @@ -151,7 +151,7 @@ void mt792x_stop(struct ieee80211_hw *hw, bool suspend)
> >       cancel_work_sync(&dev->reset_work);
> >       mt76_connac_free_pending_tx_skbs(&dev->pm, NULL);
> >
> > -     if (is_mt7921(&dev->mt76)) {
> > +     if (is_connac2(&dev->mt76)) {
> >               mt792x_mutex_acquire(dev);
> >               mt76_connac_mcu_set_mac_enable(&dev->mt76, 0, false, false);
> >               mt792x_mutex_release(dev);
> > diff --git a/drivers/net/wireless/mediatek/mt76/mt792x_dma.c b/drivers/net/wireless/mediatek/mt76/mt792x_dma.c
> > index 1ddec7788b66..34f07bd3097d 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt792x_dma.c
> > +++ b/drivers/net/wireless/mediatek/mt76/mt792x_dma.c
> > @@ -356,7 +356,7 @@ EXPORT_SYMBOL_GPL(mt792x_poll_rx);
> >
> >   int mt792x_wfsys_reset(struct mt792x_dev *dev)
> >   {
> > -     u32 addr = is_mt7921(&dev->mt76) ? 0x18000140 : 0x7c000140;
> > +     u32 addr = is_connac2(&dev->mt76) ? 0x18000140 : 0x7c000140;
> >
> >       mt76_clear(dev, addr, WFSYS_SW_RST_B);
> >       msleep(50);
>
>
> --
> Best, Philip
>

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

* Re: [PATCH 01/11] wifi: mt76: connac: use is_connac2() to replace is_mt7921() checks
  2026-02-21 20:19   ` Sean Wang
@ 2026-03-22  8:04     ` Philip Müller
  0 siblings, 0 replies; 16+ messages in thread
From: Philip Müller @ 2026-03-22  8:04 UTC (permalink / raw)
  To: Sean Wang
  Cc: nbd, lorenzo.bianconi, linux-wireless, linux-mediatek, Sean Wang

On 2/21/26 21:19, Sean Wang wrote:
> Thanks for the catch I’ll update this in the next version.

Hi Sean, thx. Do you have already an updated version of this driver and 
a rough idea when all of this might reach wireless-next branch?

-- 
Best, Philip


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

end of thread, other threads:[~2026-03-22  8:15 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-02-19  0:39 [PATCH 01/11] wifi: mt76: connac: use is_connac2() to replace is_mt7921() checks sean.wang
2026-02-19  0:39 ` [PATCH 02/11] wifi: mt76: mt7921: use mt76_for_each_q_rx() in reset path sean.wang
2026-02-19  0:39 ` [PATCH 03/11] wifi: mt76: mt7921: handle MT7902 irq_map quirk with mutable copy sean.wang
2026-02-20 10:09   ` Philip Müller
2026-02-20 18:39     ` Sean Wang
2026-02-19  0:40 ` [PATCH 04/11] wifi: mt76: mt7921: add MT7902e DMA layout support sean.wang
2026-02-19  0:40 ` [PATCH 05/11] wifi: mt76: connac: mark MT7902 as hw txp devices sean.wang
2026-02-19  0:40 ` [PATCH 06/11] wifi: mt76: mt792x: add PSE handling barrier for the large MCU cmd sean.wang
2026-02-19  0:40 ` [PATCH 07/11] wifi: mt76: mt792x: ensure MCU ready before ROM patch download sean.wang
2026-02-19  0:40 ` [PATCH 08/11] wifi: mt76: mt7921: add MT7902 MCU support sean.wang
2026-02-19  0:40 ` [PATCH 09/11] wifi: mt76: mt792x: add MT7902 WFDMA prefetch configuration sean.wang
2026-02-19  0:40 ` [PATCH 10/11] wifi: mt76: mt7921: add MT7902 PCIe device support sean.wang
2026-02-19  0:40 ` [PATCH 11/11] wifi: mt76: mt7921: add MT7902 SDIO " sean.wang
2026-02-20 20:41 ` [PATCH 01/11] wifi: mt76: connac: use is_connac2() to replace is_mt7921() checks Philip Müller
2026-02-21 20:19   ` Sean Wang
2026-03-22  8:04     ` Philip Müller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox