mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2026-06-02 09:46:37 +03:00
acpi: fix initial RSDT and XSDT size
When creating the RSDT and the XSDT table they contain no entries. The table size therefore must equal the header size. Without this change a NULL deference has been observed in acpi_find_table() when running `ut dm` on sandbox64_defconfig executed via `sudo ./u-boot -D`. Fixes:94ba15a3f1("x86: Move base tables to a writer function") Fixes:7e586f6907("acpi: Put table-setup code in its own function") Fixes:ab5efd576c("x86: acpi: Adjust order in acpi_table.c") Fixes:867bcb63e7("x86: Generate a valid ACPI table") Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> Reviewed-by: Simon Glass <sjg@chromium.org> Update dm_test_acpi_ctx_and_base_tables() in test/dm/acpi.c to expect sizeof(struct acpi_table_header) for the initial table length (instead of sizeof(*rsdt) / sizeof(*xsdt)), and to compute the checksum over header->length bytes rather than the full struct size: Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
committed by
Simon Glass
parent
22a285380e
commit
3d09ec64eb
@@ -374,14 +374,14 @@ static int dm_test_acpi_ctx_and_base_tables(struct unit_test_state *uts)
|
||||
rsdt = PTR_ALIGN((void *)rsdp + sizeof(*rsdp), 16);
|
||||
ut_asserteq_ptr(rsdt, ctx.rsdt);
|
||||
ut_asserteq_mem("RSDT", rsdt->header.signature, ACPI_NAME_LEN);
|
||||
ut_asserteq(sizeof(*rsdt), rsdt->header.length);
|
||||
ut_assertok(table_compute_checksum(rsdt, sizeof(*rsdt)));
|
||||
ut_asserteq(sizeof(struct acpi_table_header), rsdt->header.length);
|
||||
ut_assertok(table_compute_checksum(rsdt, rsdt->header.length));
|
||||
|
||||
xsdt = PTR_ALIGN((void *)rsdt + sizeof(*rsdt), 16);
|
||||
ut_asserteq_ptr(xsdt, ctx.xsdt);
|
||||
ut_asserteq_mem("XSDT", xsdt->header.signature, ACPI_NAME_LEN);
|
||||
ut_asserteq(sizeof(*xsdt), xsdt->header.length);
|
||||
ut_assertok(table_compute_checksum(xsdt, sizeof(*xsdt)));
|
||||
ut_asserteq(sizeof(struct acpi_table_header), xsdt->header.length);
|
||||
ut_assertok(table_compute_checksum(xsdt, xsdt->header.length));
|
||||
|
||||
end = PTR_ALIGN((void *)xsdt + sizeof(*xsdt), 64);
|
||||
ut_asserteq_ptr(end, ctx.current);
|
||||
|
||||
Reference in New Issue
Block a user