ACPI table overrides providing CPU idle states and frequency scaling for the AMD BC-250 on Linux.
Works on stock 6-core and unlocked 8-core boards across all stock BIOS versions.
Important
Modded BIOSes may already provide their own ACPI fixes. To avoid conflicts, disable ACPI injection in the firmware setup if available, or rely on the BIOS-provided tables only.
- The stock idle table targets CPU definitions the firmware does not declare, so it never loads.
- Frequency scaling is not published at all, despite hardware support for eight states from 800 MHz to 3.2 GHz.
- Some control methods the firmware calls are left undefined, producing ACPI errors at boot.
BIOS 1.00, 2.00, 3.00 and 5.00 share the same DSDT. This means updating the firmware does not help, but on the other hand that makes these tables compatible with all releases.
- SSDT-CPU replaces the broken idle state table.
- SSDT-PST publishes the frequency states.
- SSDT-STUBS defines the missing methods as no-ops.
The tables cover all 16 CPU definitions declared by the firmware (one per thread). Stock boards use 12, while unlocked boards use all of them.
The tables are loaded from the initrd through ACPI table upgrade, which most distribution kernels enable via CONFIG_ACPI_TABLE_UPGRADE.
Prebuilt tables are attached to each release. To build from source, install acpica and run:
makeThis generates the .aml tables and the acpi_override.cpio archive in the current directory.
Make sure to remove any previously installed tables before proceeding; duplicates will fail to load.
Note tee -a, not tee:
sudo cp acpi_override.cpio /boot/
echo 'GRUB_EARLY_INITRD_LINUX_CUSTOM="acpi_override.cpio"' | sudo tee -a /etc/default/grub
sudo update-grubThe path is relative to the GRUB config in /boot/grub2/.
sudo cp acpi_override.cpio /boot/
echo 'GRUB_EARLY_INITRD_LINUX_CUSTOM="../../acpi_override.cpio"' | sudo tee -a /etc/default/grub
sudo grub2-mkconfig -o /boot/grub2/grub.cfgsudo cp acpi_override.cpio /boot/
echo 'GRUB_EARLY_INITRD_LINUX_CUSTOM="../../acpi_override.cpio"' | sudo tee -a /etc/default/grub
ujust regenerate-grubCopy acpi_override.cpio to your EFI system partition, then add it as the first initrd line in your entry under loader/entries/:
title Linux
linux /vmlinuz-linux
initrd /acpi_override.cpio
initrd /initramfs-linux.img
options root=...
Paths are relative to the EFI system partition. Some distributions discard added lines when regenerating entries on kernel updates.
sudo mkdir -p /etc/initcpio/acpi_override
sudo cp SSDT-*.aml /etc/initcpio/acpi_override/
sudo sed -i '/^HOOKS=/ { /acpi_override/q; s/microcode/& acpi_override/; q }' /etc/mkinitcpio.conf
sudo mkinitcpio -PReboot to apply.
sudo dmesg | grep -iE 'ACPI.*(SSDT|Table Upgrade)'All three tables should load, with AMD CPU listed once as an override.
cpupower idle-infoIdle states should be POLL, C1 and C2, with C2 at address 0x414 and its usage rising while the board sits idle.
cpupower frequency-infoFrequency scaling should offer eight steps from 800 MHz to 3.2 GHz.
Cores idle at 800 MHz and boost to around 3.5 GHz under load, above the 3.2 GHz maximum the tables publish.
- shinf1x for the original tables.
- rw-r-r-0644 for diagnosing and replacing the broken table, and for clearing the remaining ACPI errors.
- mendesrr for extending the tables to 8 cores.