Zpět na domů

Regrese zvuku snd_hda_intel: oprava PCI rescan

Rozbor regrese snd_hda_intel: timeout CORB reset na Intel HDA po aktualizaci jádra. Diagnostika přes dmesg, řešení — PCI rescan přes sysfs s přeassignací BAR. Automatizace a tipy na debug pro staré železo.

Jak opravit zvuk: PCI rescan proti regresii jádra
Advertisement 728x90

Problém s ovladačem snd_hda_intel: Oprava zvuku na starém notebooku pomocí PCI rescan

Po aktualizaci jádra na notebooku Emachines E732 s Intel 5 Series/3400 Series HDA (ID čipu 8086:3b56) zmizel zvuk. aplay -l vypisuje no soundcards found. lspci vidí zařízení na 00:1b.0, inxi -Axxz potvrzuje ovladač snd_hda_intel, ale journalctl je plný chyb: hdaudio hdaudioC0D0: no AFG or MFG node found pro všechny uzly.

dmesg odhaluje podstatu: při inicializaci snd_hda_intel 0000:00:1b.0: CORB reset timeout#2, CORBRP = 65535, poté no codecs initialized. CORB (Command Output Ring Buffer) – kruhový vyrovnávací paměť pro příkazy kodeku. Hodnota 0xFFFF ukazuje na zablokovanou sběrnici nebo nedostupné hardwarové: čtení z neinicializovaného registru.

BAR při studeném startu: mem 0xd4400000-0xd4403fff 64bit. Opětovné načtení modulu (modprobe -r/-a snd_hda_intel) opakuje chybu s novými časovými razítky.

Google AdInline article slot

Neúčinné přístupy k opravě

Standardní manipulace nepomohly:

  • Uživatelský prostor: přeinstalace PipeWire/WirePlumber, alsamixer – bez ALSA zařízení zbytečné.
  • Parametry modulu: options snd-hda-intel enable=1 power_save=0 power_save_controller=N model=auto v /etc/modprobe.d/alsa-fix.conf.
  • GRUB parametry: pci=nocrs pci=nomsi pcie_aspm=off snd_hda_intel.power_save=0 snd_hda_intel.dma_mask=0.
  • Hot-reload: modprobe snd_hda_intel msi=0 dsp_driver=1 probe_mask=1.

Problém je v časné inicializaci: jádro/LiveCD s LTS fungovalo kvůli jinému pořadí modulů nebo stavu BIOSu.

[   17.492159] snd_hda_intel 0000:00:1b.0: CORB reset timeout#2, CORBRP = 65535
[   17.492380] snd_hda_intel 0000:00:1b.0: no codecs initialized

Řešení přes sysfs: PCI hot-swap

Klíčový náhled: studený start přiděluje neúspěšný BAR, hot-rescan v zahřátém systému – fungující. Postup:

Google AdInline article slot
  • echo 1 | sudo tee /sys/bus/pci/devices/0000:00:1b.0/remove
  • sleep 2
  • echo 1 | sudo tee /sys/bus/pci/rescan

Nový dmesg:

[  473.969035] pci 0000:00:1b.0: [8086:3b56] ... 
[  473.969102] pci 0000:00:1b.0: BAR 0 [mem 0x00000000-0x00003fff 64bit]
[  473.969982] pci 0000:00:1b.0: BAR 0 [mem 0x23c000000-0x23c003fff 64bit]: assigned
[  474.095498] input: HDA Intel MID Mic as /devices/pci0000:00/0000:00:1b.0/sound/card0/input24
[  474.095675] input: HDA Intel MID Headphone as /devices/pci0000:00/0000:00:1b.0/sound/card0/input25

Zvuk se objevuje: karta v /dev/snd, PipeWire vidí zařízení. Důvod – BIOS poskytuje špatné parametry v rané fázi; rescan po plné inicializaci PCI dosadí správný BAR.

Automatizace pro produkční prostředí

Pro skript v systemd (po startu):

Google AdInline article slot
#!/bin/bash
PCI_ID="0000:00:1b.0"
echo 1 > /sys/bus/pci/devices/$PCI_ID/remove
sleep 2
echo 1 > /sys/bus/pci/rescan
# Kontrola
if aplay -l | grep -q "card 0"; then
    systemctl --user restart pipewire pipewire-pulse wireplumber
fi

Přidat do /etc/systemd/system/pci-audio-rescan.service s After=multi-user.target.

Diagnostika podobných regresí

Pro snd_hda_intel na starší Intel HDA:

  • Sběr logů: dmesg | grep '00:1b.0', journalctl -b -p err | grep hda.
  • Kontrola BAR: lspci -vv -s 00:1b.0 | grep BAR.
  • Testování rescan: sysfs metoda výše.
  • Porovnání jader: LTS vs mainline – regrese v přidělení PCI nebo power managementu.
  • BIOS/UEFI: Aktualizace, pokud je dostupná, ale na čipsetech z let 2010+ zřídka pomáhá.

Problém je typický pro starý hardware po kernelu 6.8+: změny v enumeraci PCI a ASPM.

Co je důležité

  • CORBRP=0xFFFF – značka zablokovaného HDA kontroleru, ne BIOS/kodek.
  • PCI rescan přes sysfs obejde časové limity studeného startu, přepřidělí BAR.
  • LTS jádra fungují díky načasování: moduly se načtou později než předání BIOSu.
  • Automatizace: systemd služba pro spolehlivost na produkčních noteboocích.
  • Diagnostika: dmesg > uživatelský prostor, zaměřit se na PCI BAR a CORB/RIRB.

— Editorial Team

Advertisement 728x90

Číst dál