解决天选三AX210在fedora 44/Ubuntu 26.04上睡眠后恢复失败的问题
起因
在Ubuntu26.04与Fedora 44上,开当PC进入睡眠后重新唤醒,开启WiFi的情况下会直接卡死系统;关闭WiFi的情况下不会卡死系统,但是WiFi无法进行正常工作。
虽然说将睡眠模式切换至deep模式可以解决,但是不知道是主板问题还是其他问题,唤醒10s左右PC会直接掉电重启
之后就和ChatGPT一起排查问题
排查
关闭WiFi的情况下睡眠后唤醒,nmcli radio wifi on会出现超时的情况
即使采用modprobe -r iwlmvm iwlwifi等进行重新加载驱动,NetworkManager也无法管理WiFi
通过lspci可以看到AX210仍存在于PCIe总线上,但是缺少Kernel driver in use: iwlwifi
只有
1 | 0000:2e:00.0 Intel AX210 |
也就是说PCIe还能发现这块硬件,但是iwlwifi无法进行绑定
在内核日志中可以看到:
1 | pcieport 0000:00:1c.0: retraining failed |
正常情况下驱动应该能读取AX210的硬件寄存器,但恢复后得到0xFFFFFFFF,意味着PCIe配置/寄存器实际上已经无法正常访问
整个流程如下:
1 | AX210 正常工作 |
然后这个恢复异常会把整个suspend/resume流程拖死,导致系统卡死
解决方案
ChatGPT给出的方案下面方案,实测有效解决
禁止这条PCIe链路进入D3cold/runtime suspend
重启PC进入正常未睡眠过的环境
确认WiFi状态:
1 | lspci -Dnnk -s 0000:2e:00.0 |
应该会有以下输出:
1 | Kernel driver in use: iwlwifi |
接着查看d3cold设置
1 | cat /sys/bus/pci/devices/0000:2e:00.0/d3cold_allowed |
如果输出1的话则
1 | echo 0 | sudo tee /sys/bus/pci/devices/0000:2e:00.0/d3cold_allowed |
同时禁用runtime PM
1 | echo on | sudo tee /sys/bus/pci/devices/0000:2e:00.0/power/control |
确认设置状态:
1 | cat /sys/bus/pci/devices/0000:2e:00.0/d3cold_allowed |
应该会输出0和on
此次更改为临时修改,重启后会恢复
然后检查00:1c.0是否是AX210的上级Root Port
执行
1 | lspci -t |
如果是
1 | -[0000:00]-+-1c.0-[2e]----00.0 |
那么也临时调整
1 | echo 0 | sudo tee /sys/bus/pci/devices/0000:00:1c.0/d3cold_allowed |
接着进行测试
1 | nmcli radio wifi off |
唤醒以后查看设备状态
1 | lspci -Dnnk -s 0000:2e:00.0 |
应该会看到Kernel driver in use: iwlwifi
开启WiFi测试
1 | nmcli radio wifi on |
这时候应该会看到无线网卡设备
最后我们将设置持久化
1 | sudo nano /etc/systemd/system/ax210-pcie-power-workaround.service |
写入
1 | [Unit] |
执行
1 | sudo systemctl daemon-reload |
可以手动运行一次service
1 | sudo systemctl start ax210-pcie-power-workaround.service |
进行检查
1 | cat /sys/bus/pci/devices/0000:2e:00.0/d3cold_allowed |
应该是0,on,0,on
重启一次再检查一次,如果仍然是这个输出则持久化成功
Use this card to join MyBlog and participate in a pleasant discussion together .
Welcome to GoodBoyboy 's Blog,wish you a nice day .
