Fedora 39: Wifi issues with mt7921e on Lenovo Legion 5

Hi everyone, I have some issues with my wifi and maybe you have some idea how I could solve it.
I have Lenovo Legion 5 with MEDIATEK Corp. MT7922 802.11ax PCI Express Wireless Network Adapter. It usually works ok, but occasionally, it disconnects me from the internet. It happened on f38 when I got the laptop some months ago, and now on f39. I believe it happens when downloading at full speed after some time, but now it is occurring more often with the latest kernel update even with normal usage.

6.6.12-200.fc39.x86_64

In gnome, it shows the wifi is still connected, but with no internet (question mark on the icon) and it is not showing / can’t scan any wifi networks.

Here is lspci info:

$ sudo lspci -vv -s 02:00.0

02:00.0 Network controller: MEDIATEK Corp. MT7922 802.11ax PCI Express Wireless Network Adapter
	Subsystem: Lenovo Device e0c6
	Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0, Cache Line Size: 64 bytes
	Interrupt: pin A routed to IRQ 96
	IOMMU group: 14
	Region 0: Memory at 7c38000000 (64-bit, prefetchable) [size=1M]
	Region 2: Memory at b9b00000 (64-bit, non-prefetchable) [size=32K]
	Capabilities: [80] Express (v2) Endpoint, MSI 00
		DevCap:	MaxPayload 128 bytes, PhantFunc 0, Latency L0s unlimited, L1 unlimited
			ExtTag+ AttnBtn- AttnInd- PwrInd- RBE+ FLReset+ SlotPowerLimit 75W
		DevCtl:	CorrErr- NonFatalErr- FatalErr- UnsupReq-
			RlxdOrd- ExtTag+ PhantFunc- AuxPwr- NoSnoop+ FLReset-
			MaxPayload 128 bytes, MaxReadReq 512 bytes
		DevSta:	CorrErr- NonFatalErr- FatalErr- UnsupReq- AuxPwr- TransPend-
		LnkCap:	Port #1, Speed 5GT/s, Width x1, ASPM L0s L1, Exit Latency L0s <2us, L1 <8us
			ClockPM- Surprise- LLActRep- BwNot- ASPMOptComp+
		LnkCtl:	ASPM L1 Enabled; RCB 64 bytes, Disabled- CommClk+
			ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
		LnkSta:	Speed 5GT/s, Width x1
			TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
		DevCap2: Completion Timeout: Range ABCD, TimeoutDis+ NROPrPrP- LTR+
			 10BitTagComp- 10BitTagReq- OBFF Not Supported, ExtFmt+ EETLPPrefix-
			 EmergencyPowerReduction Not Supported, EmergencyPowerReductionInit-
			 FRS- TPHComp- ExtTPHComp-
			 AtomicOpsCap: 32bit- 64bit- 128bitCAS-
		DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis- LTR+ 10BitTagReq- OBFF Disabled,
			 AtomicOpsCtl: ReqEn-
		LnkCap2: Supported Link Speeds: 2.5-5GT/s, Crosslink- Retimer- 2Retimers- DRS-
		LnkCtl2: Target Link Speed: 5GT/s, EnterCompliance- SpeedDis-
			 Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
			 Compliance Preset/De-emphasis: -6dB de-emphasis, 0dB preshoot
		LnkSta2: Current De-emphasis Level: -3.5dB, EqualizationComplete- EqualizationPhase1-
			 EqualizationPhase2- EqualizationPhase3- LinkEqualizationRequest-
			 Retimer- 2Retimers- CrosslinkRes: unsupported
	Capabilities: [e0] MSI: Enable+ Count=1/32 Maskable+ 64bit+
		Address: 00000000fee00000  Data: 0000
		Masking: fffffffe  Pending: 00000000
	Capabilities: [f8] Power Management version 3
		Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0+,D1-,D2-,D3hot+,D3cold+)
		Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
	Capabilities: [100 v1] Vendor Specific Information: ID=1556 Rev=1 Len=008 <?>
	Capabilities: [108 v1] Latency Tolerance Reporting
		Max snoop latency: 1048576ns
		Max no snoop latency: 1048576ns
	Capabilities: [110 v1] L1 PM Substates
		L1SubCap: PCI-PM_L1.2+ PCI-PM_L1.1+ ASPM_L1.2+ ASPM_L1.1+ L1_PM_Substates+
			  PortCommonModeRestoreTime=3us PortTPowerOnTime=52us
		L1SubCtl1: PCI-PM_L1.2+ PCI-PM_L1.1+ ASPM_L1.2+ ASPM_L1.1+
			   T_CommonMode=0us LTR1.2_Threshold=166912ns
		L1SubCtl2: T_PwrOn=150us
	Capabilities: [200 v2] Advanced Error Reporting
		UESta:	DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
		UEMsk:	DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
		UESvrt:	DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
		CESta:	RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr+
		CEMsk:	RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr+
		AERCap:	First Error Pointer: 00, ECRCGenCap- ECRCGenEn- ECRCChkCap- ECRCChkEn-
			MultHdrRecCap- MultHdrRecEn- TLPPfxPres- HdrLogCap-
		HeaderLog: 00000000 00000000 00000000 00000000
	Kernel driver in use: mt7921e
	Kernel modules: mt7921e

