AMD Unable to wake from suspend when eGPU plugged in

I have an AMD Ryzen 5 7640U Framework 13, which I’m running Debian 12 with Gnome on. My experience with it has been great, but to get a bit of extra performance in games and other tasks while docked, I recently got a TH3P4G3 eGPU dock to pair with my old PCs GTX 1060.

I’ve been surprised with how well the setup has worked in testing so far - after I installed the Nvidia drivers (I’m apparently on version 535.183.01), and egpu-switcher, everything seems to just work.

The one big problem I’ve found is - if I suspend the device with it docked, and try and wake it up, both displays (laptop and external) stay dark. Unplugging the dock doesn’t change anything. Immediately after the power button light goes out, it comes back on and the PSU in the dock kicks back on, but nothing responds to input.

I verified my bios version is up to date, and I’ve tried the following other fixes

I’m probably going to try installing Fedora next and see if that fixes the issue, but figured I’d ask beforehand to see if there was anything I might be missing.

EDIT: Should also mention my system is running X11.

Debian? Update your GPU F/W to the latest upstream.

Do you mean this? NVIDIA Graphics Firmware Update Tool for DisplayPort 1.3 and 1.4 Displays The only other firmware update tool I could find was specific to 40 series cards.

No I mean the firmware that goes in /lib/firmware/amdgpu. Debian ships an outdated snapshot and refuses to update it in their stable release. If you haven’t updated it, then you should. It fixes stability issues.

Unfortunately no dice, same suspend issue remains.

AMD doesn’t have a sleep mode implementation like Intel’s, so I’m not sure how to tinker with that. But other than that, you could also try ensuring all three nvidia- system services (suspend, hibernate, resume) are enabled, and then adding the kernel parameters explained here. Hope that helps.

Edit: on Fedora, also use nvidia.NVreg_TemporaryFilePath=/var/tmp as a kernel parameter

You did remember to rebuild your initramfs after updating GPU F/W right?

Can you try to SSH into the system after resume to see if it’s alive? If it is; then use scripts/amd_s2idle.py · master · drm / amd · GitLab to trigger your suspend instead and share the report it generates to a gist or pastebin.

Yep, actually messed it up the first time but I reran it just now and same result.

I SSH’d into the laptop when it’s awake to verify, that worked fine, but I wasn’t able to connect after suspending the laptop. I’ve had it crash in a way that resembles the post-suspension behavior before, so I assume something is going wrong under the hood beyond the display not coming back on.

Unfortunately looks like it had no effect, but thanks anyways!

Do things work if you unplug the eGPU before suspend?

Unplugging the eGPU just causes the whole system to crash - it goes to an empty terminal.

I did some more investigating and realized the system isn’t just refusing to wake up. After suspending, that same empty terminal pops up for a few seconds before the display shuts off. The power button light comes back on, and a few seconds later the screen turns on with an empty terminal showing just a single unblinking _ in the top left. ‘Magic SysReq’ doesn’t work here, but it does in the terminal after unplugging the eGPU.

I also checked the system logs and found that after the suspend event, nothing happens. The next line after all the suspend logs is the next boot when I restarted the device, no mention of a shutdown or any obvious crash info.

Edit: Also briefly tried a Fedora installation and was able to suspend fine, though I had some lag issues for some reason? Didn’t explore it too much further so I’ll probably go back to that if this can’t be resolved.

If I was to guess; it’s a bug in the older kernel in Debian that is fixed in newer kernel in Fedora. If I were you I’d just stick to Fedora :slight_smile:

Yeah, unfortunately this seems outside my ability to solve. Still, thanks for all the help!

I ended up going back to Debian and doing some more experimenting, and found suspend works fine on the testing branch. There’s still some weirdness after unsuspending - the screen is kinda jittery - but I’m gonna keep poking at it.