[PATCH v2 12/13] wifi: mt76: mt7925: enable low power support for MT7927

From: Javier Tia

Date: Thu Mar 19 2026 - 18:28:26 EST


Enable runtime PM and deep sleep for MT7927 now that the DMA wake path
properly restores all MT7927-specific GLO_CFG bits (ADDR_EXT_EN,
CSR_LBK_RX_Q_SEL_EN, FW_DWLD_BYPASS_DMASHDL) via the DMA config
struct on every PM wake cycle.

Disable PCIe ASPM unconditionally for MT7927. The CONNINFRA power
domain and WFDMA register access are unreliable with PCIe L1 active,
causing throughput to drop from 1+ Gbps to ~200 Mbps. L0s savings are
negligible for a PCIe WLAN card, and mt76_pci_disable_aspm() handles
both device and parent bridge in one call.

Tested-by: Marcin FM <marcin@xxxxxxx>
Tested-by: Cristian-Florin Radoi <radoi.chris@xxxxxxxxx>
Tested-by: George Salukvadze <giosal90@xxxxxxxxx>
Tested-by: Evgeny Kapusta <3193631@xxxxxxxxx>
Tested-by: Samu Toljamo <samu.toljamo@xxxxxxxxx>
Tested-by: Ariel Rosenfeld <ariel.rosenfeld.750@xxxxxxxxx>
Tested-by: Chapuis Dario <chapuisdario4@xxxxxxxxx>
Tested-by: Thibaut François <tibo@xxxxxxxxxxxxxx>
Tested-by: 张旭涵 <Loong.0x00@xxxxxxxxx>
Signed-off-by: Javier Tia <floss@xxxxxxx>
---
drivers/net/wireless/mediatek/mt76/mt7925/pci.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7925/pci.c b/drivers/net/wireless/mediatek/mt76/mt7925/pci.c
index 393d9f408b84..693e08f35d68 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7925/pci.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7925/pci.c
@@ -530,7 +530,13 @@ static int mt7925_pci_probe(struct pci_dev *pdev,
if (ret)
goto err_free_pci_vec;

- if (mt7925_disable_aspm)
+ is_mt7927_hw = (pdev->device == 0x6639 || pdev->device == 0x7927);
+
+ /* MT7927: CONNINFRA power domain and WFDMA register access are
+ * unreliable with PCIe L1 active, causing throughput to drop
+ * from 1+ Gbps to ~200 Mbps. Disable ASPM unconditionally.
+ */
+ if (mt7925_disable_aspm || is_mt7927_hw)
mt76_pci_disable_aspm(pdev);

ops = mt792x_get_mac80211_ops(&pdev->dev, &mt7925_ops,
@@ -562,7 +568,6 @@ 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;
- is_mt7927_hw = (pdev->device == 0x6639 || pdev->device == 0x7927);
dev->irq_map = is_mt7927_hw ? &mt7927_irq_map : &irq_map;
dev->dma_config = is_mt7927_hw ? &mt7927_dma_cfg : &mt7925_dma_cfg;
mt76_mmio_init(&dev->mt76, pcim_iomap_table(pdev)[0]);

--
2.53.0