Well, there aren't so many things that can make suspend/resume wrong. In doubt, you can try without systemd, i.e. just by echo mem > /sys/power/state This way, only kernel does its job without any extra userland hooks. Hm, this reminds me of another good test: namely, try pm_test. First, try like echo devices > /sys/power/pm_test echo mem > /sys/power/state This simulates the S3, thus this must return quickly. If this takes time, something wrong in device suspend/resume. Similarly, test like echo platform > /sys/power/pm_test echo mem > /sys/power/state and echo processors > /sys/power/pm_test echo mem > /sys/power/state and echo core > /sys/power/pm_test echo mem > /sys/power/state If all these work (return quickly), the problem is really in the lower level. You can find some details in Documentation/power/basic-pm-debugging.txt in Linux kernel source tree.