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_BOARD_CONFIG = 0x0040,
CB_TAG_ACPI_CNVS = 0x0041, CB_TAG_ACPI_CNVS = 0x0041,
CB_TAG_TYPE_C_INFO = 0x0042, CB_TAG_TYPE_C_INFO = 0x0042,
CB_TAG_ACPI_RSDP = 0x0043,
CB_TAG_CMOS_OPTION_TABLE = 0x00c8, CB_TAG_CMOS_OPTION_TABLE = 0x00c8,
CB_TAG_OPTION = 0x00c9, CB_TAG_OPTION = 0x00c9,
CB_TAG_OPTION_ENUM = 0x00ca, CB_TAG_OPTION_ENUM = 0x00ca,
@ -422,6 +423,16 @@ struct cb_cmos_checksum {
u32 type; 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 */ /* Helpful inlines */
static inline u64 cb_unpack64(struct cbuint64 val) static inline u64 cb_unpack64(struct cbuint64 val)

View File

@ -111,6 +111,7 @@ struct sysinfo_t {
uintptr_t mrc_cache; uintptr_t mrc_cache;
uintptr_t acpi_gnvs; uintptr_t acpi_gnvs;
uintptr_t acpi_cnvs; uintptr_t acpi_cnvs;
uintptr_t acpi_rsdp;
#define UNDEFINED_STRAPPING_ID (~0) #define UNDEFINED_STRAPPING_ID (~0)
#define UNDEFINED_FW_CONFIG ~((uint64_t)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) int cb_parse_header(void *addr, int len, struct sysinfo_t *info)
{ {
struct cb_header *header; 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); cb_parse_tsc_info(ptr, info);
break; break;
#endif #endif
case CB_TAG_ACPI_RSDP:
cb_parse_rsdp(ptr, info);
break;
default: default:
cb_parse_arch_specific(rec, info); cb_parse_arch_specific(rec, info);
break; break;