]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
acpi: fix struct acpi_xsdt
authorHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Tue, 21 Nov 2023 14:41:27 +0000 (15:41 +0100)
committerTom Rini <trini@konsulko.com>
Wed, 13 Dec 2023 23:39:06 +0000 (18:39 -0500)
The size of the ACPI table header is not a multiple of 8. We have to mark
struct acpi_xsdt as packed to correctly access field Entry.

Add a unit test for the offsets of field Entry in the RSDT and XSDT tables.

Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
include/acpi/acpi_table.h
test/dm/acpi.c

index a3b67259e64143b6117de04d48d869eceee6ea96..20ac3b51ba7fcac3cb28d863b0d7afa74f945cd8 100644 (file)
@@ -80,7 +80,7 @@ struct acpi_rsdt {
 };
 
 /* XSDT (Extended System Description Table) */
-struct acpi_xsdt {
+struct __packed acpi_xsdt {
        struct acpi_table_header header;
        u64 entry[MAX_ACPI_TABLES];
 };
index 5236b3994e2930705c7787d8e812ffbe84d0a2a6..7e661ee116608d9aaf03c264fe423b87813819ff 100644 (file)
@@ -747,3 +747,13 @@ static int dm_test_acpi_find_table(struct unit_test_state *uts)
        return 0;
 }
 DM_TEST(dm_test_acpi_find_table, 0);
+
+/* Test offsets in RSDT, XSDT */
+static int dm_test_acpi_offsets(struct unit_test_state *uts)
+{
+       ut_asserteq(36, offsetof(struct acpi_rsdt, entry));
+       ut_asserteq(36, offsetof(struct acpi_xsdt, entry));
+
+       return 0;
+}
+DM_TEST(dm_test_acpi_offsets, 0);