From: JB Tsai <jb.tsai@mediatek.com>
To: <nbd@nbd.name>, <lorenzo@kernel.org>
Cc: <linux-wireless@vger.kernel.org>,
<linux-mediatek@lists.infradead.org>, <Sean.Wang@mediatek.com>,
<Shengwei.Lu@mediatek.com>, <jb.tsai@mediatek.com>,
Shengwei Lu <shengwei.lu@mediatek.com>
Subject: [PATCH 2/2] wifi: mt76: mt7925: wire up ICS logging support for MT7925/MT7928
Date: Wed, 11 Nov 2026 13:48:11 +0800 [thread overview]
Message-ID: <20261111054811.845536-2-jb.tsai@mediatek.com> (raw)
In-Reply-To: <20261111054811.845536-1-jb.tsai@mediatek.com>
From: Shengwei Lu <shengwei.lu@mediatek.com>
Enable the shared ICS logging framework for the MT7925/MT7928 family:
- register the "ics" debugfs entry and set up the ics_worker in
mt7925_register_device(), tearing it down in
mt7925e_unregister_device();
- dispatch PKT_TYPE_ICS frames in mt7925_queue_rx_skb() to the shared
mt792x_mcu_rx_ics();
- add the ICS RX queue id MT7928_RXQ_MCU_ICS and the rx_ics DMA ring for
the mt7925 and mt7928 DMA layouts;
- add MT7928_INT_RX_ICS and its rx.wm4_complete_mask on the mt7928 irq
map, and napi-disable the ICS queue on MAC reset.
Signed-off-by: Shengwei Lu <shengwei.lu@mediatek.com>
---
drivers/net/wireless/mediatek/mt76/mt7925/debugfs.c | 5 +++++
drivers/net/wireless/mediatek/mt76/mt7925/init.c | 5 +++++
drivers/net/wireless/mediatek/mt76/mt7925/mac.c | 3 +++
drivers/net/wireless/mediatek/mt76/mt7925/mt7925.h | 1 +
drivers/net/wireless/mediatek/mt76/mt7925/pci.c | 9 +++++++++
drivers/net/wireless/mediatek/mt76/mt7925/pci_mac.c | 2 ++
drivers/net/wireless/mediatek/mt76/mt7925/regs.h | 4 +++-
7 files changed, 28 insertions(+), 1 deletion(-)
diff --git a/drivers/net/wireless/mediatek/mt76/mt7925/debugfs.c b/drivers/net/wireless/mediatek/mt76/mt7925/debugfs.c
index d01ff49de47a..896cf4df21fa 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7925/debugfs.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7925/debugfs.c
@@ -63,6 +63,9 @@ mt7925_fw_debug_get(void *data, u64 *val)
DEFINE_DEBUGFS_ATTRIBUTE(fops_fw_debug, mt7925_fw_debug_get,
mt7925_fw_debug_set, "%lld\n");
+DEFINE_DEBUGFS_ATTRIBUTE(fops_ics, mt792x_ics_get,
+ mt792x_ics_set, "%lld\n");
+
DEFINE_SHOW_ATTRIBUTE(mt792x_tx_stats);
static void
@@ -292,6 +295,8 @@ int mt7925_init_debugfs(struct mt792x_dev *dev)
dir = mt76_register_debugfs_fops(&dev->mphy, &fops_regval);
+ debugfs_create_file("ics", 0600, dir, dev, &fops_ics);
+
if (mt76_is_mmio(&dev->mt76))
debugfs_create_devm_seqfile(dev->mt76.dev, "xmit-queues",
dir, mt792x_queues_read);
diff --git a/drivers/net/wireless/mediatek/mt76/mt7925/init.c b/drivers/net/wireless/mediatek/mt76/mt7925/init.c
index 8c3049b66a85..f619c818ac4d 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7925/init.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7925/init.c
@@ -250,6 +250,11 @@ int mt7925_register_device(struct mt792x_dev *dev)
dev->mt76.phy.priv = &dev->phy;
dev->mt76.tx_worker.fn = mt792x_tx_worker;
+ dev->ics_worker.fn = mt792x_ics_worker;
+ WARN_ON(mt76_worker_setup(hw, &dev->ics_worker, NULL, "ics"));
+ mt76_worker_disable(&dev->ics_worker);
+ skb_queue_head_init(&dev->ics_q);
+
INIT_DELAYED_WORK(&dev->pm.ps_work, mt792x_pm_power_save_work);
INIT_DELAYED_WORK(&dev->mlo_pm_work, mt7925_mlo_pm_work);
INIT_WORK(&dev->pm.wake_work, mt792x_pm_wake_work);
diff --git a/drivers/net/wireless/mediatek/mt76/mt7925/mac.c b/drivers/net/wireless/mediatek/mt76/mt7925/mac.c
index 7af996abe294..62d0a3baa4ec 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7925/mac.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7925/mac.c
@@ -1440,6 +1440,9 @@ void mt7925_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
type = PKT_TYPE_NORMAL_MCU;
switch (type) {
+ case PKT_TYPE_ICS:
+ mt792x_mcu_rx_ics(dev, skb);
+ break;
case PKT_TYPE_TXRX_NOTIFY:
if (!mt76_is_mmio(mdev)) {
napi_consume_skb(skb, 1);
diff --git a/drivers/net/wireless/mediatek/mt76/mt7925/mt7925.h b/drivers/net/wireless/mediatek/mt76/mt7925/mt7925.h
index 636efe038392..d917e2c9bd02 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7925/mt7925.h
+++ b/drivers/net/wireless/mediatek/mt76/mt7925/mt7925.h
@@ -150,6 +150,7 @@ enum mt7928_rxq_id {
MT7928_RXQ_BAND1 = 2,
MT7928_RXQ_MCU_WM = 3,
MT7928_RXQ_MCU_WM2 = 1, /* for tx done */
+ MT7928_RXQ_MCU_ICS = 4,
};
enum {
diff --git a/drivers/net/wireless/mediatek/mt76/mt7925/pci.c b/drivers/net/wireless/mediatek/mt76/mt7925/pci.c
index 0d477dc1086c..a5bcca75bbf4 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7925/pci.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7925/pci.c
@@ -104,6 +104,8 @@ static void mt7925e_unregister_device(struct mt792x_dev *dev)
if (dev->phy.chip_cap & MT792x_CHIP_CAP_WF_RF_PIN_CTRL_EVT_EN)
wiphy_rfkill_stop_polling(hw->wiphy);
+ mt76_worker_teardown(&dev->ics_worker);
+
cancel_work_sync(&dev->init_work);
mt76_unregister_device(&dev->mt76);
set_bit(MT76_REMOVED, &dev->mphy.state);
@@ -392,6 +394,9 @@ static const struct mt792x_dma_layout mt7925_dma_layout = {
.rx_data = mt792x_dma_ring(MT7925_RXQ_BAND0,
MT7925_RX_RING_SIZE,
MT_RX_DATA_RING_BASE),
+ .rx_ics = mt792x_dma_ring(MT7925_RXQ_MCU_WM2,
+ MT7925_RX_MCU_RING_SIZE,
+ MT_RX_EVENT_RING_BASE),
};
static const struct mt792x_dma_layout mt7927_dma_layout = {
@@ -431,6 +436,9 @@ static const struct mt792x_dma_layout mt7928_dma_layout = {
.rx_data = mt792x_dma_ring(MT7928_RXQ_BAND0,
MT7925_RX_RING_SIZE,
MT_RX_DATA_RING_BASE),
+ .rx_ics = mt792x_dma_ring(MT7928_RXQ_MCU_ICS,
+ MT7925_RX_MCU_RING_SIZE,
+ MT_RX_EVENT_RING_BASE),
};
static int mt7927_dma_init(struct mt792x_dev *dev)
@@ -581,6 +589,7 @@ static const struct mt792x_irq_map mt7928_irq_map = {
.data_complete_mask = MT7928_INT_RX_DONE_DATA,
.wm_complete_mask = MT7928_INT_RX_DONE_WM,
.wm2_complete_mask = MT_INT_RX_DONE_WM2,
+ .wm4_complete_mask = MT7928_INT_RX_ICS,
},
};
diff --git a/drivers/net/wireless/mediatek/mt76/mt7925/pci_mac.c b/drivers/net/wireless/mediatek/mt76/mt7925/pci_mac.c
index bc8f741e9426..735188873463 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7925/pci_mac.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7925/pci_mac.c
@@ -99,6 +99,8 @@ int mt7925e_mac_reset(struct mt792x_dev *dev)
napi_disable(&dev->mt76.napi[MT_RXQ_MCU]);
if (irq_map->rx.wm2_complete_mask)
napi_disable(&dev->mt76.napi[MT_RXQ_MCU_WA]);
+ if (is_mt7928(&dev->mt76) && irq_map->rx.wm4_complete_mask)
+ napi_disable(&dev->mt76.napi[MT_RXQ_ICS]);
if (irq_map->tx.all_complete_mask)
napi_disable(&dev->mt76.tx_napi);
diff --git a/drivers/net/wireless/mediatek/mt76/mt7925/regs.h b/drivers/net/wireless/mediatek/mt76/mt7925/regs.h
index e040dff321dd..7b23ead148bb 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7925/regs.h
+++ b/drivers/net/wireless/mediatek/mt76/mt7925/regs.h
@@ -59,9 +59,11 @@
#define MT7928_INT_RX_DONE_DATA HOST_RX_DONE_INT_ENA0
#define MT7928_INT_RX_DONE_WM HOST_RX_DONE_INT_ENA3
+#define MT7928_INT_RX_ICS HOST_RX_DONE_INT_ENA4
#define MT7928_INT_RX_DONE_ALL (MT7928_INT_RX_DONE_DATA | \
MT7928_INT_RX_DONE_WM | \
- MT_INT_RX_DONE_WM2)
+ MT_INT_RX_DONE_WM2 | \
+ MT7928_INT_RX_ICS)
#define MT_INT_TX_DONE_MCU_WM (HOST_TX_DONE_INT_ENA15 | \
HOST_TX_DONE_INT_ENA17)
--
2.45.2
prev parent reply other threads:[~2026-11-11 5:48 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-11 5:48 [PATCH 1/2] wifi: mt76: mt792x: add ICS logging framework to the shared library JB Tsai
2026-11-11 5:48 ` JB Tsai [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261111054811.845536-2-jb.tsai@mediatek.com \
--to=jb.tsai@mediatek.com \
--cc=Sean.Wang@mediatek.com \
--cc=Shengwei.Lu@mediatek.com \
--cc=linux-mediatek@lists.infradead.org \
--cc=linux-wireless@vger.kernel.org \
--cc=lorenzo@kernel.org \
--cc=nbd@nbd.name \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox