Linux-mediatek Archive on lore.kernel.org
 help / color / mirror / Atom feed
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



      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