[PATCH v3 1/2] acpi: fix struct acpi_xsdt
Heinrich Schuchardt
heinrich.schuchardt at canonical.com
Sat Nov 18 23:52:47 CET 2023
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 at canonical.com>
Reviewed-by: Simon Glass <sjg at chromium.org>
---
v3:
no change
v2:
add unit test for offset of field Entry in RSDT, XSDT
---
include/acpi/acpi_table.h | 2 +-
test/dm/acpi.c | 10 ++++++++++
2 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/include/acpi/acpi_table.h b/include/acpi/acpi_table.h
index 1f85de091d..59ab79ed17 100644
--- a/include/acpi/acpi_table.h
+++ b/include/acpi/acpi_table.h
@@ -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];
};
diff --git a/test/dm/acpi.c b/test/dm/acpi.c
index 5997bda649..559cf1693b 100644
--- a/test/dm/acpi.c
+++ b/test/dm/acpi.c
@@ -651,3 +651,13 @@ static int dm_test_acpi_cmd_set(struct unit_test_state *uts)
return 0;
}
DM_TEST(dm_test_acpi_cmd_set, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);
+
+/* 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);
--
2.40.1
More information about the U-Boot
mailing list