$ sudo dmesg | grep mt7921e

[    8.623781] mt7921e 0000:02:00.0: enabling device (0000 -> 0002)
[    8.637545] mt7921e 0000:02:00.0: ASIC revision: 79220010
[    8.713790] mt7921e 0000:02:00.0: HW/SW Version: 0x8a108a10, Build Time: 20231120183400a
[    9.094245] mt7921e 0000:02:00.0: WM Firmware Version: ____000000, Build Time: 20231120183441
[   10.190710] mt7921e 0000:02:00.0 wlp2s0: renamed from wlan0
GENERAL.DEVICE:                         wlp2s0
GENERAL.TYPE:                           wifi
GENERAL.HWADDR:                         F0:A6:54:2A:B2:D1
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     Svarog5G
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/2
IP4.ADDRESS[1]:                         192.168.100.90/24
IP4.GATEWAY:                            192.168.100.1
IP4.ROUTE[1]:                           dst = 0.0.0.0/0, nh = 192.168.100.1, mt = 600
IP4.ROUTE[2]:                           dst = 192.168.100.0/24, nh = 0.0.0.0, mt = 600
IP4.DNS[1]:                             192.168.100.1
IP6.ADDRESS[1]:                         2a06:63c5:602:4900:5fee:3b35:892:a581/64
IP6.ADDRESS[2]:                         fe80::b3a:1200:2b18:a9ae/64
IP6.GATEWAY:                            fe80::1
IP6.ROUTE[1]:                           dst = 2a06:63c5:602:4900::/64, nh = ::, mt = 600
IP6.ROUTE[2]:                           dst = fe80::/64, nh = ::, mt = 1024
IP6.ROUTE[3]:                           dst = ::/0, nh = fe80::1, mt = 600
IP6.DNS[1]:                             fe80::1
GENERAL.DEVICE:                         p2p-dev-wlp2s0
GENERAL.TYPE:                           wifi-p2p
GENERAL.HWADDR:                         (unknown)
GENERAL.MTU:                            0
GENERAL.STATE:                          30 (disconnected)
GENERAL.CONNECTION:                     --
GENERAL.CON-PATH:                       --
$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: eno1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether 9c:2d:cd:ae:0a:82 brd ff:ff:ff:ff:ff:ff
    altname enp3s0
3: wlp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether f0:a6:54:2a:b2:d1 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.90/24 brd 192.168.100.255 scope global dynamic noprefixroute wlp2s0
       valid_lft 42162sec preferred_lft 42162sec
    inet6 2a06:63c5:602:4900:5fee:3b35:892:a581/64 scope global dynamic noprefixroute 
       valid_lft 1209361sec preferred_lft 950161sec
    inet6 fe80::b3a:1200:2b18:a9ae/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

I saw when it happens, the link is DOWN or sometimes it says group dormant instead of default.
Please let me know if you have some way for me to fix this, or any idea why is it happening. Thank you

I see that you have IPv6 enabled on that device.

Have you tried disabling IPv6 and using only IPv4 to see if there is any difference?

Usually the ? icon for the wifi indicates it is not able to communicate beyond the AP, and problems with routing may cause that if the router or ISP has problems with IPv6.

@computersavvy Thanks, I’ll try that now and report back after a few days, since it was happening irregularly.
But would that cause the adapter not to see any wifi network? When I get a question mark (no net), no network is shown on the wifi scan (except the one I was using), and there are many from the neighbors. I also restarted NetworkManager and wpa_supplicant services, but no luck. There are no wifi networks on the scan. Logging out also doesn’t help, only reboot.
I’ve disabled ip6 and if it happens again, I’ll post NetworkManager service logs here.
Thanks again