Framework 13 Ryzen AI 350 won't suspend in Linux due to mt7925e

When I try to suspend my Framework 13 Ryzen AI 350 in Linux, running kernel 6.12, it is unsuccessful suspending. In the messages I’m getting:

mt7925e 0000:c0:00.0: Message 00020007 (seq 8) timeout
mt7925e 0000:c0:00.0: PM: pci_pm_suspend(): mt7925_pci_suspend [mt7925e] returns -110
mt7925e 0000:c0:00.0: PM: dpm_run_callback(): pci_pm_suspend returns -110
mt7925e 0000:c0:00.0: PM: failed to suspend async: error -110
PM: Some devices failed to suspend, or early wake event detected

Looks like the wifi is causing this. Does anyone have a good fix for the issue? Thanks.

Hi

6.12.xy ? please specify more precisely the kernel version, the minor is very important, mediatek drivers got a lot of fixes in the last year.

Of course my first tip would be to update to a new kernel… 6.15.3 is the newest. 6.12.34 is the newest from the 6.12 LTS series. It is not guaranteed that all fixes went into the LTS…

A lot of mt7925e fixes are in 6.15.0 and linux-firmware 20250613. You’ll likely need to update.

Running Debian Trixie so this was on kernel 6.12.31. I’m running ZFS also and that didn’t support kernel 6.15 until ZFS 2.3.3 was released yesterday. I’m going to hold off building all that from source for now and wait until Debian has packages and then use them to upgrade to 6.15. For the moment I created systemd files to perform a workaround to fix the issue.

On sleep:

[Unit]
Description=Unload mt7925e wifi driver before sleep
Before=hibernate.target
Before=suspend.target

[Service]
ExecStart=/usr/sbin/modprobe -r mt7925e

[Install]
WantedBy=hibernate.target
WantedBy=suspend.target

On resume:

[Unit]
Description=Reload mt7925e wifi driver after resume from sleep
After=hibernate.target
After=suspend.target

[Service]
ExecStartPre=/usr/sbin/modprobe -r mt7925e
ExecStart=/usr/sbin/modprobe mt7925e

[Install]
WantedBy=hibernate.target
WantedBy=suspend.target