coreboot_tables.c: Expose the ACPI RSDP

The ACPI RSDP can only be found in:
- legacy BIOS region
- via UEFI service

On some systems like ARM that legacy BIOS region is not an option, so
to avoid needing UEFI it makes sense to expose the RSDP via a coreboot
table entry.

This also adds the respective unit test.

Change-Id: I591312a2c48f0cbbb03b2787e4b365e9c932afff
Signed-off-by: Arthur Heymans <arthur@aheymans.xyz>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/62573
Reviewed-by: Lance Zhao
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
Reviewed-by: Nico Huber <nico.h@gmx.de>
Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
Arthur Heymans
2022-03-03 22:28:27 +01:00
committed by Felix Held
parent 63c6d814ce
commit 2e7e2d978b
5 changed files with 47 additions and 0 deletions

View File

@ -1582,6 +1582,13 @@ void preload_acpi_dsdt(void)
cbfs_preload(file);
}
static uintptr_t coreboot_rsdp;
uintptr_t get_coreboot_rsdp(void)
{
return coreboot_rsdp;
}
unsigned long write_acpi_tables(unsigned long start)
{
unsigned long current;
@ -1689,6 +1696,7 @@ unsigned long write_acpi_tables(unsigned long start)
/* We need at least an RSDP and an RSDT Table */
rsdp = (acpi_rsdp_t *) current;
coreboot_rsdp = (uintptr_t)rsdp;
current += sizeof(acpi_rsdp_t);
current = acpi_align_current(current);
rsdt = (acpi_rsdt_t *) current;