SteamOS 3.9 (Navi 31/33 HDMI Audio) RIRB Desync Causes Cyclic Hardware DMA Loop & Deafening AC3 Whine

Aperta
#3,046 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

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
c

Direzione di ricerca

Start by reading the reported RIRB diagnostics and the suggested entry points sound/pci/hda/hda_intel.c and hda_controller.c. The report proposes several possible recovery paths but does not identify a confirmed root cause or a specific change to make. Done would require establishing the failure and validating a safe recovery for the affected HDMI audio hardware.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Hello! I've been hunting down a bug over the past few weeks and finally nabbed it. Occasionally, and randomly it seems, my TV will suddenly emit a deafening buzzing sound. It seems to be an issue with the AMD Navi controller in the Steam Machine.

The rest of this markdown was generated by my local troubleshooting agent.


  • Category: Audio / AMDGPU / Kernel Driver (snd_hda_intel, amdgpu)
  • System: Valve Steam Machine / Neptune Station (DenCube)

1. System Environment & Hardware Specifications

Component Specification
OS SteamOS 3.9.5 (Build ID: 20261023.100, Codename: holo)
Kernel 7.2.7-valve2-2-neptune-72-g31504582a073 #1 SMP PREEMPT_DYNAMIC (x86_64)
GPU AMD Navi 33 [Radeon Graphics] ([1002:7481], rev c7)
GPU Subsystem Valve Software Device ([1e44:1717])
Audio Controller AMD Navi 31 HDMI/DP Audio ([1002:ab30], PCI 0000:03:00.1)
Audio Driver snd_hda_intel (bound to amdgpu via amdgpu_dm_audio_component_bind_ops)
Sound Server PipeWire 1.6.8 / WirePlumber 1.6.8
Default Audio Profile Digital Surround 5.1 (HDMI/AC3) (alsa_output.pci-0000_03_00.1.hdmi-ac3-surround via ALSA a52 plugin)
Connected Display Vizio M65-E0 4K HDR TV via HDMI (HDMI-A-1)

2. Problem Description

Randomly during idle or media playback (often days or hours apart), the audio output over HDMI suddenly degenerates into a loud, high-pitched digital whine/buzzing screech.

Key Characteristics:
  1. Immune to Software Controls: Muting audio, reducing system volume to 0%, or closing all media applications does not stop or alter the buzzing sound.
  2. ALSA Streams Already Closed: Inspecting /proc/asound/card0/pcm*/sub*/status confirms all PCM streams are in state closed. Userspace is not actively feeding any audio frames.
  3. Hardware Loop: The AMD HDMI audio controller continues transmitting a cyclic loop of corrupted DMA buffer frames at the hardware/silicon level.
  4. Resolution via Link Renegotiation: The noise stops immediately if:
    • The connected TV is powered off and on, or
    • The HDMI input on the TV is switched back and forth, or
    • A low-level PCI unbind/bind is issued against the HDMI audio controller (echo 0000:03:00.1 > /sys/bus/pci/drivers/snd_hda_intel/unbind && echo 0000:03:00.1 > bind).

3. Kernel Diagnostic Logs & Root Cause Analysis

A. The Incident in Kernel Logs (dmesg / journalctl -k)

At the exact onset of the whine (e.g., 08:43:10 and 11:41:25), the kernel ring buffer logs a cascade of RIRB (Response Inbound Ring Buffer) response failures from snd_hda_intel:

