FABRIC-3.10.8 MC-1b: aarch64's second core online and parked

Cores from the DTB /cpus or, on QEMU (ACPI, no DTB), the MADT GICC
entries; the MADT lookup is now shared (hal/acpi.c) with amd64. PSCI
CPU_ON through the discovered conduit into ap_entry.S, which copies the
boot core's MMU/control state, sets TPIDR_EL1 and parks. Core 1 online
at EL1 with its own block; its vCPU thread 0.0% on the host. QEMU aarch64
-smp 2 -name debug-threads=on. 3-ISA acceptance clean.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Robert Allan James
2026-09-26 13:16:33 -04:00
co-authored by Claude Opus 5.5
parent 24bde47481
commit 3a2ba5149f
16 changed files with 27949 additions and 48 deletions
+32
View File
@@ -0,0 +1,32 @@
/*
StarForth — Steady-State Virtual Machine Runtime
Copyright (c) 2023–2025 Robert A. James
All rights reserved.
This file is part of the StarForth project.
Licensed under the StarForth License, Version 1.0 (the "License");
you may not use this file except in compliance with the License.
*/
/**
* acpi.h - Finding an ACPI table from the RSDP (FABRIC-3.10.8 MC-1b).
*
* Shared by the core enumeration of amd64 (MADT Local APIC entries) and
* aarch64 (MADT GICC entries, when the firmware hands over ACPI rather
* than a devicetree, as QEMU's AAVMF does).
*/
#ifndef STARKERNEL_ACPI_H
#define STARKERNEL_ACPI_H
#include <stdint.h>
/* The first XSDT-listed table whose 4-byte signature is `sig`, or NULL.
* `rsdp` is BootInfo->acpi_table (ACPI 2.0+ RSDP); NULL-safe. */
const uint8_t *acpi_find_table(const void *rsdp, const char *sig);
/* A table's length field (bytes 4..7 of its header). */
uint32_t acpi_table_length(const uint8_t *table);
#endif /* STARKERNEL_ACPI_H */