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

オープン
#3,046 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
5/5
見積もり時間
1週間以上
初心者へのやさしさ
25/100
issue の種類
バグ
明瞭さ
おおむね明確
活発さ
活発
技術スタック
c

調査の方向性

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.

索引モデルが issue の本文から書いたものです。

説明

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.
主要言語
言語のデータがありません
スター
2.7k
フォーク
89
PR マージ指標
30日以内にマージされた PR はありません

環境構築

このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

ValveSoftware/SteamOS のほかの issue

ValveSoftware/SteamOS の issue をすべて見る

似ている issue

Audio/Video & RTC の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。