Login
Task 2.4c: Finding the hardware on aarch64 from ACPI (SPCR, MADT, GTDT)
Login

Branch: slice/2.4c. Commit only there; never to trunk. One check-in. Past ~400 non-spec lines, stop, commit nothing, and say so (rule 3).

Why now. The maintainer booted the aarch64 UTM disk on a Mac. Hosted mode works; native answers console not found. UTM gives no way to turn ACPI off, so its edk2 firmware hands Glint ACPI tables and no devicetree, and native mode finds its console only through the devicetree's stdout-path (boot/mode.cr line 92), as 2.4a made it (glint forum 396ebb66f3). This is a Phase 2 addendum, like 2.7c, slotted in before 6.6 because the maintainer is using the disk now.

Building: aarch64 inside BQ2's seed, exactly as docs/tasks/4.1a.md shows; x86_64 outside it, only to show it's unchanged.

Read first:

Claim. On aarch64 firmware that gives ACPI and no devicetree, native mode finds its console UART from SPCR, its GIC from MADT and its timer interrupt from GTDT, and runs as it does with a devicetree. With a devicetree present nothing changes: the devicetree stays the first source.

Passage. The plan's principle 6 (standard interfaces need no board support package). Quote it from PLAN.md.

Make:

Specs.

Constraints. BQ2 tools only; aarch64 via the seed. No start-up initialisers and no heap; the image check passes on both images. No change to x86_64: its boots pass unedited. No new function over 2 KiB, and no existing one pushed over it, in the built image. About 250 non-spec lines. Report every constraint you couldn't meet; never change one silently.

Demonstration. The host specs; in the seed, the whole aarch64 boot suite and the image and small-target specs; outside it, the whole x86_64 boot suite and crystal spec with ZEPHYR_SRC set; crystal tool format --check.

Check-in comment. Rule 2's four parts.