[PATCH 00/18] wifi: mt76: mt7925: add MT7927 (Filogic 380) support
Sean Wang
sean.wang at kernel.org
Fri Mar 6 23:08:31 PST 2026
Hi Javier,
On Fri, Mar 6, 2026 at 6:33 PM Javier Tia <floss at jetm.me> wrote:
>
> This series adds support for the MediaTek MT7927 (Filogic 380) combo
> WiFi 7 + BT 5.4 module to the mt7925 driver. The MT7927 uses PCI ID
> 14c3:7927 (some hardware reports 14c3:6639) and shares the mt7925
> firmware interface but requires different DMA ring layout, IRQ mapping,
> chip initialization, and power management handling.
>
> Tested hardware:
> - ASUS ROG Crosshair X870E Hero (BT 0489:e13a, WiFi 14c3:6639)
> - ASUS ProArt X870E-Creator WiFi (BT 0489:e13a / 13d3:3588, WiFi 14c3:6639)
> - ASUS ROG Strix X870E-E (BT 0489:e13a, WiFi 14c3:7927)
> - Gigabyte X870E Aorus Master X3D (BT 0489:e10f, WiFi 14c3:7927)
> - Gigabyte Z790 AORUS MASTER X (BT 0489:e10f, WiFi 14c3:7927)
> - Lenovo Legion Pro 7 16ARX9 (BT 0489:e0fa, WiFi 14c3:7927)
> - TP-Link Archer TBE550E PCIe (BT 0489:e116, WiFi 14c3:7927)
> - EDUP EP-MT7927BE M.2 card (WiFi 14c3:7927)
> - Foxconn/Azurewave M.2 modules (WiFi 14c3:6639)
> - AMD RZ738 reference design (WiFi 14c3:0738)
>
Thanks for coordinating the work and delivering the driver.
> Tested on Arch Linux, CachyOS, EndeavourOS, Fedora (Bazzite), NixOS,
> openSUSE Tumbleweed, and Ubuntu across kernels 6.13-6.19.
>
> What works:
> - WiFi 7 with EHT 320MHz on 2.4/5/6 GHz bands
> - 320MHz data path verified at 841 Mbps (iperf3 -t30 -P8)
> - PCIe initialization with CBTOP remap and MT7927-specific DMA layout
> - Runtime power management and suspend/resume (S3)
> - DBDC (dual-band concurrent) mode
> - Explicit band_idx assignment for stable 5GHz/6GHz operation
> - ASPM disabled for MT7927 to prevent throughput collapse
>
> Known limitations (planned as follow-up series):
> - MLO (Multi-Link Operation): tested working on 5GHz+2.4GHz STR
> (776 Mbps) but requires additional patches for link lifetime
> and error handling. Sean Wang's series [1] addresses these;
> MLO support will be submitted as a follow-up on top of that.
>
> [1] https://lore.kernel.org/linux-wireless/20260306232238.2039675-1-sean.wang@kernel.org/
> - TX retransmissions: elevated retry rate on all bands, firmware-side
> rate adaptation issue not addressable in the driver.
>
> Patches 1-11 bring up the basic driver (chip ID, firmware, DMA, init,
> power management, 320MHz MCS, mac_reset guard, IRQ map, probe fix).
> Patch 12 advertises EHT 320MHz capabilities, guarded by is_mt7927().
> Patches 13-14 fix DMASHDL PM wake and disable ASPM.
> Patch 15 adds 320MHz bandwidth handling in RXV/TXS status reporting.
> Patch 16 fixes stale pointer comparisons in change_vif_links.
> Patch 17 assigns explicit band_idx for stable 5GHz/6GHz operation.
> Patch 18 adds the missing 320MHz case in bss_rlm_tlv() so firmware
> receives the correct bandwidth when associated to a 320MHz BSS.
>
> The WiFi firmware ships as part of the linux-firmware package
> (mediatek/mt6639/ directory - the firmware uses the mobile SoC codename).
>
> To: linux-wireless at vger.kernel.org
> To: Felix Fietkau <nbd at nbd.name>
> To: Lorenzo Bianconi <lorenzo at kernel.org>
> To: Ryder Lee <ryder.lee at mediatek.com>
> To: Shayne Chen <shayne.chen at mediatek.com>
> To: Sean Wang <sean.wang at mediatek.com>
> To: Matthias Brugger <matthias.bgg at gmail.com>
> To: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
> To: Deren Wu <deren.wu at mediatek.com>
> To: Ming Yen Hsieh <mingyen.hsieh at mediatek.com>
> Cc: linux-kernel at vger.kernel.org
> Cc: linux-arm-kernel at lists.infradead.org
> Cc: linux-mediatek at lists.infradead.org
> Tested-by: Marcin FM <marcin at lgic.pl>
> Tested-by: Cristian-Florin Radoi <radoi.chris at gmail.com>
> Tested-by: George Salukvadze <giosal90 at gmail.com>
> Tested-by: Evgeny Kapusta <3193631 at gmail.com>
> Tested-by: Samu Toljamo <samu.toljamo at gmail.com>
> Tested-by: Ariel Rosenfeld <ariel.rosenfeld.750 at gmail.com>
> Tested-by: Chapuis Dario <chapuisdario4 at gmail.com>
> Tested-by: Thibaut François <tibo at humeurlibre.fr>
> Tested-by: 张旭涵 <Loong.0x00 at gmail.com>
>
> Signed-off-by: Javier Tia <floss at jetm.me>
> ---
> Javier Tia (18):
> wifi: mt76: mt7925: add MT7927 chip ID helpers
> wifi: mt76: mt7925: add MT7927 firmware paths and PCI device IDs
> wifi: mt76: mt7925: add MT7927 CBTOP remap and chip initialization
> wifi: mt76: mt7925: add MT7927 DMA ring layout, IRQ map, and prefetch
> wifi: mt76: mt7925: skip CLR_OWN in mt7925e_mcu_init for MT7927
> wifi: mt76: mt7925: add MT7927 power management, DBDC, and CNM fixes
> wifi: mt76: mt7925: use irq_map fields instead of MT_INT_RX_DONE_ALL
> wifi: mt76: mt7925: guard mac_reset against MT7927 DMA destruction
> wifi: mt76: mt7925: populate EHT 320MHz MCS map in sta_rec
> wifi: mt76: mt7925: enable MT7927 runtime power management
> wifi: mt76: mt7925: fix uninitialized is_mt7927_hw in probe
> wifi: mt76: mt7925: advertise EHT 320MHz capabilities for 6GHz band
> wifi: mt76: mt7925: restore FW_DWLD_BYPASS_DMASHDL in MT7927 PM wake path
> wifi: mt76: mt7925: disable ASPM for MT7927 to fix throughput collapse
> wifi: mt76: mt7925: handle 320MHz bandwidth in RXV and TXS
> wifi: mt76: mt7925: fix stale pointer comparisons in change_vif_links
> wifi: mt76: mt7925: fix MT7927 band_idx for stable 5GHz/6GHz operation
> wifi: mt76: mt7925: add 320MHz bandwidth to bss_rlm_tlv
>
The patchset should be ordered so that common changes (e.g., enabling
320 MHz support) are added first,
while chip-specific changes are introduced later (e.g.,
MT7927-specific IRQ, DMA, and hardware initialization sequences).
Before introducing chip-specific logic, try to make the functions
generic enough so that other chips can reuse them in the same way.
Checks such as is_mt7927 and duplicated function should only be added
if they cannot be avoided
The more code we can reuse across chips, the fewer maintenance
concerns there will be, and we can focus more effort on the
chip-specific parts.
Please reorganize the patchset order as follows:
1. Common patches that can be reused by other chipsets (now or in the
future) should come first we don't need to mention mt7927
"wifi: mt76: mt7925: fix stale pointer comparisons in change_vif_links"
"wifi: mt76: mt7925: add 320MHz bandwidth to bss_rlm_tlv"
"wifi: mt76: mt7925: handle 320MHz bandwidth in RXV and TXS"
"wifi: mt76: mt7925: populate EHT 320MHz MCS map in sta_rec"
"wifi: mt76: mt7925: advertise EHT 320MHz capabilities for 6GHz band"
Here we can add a helper like is_320MHz_supported() and then advertise
EHT 320MHz capabilities, but do not need to mention is_mt7927() yet.
2. Then introduce MT7927-related changes
wifi: mt76: mt7925: add MT7927 chip ID helpers
Keep the MCU part of "wifi: mt76: mt7925: add MT7927 firmware paths
and PCI device IDs" but leave enabling the PCI device table for the
last patch.
3. IRQ handling
Combine
wifi: mt76: mt7925: use irq_map fields instead of MT_INT_RX_DONE_ALL
the IRQ part of wifi: mt76: mt7925: add MT7927 DMA ring layout, IRQ
map, and prefetch
into one patch about irq_map handling, trying to reuse mt7925_irq as
much as possible.
4. DMA handling
Combine
the DMA part of "wifi: mt76: mt7925: add MT7927 DMA ring layout, IRQ
map, and prefetch"
"wifi: mt76: mt7925: restore FW_DWLD_BYPASS_DMASHDL in MT7927 PM wake path"
into one patch about DMA handling, trying to reuse mt7925_dma_init as
much as possible.
5. Hardware initialization
Combine
"wifi: mt76: mt7925: add MT7927 CBTOP remap and chip initialization"
"wifi: mt76: mt7925: fix uninitialized is_mt7927_hw in probe"
"wifi: mt76: mt7925: skip CLR_OWN in mt7925e_mcu_init for MT7927"
"wifi: mt76: mt7925: add MT7927 power management, DBDC, and CNM fixes"
into one or more patches focused on pure hardware initialization in
logical order. If the register definition is used by MT7927, add
MT7927_ as the prefix.
6. Band index fix
"wifi: mt76: mt7925: fix MT7927 band_idx for stable 5GHz/6GHz operation"
This is worth introducing helper functions and using them instead of
implementing the logic inline.
7. Low power support
Combine
"wifi: mt76: mt7925: enable MT7927 runtime power management"
"wifi: mt76: mt7925: disable ASPM for MT7927 to fix throughput collapse"
into one or more patches related to enabling or disabling low power support.
8. Final patch
The last patch should enable the MT7927 PCI device table.
> drivers/net/wireless/mediatek/mt76/mt76_connac.h | 8 +-
> drivers/net/wireless/mediatek/mt76/mt7925/init.c | 12 +
> drivers/net/wireless/mediatek/mt76/mt7925/mac.c | 9 +
> drivers/net/wireless/mediatek/mt76/mt7925/main.c | 72 +++++-
> drivers/net/wireless/mediatek/mt76/mt7925/mcu.c | 59 ++++-
> drivers/net/wireless/mediatek/mt76/mt7925/mt7925.h | 12 +
> drivers/net/wireless/mediatek/mt76/mt7925/pci.c | 248 ++++++++++++++++++++-
> .../net/wireless/mediatek/mt76/mt7925/pci_mac.c | 13 +-
> .../net/wireless/mediatek/mt76/mt7925/pci_mcu.c | 19 +-
> drivers/net/wireless/mediatek/mt76/mt792x.h | 6 +
> drivers/net/wireless/mediatek/mt76/mt792x_dma.c | 26 ++-
> drivers/net/wireless/mediatek/mt76/mt792x_regs.h | 30 +++
> 12 files changed, 479 insertions(+), 35 deletions(-)
> ---
> base-commit: 97492c019da4b62df83255e968b23b81c0315530
> change-id: 20260305-mt7927-wifi-support-02f9738a3962
>
> Best regards,
> --
> Javier Tia <floss at jetm.me>
>
>
More information about the Linux-mediatek
mailing list