ValveSoftware / ValveSoftware/SteamOS
[BUG / INVESTIGATION] Hard shutdown / GPU lockup during high-framerate video playback (VCN AV01/AV1 1440p60 @ 2x) caused by SMU C-state voltage droop + working user-space fix
Nobody has claimed this yet.
- Dominant language
- No language data
- Stars
- 2.6k
- Forks
- 83
- Avg merge
- 4m
- Merged PRs (30d)
- 3
Description
Your system information
- Steam client version: Stable (latest)
- SteamOS version: 3.8.16 (Build: 20260716.1)
- Kernel version: 6.16.12-valve24.5-1-neptune-616
- Hardware: Steam Deck LCD (Van Gogh / Aerith APU, BIOS F7A0133)
- Display Server: Wayland (kwin_wayland / Gamescope)
- Occurs in: Desktop Mode and Game Mode
Please describe your issue in as much detail as possible:
When playing back high-bitrate and high-framerate video streams (specifically verified on YouTube 1440p60 streams encoded in AV1 / av01 at 2x playback speed, which demands a sustained 120 FPS decoding rate of 1440p AV1), the Steam Deck reliably suffers an immediate hard freeze or instant PMIC power-cut (hard shutdown) within 30–60 seconds of playback.
Steps for reproducing this issue:
- Open Google Chrome, Chromium, or Firefox in Desktop Mode with Hardware Acceleration enabled.
- Open any 1440p60 YouTube stream or video encoded in AV1 (
av01in YouTube "Stats for nerds"). - Set playback speed to 2x (forcing 120 FPS decoding rate at 1440p).
- Within 30 to 90 seconds, the display freezes completely or the device suddenly cuts power (hard shutdown).
Kernel Journal & Crash Behavior (Unclean Cutoff)
Because the failure is an instantaneous PMIC-level power cut (brownout) triggered before the kernel can schedule a panic handler, the system journal cuts off abruptly mid-frame. On the subsequent boot, systemd-journald consistently reports an unclean shutdown / corruption recovery:
# Excerpt from journalctl -k -b 0 following the crash:
systemd-journald[510]: File /var/log/journal/.../system.journal corrupted or uncleanly shut down, renaming and replacing.
systemd-journald[510]: File /var/log/journal/.../user-1000.journal corrupted or uncleanly shut down, renaming and replacing.
When the freeze mode occurs instead of a power cut, the AMDGPU ring lockup watchdog is triggered:
amdgpu 0000:04:00.0: [drm:amdgpu_job_timedout] *ERROR* ring vcn_dec_0 timeout
amdgpu 0000:04:00.0: amdgpu: GPU reset begin!
In-depth Telemetry & Root Cause Investigation
We captured real-time hardware telemetry from sysfs (/sys/class/drm/card0/device/ and hwmon) right up to the crash moment using a dedicated logging script (attached: blackbox-diagnostics.py).
- Aggressive SMU C-State Droop:
During video playback, the SteamOS power governor drops the GPU core clock down to minimum (sclk = 200 MHz) and allows the APU package/VRM to enter deep low-power sleep states (C-states / ASPM L1 link states). - Transient Voltage Sag / Brownout:
When massive 1440p 120 FPS AV1 bursts hit the Video Core Next (VCN) hardware block, the sudden current spike while the SoC is sitting in deep minimum voltage states causes an instantaneous voltage droop (brownout) or missed kernel sync fences. - Broken Hardware Reset on Van Gogh APU:
Because the Van Gogh APU cannot cleanly reset its GPU/DCN display blocks on the fly without corrupting shared memory controllers, the kernel reset watchdog (amdgpu.lockup_timeout) fails to recover, resulting in a Kernel Panic / PMIC emergency power cut.
The Proof & Working User-Space Fix
To prove this mechanism, we developed a lightweight keep-alive daemon that periodically polls SMU hardware sensors (/sys/class/drm/card0/device/vcn_busy_percent, pp_dpm_sclk, in0_input) at 500ms intervals during active video playback.
- Fix Repository:
👉 https://github.com/Dipalay/steamdeck-video-guard
(A simple background service users can run until Valve patches this in SteamOS). - Attached Diagnostics Script:
Attachedblackbox-diagnostics.pycontains the standalone test tool that logs the telemetry data.
Test Results with Keep-Alive Daemon Active:
- Under the exact same 1440p60 @ 2x AV1 (
av01) torture test, the crash was 100% eliminated. - The VCN decoder reached 100% busy saturation and scaled up to 705 MHz dynamically for over 60% of the duration.
- The system completed over 25 minutes of continuous 120 FPS 1440p AV1 playback with zero dropped frames, zero driver timeouts, and rock-solid temperatures (SoC ~56°C).
- Polling the SMU registers prevents the power regulator from entering deep C-state sleep during active video decoding.
Suggested Upstream / SteamOS Fix
- DPM Powerfloor during VCN activity: Ensure the
amdgpudriver or power governor maintains an active powerfloor / prevents deep package C-state sleep whenever/sys/class/drm/card0/device/vcn_busy_percent > 0or hardware decoding is engaged. - Wayland dma-buf fence retirement: In Gamescope and KWin Wayland, ensure frame-dropping logic properly retires dma-buf sync fences when the video frame rate (120 FPS) exceeds the display presentation rate (60 Hz).
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reproducing the 1440p60 AV1 stream at 2x in Chrome, Chromium, or Firefox, then read blackbox-diagnostics.py and inspect the listed sysfs and hwmon paths. Compare playback with and without the keep-alive daemon, including GPU timeouts and shutdowns. Done means the failure is characterized and an upstream amdgpu power-management or Wayland fence fix prevents it under the stated test.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- linux, python
- Domain
- computer-graphics, operating-systems, performance
- Issue type
- Bug
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 38/100