]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
x86: Move MADT table to a writer function
authorSimon Glass <sjg@chromium.org>
Wed, 1 Dec 2021 16:02:58 +0000 (09:02 -0700)
committerSimon Glass <sjg@chromium.org>
Tue, 25 Jan 2022 18:44:36 +0000 (11:44 -0700)
Move this table over to use a writer function, for x86 only.

Signed-off-by: Simon Glass <sjg@chromium.org>
arch/x86/lib/acpi_table.c

index 7b80d82888e8db51085a38262ebe04fee019cc0b..4ae917176e02ce32d59ef0bdb6e42f3834aac902 100644 (file)
@@ -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;