HP EliteDesk 800 G4 DM (i5-8500, 6 cores) — NixOS boots with all cores only with acpi=off, which disables SMP and limits to 1 core. Exhaustive kernel param testing failed.
Hardware:
- HP EliteDesk 800 G4 DM 65W
- Intel Core i5-8500 (Coffee Lake, 6 cores, no hyperthreading)
- 15.8 GB RAM, NVMe SSD
- BIOS: Q21 Ver. 02.27.00 (updated to latest available, 12/2023)
OS: NixOS 25.11 (Xantusia), kernel 6.12.91
The problem:
The machine only boots fully when acpi=off is in kernel params. With acpi=off, the system is stable and all services run — but SMP is disabled, so only 1 of 6 cores is visible. Every
other combination either crashes or hangs silently.
There is also a recurring ACPI BIOS error visible in early boot regardless of params:
ACPI BIOS Error (bug): AE_AML_BUFFER_LIMIT, Field [CAP1] at bit offset/length 64/32
exceeds size of target Buffer (64 bits) (20230628/dsopcode-198)
ACPI Error: Aborting method _SB._OSC due to previous error (AE_AML_BUFFER_LIMIT)
What we have tried:
-
BIOS update
Updated to the latest available firmware (Q21 02.27.00). No change in behavior. -
Older kernel (6.6.141)
Kernel 6.6 has additional bugs on this hardware regardless of ACPI params:
- Without nomodeset: simple-framebuffer / fb_flashcursor NULL pointer dereference crash
- With pci=noacpi: psi_task_switch NULL pointer crash
- With acpi=noirq: same fb_flashcursor crash
Kernel 6.6 is a dead end on this hardware. All further testing on kernel 6.12.91.
-
nomodeset
Causes simple-framebuffer fb_flashcursor NULL pointer dereference. Must not be used. Intel i915 driver loads correctly without it. -
pci=noacpi
Disables ACPI for PCI IRQ routing only. Result: initramfs ZSTD decompression fails with “corrupt data” — boot never reaches init. Likely cause: ACPI assigns PCI BARs to memory regions
overlapping where the initramfs is loaded in RAM. -
acpi=noirq psi=0
SMP active (CPU 2 visible), microcode updated, networking initialized — crashes at ~0.4s:
BUG: unable to handle page fault for address: 00000000fffbbf5c
RIP: __timer_delete_sync
Comm: rcu_exp_gp_kthr Tainted: [D]=DIE
CR2: 00000000fffbbf5c
RCU expedited grace period thread crashes in timer deletion. Pointer 0xfffbbf5c looks like a 32-bit value used as a 64-bit pointer — likely caused by misconfigured interrupt routing
corrupting a timer struct. -
psi=0 only (no ACPI params)
Silent hang. ACPI IRQ routing is broken on this hardware even with the updated BIOS. -
acpi=noirq psi=0 rcu_nocbs=all
Added rcu_nocbs=all to work around the RCU crash from #5. Result: silent hang. -
acpi=ht psi=0
acpi=ht enables ACPI only for CPU topology enumeration, disabling everything else including IRQ routing. Result: silent hang. -
acpi=noirq noapic psi=0
Disabled both ACPI IRQ routing and the IOAPIC to force legacy PIC interrupt handling. Result: silent hang.
Summary table:
┌────────────────────────────────┬───────────────────────────┐
│ Kernel params │ Result │
├────────────────────────────────┼───────────────────────────┤
│ acpi=off │
boots, 1 core only │
├────────────────────────────────┼───────────────────────────┤
│ nomodeset │
fb_flashcursor crash │
├────────────────────────────────┼───────────────────────────┤
│ pci=noacpi │
initramfs ZSTD corrupt │
├────────────────────────────────┼───────────────────────────┤
│ acpi=noirq psi=0 │
rcu_exp_gp_kthr crash │
├────────────────────────────────┼───────────────────────────┤
│ psi=0 only │
silent hang │
├────────────────────────────────┼───────────────────────────┤
│ acpi=noirq psi=0 rcu_nocbs=all │
silent hang │
├────────────────────────────────┼───────────────────────────┤
│ acpi=ht psi=0 │
silent hang │
├────────────────────────────────┼───────────────────────────┤
│ acpi=noirq noapic psi=0 │
silent hang │
└────────────────────────────────┴───────────────────────────┘
Question:
Is there a kernel param combination that keeps ACPI active for SMP/CPU enumeration (all 6 cores) while safely disabling the broken ACPI IRQ routing on this HP hardware? Or is there a
known workaround for the _SB._OSC AE_AML_BUFFER_LIMIT firmware bug? The only param that boots is acpi=off, which disables SMP entirely.