50b731f1b7
Derivative of Redox OS (https://www.redox-os.org) adding: - AMD GPU driver (amdgpu) via LinuxKPI compat layer - ext4 filesystem support (ext4d scheme daemon) - ACPI fixes for AMD bare metal (x2APIC, DMAR, IVRS, MCFG) - Custom branding (hostname, os-release, boot identity) Build system is full upstream Redox with RBOS overlay in local/. Patches for kernel, base, and relibc are symlinked from local/patches/ and protected from make clean/distclean. Custom recipes live in local/recipes/ with symlinks into the recipes/ search path. Build: make all CONFIG_NAME=redbear-full Sync: ./local/scripts/sync-upstream.sh
4.6 KiB
4.6 KiB
ACPI Fixes — P0 Phase Tracker
Status of ACPI fixes for AMD bare metal boot. Cross-referenced with
HARDWARE.md crash reports and kernel/acpid source TODOs.
Crash Reports
| Hardware | Symptom | Root Cause | Status |
|---|---|---|---|
| Framework Laptop 16 (AMD 7040) | Crash on boot | Unimplemented ACPI function (jackpot51/acpi#3) | Under investigation |
| Lenovo ThinkCentre M83 | Aml(NoCurrentOp) panic at acpid acpi.rs:256 |
AML interpreter encounters unsupported opcode | Under investigation |
| HP Compaq nc6120 | Crash after kernel::acpi prints APIC info |
Unknown — may be ACPI or APIC init | Under investigation |
Known Missing ACPI Table Parsers
| Table | Location | Status | Impact |
|---|---|---|---|
| DSDT (Differentiated System Description Table) | Parsed by acpi crate AML interpreter |
Working | Platform-specific device config via AML bytecode |
| SSDT (Secondary System Description Table) | Parsed by acpi crate AML interpreter |
Working | Secondary AML tables (hotplug, etc.) |
| FACP/FADT | Partially parsed in acpid | Partial | PM registers, reset register, sleep states |
| IVRS (AMD-Vi IOMMU) | ✅ Implemented in acpid | P2+ | AMD IOMMU for device passthrough |
| MCFG (PCI Express config space) | ✅ Implemented in acpid | P1 | PCIe extended config space access |
| DBG2 (Debug port) | Not implemented | Low | Serial debug port discovery |
| BGRT (Boot graphics) | Not implemented | Low | Boot logo preservation |
| FPDT (Firmware perf data) | Not implemented | Low | Boot performance metrics |
Implemented ACPI Tables
| Table | Kernel | Userspace (acpid) | Notes |
|---|---|---|---|
| RSDP | acpi/rsdp.rs |
N/A | Signature + checksum validated ✅ |
| RSDT/XSDT | acpi/rsdt.rs, acpi/xsdt.rs |
N/A | Root table pointer iteration |
| MADT (APIC) | acpi/madt/ |
N/A | xAPIC + x2APIC (type 0x9) |
| HPET | acpi/hpet.rs |
N/A | Assumes single HPET |
| DMAR (Intel VT-d) | N/A | acpi/dmar/ |
Iterator bug fixed, re-enabled |
| FADT | N/A | acpi.rs |
Partial parse |
| SPCR | acpi/spcr.rs |
N/A | ARM64 serial console |
| GTDT | acpi/gtdt.rs |
N/A | ARM64 timers |
Kernel ACPI TODOs
From recipes/core/kernel/source/src/acpi/:
| File | Line | TODO | Priority |
|---|---|---|---|
mod.rs |
132 | Don't touch ACPI tables in kernel? (move to userspace) | Future |
mod.rs |
147 | Enumerate processors in userspace | Future |
mod.rs |
154 | Let userspace setup HPET | Future |
rsdp.rs |
|||
hpet.rs |
56 | Assumes only one HPET | Low |
spcr.rs |
38,86,100,110 | Optional fields, more interrupt types | ARM64 only |
madt/mod.rs |
134 | Optional field in ACPI 6.5 (trbe_interrupt) | Low |
ACPID (Userspace) TODOs — UPSTREAM, NOT AMD-FIRST P0/P1
These are pre-existing upstream acpid issues. They are NOT part of the AMD-first P0/P1 scope. They exist in mainline Redox acpid and affect all platforms, not just AMD.
| File | Line | TODO | Priority | Scope |
|---|---|---|---|---|
acpi.rs |
266 | Use parsed tables for rest of acpid | Upstream | Mainline acpid improvement |
acpi.rs |
643 | Handle SLP_TYPb for sleep states | Upstream | Mainline power management |
aml_physmem.rs |
418,423,428 | Mutex create/acquire/release | Upstream | Mainline AML interpreter |
ec.rs |
193+ (8 occurrences) | Proper error types | Upstream | Mainline EC handler |
dmar/mod.rs |
7 | Move DMAR to separate driver | Upstream | Mainline driver refactor |
P0 Fixes Applied
| Fix | File | Description |
|---|---|---|
| x2APIC Type 9 support | kernel redox.patch |
MadtLocalX2Apic struct + AP boot via ICR |
| AP startup timeout | kernel redox.patch |
100M-iteration bounded waits prevent infinite hang |
| Second SIPI | kernel redox.patch |
Universal Startup Algorithm compliance |
| x2APIC ICR delivery polling | kernel redox.patch |
Pre/post wrmsr PENDING bit check |
| MadtIter zero-length guard | kernel redox.patch |
entry_len < 2 returns None |
| RSDP checksum validation | kernel rsdp.rs |
Signature + ACPI 1.0/2.0+ checksum validation |
| DMAR iterator hardening | base redox.patch |
len < 4 guard + type_bytes fix |
| Trampoline W+X | kernel redox.patch |
Documented W^X limitation |
| CPUID arch split | kernel redox.patch |
Separate x86/x86_64 cpuid functions |
| Memory alignment | kernel redox.patch |
find_free_near_aligned with power-of-two assert |
| MCFG parser | acpid acpi/mcfg/ |
PCIe ECAM base address discovery |
| IVRS parser | acpid acpi/ivrs/ |
AMD IOMMU (AMD-Vi) hardware unit discovery |