[SteamOS 3.9.5 / cecd] S3 suspend/resume race conditions: immediate re-suspend on wake, user.slice freeze before TV standby TX, and HDMI 2.1 link training failure against cold TV
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 25/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Attiva
- Stack tecnologico
- linux
- Ambito
- backend-api-design, operating-systems
Direzione di ricerca
Start by tracing cecd's PrepareForSleep handling and CEC transmit completion, then inspect the suspend and resume logs in the issue. The report also points to amdgpu_dm_handle_vrr_transition, connector hotplug handling, and DRM link retraining. Done means validating the proposed grace period, sleep delay inhibitor, and post-wake retraining across all three reported failures.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
System Information
- SteamOS Version: 3.9.5 (
20261023.100) - Kernel:
7.2.7-valve2-2-neptune-72-g31504582a073 - Dock: Official Steam Deck Docking Station (
4.0.0.0, DP-1) - Display: Samsung Q90A Neo QLED (
0.0.0.0, HDMI 4, 2560x1440 @ 120Hz VRR HDR) - Audio: Samsung HW-S800B eARC Soundbar (
3.0.0.0, HDMI 3)
Summary
Following up on #2968 (which fixed cecd deactivating when an eARC soundbar is present on the bus), we've hit three interrelated suspend/resume race conditions in cecd and amdgpu/Dock link training during S3 sleep/wake transitions:
1. False-Standby Bounce Loop on Resume (allow_standby = true)
When waking the Steam Deck from S3 sleep (e.g. via wireless controller while the TV is in standby), cecd thaws with user.slice and immediately processes either a buffered STANDBY (0x36) frame or a transitional standby state from the TV before the TV has finished waking up. Within ~1 second of PM: suspend exit, cecd requests systemd-logind to suspend the Steam Deck right back to sleep:
Oct 27 16:52:15 steamdeck kernel: PM: suspend exit
Oct 27 16:52:15 steamdeck cecd[1898]: INFO cecd::device: TV did not respond to wake immediately
Oct 27 16:52:15 steamdeck systemd-sleep[107509]: Successfully thawed unit 'user.slice'.
Oct 27 16:52:15 steamdeck systemd-logind[1138]: Operation 'suspend' finished.
Oct 27 16:52:16 steamdeck systemd-logind[1138]: suspend requested from client PID 1898 ('cecd') (unit [email protected])...
Oct 27 16:52:16 steamdeck systemd-logind[1138]: The system will suspend now!
Suggested Fix (Zero downside for working TVs):
Add a short post-resume grace window (e.g. 5–10 seconds after PrepareForSleep(false) / waking) during which incoming CEC STANDBY broadcasts from the TV are ignored by cecd.
2. user.slice Freeze Race Before STANDBY TX Completes (suspend_tv = true)
When putting the Steam Deck to sleep, cecd runs inside [email protected] (user.slice). Because CEC bus transmission + retries take ~200–600ms (especially if bus arbitration is busy), systemd-sleep frequently freezes user.slice or tears down the display topology before cecd's STANDBY transmission completes, leaving the TV turned on.
Suggested Fix (Zero downside for working TVs):
Hold the systemd-logind sleep delay inhibitor lock in cecd until the kernel CEC_TX_STATUS callback confirms the STANDBY message has finished transmitting (or timed out) before releasing the lock.
3. Cold-Boot HDMI 2.1 Link Training Failure ("Mode Not Supported" at 1440p@120Hz HDR)
When resuming from S3 sleep while connected to a TV in cold standby:
- At
T+0.0s, kerneldm_resumeimmediately attempts DisplayPort/HDMI 2.1 link training (2560x1440 @ 120Hz HDR) via the Official Dock before the TV's high-bandwidth HDMI 2.1 receiver (Samsung Input Signal Plus) has booted:Oct 27 16:52:15 steamdeck kernel: WARNING: drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:10439 at amdgpu_dm_handle_vrr_transition+0x1d5/0x1e0 [amdgpu] Oct 27 16:52:18 steamdeck kernel: amdgpu 0000:04:00.0: [drm] *ERROR* dpcd_set_link_settings:1123: core_link_write_dpcd (DP_DOWNSPREAD_CTRL) failed Oct 27 16:52:18 steamdeck kernel: amdgpu 0000:04:00.0: [drm] *ERROR* dpcd_set_link_settings:1128: core_link_write_dpcd (DP_LANE_COUNT_SET) failed cecdwakes the TV (IMAGE_VIEW_ON), and ~2.5s later the TV's HDMI 2.1 receiver finishes booting and switches to the Deck's input (ACTIVE_SOURCE).- However, because the TV keeps
+5V/HPD asserted during standby and the Dock's DP-to-HDMI bridge does not fire a new HPD interrupt once the TV's scaler finishes booting,amdgpunever re-trains the failed link—resulting in a permanent "Mode Not Supported" error on the TV until the cable is replugged or hotplug is forced.
Workaround / Suggested Fix:
If the TV was in standby (pwr-state != on) prior to wake, triggering a DRM connector hotplug/re-train (trigger_hotplug / KMS link re-verification) ~1.5s after the TV finishes waking and accepts ACTIVE_SOURCE cleanly re-trains the 2-lane HBR3 link and resolves the "Mode Not Supported" error 100% of the time without affecting TVs that were already powered on.
- Lingua principale
- Nessun dato sulla lingua
- Stelle
- 2.7k
- Fork
- 89
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di ValveSoftware/SteamOS
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
ValveSoftware/SteamOS#3037 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
ValveSoftware/SteamOS#2983 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
ValveSoftware/SteamOS#2927 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
ValveSoftware/SteamOS#2875 · 1 commento ·
-
steam-short-session-tracker: incorrect registry backup path resets settings during automatic repairAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 80/100
ValveSoftware/SteamOS#2829 ·
Tutte le issue di ValveSoftware/SteamOS
Issue simili
-
Runner API: GET /api/jobs/<id> returns branch: null; the branch only appears under input.branchAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
radiancelux/prgenie#204 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
WalletConnect/walletconnect-monorepo#7392 · 1 commento ·
-
Calendar sync: recurring events land a day late when the local start falls on a different UTC dateAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
I maintainer di solito rispondono entro 1 giorno
-
area: app type: bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 77/100
qutip/qutip#3088 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni