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

Abierto
#3,046 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
5/5
Tiempo estimado
Más de una semana
Aptitud para principiantes
25/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Activo
Stack tecnológico
c

Línea de trabajo

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.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

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.
Lenguaje dominante
Sin datos de lenguaje
Estrellas
2.7k
Forks
89
Métricas de merge de PR
Sin PR fusionados en 30 d

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de ValveSoftware/SteamOS

Todos los issues de ValveSoftware/SteamOS

Issues similares

Más issues de Audio/Video & RTC

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.