aboutsummaryrefslogtreecommitdiff
path: root/arch/x86
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2021-12-01 09:02:58 -0700
committerSimon Glass <sjg@chromium.org>2022-01-25 11:44:36 -0700
commitc797f98bcd4c936adca7984f838095583057bfd7 (patch)
treeabf4678b9573390c4f8caae3083a4ac0c5e41cf0 /arch/x86
parent9aacd833897a1c0fb11c33a2b6136ac404f5557d (diff)
downloadu-boot-c797f98bcd4c936adca7984f838095583057bfd7.zip
u-boot-c797f98bcd4c936adca7984f838095583057bfd7.tar.gz
u-boot-c797f98bcd4c936adca7984f838095583057bfd7.tar.bz2
x86: Move MADT table to a writer function
Move this table over to use a writer function, for x86 only. Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'arch/x86')
-rw-r--r--arch/x86/lib/acpi_table.c25
1 files changed, 14 insertions, 11 deletions
diff --git a/arch/x86/lib/acpi_table.c b/arch/x86/lib/acpi_table.c
index 7b80d82..4ae9171 100644
--- a/arch/x86/lib/acpi_table.c
+++ b/arch/x86/lib/acpi_table.c
@@ -131,12 +131,16 @@ __weak u32 acpi_fill_madt(u32 current)
return current;
}
-static void acpi_create_madt(struct acpi_madt *madt)
+int acpi_write_madt(struct acpi_ctx *ctx, const struct acpi_writer *entry)
{
- struct acpi_table_header *header = &(madt->header);
- u32 current = (u32)madt + sizeof(struct acpi_madt);
+ struct acpi_table_header *header;
+ struct acpi_madt *madt;
+ u32 current;
- memset((void *)madt, 0, sizeof(struct acpi_madt));
+ madt = ctx->current;
+
+ memset(madt, '\0', sizeof(struct acpi_madt));
+ header = &madt->header;
/* Fill out header fields */
acpi_fill_header(header, "APIC");
@@ -146,13 +150,19 @@ static void acpi_create_madt(struct acpi_madt *madt)
madt->lapic_addr = LAPIC_DEFAULT_BASE;
madt->flags = ACPI_MADT_PCAT_COMPAT;
+ current = (u32)madt + sizeof(struct acpi_madt);
current = acpi_fill_madt(current);
/* (Re)calculate length and checksum */
header->length = current - (u32)madt;
header->checksum = table_compute_checksum((void *)madt, header->length);
+ acpi_add_table(ctx, madt);
+ acpi_inc(ctx, madt->header.length);
+
+ return 0;
}
+ACPI_WRITER(5x86, NULL, acpi_write_madt, 0);
int acpi_create_mcfg_mmconfig(struct acpi_mcfg_mmconfig *mmconfig, u32 base,
u16 seg_nr, u8 start, u8 end)
@@ -521,17 +531,10 @@ int write_acpi_tables_x86(struct acpi_ctx *ctx,
const struct acpi_writer *entry)
{
struct acpi_tcpa *tcpa;
- struct acpi_madt *madt;
struct acpi_csrt *csrt;
struct acpi_spcr *spcr;
int ret;
- debug("ACPI: * MADT\n");
- madt = ctx->current;
- acpi_create_madt(madt);
- acpi_inc_align(ctx, madt->header.length);
- acpi_add_table(ctx, madt);
-
if (IS_ENABLED(CONFIG_TPM_V1)) {
debug("ACPI: * TCPA\n");
tcpa = (struct acpi_tcpa *)ctx->current;