Skip to content

[SteamOS 3.8 Beta] AMD EPP resets to "performance" on CPU1-7 after waking up from sleep #2383

Description

@khmm12

Your system information

  • Steam client version: 1776387948
  • SteamOS version: 3.8.2 Beta
  • Kernel version: 6.16.12-valve14-1-neptune-616-g4f70fa45dc69
  • Opted into Steam client beta?: Yes
  • Opted into SteamOS beta?: Yes
  • Have you checked for updates in Settings > System?: Yes

Please describe your issue in as much detail as possible:

Expected Behavior:

After waking up from sleep (suspend), all CPU cores should preserve their energy_performance_preference (EPP) setting. For the Steam Deck using the amd-pstate-epp driver in "active" mode, the default should be balance_performance across all cores.

Actual Behavior:

Upon resume, only CPU0 retains the balance_performance setting. All other cores (CPU1-CPU7) are automatically reset to performance. This leads to higher power consumption and heat than expected after a sleep cycle.

I have verified this behavior using a custom debug script in /usr/lib/systemd/system-sleep/. The logs clearly show the state transition:

  • Pre-suspend: All 8 cores are at balance_performance.
  • Post-resume: CPU0 is at balance_performance, but CPU1 through CPU7 are at performance.

This seems to be a regression or a known issue in recent Linux kernels (6.16+).

Steps for reproducing this issue:

  1. Boot Steam Deck (SteamOS 3.8 Beta).
  2. Check EPP status: cat /sys/devices/system/cpu/cpu*/cpufreq/energy_performance_preference (All should be balance_performance).
  3. Put the device to sleep (Suspend).
  4. Wake the device.
  5. Check EPP status again. You will observe that only cpu0 is correct, while cpu1-7 have switched to performance.
debug script
sudo tee /usr/lib/systemd/system-sleep/00-log-epp >/dev/null <<'EOF'
#!/bin/sh
LOG=/tmp/epp-resume.log

dump_state() {
  echo "=== $1 @ $(date '+%F %T.%N %Z') ===" >> "$LOG"
  echo "--- scaling_driver ---" >> "$LOG"
  cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver 2>/dev/null >> "$LOG"
  echo "--- amd_pstate status ---" >> "$LOG"
  cat /sys/devices/system/cpu/amd_pstate/status 2>/dev/null >> "$LOG"
  echo "--- governors ---" >> "$LOG"
  for g in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do
    printf "%s = %s\n" "$g" "$(cat "$g" 2>/dev/null)" >> "$LOG"
  done
  echo "--- epp ---" >> "$LOG"
  for f in /sys/devices/system/cpu/cpu*/cpufreq/energy_performance_preference; do
    printf "%s = %s\n" "$f" "$(cat "$f" 2>/dev/null)" >> "$LOG"
  done
  echo >> "$LOG"
}

case "$1" in
  pre)  dump_state "PRE-SUSPEND" ;;
  post) dump_state "POST-RESUME" ;;
esac
EOF

sudo chmod +x /usr/lib/systemd/system-sleep/00-log-epp
debug logs
cat /tmp/epp-resume.log

=== PRE-SUSPEND @ 2026-04-19 16:10:49.650911703 ===
--- scaling_driver ---
amd-pstate-epp
--- amd_pstate status ---
active
--- governors ---
/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor = powersave
/sys/devices/system/cpu/cpu1/cpufreq/scaling_governor = powersave
/sys/devices/system/cpu/cpu2/cpufreq/scaling_governor = powersave
/sys/devices/system/cpu/cpu3/cpufreq/scaling_governor = powersave
/sys/devices/system/cpu/cpu4/cpufreq/scaling_governor = powersave
/sys/devices/system/cpu/cpu5/cpufreq/scaling_governor = powersave
/sys/devices/system/cpu/cpu6/cpufreq/scaling_governor = powersave
/sys/devices/system/cpu/cpu7/cpufreq/scaling_governor = powersave
--- epp ---
/sys/devices/system/cpu/cpu0/cpufreq/energy_performance_preference = balance_performance
/sys/devices/system/cpu/cpu1/cpufreq/energy_performance_preference = balance_performance
/sys/devices/system/cpu/cpu2/cpufreq/energy_performance_preference = balance_performance
/sys/devices/system/cpu/cpu3/cpufreq/energy_performance_preference = balance_performance
/sys/devices/system/cpu/cpu4/cpufreq/energy_performance_preference = balance_performance
/sys/devices/system/cpu/cpu5/cpufreq/energy_performance_preference = balance_performance
/sys/devices/system/cpu/cpu6/cpufreq/energy_performance_preference = balance_performance
/sys/devices/system/cpu/cpu7/cpufreq/energy_performance_preference = balance_performance

=== POST-RESUME @ 2026-04-19 16:10:56.639612150 ===
--- scaling_driver ---
amd-pstate-epp
--- amd_pstate status ---
active
--- governors ---
/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor = powersave
/sys/devices/system/cpu/cpu1/cpufreq/scaling_governor = powersave
/sys/devices/system/cpu/cpu2/cpufreq/scaling_governor = powersave
/sys/devices/system/cpu/cpu3/cpufreq/scaling_governor = powersave
/sys/devices/system/cpu/cpu4/cpufreq/scaling_governor = powersave
/sys/devices/system/cpu/cpu5/cpufreq/scaling_governor = powersave
/sys/devices/system/cpu/cpu6/cpufreq/scaling_governor = powersave
/sys/devices/system/cpu/cpu7/cpufreq/scaling_governor = powersave
--- epp ---
/sys/devices/system/cpu/cpu0/cpufreq/energy_performance_preference = balance_performance
/sys/devices/system/cpu/cpu1/cpufreq/energy_performance_preference = performance
/sys/devices/system/cpu/cpu2/cpufreq/energy_performance_preference = performance
/sys/devices/system/cpu/cpu3/cpufreq/energy_performance_preference = performance
/sys/devices/system/cpu/cpu4/cpufreq/energy_performance_preference = performance
/sys/devices/system/cpu/cpu5/cpufreq/energy_performance_preference = performance
/sys/devices/system/cpu/cpu6/cpufreq/energy_performance_preference = performance
/sys/devices/system/cpu/cpu7/cpufreq/energy_performance_preference = performance

Additional context

This issue seems to be a known regression in the Linux kernel affecting AMD EPP persistence. Similar behavior has been reported by other users here: Reddit.

It appears that this issue is addressed in the upstream kernel by the following commit: cpufreq/amd-pstate: Fix EPP being reset on resume.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions