
From: Simon Glass <sjg@chromium.org> The ACPI spec is a little confusing as to what should go in the 'creator_id' field: Vendor ID of utility that created the table. For tables containing Definition Blocks, this is the ID for the ASL Compiler. Even though some of the tables are compiled by the Intel ASL compiler (generally DSDT), U-Boot generates many of the tables itself. So it should be listed as the creator. Rename the constant and use "UBOO", as per the UEFI forum. For the version, use (year << 16) | (patchlevel << 8) which seems to be a common approach. This mostly fixes https://concept.u-boot.org/u-boot/u-boot/-/issues/16 but the question of the logo remains. Signed-off-by: Simon Glass <sjg@chromium.org> Link: https://uefi.org/ACPI_ID_List?acpi_search=u-boot --- arch/x86/lib/acpi_nhlt.c | 2 +- arch/x86/lib/acpi_table.c | 2 +- include/acpi/acpi_table.h | 5 +--- lib/acpi/acpi.c | 6 ++-- lib/acpi/acpi_table.c | 2 +- test/dm/acpi.c | 58 ++++++++++++++++++++++++--------------- 6 files changed, 44 insertions(+), 31 deletions(-) diff --git a/arch/x86/lib/acpi_nhlt.c b/arch/x86/lib/acpi_nhlt.c index 8aae5fa5af7..00b313b0703 100644 --- a/arch/x86/lib/acpi_nhlt.c +++ b/arch/x86/lib/acpi_nhlt.c @@ -408,7 +408,7 @@ int nhlt_serialise_oem_overrides(struct acpi_ctx *ctx, struct nhlt *nhlt, memcpy(header->oem_table_id, oem_table_id, oem_table_id_len); } header->oem_revision = oem_revision; - memcpy(header->creator_id, ASLC_ID, 4); + memcpy(header->creator_id, ACPI_CREATOR, 4); cur.buf = (void *)(header + 1); cur.start = (void *)header; diff --git a/arch/x86/lib/acpi_table.c b/arch/x86/lib/acpi_table.c index b13292c4150..8663f97457e 100644 --- a/arch/x86/lib/acpi_table.c +++ b/arch/x86/lib/acpi_table.c @@ -224,7 +224,7 @@ static int acpi_write_tpm2(struct acpi_ctx *ctx, /* Fill out header fields. */ acpi_fill_header(header, "TPM2"); - memcpy(header->creator_id, ASLC_ID, 4); + memcpy(header->creator_id, ACPI_CREATOR, 4); header->length = sizeof(struct acpi_tpm2); header->revision = acpi_get_table_revision(ACPITAB_TPM2); diff --git a/include/acpi/acpi_table.h b/include/acpi/acpi_table.h index 850cb8db816..f2bd758599f 100644 --- a/include/acpi/acpi_table.h +++ b/include/acpi/acpi_table.h @@ -18,10 +18,7 @@ #define RSDP_SIG "RSD PTR " /* RSDP pointer signature */ #define OEM_ID "U-BOOT" /* U-Boot */ #define OEM_TABLE_ID "U-BOOTBL" /* U-Boot Table */ -#define ASLC_ID "INTL" /* Intel ASL Compiler */ - -/* TODO(sjg@chromium.org): Figure out how to get compiler revision */ -#define ASL_REVISION 0 +#define ACPI_CREATOR "UBOO" /* U-Boot */ #define ACPI_RSDP_REV_ACPI_1_0 0 #define ACPI_RSDP_REV_ACPI_2_0 2 diff --git a/lib/acpi/acpi.c b/lib/acpi/acpi.c index 698d17a02e8..3e0360ab9fe 100644 --- a/lib/acpi/acpi.c +++ b/lib/acpi/acpi.c @@ -10,6 +10,7 @@ #include <errno.h> #include <mapmem.h> #include <tables_csum.h> +#include <version.h> #include <version_string.h> #include <acpi/acpi_table.h> #include <asm/global_data.h> @@ -174,8 +175,9 @@ void acpi_fill_header(struct acpi_table_header *header, char *signature) memcpy(header->oem_id, OEM_ID, 6); memcpy(header->oem_table_id, OEM_TABLE_ID, 8); header->oem_revision = OEM_REVISION; - memcpy(header->creator_id, ASLC_ID, 4); - header->creator_revision = ASL_REVISION; + memcpy(header->creator_id, ACPI_CREATOR, 4); + header->creator_revision = (U_BOOT_VERSION_NUM << 16) | + (U_BOOT_VERSION_NUM_PATCH << 8); } void acpi_align(struct acpi_ctx *ctx) diff --git a/lib/acpi/acpi_table.c b/lib/acpi/acpi_table.c index f2dadd792bd..2589efbb5f2 100644 --- a/lib/acpi/acpi_table.c +++ b/lib/acpi/acpi_table.c @@ -126,7 +126,7 @@ int acpi_write_fadt(struct acpi_ctx *ctx, const struct acpi_writer *entry) header->revision = acpi_get_table_revision(ACPITAB_FADT); memcpy(header->oem_id, OEM_ID, 6); memcpy(header->oem_table_id, OEM_TABLE_ID, 8); - memcpy(header->creator_id, ASLC_ID, 4); + memcpy(header->creator_id, ACPI_CREATOR, 4); header->creator_revision = 1; fadt->minor_revision = 2; diff --git a/test/dm/acpi.c b/test/dm/acpi.c index a274671de02..d1be6707693 100644 --- a/test/dm/acpi.c +++ b/test/dm/acpi.c @@ -13,6 +13,7 @@ #include <malloc.h> #include <mapmem.h> #include <tables_csum.h> +#include <version.h> #include <version_string.h> #include <acpi/acpigen.h> #include <acpi/acpi_device.h> @@ -25,6 +26,9 @@ #define BUF_SIZE 4096 +#define CREATOR_REVISION ((U_BOOT_VERSION_NUM << 16) | \ + (U_BOOT_VERSION_NUM_PATCH << 8)) + #define OEM_REVISION ((((version_num / 1000) % 10) << 28) | \ (((version_num / 100) % 10) << 24) | \ (((version_num / 10) % 10) << 20) | \ @@ -263,8 +267,8 @@ static int dm_test_acpi_fill_header(struct unit_test_state *uts) ut_asserteq_mem(OEM_TABLE_ID, hdr.oem_table_id, sizeof(hdr.oem_table_id)); ut_asserteq(OEM_REVISION, hdr.oem_revision); - ut_asserteq_mem(ASLC_ID, hdr.creator_id, sizeof(hdr.creator_id)); - ut_asserteq(ASL_REVISION, hdr.creator_revision); + ut_asserteq_mem(ACPI_CREATOR, hdr.creator_id, sizeof(hdr.creator_id)); + ut_asserteq(CREATOR_REVISION, hdr.creator_revision); return 0; } @@ -417,22 +421,27 @@ static int dm_test_acpi_cmd_list(struct unit_test_state *uts) ut_assert_nextline("RSDP %16lx %5zx v02 U-BOOT", addr, sizeof(struct acpi_rsdp)); addr = ALIGN(addr + sizeof(struct acpi_rsdp), 16); - ut_assert_nextline("RSDT %16lx %5zx v01 U-BOOT U-BOOTBL %x INTL 0", + ut_assert_nextline("RSDT %16lx %5zx v01 U-BOOT U-BOOTBL %x UBOO %x", addr, sizeof(struct acpi_table_header) + - 3 * sizeof(u32), OEM_REVISION); + 3 * sizeof(u32), OEM_REVISION, + CREATOR_REVISION); addr = ALIGN(addr + sizeof(struct acpi_rsdt), 16); - ut_assert_nextline("XSDT %16lx %5zx v01 U-BOOT U-BOOTBL %x INTL 0", + ut_assert_nextline("XSDT %16lx %5zx v01 U-BOOT U-BOOTBL %x UBOO %x", addr, sizeof(struct acpi_table_header) + - 3 * sizeof(u64), OEM_REVISION); + 3 * sizeof(u64), OEM_REVISION, + CREATOR_REVISION); addr = ALIGN(addr + sizeof(struct acpi_xsdt), 64); - ut_assert_nextline("DMAR %16lx %5zx v01 U-BOOT U-BOOTBL %x INTL 0", - addr, sizeof(struct acpi_dmar), OEM_REVISION); + ut_assert_nextline("DMAR %16lx %5zx v01 U-BOOT U-BOOTBL %x UBOO %x", + addr, sizeof(struct acpi_dmar), OEM_REVISION, + CREATOR_REVISION); addr = ALIGN(addr + sizeof(struct acpi_dmar), 16); - ut_assert_nextline("DMAR %16lx %5zx v01 U-BOOT U-BOOTBL %x INTL 0", - addr, sizeof(struct acpi_dmar), OEM_REVISION); + ut_assert_nextline("DMAR %16lx %5zx v01 U-BOOT U-BOOTBL %x UBOO %x", + addr, sizeof(struct acpi_dmar), OEM_REVISION, + CREATOR_REVISION); addr = ALIGN(addr + sizeof(struct acpi_dmar), 16); - ut_assert_nextline("DMAR %16lx %5zx v01 U-BOOT U-BOOTBL %x INTL 0", - addr, sizeof(struct acpi_dmar), OEM_REVISION); + ut_assert_nextline("DMAR %16lx %5zx v01 U-BOOT U-BOOTBL %x UBOO %x", + addr, sizeof(struct acpi_dmar), OEM_REVISION, + CREATOR_REVISION); ut_assert_console_end(); unmap_sysmem(buf); free(buf); @@ -461,22 +470,27 @@ static int dm_test_acpi_cmd_list_chksum(struct unit_test_state *uts) ut_assert_nextline("RSDP %16lx %5zx v02 U-BOOT OK OK", addr, sizeof(struct acpi_rsdp)); addr = ALIGN(addr + sizeof(struct acpi_rsdp), 16); - ut_assert_nextline("RSDT %16lx %5zx v01 U-BOOT U-BOOTBL %x INTL 0 OK", + ut_assert_nextline("RSDT %16lx %5zx v01 U-BOOT U-BOOTBL %x UBOO %x OK", addr, sizeof(struct acpi_table_header) + - 3 * sizeof(u32), OEM_REVISION); + 3 * sizeof(u32), OEM_REVISION, + CREATOR_REVISION); addr = ALIGN(addr + sizeof(struct acpi_rsdt), 16); - ut_assert_nextline("XSDT %16lx %5zx v01 U-BOOT U-BOOTBL %x INTL 0 OK", + ut_assert_nextline("XSDT %16lx %5zx v01 U-BOOT U-BOOTBL %x UBOO %x OK", addr, sizeof(struct acpi_table_header) + - 3 * sizeof(u64), OEM_REVISION); + 3 * sizeof(u64), OEM_REVISION, + CREATOR_REVISION); addr = ALIGN(addr + sizeof(struct acpi_xsdt), 64); - ut_assert_nextline("DMAR %16lx %5zx v01 U-BOOT U-BOOTBL %x INTL 0 OK", - addr, sizeof(struct acpi_dmar), OEM_REVISION); + ut_assert_nextline("DMAR %16lx %5zx v01 U-BOOT U-BOOTBL %x UBOO %x OK", + addr, sizeof(struct acpi_dmar), OEM_REVISION, + CREATOR_REVISION); addr = ALIGN(addr + sizeof(struct acpi_dmar), 16); - ut_assert_nextline("DMAR %16lx %5zx v01 U-BOOT U-BOOTBL %x INTL 0 OK", - addr, sizeof(struct acpi_dmar), OEM_REVISION); + ut_assert_nextline("DMAR %16lx %5zx v01 U-BOOT U-BOOTBL %x UBOO %x OK", + addr, sizeof(struct acpi_dmar), OEM_REVISION, + CREATOR_REVISION); addr = ALIGN(addr + sizeof(struct acpi_dmar), 16); - ut_assert_nextline("DMAR %16lx %5zx v01 U-BOOT U-BOOTBL %x INTL 0 OK", - addr, sizeof(struct acpi_dmar), OEM_REVISION); + ut_assert_nextline("DMAR %16lx %5zx v01 U-BOOT U-BOOTBL %x UBOO %x OK", + addr, sizeof(struct acpi_dmar), OEM_REVISION, + CREATOR_REVISION); ut_assert_console_end(); ut_assert_console_end(); unmap_sysmem(buf); -- 2.43.0