Spolu s prokletým AMD Sensor Fusion Hubem jsou to dvě vady na kráse jinak velmi solidních APU a notebooků.
U notebooků s Ryzeny první generace (Zen a Zen+) jde ještě upravit ACPI tabulku (dekompilovat, přepsat pár flagů, rekompilovat) a tím zapnout plně funkční podporu klasického S3 sleepu, ale na novějších tam ta funkcionalita prostě není. S2idle je jediná možnost, a konečně se to blíží.
Driver pro sensor fusion hub po skoro dvou letech odkladů dorazil v 5.11, ale implementace driverů pro čidla za ním (např. akcelerometry, luxmetry) stále vázne.
> U notebooků s Ryzeny první generace (Zen a Zen+) jde ještě upravit
> ACPI tabulku (dekompilovat, přepsat pár flagů, rekompilovat) a tím
> zapnout plně funkční podporu klasického S3 sleepu, ale na novějších
> tam ta funkcionalita prostě není.
Máš k tomu někde podrobnosti, případně postup? To by mě zajímalo... obecně jde vidět, zvlášť na těch prvních řadách, že ta jejich platforma v laptopech má ještě mezery.
Dali jsme to dohromady po nocích s lidma na gentoo IRC, ve zkratce:
1) extrahuješ a dekompiluješ tabulky DSDT a FACP
acpidump -b iasl -d dsdt.dat iasl -d facp.dat
2) v souboru dsdt.dsl je definice všech S* states, všechny začínají podtržítkem (_S0, _S4, ...), jenom S3 začíná X:
Name (_S0, Package (0x04) // _S0_: S0 System State (...) Name (XS3, Package (0x04) (...) Name (_S4, Package (0x04) // _S4_: S4 System State (...)
takže jediná změna v tomto souboru je, že Name (XS3, Package (0x04) přepíšeš na Name (_S3, Package (0x04). Na jednom z prvních řádků ještě číslo revize (řádek s DefinitionBlock inkrementuješ z (např.) 0x01072009 na 0x0107200A.
3) v souboru facp.dsl vypneš (změníš 1 na 0) redukci funkcí a vypneš s2idle (i když to možná není nutné) a opět inkrementuješ číslo revize z 0x01072009 na 0x0107200A:
Hardware Reduced (V5) : 0 Low Power S0 Idle (V5) : 0
4) oba soubory zase přeložíš do nativního formátu a vytvoříš cpio archiv, kterým při startu bootloader přepíše ACPI tabulky původně načtené z firmwaru (proto se inkrementuje ta revize, aby to ACPI runtime neignoroval):
iasl -sa dsdt.dsl
iasl -sa facp.dsl
mkdir -p kernel/firmware/acpi
mv {dsdt,facp}.aml kernel/firmware/acpi
find kernel | cpio --format newc --create > /boot/envy-suspend-fix-F20.cpio
5) a pak už to jen stačí přidat do bootloaderu jako další initramfs a restartovat. V Grubu něco ve stylu
menuentry "Něco" {
search --label boot
linux /vmlinuz-latest xxx xxx
initrd /envy-suspend-fix-F20.cpio /amd-uc.img /muj-normalni-initramfs
boot
}
Výhoda je, že to nic trvale nemění - stačí v Grubu před bootem spustit editor a odstranit to z toho řádku, kdyby něco zlobilo.
10. 9. 2021, 18:12 editováno autorem komentáře
Řeším podobný problém u Dellu 5520 s Intelem (kde S3 vypnuli údajně kvůli BSOD ve Windows a přepínač v UEFI BIOSu nezakazující S3 tam tak nemá žádný význam - S3 je trvale vypnuto), ale co jsem tak studoval, tak je třeba stejně sestavit v distribucích jako je Ubuntu novou verzi jádra s povolením načítání toho custom initrd s DSDT (CONFIG_ACPI_CUSTOM_DSDT_INITRD), jinak se nic nestane, protože ve výchozím configu jádra je ta volba vypnutá, je to tak?