From 8ea47b72f8fabe57a0762ca79f04101ae4cd12d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Gr=C3=A9goire?= Date: Wed, 15 Apr 2026 20:40:57 -0400 Subject: [PATCH] fix(acpi): ensure proper GAS for timer --- src/platform/acpi/root.zig | 16 ++++++++-------- src/platform/acpi/timer.zig | 4 ++++ 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/platform/acpi/root.zig b/src/platform/acpi/root.zig index 14e7956..6f2f538 100644 --- a/src/platform/acpi/root.zig +++ b/src/platform/acpi/root.zig @@ -337,21 +337,21 @@ pub fn init(boot_info: *pl.BootInfo) linksection(b.init) void { enumerate_tables(); - const fadt = find_table(fadt_signature); - - if (fadt) |f| { - const fadt_struct: *Fadt = @ptrCast(f); - timer.init(fadt_struct); - } - + // Try getting the HPET first so we don't initialize + // the legacy timer if we have a better option. const hpet_t = find_table(hpet_signature); if (hpet_t) |h| { const hpet_struct: *HpetTable = @ptrCast(h); hpet.init(hpet_struct); } - const madt_t = find_table(madt_signature); + const fadt = find_table(fadt_signature); + if (fadt) |f| { + const fadt_struct: *Fadt = @ptrCast(f); + timer.init(fadt_struct); + } + const madt_t = find_table(madt_signature); if (madt_t) |m| { madt.madt_ptr = @ptrCast(m); } diff --git a/src/platform/acpi/timer.zig b/src/platform/acpi/timer.zig index 1ea0bbd..089ceee 100644 --- a/src/platform/acpi/timer.zig +++ b/src/platform/acpi/timer.zig @@ -37,6 +37,10 @@ pub fn init(fadt: *acpi.Fadt) linksection(b.init) void { timer_gas = fadt.x_pm_tmr_blk; } + if (timer_gas.access_size == 0) { + timer_gas.access_size = 3; + } + // Indicates whether the timer is 32-bit if (fadt.flags & (1 << 8) != 0) { pm_timer.mask = std.math.maxInt(u32);