* [PATCH 01/20] wifi: mt76: mt792x: consolidate rx interrupt masks into all_complete_mask
@ 2026-06-12 7:50 JB Tsai
2026-06-12 7:50 ` [PATCH 02/20] wifi: mt76: connac2: apply new rx all_complete_mask JB Tsai
` (3 more replies)
0 siblings, 4 replies; 7+ messages in thread
From: JB Tsai @ 2026-06-12 7:50 UTC (permalink / raw)
To: nbd, lorenzo
Cc: linux-wireless, linux-mediatek, Deren.Wu, Sean.Wang, Quan.Zhou,
Ryder.Lee, Leon.Yen, litien.chang, emery.hsin, jb.tsai
From: Emery Hsin <emery.hsin@mediatek.com>
Add all_complete_mask to irq_map rx sub-struct and use it in
mt792x_irq_tasklet() and mt792x_dma_enable() to replace individual
per-ring mask OR expressions.
This is a preparation patch before enabling MT7928 PCIe support.
Signed-off-by: Emery Hsin <emery.hsin@mediatek.com>
---
drivers/net/wireless/mediatek/mt76/mt792x.h | 1 +
drivers/net/wireless/mediatek/mt76/mt792x_dma.c | 8 ++------
2 files changed, 3 insertions(+), 6 deletions(-)
diff --git a/drivers/net/wireless/mediatek/mt76/mt792x.h b/drivers/net/wireless/mediatek/mt76/mt792x.h
index 70073b43af54..83c729f8bb76 100644
--- a/drivers/net/wireless/mediatek/mt76/mt792x.h
+++ b/drivers/net/wireless/mediatek/mt76/mt792x.h
@@ -200,6 +200,7 @@ struct mt792x_irq_map {
u32 mcu_complete_mask;
} tx;
struct {
+ u32 all_complete_mask;
u32 data_complete_mask;
u32 wm_complete_mask;
u32 wm2_complete_mask;
diff --git a/drivers/net/wireless/mediatek/mt76/mt792x_dma.c b/drivers/net/wireless/mediatek/mt76/mt792x_dma.c
index fc326447c792..946ff6d58954 100644
--- a/drivers/net/wireless/mediatek/mt76/mt792x_dma.c
+++ b/drivers/net/wireless/mediatek/mt76/mt792x_dma.c
@@ -39,9 +39,7 @@ void mt792x_irq_tasklet(unsigned long data)
trace_dev_irq(&dev->mt76, intr, dev->mt76.mmio.irqmask);
- mask |= intr & (irq_map->rx.data_complete_mask |
- irq_map->rx.wm_complete_mask |
- irq_map->rx.wm2_complete_mask);
+ mask |= intr & irq_map->rx.all_complete_mask;
if (intr & dev->irq_map->tx.mcu_complete_mask)
mask |= dev->irq_map->tx.mcu_complete_mask;
@@ -276,9 +274,7 @@ int mt792x_dma_enable(struct mt792x_dev *dev)
/* enable interrupts for TX/RX rings */
mt76_connac_irq_enable(&dev->mt76,
dev->irq_map->tx.all_complete_mask |
- dev->irq_map->rx.data_complete_mask |
- dev->irq_map->rx.wm2_complete_mask |
- dev->irq_map->rx.wm_complete_mask |
+ dev->irq_map->rx.all_complete_mask |
MT_INT_MCU_CMD);
mt76_set(dev, MT_MCU2HOST_SW_INT_ENA, MT_MCU_CMD_WAKE_RX_PCIE);
--
2.45.2
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 02/20] wifi: mt76: connac2: apply new rx all_complete_mask
2026-06-12 7:50 [PATCH 01/20] wifi: mt76: mt792x: consolidate rx interrupt masks into all_complete_mask JB Tsai
@ 2026-06-12 7:50 ` JB Tsai
2026-06-12 7:50 ` [PATCH 03/20] wifi: mt76: mt7925: replace shared rx irq masks with per-chip definitions JB Tsai
` (2 subsequent siblings)
3 siblings, 0 replies; 7+ messages in thread
From: JB Tsai @ 2026-06-12 7:50 UTC (permalink / raw)
To: nbd, lorenzo
Cc: linux-wireless, linux-mediatek, Deren.Wu, Sean.Wang, Quan.Zhou,
Ryder.Lee, Leon.Yen, litien.chang, emery.hsin, jb.tsai
From: Emery Hsin <emery.hsin@mediatek.com>
Populate all_complete_mask in MT7921 irq_map and update pci_resume()
and mac_reset() to use irq_map->rx.all_complete_mask instead of the
hardcoded MT_INT_RX_DONE_ALL macro.
This is a preparation patch before enabling MT7928 PCIe support.
Signed-off-by: Emery Hsin <emery.hsin@mediatek.com>
---
drivers/net/wireless/mediatek/mt76/mt7921/pci.c | 4 +++-
drivers/net/wireless/mediatek/mt76/mt7921/pci_mac.c | 3 ++-
2 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/pci.c b/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
index 49a37185f056..067f6b4142b6 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
@@ -292,6 +292,7 @@ static int mt7921_pci_probe(struct pci_dev *pdev,
.mcu_complete_mask = MT_INT_TX_DONE_MCU,
},
.rx = {
+ .all_complete_mask = MT_INT_RX_DONE_ALL,
.data_complete_mask = MT_INT_RX_DONE_DATA,
.wm_complete_mask = MT_INT_RX_DONE_WM,
.wm2_complete_mask = MT_INT_RX_DONE_WM2,
@@ -559,7 +560,8 @@ static int mt7921_pci_resume(struct device *device)
mt76_wr(dev, MT_PCIE_MAC_INT_ENABLE, 0xff);
mt76_connac_irq_enable(&dev->mt76,
dev->irq_map->tx.all_complete_mask |
- MT_INT_RX_DONE_ALL | MT_INT_MCU_CMD);
+ dev->irq_map->rx.all_complete_mask |
+ MT_INT_MCU_CMD);
mt76_set(dev, MT_MCU2HOST_SW_INT_ENA, MT_MCU_CMD_WAKE_RX_PCIE);
/* put dma enabled */
diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/pci_mac.c b/drivers/net/wireless/mediatek/mt76/mt7921/pci_mac.c
index 0db7acb3a637..98b3469ac597 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7921/pci_mac.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/pci_mac.c
@@ -96,7 +96,8 @@ int mt7921e_mac_reset(struct mt792x_dev *dev)
mt76_wr(dev, dev->irq_map->host_irq_enable,
dev->irq_map->tx.all_complete_mask |
- MT_INT_RX_DONE_ALL | MT_INT_MCU_CMD);
+ dev->irq_map->rx.all_complete_mask |
+ MT_INT_MCU_CMD);
mt76_wr(dev, MT_PCIE_MAC_INT_ENABLE, 0xff);
err = mt7921e_driver_own(dev);
--
2.45.2
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 03/20] wifi: mt76: mt7925: replace shared rx irq masks with per-chip definitions
2026-06-12 7:50 [PATCH 01/20] wifi: mt76: mt792x: consolidate rx interrupt masks into all_complete_mask JB Tsai
2026-06-12 7:50 ` [PATCH 02/20] wifi: mt76: connac2: apply new rx all_complete_mask JB Tsai
@ 2026-06-12 7:50 ` JB Tsai
2026-08-13 14:57 ` [PATCH] wifi: mt76: mt7925: remove wm2_complete_mask from mt7925_irq_map Bert Karwatzki
2026-06-12 7:50 ` [PATCH 04/20] wifi: mt76: mt7925: add MT7927 per-chip rx irq definitions JB Tsai
2026-06-12 7:50 ` [PATCH 05/20] wifi: mt76: mt792x: replace shared PCIe MAC macros with per-chip struct JB Tsai
3 siblings, 1 reply; 7+ messages in thread
From: JB Tsai @ 2026-06-12 7:50 UTC (permalink / raw)
To: nbd, lorenzo
Cc: linux-wireless, linux-mediatek, Deren.Wu, Sean.Wang, Quan.Zhou,
Ryder.Lee, Leon.Yen, litien.chang, emery.hsin, jb.tsai
From: Emery Hsin <emery.hsin@mediatek.com>
Replace shared MT_INT_RX_DONE_* macros with chip-specific
MT7925_INT_RX_DONE_{DATA,WM,WM2,ALL} and populate all_complete_mask
in mt7925_irq_map. Update resume and mac_reset paths accordingly.
This is a preparation patch before enabling MT7928 PCIe support.
Signed-off-by: Emery Hsin <emery.hsin@mediatek.com>
---
.../net/wireless/mediatek/mt76/mt7925/pci.c | 33 ++++++++++---------
.../wireless/mediatek/mt76/mt7925/pci_mac.c | 4 +--
.../net/wireless/mediatek/mt76/mt7925/regs.h | 9 ++---
3 files changed, 23 insertions(+), 23 deletions(-)
diff --git a/drivers/net/wireless/mediatek/mt76/mt7925/pci.c b/drivers/net/wireless/mediatek/mt76/mt7925/pci.c
index ea64303283ed..95a0bd615167 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7925/pci.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7925/pci.c
@@ -298,6 +298,20 @@ static int mt7925_dma_init(struct mt792x_dev *dev)
return mt792x_dma_enable(dev);
}
+static const struct mt792x_irq_map mt7925_irq_map = {
+ .host_irq_enable = MT_WFDMA0_HOST_INT_ENA,
+ .tx = {
+ .all_complete_mask = MT_INT_TX_DONE_ALL,
+ .mcu_complete_mask = MT_INT_TX_DONE_MCU,
+ },
+ .rx = {
+ .all_complete_mask = MT7925_INT_RX_DONE_ALL,
+ .data_complete_mask = MT7925_INT_RX_DONE_DATA,
+ .wm_complete_mask = MT7925_INT_RX_DONE_WM,
+ .wm2_complete_mask = MT_INT_RX_DONE_WM2,
+ },
+};
+
static const struct mt792x_irq_map mt7927_irq_map = {
.host_irq_enable = MT_WFDMA0_HOST_INT_ENA,
.tx = {
@@ -339,17 +353,6 @@ static int mt7925_pci_probe(struct pci_dev *pdev,
.drv_own = mt792xe_mcu_drv_pmctrl,
.fw_own = mt792xe_mcu_fw_pmctrl,
};
- static const struct mt792x_irq_map irq_map = {
- .host_irq_enable = MT_WFDMA0_HOST_INT_ENA,
- .tx = {
- .all_complete_mask = MT_INT_TX_DONE_ALL,
- .mcu_complete_mask = MT_INT_TX_DONE_MCU,
- },
- .rx = {
- .data_complete_mask = HOST_RX_DONE_INT_ENA2,
- .wm_complete_mask = HOST_RX_DONE_INT_ENA0,
- },
- };
struct ieee80211_ops *ops;
struct mt76_bus_ops *bus_ops;
struct mt792x_dev *dev;
@@ -407,7 +410,7 @@ static int mt7925_pci_probe(struct pci_dev *pdev,
dev = container_of(mdev, struct mt792x_dev, mt76);
dev->fw_features = features;
dev->hif_ops = &mt7925_pcie_ops;
- dev->irq_map = is_mt7927_hw ? &mt7927_irq_map : &irq_map;
+ dev->irq_map = is_mt7927_hw ? &mt7927_irq_map : &mt7925_irq_map;
mt76_mmio_init(&dev->mt76, pcim_iomap_table(pdev)[0]);
tasklet_init(&mdev->irq_tasklet, mt792x_irq_tasklet, (unsigned long)dev);
@@ -456,7 +459,7 @@ static int mt7925_pci_probe(struct pci_dev *pdev,
if (ret)
goto err_free_dev;
- mt76_wr(dev, irq_map.host_irq_enable, 0);
+ mt76_wr(dev, dev->irq_map->host_irq_enable, 0);
mt76_wr(dev, MT_PCIE_MAC_INT_ENABLE, 0xff);
@@ -613,9 +616,7 @@ static int _mt7925_pci_resume(struct device *device, bool restore)
mt76_wr(dev, MT_PCIE_MAC_INT_ENABLE, 0xff);
mt76_connac_irq_enable(&dev->mt76,
dev->irq_map->tx.all_complete_mask |
- dev->irq_map->rx.data_complete_mask |
- dev->irq_map->rx.wm_complete_mask |
- dev->irq_map->rx.wm2_complete_mask |
+ dev->irq_map->rx.all_complete_mask |
MT_INT_MCU_CMD);
mt76_set(dev, MT_MCU2HOST_SW_INT_ENA, MT_MCU_CMD_WAKE_RX_PCIE);
diff --git a/drivers/net/wireless/mediatek/mt76/mt7925/pci_mac.c b/drivers/net/wireless/mediatek/mt76/mt7925/pci_mac.c
index 97683949a305..d288739e1307 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7925/pci_mac.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7925/pci_mac.c
@@ -119,9 +119,7 @@ int mt7925e_mac_reset(struct mt792x_dev *dev)
mt76_wr(dev, dev->irq_map->host_irq_enable,
dev->irq_map->tx.all_complete_mask |
- dev->irq_map->rx.data_complete_mask |
- dev->irq_map->rx.wm_complete_mask |
- dev->irq_map->rx.wm2_complete_mask |
+ dev->irq_map->rx.all_complete_mask |
MT_INT_MCU_CMD);
mt76_wr(dev, MT_PCIE_MAC_INT_ENABLE, 0xff);
diff --git a/drivers/net/wireless/mediatek/mt76/mt7925/regs.h b/drivers/net/wireless/mediatek/mt76/mt7925/regs.h
index 24985bba1b90..aed90cc82858 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7925/regs.h
+++ b/drivers/net/wireless/mediatek/mt76/mt7925/regs.h
@@ -43,11 +43,12 @@
#define HOST_TX_DONE_INT_ENA17 BIT(27)
/* WFDMA interrupt */
-#define MT_INT_RX_DONE_DATA HOST_RX_DONE_INT_ENA2
-#define MT_INT_RX_DONE_WM HOST_RX_DONE_INT_ENA0
#define MT_INT_RX_DONE_WM2 HOST_RX_DONE_INT_ENA1
-#define MT_INT_RX_DONE_ALL (MT_INT_RX_DONE_DATA | \
- MT_INT_RX_DONE_WM | \
+
+#define MT7925_INT_RX_DONE_DATA HOST_RX_DONE_INT_ENA2
+#define MT7925_INT_RX_DONE_WM HOST_RX_DONE_INT_ENA0
+#define MT7925_INT_RX_DONE_ALL (MT7925_INT_RX_DONE_DATA | \
+ MT7925_INT_RX_DONE_WM | \
MT_INT_RX_DONE_WM2)
#define MT_INT_TX_DONE_MCU_WM (HOST_TX_DONE_INT_ENA15 | \
--
2.45.2
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 04/20] wifi: mt76: mt7925: add MT7927 per-chip rx irq definitions
2026-06-12 7:50 [PATCH 01/20] wifi: mt76: mt792x: consolidate rx interrupt masks into all_complete_mask JB Tsai
2026-06-12 7:50 ` [PATCH 02/20] wifi: mt76: connac2: apply new rx all_complete_mask JB Tsai
2026-06-12 7:50 ` [PATCH 03/20] wifi: mt76: mt7925: replace shared rx irq masks with per-chip definitions JB Tsai
@ 2026-06-12 7:50 ` JB Tsai
2026-06-12 7:50 ` [PATCH 05/20] wifi: mt76: mt792x: replace shared PCIe MAC macros with per-chip struct JB Tsai
3 siblings, 0 replies; 7+ messages in thread
From: JB Tsai @ 2026-06-12 7:50 UTC (permalink / raw)
To: nbd, lorenzo
Cc: linux-wireless, linux-mediatek, Deren.Wu, Sean.Wang, Quan.Zhou,
Ryder.Lee, Leon.Yen, litien.chang, emery.hsin, jb.tsai
From: Emery Hsin <emery.hsin@mediatek.com>
Add MT7927_INT_RX_DONE_{DATA,WM,WM2,ALL} macros and populate
all_complete_mask in mt7927_irq_map. MT7927 maps RX_DONE_DATA to
ENA4 and RX_DONE_WM to ENA6, differing from MT7925.
This is a preparation patch before enabling MT7928 PCIe support.
Signed-off-by: Emery Hsin <emery.hsin@mediatek.com>
---
drivers/net/wireless/mediatek/mt76/mt7925/pci.c | 8 +++++---
drivers/net/wireless/mediatek/mt76/mt7925/regs.h | 7 +++++++
2 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/drivers/net/wireless/mediatek/mt76/mt7925/pci.c b/drivers/net/wireless/mediatek/mt76/mt7925/pci.c
index 95a0bd615167..8a4fb53c718f 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7925/pci.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7925/pci.c
@@ -319,11 +319,13 @@ static const struct mt792x_irq_map mt7927_irq_map = {
.mcu_complete_mask = MT_INT_TX_DONE_MCU,
},
.rx = {
- .data_complete_mask = MT7927_RX_DONE_INT_ENA4,
- .wm_complete_mask = MT7927_RX_DONE_INT_ENA6,
- .wm2_complete_mask = MT7927_RX_DONE_INT_ENA7,
+ .all_complete_mask = MT7927_INT_RX_DONE_ALL,
+ .data_complete_mask = MT7927_INT_RX_DONE_DATA,
+ .wm_complete_mask = MT7927_INT_RX_DONE_WM,
+ .wm2_complete_mask = MT7927_INT_RX_DONE_WM2,
},
};
+
static int mt7925_pci_probe(struct pci_dev *pdev,
const struct pci_device_id *id)
{
diff --git a/drivers/net/wireless/mediatek/mt76/mt7925/regs.h b/drivers/net/wireless/mediatek/mt76/mt7925/regs.h
index aed90cc82858..bb5969689337 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7925/regs.h
+++ b/drivers/net/wireless/mediatek/mt76/mt7925/regs.h
@@ -51,6 +51,13 @@
MT7925_INT_RX_DONE_WM | \
MT_INT_RX_DONE_WM2)
+#define MT7927_INT_RX_DONE_DATA MT7927_RX_DONE_INT_ENA4
+#define MT7927_INT_RX_DONE_WM MT7927_RX_DONE_INT_ENA6
+#define MT7927_INT_RX_DONE_WM2 MT7927_RX_DONE_INT_ENA7
+#define MT7927_INT_RX_DONE_ALL (MT7927_INT_RX_DONE_DATA | \
+ MT7927_INT_RX_DONE_WM | \
+ MT7927_INT_RX_DONE_WM2)
+
#define MT_INT_TX_DONE_MCU_WM (HOST_TX_DONE_INT_ENA15 | \
HOST_TX_DONE_INT_ENA17)
--
2.45.2
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 05/20] wifi: mt76: mt792x: replace shared PCIe MAC macros with per-chip struct
2026-06-12 7:50 [PATCH 01/20] wifi: mt76: mt792x: consolidate rx interrupt masks into all_complete_mask JB Tsai
` (2 preceding siblings ...)
2026-06-12 7:50 ` [PATCH 04/20] wifi: mt76: mt7925: add MT7927 per-chip rx irq definitions JB Tsai
@ 2026-06-12 7:50 ` JB Tsai
3 siblings, 0 replies; 7+ messages in thread
From: JB Tsai @ 2026-06-12 7:50 UTC (permalink / raw)
To: nbd, lorenzo
Cc: linux-wireless, linux-mediatek, Deren.Wu, Sean.Wang, Quan.Zhou,
Ryder.Lee, Leon.Yen, litien.chang, emery.hsin, jb.tsai
From: Emery Hsin <emery.hsin@mediatek.com>
Replace hardcoded MT_PCIE_MAC_INT_ENABLE and MT_PCIE_MAC_PM macros
with a per-chip mt792x_pcie_reg struct. Remove the shared macros
from mt792x_regs.h and update mt792x_wpdma_reinit_cond() to use
dev->pcie_reg.
This is a preparation patch before enabling MT7928 PCIe support.
Signed-off-by: Emery Hsin <emery.hsin@mediatek.com>
---
drivers/net/wireless/mediatek/mt76/mt792x.h | 6 ++++++
drivers/net/wireless/mediatek/mt76/mt792x_dma.c | 6 ++++--
drivers/net/wireless/mediatek/mt76/mt792x_regs.h | 4 ----
3 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/drivers/net/wireless/mediatek/mt76/mt792x.h b/drivers/net/wireless/mediatek/mt76/mt792x.h
index 83c729f8bb76..eacee63e13f3 100644
--- a/drivers/net/wireless/mediatek/mt76/mt792x.h
+++ b/drivers/net/wireless/mediatek/mt76/mt792x.h
@@ -238,6 +238,11 @@ struct mt792x_hif_ops {
int (*fw_own)(struct mt792x_dev *dev);
};
+struct mt792x_pcie_reg {
+ u32 imask;
+ u32 pm;
+};
+
struct mt792x_dev {
union { /* must be first */
struct mt76_dev mt76;
@@ -273,6 +278,7 @@ struct mt792x_dev {
struct mt76_connac_coredump coredump;
const struct mt792x_hif_ops *hif_ops;
const struct mt792x_irq_map *irq_map;
+ const struct mt792x_pcie_reg *pcie_reg;
struct work_struct ipv6_ns_work;
struct delayed_work mlo_pm_work;
diff --git a/drivers/net/wireless/mediatek/mt76/mt792x_dma.c b/drivers/net/wireless/mediatek/mt76/mt792x_dma.c
index 946ff6d58954..2947504ef20b 100644
--- a/drivers/net/wireless/mediatek/mt76/mt792x_dma.c
+++ b/drivers/net/wireless/mediatek/mt76/mt792x_dma.c
@@ -345,7 +345,8 @@ int mt792x_wpdma_reinit_cond(struct mt792x_dev *dev)
if (mt792x_dma_need_reinit(dev)) {
/* disable interrutpts */
mt76_wr(dev, dev->irq_map->host_irq_enable, 0);
- mt76_wr(dev, MT_PCIE_MAC_INT_ENABLE, 0x0);
+ if (dev->pcie_reg)
+ mt76_wr(dev, dev->pcie_reg->imask, 0x0);
err = mt792x_wpdma_reset(dev, false);
if (err) {
@@ -354,7 +355,8 @@ int mt792x_wpdma_reinit_cond(struct mt792x_dev *dev)
}
/* enable interrutpts */
- mt76_wr(dev, MT_PCIE_MAC_INT_ENABLE, 0xff);
+ if (dev->pcie_reg)
+ mt76_wr(dev, dev->pcie_reg->imask, 0xff);
pm->stats.lp_wake++;
}
diff --git a/drivers/net/wireless/mediatek/mt76/mt792x_regs.h b/drivers/net/wireless/mediatek/mt76/mt792x_regs.h
index 4cd5b33b640e..6d174b158915 100644
--- a/drivers/net/wireless/mediatek/mt76/mt792x_regs.h
+++ b/drivers/net/wireless/mediatek/mt76/mt792x_regs.h
@@ -415,10 +415,6 @@
#define MT_HW_EMI_CTL 0x18011100
#define MT_HW_EMI_CTL_SLPPROT_EN BIT(1)
-#define MT_PCIE_MAC_BASE 0x10000
-#define MT_PCIE_MAC(ofs) (MT_PCIE_MAC_BASE + (ofs))
-#define MT_PCIE_MAC_INT_ENABLE MT_PCIE_MAC(0x188)
-#define MT_PCIE_MAC_PM MT_PCIE_MAC(0x194)
#define MT_PCIE_MAC_PM_L0S_DIS BIT(8)
#define MT_DMA_SHDL(ofs) (0x7c026000 + (ofs))
--
2.45.2
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH] wifi: mt76: mt7925: remove wm2_complete_mask from mt7925_irq_map
2026-06-12 7:50 ` [PATCH 03/20] wifi: mt76: mt7925: replace shared rx irq masks with per-chip definitions JB Tsai
@ 2026-08-13 14:57 ` Bert Karwatzki
2026-08-13 15:11 ` Emery Hsin (辛承宣)
0 siblings, 1 reply; 7+ messages in thread
From: Bert Karwatzki @ 2026-08-13 14:57 UTC (permalink / raw)
To: Emery Hsin
Cc: Bert Karwatzki, Felix Fietkau, linux-kernel, linux-wireless,
linux-next, jb.tsai, Deren.Wu, Leon.Yen, Quan.Zhou, Ryder.Lee,
Sean.Wang, linux-mediatek, litien.chang, lorenzo
Commit
c4edf9e3e0e5 ("wifi: mt76: mt7925: replace shared rx irq masks with per-chip definitions")
introduces a non-NULL wm2_complete_mask element to mt7925_irq_map. This
gives a NULL pointer dereference error when resuming from hibernate:
[ T2001] BUG: kernel NULL pointer dereference, address: 0000000000000a98
[ T2001] #PF: supervisor write access in kernel mode
[ T2001] #PF: error_code(0x0002) - not-present page
[ T2001] PGD 0 P4D 0
[ T2001] Oops: Oops: 0002 [#1] SMP NOPTI
[ T2001] CPU: 5 UID: 0 PID: 2001 Comm: kworker/u128:4 Tainted: G W 7.2.0-rc4-bisect-00876-gc4edf9e3e0e5-dirty #746 PREEMPT_RT
[ T2001] Tainted: [W]=WARN
[ T2001] Hardware name: ASUS System Product Name/ROG STRIX B850-F GAMING WIFI, BIOS 1627 02/05/2026
[ T2001] Workqueue: mt76 mt7925_mac_reset_work [mt7925_common]
[ T2001] RIP: 0010:mutex_lock+0xe/0x30
[ T2001] Code: 75 07 31 c0 c3 cc cc cc cc be 01 00 00 00 e9 79 fe ff ff 66 0f 1f 84 00 00 00 00 00 f3 0f 1e fa 65 48 8b 15 94 13 83 00 31 c0 <f0> 48 0f b1 57 18 75 05 c3 cc cc cc cc be 02 00 00 00 e9 4b fe ff
[ T2001] RSP: 0018:ffffa53dc250fdc8 EFLAGS: 00010246
[ T2001] RAX: 0000000000000000 RBX: ffff951e8d0e3420 RCX: 0000000000000000
[ T2001] RDX: ffff951f64f145c0 RSI: 0000000000000002 RDI: 0000000000000a80
[ T2001] RBP: 0000000000000000 R08: 0000000000000004 R09: 0000000000000001
[ T2001] R10: 0000000000000000 R11: 0000000000000004 R12: ffff951e8d0e3020
[ T2001] R13: ffff951e8d0e2680 R14: ffff951e8d0e0aa0 R15: 0000000000000000
[ T2001] FS: 0000000000000000(0000) GS:ffff952ccc8b3000(0000) knlGS:0000000000000000
[ T2001] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ T2001] CR2: 0000000000000a98 CR3: 000000050641e000 CR4: 0000000000f50ef0
[ T2001] PKRU: 55555554
[ T2001] Call Trace:
[ T2001] <TASK>
[ T2001] ? napi_disable+0x18/0x40
[ T2001] ? mt7925e_mac_reset+0x2f8/0x390 [mt7925e]
[ T2001] ? mt7925_mac_reset_work+0x98/0x1c0 [mt7925_common]
[ T2001] ? drm_sched_run_job_work+0x1c/0x2d0 [gpu_sched]
[ T2001] ? pwq_dec_nr_in_flight+0x29a/0x3a0
[ T2001] ? process_one_work+0x199/0x2a0
[ T2001] ? worker_thread+0x1a0/0x2f0
[ T2001] ? rescuer_thread+0x550/0x550
[ T2001] ? kthread+0xd1/0x110
[ T2001] ? kthread_affine_node+0x100/0x100
[ T2001] ? ret_from_fork+0x1f9/0x2b0
[ T2001] ? kthread_affine_node+0x100/0x100
[ T2001] ? kthread_affine_node+0x100/0x100
[ T2001] ? ret_from_fork_asm+0x11/0x20
[ T2001] </TASK>
Remove wm2_complete_mask from mt7925_irq_map to fix the issue.
Fixes: c4edf9e3e0e5 ("wifi: mt76: mt7925: replace shared rx irq masks with per-chip definitions")
Signed-off-by: Bert Karwatzki <spasswolf@web.de>
---
drivers/net/wireless/mediatek/mt76/mt7925/pci.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/drivers/net/wireless/mediatek/mt76/mt7925/pci.c b/drivers/net/wireless/mediatek/mt76/mt7925/pci.c
index 02ef09dd797d..d2c0a78ae9f2 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7925/pci.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7925/pci.c
@@ -493,7 +493,6 @@ static const struct mt792x_irq_map mt7925_irq_map = {
.all_complete_mask = MT7925_INT_RX_DONE_ALL,
.data_complete_mask = MT7925_INT_RX_DONE_DATA,
.wm_complete_mask = MT7925_INT_RX_DONE_WM,
- .wm2_complete_mask = MT_INT_RX_DONE_WM2,
},
};
--
2.55.0
I noticed that my debian sid system running linux next-20260812 would
resume from hibernation either displaying a frozen GUI or show the
mentioned backtrace in dmesg and freezing seconds after that. I bisected
the issue to commit
c4edf9e3e0e5 ("wifi: mt76: mt7925: replace shared rx irq masks with per-chip definitions")
which introduces a non-NULL wm2_complete_mask to mt7925_irq_map.
Removing wm2_complete_mask from mt7925_irq_map fixes the issue in
next-20260812.
Bert Karwatzki
^ permalink raw reply related [flat|nested] 7+ messages in thread
* RE: [PATCH] wifi: mt76: mt7925: remove wm2_complete_mask from mt7925_irq_map
2026-08-13 14:57 ` [PATCH] wifi: mt76: mt7925: remove wm2_complete_mask from mt7925_irq_map Bert Karwatzki
@ 2026-08-13 15:11 ` Emery Hsin (辛承宣)
0 siblings, 0 replies; 7+ messages in thread
From: Emery Hsin (辛承宣) @ 2026-08-13 15:11 UTC (permalink / raw)
To: Bert Karwatzki
Cc: Felix Fietkau, linux-kernel@vger.kernel.org,
linux-wireless@vger.kernel.org, linux-next@vger.kernel.org,
JB Tsai (蔡志彬),
Deren Wu (武德仁),
Leon Yen (顏良儒), Quan Zhou (周全),
Ryder Lee, Sean Wang, linux-mediatek@lists.infradead.org,
Litien Chang (張立典), lorenzo@kernel.org
Hi Bert,
Thanks for your feedback. Actually, we encountered the same issue during our internal testing and have already submitted a fix. The solution is basically the same.
https://patchwork.kernel.org/project/linux-wireless/patch/20260805092409.1489401-1-eason.lai@mediatek.com/
Sorry for any bother with this issue.
BRs,
Emery
-----Original Message-----
From: Bert Karwatzki <spasswolf@web.de>
Sent: Thursday, August 13, 2026 10:58 PM
To: Emery Hsin (辛承宣) <Emery.Hsin@mediatek.com>
Cc: Bert Karwatzki <spasswolf@web.de>; Felix Fietkau <nbd@nbd.name>; linux-kernel@vger.kernel.org; linux-wireless@vger.kernel.org; linux-next@vger.kernel.org; JB Tsai (蔡志彬) <Jb.Tsai@mediatek.com>; Deren Wu (武德仁) <Deren.Wu@mediatek.com>; Leon Yen (顏良儒) <Leon.Yen@mediatek.com>; Quan Zhou (周全) <Quan.Zhou@mediatek.com>; Ryder Lee <Ryder.Lee@mediatek.com>; Sean Wang <Sean.Wang@mediatek.com>; linux-mediatek@lists.infradead.org; Litien Chang (張立典) <Litien.Chang@mediatek.com>; lorenzo@kernel.org
Subject: [PATCH] wifi: mt76: mt7925: remove wm2_complete_mask from mt7925_irq_map
Commit
c4edf9e3e0e5 ("wifi: mt76: mt7925: replace shared rx irq masks with per-chip definitions") introduces a non-NULL wm2_complete_mask element to mt7925_irq_map. This gives a NULL pointer dereference error when resuming from hibernate:
[ T2001] BUG: kernel NULL pointer dereference, address: 0000000000000a98 [ T2001] #PF: supervisor write access in kernel mode [ T2001] #PF: error_code(0x0002) - not-present page [ T2001] PGD 0 P4D 0 [ T2001] Oops: Oops: 0002 [#1] SMP NOPTI
[ T2001] CPU: 5 UID: 0 PID: 2001 Comm: kworker/u128:4 Tainted: G W 7.2.0-rc4-bisect-00876-gc4edf9e3e0e5-dirty #746 PREEMPT_RT
[ T2001] Tainted: [W]=WARN
[ T2001] Hardware name: ASUS System Product Name/ROG STRIX B850-F GAMING WIFI, BIOS 1627 02/05/2026 [ T2001] Workqueue: mt76 mt7925_mac_reset_work [mt7925_common] [ T2001] RIP: 0010:mutex_lock+0xe/0x30 [ T2001] Code: 75 07 31 c0 c3 cc cc cc cc be 01 00 00 00 e9 79 fe ff ff 66 0f 1f 84 00 00 00 00 00 f3 0f 1e fa 65 48 8b 15 94 13 83 00 31 c0 <f0> 48 0f b1 57 18 75 05 c3 cc cc cc cc be 02 00 00 00 e9 4b fe ff [ T2001] RSP: 0018:ffffa53dc250fdc8 EFLAGS: 00010246 [ T2001] RAX: 0000000000000000 RBX: ffff951e8d0e3420 RCX: 0000000000000000 [ T2001] RDX: ffff951f64f145c0 RSI: 0000000000000002 RDI: 0000000000000a80 [ T2001] RBP: 0000000000000000 R08: 0000000000000004 R09: 0000000000000001 [ T2001] R10: 0000000000000000 R11: 0000000000000004 R12: ffff951e8d0e3020 [ T2001] R13: ffff951e8d0e2680 R14: ffff951e8d0e0aa0 R15: 0000000000000000 [ T2001] FS: 0000000000000000(0000) GS:ffff952ccc8b3000(0000) knlGS:0000000000000000 [ T2001] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ T2001] CR2: 0000000000000a98 CR3: 000000050641e000 CR4: 0000000000f50ef0 [ T2001] PKRU: 55555554 [ T2001] Call Trace:
[ T2001] <TASK>
[ T2001] ? napi_disable+0x18/0x40
[ T2001] ? mt7925e_mac_reset+0x2f8/0x390 [mt7925e] [ T2001] ? mt7925_mac_reset_work+0x98/0x1c0 [mt7925_common] [ T2001] ? drm_sched_run_job_work+0x1c/0x2d0 [gpu_sched] [ T2001] ? pwq_dec_nr_in_flight+0x29a/0x3a0 [ T2001] ? process_one_work+0x199/0x2a0 [ T2001] ? worker_thread+0x1a0/0x2f0 [ T2001] ? rescuer_thread+0x550/0x550 [ T2001] ? kthread+0xd1/0x110 [ T2001] ? kthread_affine_node+0x100/0x100 [ T2001] ? ret_from_fork+0x1f9/0x2b0 [ T2001] ? kthread_affine_node+0x100/0x100 [ T2001] ? kthread_affine_node+0x100/0x100 [ T2001] ? ret_from_fork_asm+0x11/0x20 [ T2001] </TASK>
Remove wm2_complete_mask from mt7925_irq_map to fix the issue.
Fixes: c4edf9e3e0e5 ("wifi: mt76: mt7925: replace shared rx irq masks with per-chip definitions")
Signed-off-by: Bert Karwatzki <spasswolf@web.de>
---
drivers/net/wireless/mediatek/mt76/mt7925/pci.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/drivers/net/wireless/mediatek/mt76/mt7925/pci.c b/drivers/net/wireless/mediatek/mt76/mt7925/pci.c
index 02ef09dd797d..d2c0a78ae9f2 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7925/pci.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7925/pci.c
@@ -493,7 +493,6 @@ static const struct mt792x_irq_map mt7925_irq_map = {
.all_complete_mask = MT7925_INT_RX_DONE_ALL,
.data_complete_mask = MT7925_INT_RX_DONE_DATA,
.wm_complete_mask = MT7925_INT_RX_DONE_WM,
- .wm2_complete_mask = MT_INT_RX_DONE_WM2,
},
};
--
2.55.0
I noticed that my debian sid system running linux next-20260812 would resume from hibernation either displaying a frozen GUI or show the mentioned backtrace in dmesg and freezing seconds after that. I bisected the issue to commit
c4edf9e3e0e5 ("wifi: mt76: mt7925: replace shared rx irq masks with per-chip definitions") which introduces a non-NULL wm2_complete_mask to mt7925_irq_map.
Removing wm2_complete_mask from mt7925_irq_map fixes the issue in next-20260812.
Bert Karwatzki
^ permalink raw reply related [flat|nested] 7+ messages in thread
end of thread, other threads:[~2026-08-13 15:11 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-12 7:50 [PATCH 01/20] wifi: mt76: mt792x: consolidate rx interrupt masks into all_complete_mask JB Tsai
2026-06-12 7:50 ` [PATCH 02/20] wifi: mt76: connac2: apply new rx all_complete_mask JB Tsai
2026-06-12 7:50 ` [PATCH 03/20] wifi: mt76: mt7925: replace shared rx irq masks with per-chip definitions JB Tsai
2026-08-13 14:57 ` [PATCH] wifi: mt76: mt7925: remove wm2_complete_mask from mt7925_irq_map Bert Karwatzki
2026-08-13 15:11 ` Emery Hsin (辛承宣)
2026-06-12 7:50 ` [PATCH 04/20] wifi: mt76: mt7925: add MT7927 per-chip rx irq definitions JB Tsai
2026-06-12 7:50 ` [PATCH 05/20] wifi: mt76: mt792x: replace shared PCIe MAC macros with per-chip struct JB Tsai
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox