libpayload: Parse the ACPI RSDP table entry

Change-Id: I583cda63c3f0b58f8d198ed5ecea7c4619c7a897
Signed-off-by: Arthur Heymans <arthur@aheymans.xyz>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/62576
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org>
This commit is contained in:
Arthur Heymans 2022-03-03 22:59:23 +01:00 committed by Felix Held
parent 4a3331d93c
commit cddba4528d
3 changed files with 21 additions and 0 deletions

View File

@ -83,6 +83,7 @@ enum {
CB_TAG_BOARD_CONFIG = 0x0040,
CB_TAG_ACPI_CNVS = 0x0041,
CB_TAG_TYPE_C_INFO = 0x0042,
CB_TAG_ACPI_RSDP = 0x0043,
CB_TAG_CMOS_OPTION_TABLE = 0x00c8,
CB_TAG_OPTION = 0x00c9,
CB_TAG_OPTION_ENUM = 0x00ca,
@ -422,6 +423,16 @@ struct cb_cmos_checksum {
u32 type;
};
/*
* Handoff the ACPI RSDP
*/
struct cb_acpi_rsdp {
uint32_t tag;
uint32_t size;
struct cbuint64 rsdp_pointer; /* Address of the ACPI RSDP */
};
/* Helpful inlines */
static inline u64 cb_unpack64(struct cbuint64 val)

View File

@ -111,6 +111,7 @@ struct sysinfo_t {
uintptr_t mrc_cache;
uintptr_t acpi_gnvs;
uintptr_t acpi_cnvs;
uintptr_t acpi_rsdp;
#define UNDEFINED_STRAPPING_ID (~0)
#define UNDEFINED_FW_CONFIG ~((uint64_t)0)

View File

@ -268,6 +268,12 @@ static void cb_parse_cbmem_entry(void *ptr, struct sysinfo_t *info)
}
}
static void cb_parse_rsdp(void *ptr, struct sysinfo_t *info)
{
const struct cb_acpi_rsdp *cb_acpi_rsdp = ptr;
info->acpi_rsdp = cb_unpack64(cb_acpi_rsdp->rsdp_pointer);
}
int cb_parse_header(void *addr, int len, struct sysinfo_t *info)
{
struct cb_header *header;
@ -408,6 +414,9 @@ int cb_parse_header(void *addr, int len, struct sysinfo_t *info)
cb_parse_tsc_info(ptr, info);
break;
#endif
case CB_TAG_ACPI_RSDP:
cb_parse_rsdp(ptr, info);
break;
default:
cb_parse_arch_specific(rec, info);
break;