How I Failed to Fix My Framework 16's Linux Sleep/Wake Issues
For the individuals who didn't see my previous post, it's linked here for context.
When I finally got that sleep issue to fix, I was elated. I'd been working at the issue for hours, I was tired, and I wanted to share the fix with others. I thought I'd fixed the issue. I was wrong.
Or, well, mostly wrong.
The issue I was having (entering suspend and then failing to wake) was fixed, but the original delay in wake was, apparently, a different issue. Bizzarrely, for the first half an hour after the iommu=pt fix, the laptop woke exactly as expected. The next morning, though, it was right back to its original issue.
Now, to describe what that issue is. My laptop properly and consistently wakes after suspend now, and it wakes consistently, but there is a long delay after every single wake attempt. The display takes about 15 seconds for the display to enable.
Both the last delay, and the current delay appear across multiple Linux distros based on Arch, Debian-based, and RHEL. This includes all of the officially supported distros I've tested: Ubuntu 22.04 LTS, Ubuntu 25.04, Ubuntu 25.10, and Fedora 43, as well as between multiple desktop environments, using both X11 and Wayland.
Now without further ado, join me in my journey to attempt to fix this new issue.
System Info
Laptop: Framework 16 AMD Ryzen 7040 Series
CPU: AMD Ryzen 9 7940HS
GPU: RX 7700S (GPU Expansion Module)
RAM: 96GB DDR5-5600: Crucial 2×48 GB.
Storage: 2TB WD_BLACK SN770 (M.2 2280) and a 2TB WD_BLACK SN770M (M.2 2230). Both on firmware 731130WD.
BIOS: Multiple BIOS versions. Current is 03.07, dated 2025-08-27
Suspend mode: s2idle / Low-power S0 idle
Boot setup: rEFInd that boot into various distros. Each distro uses its own grub install.
The Troubleshooting Part
Was it the Kernel?
My first assumption was that there had been some kind of Kernel issue, so I checked suspend/resume logs using monotonic timestamps (the fancy new terms I get to learn are my favourite part of troubleshooting). The logs showed that once resume began, the kernel reached PM: suspend exit almost immediately. The resume path wasn't the cause of the delay.
Was it the Expansion Cards?
The logs showed some DRM hotplug/change events (that I suspected were probably normal), but I went ahead and tried sleep/wake while all of them were unplugged. This had no effect.
What About PCIe Issues?
The first new thing I noticed when checking the logs (which was an old thing I'd forgotten about in my initial troubleshooting over a year ago), was that log lines suggested instability and issues with PCIe-attached cards during sleep/wake. The dGPU and Wi-Fi cards both complained. While at that time I was using the Wi-Fi card that came with the Framework, it started having bluetooth connection issues, so I replaced it with a Qualcomm card.
So Is It Wi-Fi and Bluetooth?
While I was skeptical this was the cause of the issues, since I was using an entirely new Wi-Fi card, I didn't want to do anything but my due diligence, so I ran tests anyways. Besides, I found it a little unusual that they weren't immediately available on wake (it only began to try to connect when the display turned on).
The NetworkManager logs showed a consistent pattern:
NetworkManager wake is requested. Almost immediately after, wlp5s0 becomes available/disconnected. Roughly 15 seconds pass, and then NetworkManager attempts to connect to the saved connection (and succeeds).
I tested a forced reconnect hook to see whether manually bringing the connection up after resume would change the behavior.
The first hook ran too early. It attempted to activate the connection before NetworkManager had finished waking and re-managing the Wi-Fi interface. Running it with a short delay (1 or 2 seconds, I don't remember), I got the following result:
1wlp5s0 wifi unmanagedp2p-dev-wlp5s0 wifi-p2p unmanaged
So, nmcli was failing because the device was still strictly unmanaged.
That didn't end up doing what I'd initially intended, since the sleep hook ran before NetworkManager had completed its wake handling, but it gave me enough information to move on. After all, this showed that Wi-Fi and Bluetooth were already working when the display finally turned on.
The Wi-Fi card was not the culprit.
It Was the dGPU, Wasn't It?
At this point, I was nearly certain the issue was the Radeon dGPUmodule. Every single log that I looked through showed an identical error at a similar time:
amdgpu 0000:03:00.0: [drm] Cannot find any crtc or sizes
I was fairly certain this was the dGPU, but just in case I mapped the DRM devices and confirmed it. card1 / renderD128 = 03:00.0 = Radeon 7700S dGPUcard2 / renderD129 = c5:00.0 = Phoenix iGPU. I include this line exclusively because I didn't know that the iGPU was called 'Phoenix,' and I thought that was pretty cool.
I then checked which processes were holding the dGPU open. lsof showed that several processes had handles to the dGPU, including Xorgplasmashellwaywallen. I killed Waywallen, then checked the dGPU runtime power state again, and it read suspended.
Now at this point, I knew this wasn't going to fix it (since I installed Waywallen all of two days ago), but I went ahead and tried anyway. As expected, the same Cannot find any crtc or sizes message was in the logs. That didn't fix it. At this point, I grew a brain and realised I could just remove the dGPU, so I did. I shut down the computer, yoinked out the Expansion Module, turned the laptop back on, and attempted sleep. I was already preparing to bite the tragedy and just deal with the issue because of a faulty expansion module.
The dGPU did not fix the issue.
Postlogue
At this point, I'm just tired. I have no idea what the problem is. I couldn't figure out what it was whenI first tried fixing it, I couldn't figure it out today, even after hours of troubleshooting and attempted fixes in every area I could think of. At this point, I think I'm probably stuck. I could contact support, but they probably won't do anything because I didn't contact support within the warranty window (my fault, I realise I should have done that, instead of trying to suppress and ignore the issue).
Kernel resume itself appeared fast once wake began. Wi-Fi had a visible reconnect delay in NetworkManager logs, but Wi-Fi connected quickly once activation started. The 15-second delay there matching with the 15-second time from power button press to display activating meant that there also isn't some inexplicable delay from the power button to the kernel starting wake. The touchpad showed I2C HID resume errors, but reloading the touchpad-related modules around suspend did not improve the wake delay. Fresh installs of compatible OSes, DEs, and using X11 or Wayland all failed to make a difference. Removing expansion cards did not improve the issue. Software wasn't causing the sleep issues by keeping the dGPU awake, and it wasn't the dGPU anyways, since physically removing the Radeon 7700S dGPU didn't fix the wake delay.
I have no idea what else to point fingers at, and I'm kind of exhausted.
If people happen to have any advice, that would be greatly appreciated. Especially if you've had this problem and been able to fix or reduce it. It's not like it's a huge problem, but it can be really frustrating to close it for a brief interruption, and then wait 15 seconds before I can start using my computer again.