Nov 05 11:41:25 DenCube kernel: snd_hdac_bus_update_rirb: 71 callbacks suppressed
Nov 05 11:41:25 DenCube kernel: snd_hda_intel 0000:03:00.1: spurious response 0x0:0x0, last cmd=0x220000
Nov 05 11:41:25 DenCube kernel: snd_hda_intel 0000:03:00.1: spurious response 0x0:0x0, last cmd=0x220000
Nov 05 11:41:25 DenCube kernel: snd_hda_intel 0000:03:00.1: spurious response 0x0:0x0, last cmd=0x1f0500
Nov 05 11:41:25 DenCube kernel: snd_hda_intel 0000:03:00.1: spurious response 0x233:0x0, last cmd=0x1f0500
B. Hardware DMA Loop & AC3 Bitstream Desynchronization
  1. AC-3 Bitstream Encapsulation: SteamOS leverages the ALSA a52 plugin profile (hdmi-ac3-surround) to stream 5.1 surround over 2-channel HDMI PCM carriers by wrapping compressed Dolby Digital AC-3 bitstreams into IEC61937 frames.
  2. Interrupt Stall & DMA Ring Free-Wheel: When the HD-Audio RIRB bus controller desynchronizes or drops interrupt callbacks, the hardware DMA ring buffer stalls or loses sync with the codec command pipeline. The hardware FIFO in the Navi 31/33 audio controller freezes in a cyclic loop, repeating the existing buffer memory.
  3. TV Fallback to Raw PCM Decoding: Because the stream preamble / HDMI Audio InfoFrame is corrupted or missing, the receiver/TV DSP fails to recognize the payload as an AC-3 bitstream and treats the incoming compressed packets as uncompressed Linear PCM. Playing compressed Dolby Digital packet data as raw 16/24-bit PCM generates a deafening digital whine/buzz.
C. Proof via Hardware PCI Rebind

Issuing an unbind/rebind on the PCI function instantly clears the buzz without touching the TV:

echo 0000:03:00.1 > /sys/bus/pci/drivers/snd_hda_intel/unbind
sleep 1
echo 0000:03:00.1 > /sys/bus/pci/drivers/snd_hda_intel/bind

The resulting kernel output demonstrates the complete controller reset:

Nov 05 11:47:31 DenCube kernel: snd_hdac_bus_update_rirb: 30 callbacks suppressed
Nov 05 11:47:32 DenCube kernel: snd_hda_intel 0000:03:00.1: Force to non-snoop mode
Nov 05 11:47:32 DenCube kernel: snd_hda_intel 0000:03:00.1: bound 0000:03:00.0 (ops amdgpu_dm_audio_component_bind_ops [amdgpu])
Nov 05 11:47:32 DenCube kernel: input: HDA ATI HDMI HDMI/DP,pcm=3 as /devices/.../sound/card0/input41

4. Evaluated Workarounds & Limitations

Approach Result Assessment
power_save=0 / power_save_controller=N Ineffective Disabling runtime PM does not prevent RIRB timeouts; error reproduced within hours.
single_cmd=1 Not Recommended Forces synchronous polling (udelay), breaks unsolicited events (headphone jack sensing, HDMI hotplugging), and introduces micro-stutters during gaming.
Switch to Stereo LPCM Effective, but loses 5.1 Switching from hdmi-ac3-surround to uncompressed hdmi-stereo prevents compressed bitstream decoding errors, but limits output to 2.0 audio.
Automated Watchdog (PCI Rebind) Proven Workaround A background daemon detecting snd_hdac_bus_update_rirb and cycling 0000:03:00.1 clears the issue automatically in ~500ms.

5. Suggested Upstream Kernel / Driver Resolutions

  1. Hardware DMA FIFO Reset on RIRB Stall:
    In sound/pci/hda/hda_intel.c / hda_controller.c, when a cascade of spurious response or snd_hdac_bus_update_rirb callbacks are suppressed, the driver should trigger an internal DMA engine reset and mute the stream rather than allowing the DMA FIFO to free-wheel in an infinite loop.
  2. AMDGPU DM Audio Component Re-Handshake:
    Improve the error recovery between amdgpu_dm_audio_component_bind_ops and snd_hda_intel on Navi 31/33 architectures when RIRB timeouts occur, initiating an automatic stream re-initialization rather than requiring an external HPD pulse.
  3. Fallback Stream Muting in PipeWire / ALSA A52:
    When the hardware reports bus errors or buffer stalls on an a52 compressed sink, immediately mute or zero the buffer to protect user hearing and equipment from raw PCM playback.
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

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di ValveSoftware/SteamOS

Tutte le issue di ValveSoftware/SteamOS

Issue simili

Altre issue su Audio/Video & RTC

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.