Skip to content

Fixing instant wake from suspend on Fedora with a Gigabyte B550 and RX 9070

Posted on:August 12, 2026

For weeks my desktop could not suspend. I’d hit the suspend button, the machine would go quiet for about a second, then the fans would spin back up. Screen black, no signal. Keyboard dead, mouse dead. Even the power button did nothing, the reset button did nothing. The only way out was flipping the switch on the PSU and starting over.

The hardware

It’s not the distro

My first assumption was that Fedora was doing something odd, so I went distro shopping. I installed the latest Ubuntu 26, same instant wake and lockup. I tried CachyOS, same thing.

If you search around for this you’ll find a lot of people with AMD GPUs hitting the same wall, which is a decent sign it’s a kernel driver problem and not something you misconfigured. The one setup that suspended and woke up reliably was Debian with the XanMod kernel, which is what I had been running on this machine when I was messing with local LLMs. It worked, but I wanted to be back on Fedora.

There turned out to be two problems stacked on top of each other: something waking the machine up, and the GPU dying on the way down.

Problem one: something keeps waking it up

The board exposes PCIe root ports as ACPI wake sources. On this B550, GPP0 — the port the graphics card sits behind — is armed for wake by default, and it fires immediately after the suspend transition starts. You can see the current state here:

cat /proc/acpi/wakeup

Anything listed as *enabled is allowed to wake the machine. You disable one by writing its name back to the same file, which works as a toggle — write it once and it flips to *disabled, write it again and it’s back on.

Doing that by hand after every boot gets old, so I put it in a small service — and because the write is a toggle, it checks the current state first instead of blindly flipping it:

sudo vim /etc/systemd/system/disable-b550-gpp-wake.service
[Unit]
Description=Fix Gigabyte B550 Instant Wake Loop
After=multi-user.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/sh -c "if grep -q 'GPP0.*enabled' /proc/acpi/wakeup; then echo GPP0 > /proc/acpi/wakeup; fi"

[Install]
WantedBy=multi-user.target

Enable it:

sudo systemctl enable --now disable-b550-gpp-wake.service
grep GPP0 /proc/acpi/wakeup

Problem two: the GPU never comes back

With GPP0 disabled the machine stayed asleep, but waking it still gave me a black screen and a locked-up system. That part is the display side of amdgpu, and it needed kernel parameters:

sudo grubby --update-kernel=ALL --args="mem_sleep_default=deep amdgpu.dcdebugmask=0x110 amdgpu.sg_display=0"

Reboot, and check the parameters actually landed:

cat /proc/cmdline
cat /sys/power/mem_sleep

/sys/power/mem_sleep should show deep as the selected mode, in brackets.

It works

Suspend goes down, stays down, and wakes up with a working display. First time on this machine since I built it. Awesome.