SteamOS 3.9 (Navi 31/33 HDMI Audio) RIRB Desync Causes Cyclic Hardware DMA Loop & Deafening AC3 Whine
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 25/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- c
- Lĩnh vực
- audio-video-rtc
Hướng nghiên cứu
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.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
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:
- Immune to Software Controls: Muting audio, reducing system volume to 0%, or closing all media applications does not stop or alter the buzzing sound.
- ALSA Streams Already Closed: Inspecting
/proc/asound/card0/pcm*/sub*/statusconfirms all PCM streams are in stateclosed. Userspace is not actively feeding any audio frames. - Hardware Loop: The AMD HDMI audio controller continues transmitting a cyclic loop of corrupted DMA buffer frames at the hardware/silicon level.
- 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
- AC-3 Bitstream Encapsulation: SteamOS leverages the ALSA
a52plugin 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. - 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.
- 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
- Hardware DMA FIFO Reset on RIRB Stall:
Insound/pci/hda/hda_intel.c/hda_controller.c, when a cascade ofspurious responseorsnd_hdac_bus_update_rirbcallbacks 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. - AMDGPU DM Audio Component Re-Handshake:
Improve the error recovery betweenamdgpu_dm_audio_component_bind_opsandsnd_hda_intelon Navi 31/33 architectures when RIRB timeouts occur, initiating an automatic stream re-initialization rather than requiring an external HPD pulse. - Fallback Stream Muting in PipeWire / ALSA A52:
When the hardware reports bus errors or buffer stalls on ana52compressed sink, immediately mute or zero the buffer to protect user hearing and equipment from raw PCM playback.
- Ngôn ngữ chính
- Không có dữ liệu ngôn ngữ
- Star
- 2.7k
- Fork
- 89
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của ValveSoftware/SteamOS
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
ValveSoftware/SteamOS#3037 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
ValveSoftware/SteamOS#2983 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
ValveSoftware/SteamOS#2927 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
ValveSoftware/SteamOS#2875 · 1 bình luận ·
-
steam-short-session-tracker: incorrect registry backup path resets settings during automatic repairĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 80/100
ValveSoftware/SteamOS#2829 ·
Tất cả issue của ValveSoftware/SteamOS
Issue tương tự
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
raullenchai/Rapid-MLX#5717 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
good first issue
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 80/100
DrumScript/DrumScript#359 ·
-
audio good first issue help wanted testing
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
accreleus/quasar#1245 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 70/100
juce-framework/JUCE#1788 ·