From 5574d82fbc3ed1e150f6151ad20be968819baa88 Mon Sep 17 00:00:00 2001 From: Heinrich Schuchardt Date: Sat, 18 Nov 2023 22:57:26 +0100 Subject: acpi: consider XSDT in acpi_find_table() The RSDT table is deprecated and does not exist on all systems. By preference scan XSDT for the table to find. If no XSDT table exists, try to use the RSDT table. Signed-off-by: Heinrich Schuchardt Reviewed-by: Simon Glass Reviewed-by: Ilias Apalodimas --- lib/acpi/acpi.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'lib/acpi/acpi.c') diff --git a/lib/acpi/acpi.c b/lib/acpi/acpi.c index 14b15754f4..f21e509461 100644 --- a/lib/acpi/acpi.c +++ b/lib/acpi/acpi.c @@ -16,18 +16,30 @@ struct acpi_table_header *acpi_find_table(const char *sig) { struct acpi_rsdp *rsdp; struct acpi_rsdt *rsdt; + struct acpi_xsdt *xsdt; int len, i, count; rsdp = map_sysmem(gd_acpi_start(), 0); if (!rsdp) return NULL; - rsdt = map_sysmem(rsdp->rsdt_address, 0); - len = rsdt->header.length - sizeof(rsdt->header); - count = len / sizeof(u32); + if (rsdp->xsdt_address) { + xsdt = map_sysmem(rsdp->xsdt_address, 0); + len = xsdt->header.length - sizeof(xsdt->header); + count = len / sizeof(u64); + } else { + if (!rsdp->rsdt_address) + return NULL; + rsdt = map_sysmem(rsdp->rsdt_address, 0); + len = rsdt->header.length - sizeof(rsdt->header); + count = len / sizeof(u32); + } for (i = 0; i < count; i++) { struct acpi_table_header *hdr; - hdr = map_sysmem(rsdt->entry[i], 0); + if (rsdp->xsdt_address) + hdr = map_sysmem(xsdt->entry[i], 0); + else + hdr = map_sysmem(rsdt->entry[i], 0); if (!memcmp(hdr->signature, sig, ACPI_NAME_LEN)) return hdr; if (!memcmp(hdr->signature, "FACP", ACPI_NAME_LEN)) { -- cgit v1.2.3 From 467382ca03758e4f3f13107e3a83669e93a7461e Mon Sep 17 00:00:00 2001 From: Tom Rini Date: Thu, 14 Dec 2023 13:16:58 -0500 Subject: lib: Remove inclusion from these files After some header file cleanups to add missing include files, remove common.h from all files in the lib directory. This primarily means just dropping the line but in a few cases we need to add in other header files now. Reviewed-by: Simon Glass Signed-off-by: Tom Rini --- lib/abuf.c | 1 - lib/acpi/acpi.c | 1 - lib/acpi/acpi_device.c | 1 - lib/acpi/acpi_dp.c | 1 - lib/acpi/acpi_table.c | 1 - lib/acpi/acpi_writer.c | 2 +- lib/acpi/acpigen.c | 1 - lib/acpi/base.c | 3 ++- lib/acpi/csrt.c | 2 +- lib/acpi/dsdt.c | 2 +- lib/acpi/facs.c | 2 +- lib/acpi/mcfg.c | 4 +++- lib/acpi/ssdt.c | 3 ++- lib/addr_map.c | 1 - lib/aes.c | 2 +- lib/aes/aes-decrypt.c | 1 - lib/asm-offsets.c | 2 +- lib/at91/at91.c | 1 - lib/bch.c | 1 - lib/binman.c | 1 - lib/bzip2/bzlib.c | 3 +-- lib/bzip2/bzlib_decompress.c | 1 - lib/charset.c | 1 - lib/circbuf.c | 1 - lib/crc16-ccitt.c | 2 -- lib/crc32.c | 1 - lib/crc32c.c | 1 - lib/crc8.c | 2 -- lib/crypt/crypt-port.h | 3 +++ lib/crypt/crypt.c | 1 - lib/crypto/x509_public_key.c | 1 - lib/date.c | 1 - lib/dhry/cmd_dhry.c | 3 ++- lib/dhry/dhry_1.c | 2 +- lib/dhry/dhry_2.c | 2 +- lib/efi/efi.c | 1 - lib/efi/efi_app.c | 1 - lib/efi/efi_info.c | 1 - lib/efi/efi_stub.c | 1 - lib/efi_driver/efi_block_device.c | 1 - lib/efi_driver/efi_uclass.c | 1 - lib/efi_selftest/efi_selftest_esrt.c | 1 - lib/efi_selftest/efi_selftest_miniapp_exception.c | 1 - lib/efi_selftest/efi_selftest_miniapp_exit.c | 1 - lib/efi_selftest/efi_selftest_miniapp_return.c | 1 - lib/elf.c | 1 - lib/errno_str.c | 2 +- lib/fdtdec.c | 1 - lib/fdtdec_common.c | 1 - lib/fdtdec_test.c | 1 - lib/getopt.c | 2 +- lib/gunzip.c | 1 - lib/gzip.c | 1 - lib/hang.c | 2 +- lib/hash-checksum.c | 1 - lib/hashtable.c | 1 - lib/hexdump.c | 2 +- lib/image-sparse.c | 1 - lib/initcall.c | 1 - lib/linux_compat.c | 1 - lib/list_sort.c | 1 - lib/lmb.c | 1 - lib/lz4.c | 1 - lib/lz4_wrapper.c | 1 - lib/lzma/LzmaDec.c | 1 - lib/lzma/LzmaTools.c | 1 - lib/lzo/lzo1x_decompress.c | 3 ++- lib/md5.c | 1 - lib/membuff.c | 1 - lib/net_utils.c | 2 +- lib/of_live.c | 1 - lib/optee/optee.c | 1 - lib/panic.c | 1 - lib/physmem.c | 2 +- lib/qsort.c | 1 - lib/rand.c | 1 - lib/rc4.c | 3 --- lib/rsa/rsa-keyprop.c | 1 - lib/rsa/rsa-mod-exp.c | 1 - lib/rsa/rsa-verify.c | 1 - lib/rtc-lib.c | 1 - lib/semihosting.c | 3 ++- lib/slre.c | 2 +- lib/smbios-parser.c | 1 - lib/smbios.c | 1 - lib/strto.c | 2 +- lib/tables_csum.c | 3 +-- lib/time.c | 1 - lib/tiny-printf.c | 1 - lib/tpm-common.c | 1 - lib/tpm-v1.c | 1 - lib/tpm-v2.c | 1 - lib/tpm_api.c | 1 - lib/trace.c | 2 +- lib/uuid.c | 2 -- lib/vsprintf.c | 1 - lib/zstd/zstd.c | 2 +- 97 files changed, 36 insertions(+), 103 deletions(-) (limited to 'lib/acpi/acpi.c') diff --git a/lib/abuf.c b/lib/abuf.c index ce2cff53dc..937c3df351 100644 --- a/lib/abuf.c +++ b/lib/abuf.c @@ -7,7 +7,6 @@ */ #ifndef USE_HOSTCC -#include #include #include #include diff --git a/lib/acpi/acpi.c b/lib/acpi/acpi.c index f21e509461..939a638bb5 100644 --- a/lib/acpi/acpi.c +++ b/lib/acpi/acpi.c @@ -5,7 +5,6 @@ * Copyright 2023 Google LLC */ -#include #include #include #include diff --git a/lib/acpi/acpi_device.c b/lib/acpi/acpi_device.c index 1b838fdbd6..ed94194346 100644 --- a/lib/acpi/acpi_device.c +++ b/lib/acpi/acpi_device.c @@ -6,7 +6,6 @@ * Mostly taken from coreboot file of the same name */ -#include #include #include #include diff --git a/lib/acpi/acpi_dp.c b/lib/acpi/acpi_dp.c index 7e3e3259d8..6733809986 100644 --- a/lib/acpi/acpi_dp.c +++ b/lib/acpi/acpi_dp.c @@ -6,7 +6,6 @@ * Mostly taken from coreboot file acpi_device.c */ -#include #include #include #include diff --git a/lib/acpi/acpi_table.c b/lib/acpi/acpi_table.c index a8d4b47000..e74522e997 100644 --- a/lib/acpi/acpi_table.c +++ b/lib/acpi/acpi_table.c @@ -5,7 +5,6 @@ * Copyright 2019 Google LLC */ -#include #include #include #include diff --git a/lib/acpi/acpi_writer.c b/lib/acpi/acpi_writer.c index 946f90e8e7..a8dc207557 100644 --- a/lib/acpi/acpi_writer.c +++ b/lib/acpi/acpi_writer.c @@ -7,13 +7,13 @@ #define LOG_CATEGORY LOGC_ACPI -#include #include #include #include #include #include #include +#include DECLARE_GLOBAL_DATA_PTR; diff --git a/lib/acpi/acpigen.c b/lib/acpi/acpigen.c index e395226e3d..b95cabb914 100644 --- a/lib/acpi/acpigen.c +++ b/lib/acpi/acpigen.c @@ -8,7 +8,6 @@ #define LOG_CATEGORY LOGC_ACPI -#include #include #include #include diff --git a/lib/acpi/base.c b/lib/acpi/base.c index 26bf0cb8d3..07b53e0c56 100644 --- a/lib/acpi/base.c +++ b/lib/acpi/base.c @@ -7,12 +7,13 @@ #define LOG_CATEGORY LOGC_ACPI -#include #include #include #include #include #include +#include +#include void acpi_write_rsdp(struct acpi_rsdp *rsdp, struct acpi_rsdt *rsdt, struct acpi_xsdt *xsdt) diff --git a/lib/acpi/csrt.c b/lib/acpi/csrt.c index 2ba86f2295..00927e5340 100644 --- a/lib/acpi/csrt.c +++ b/lib/acpi/csrt.c @@ -7,11 +7,11 @@ #define LOG_CATEGORY LOGC_ACPI -#include #include #include #include #include +#include __weak int acpi_fill_csrt(struct acpi_ctx *ctx) { diff --git a/lib/acpi/dsdt.c b/lib/acpi/dsdt.c index db98cc20e1..206e1e2678 100644 --- a/lib/acpi/dsdt.c +++ b/lib/acpi/dsdt.c @@ -7,10 +7,10 @@ #define LOG_CATEGORY LOGC_ACPI -#include #include #include #include +#include /* * IASL compiles the dsdt entries and writes the hex values diff --git a/lib/acpi/facs.c b/lib/acpi/facs.c index e89f43ca5c..86c28120c7 100644 --- a/lib/acpi/facs.c +++ b/lib/acpi/facs.c @@ -7,9 +7,9 @@ #define LOG_CATEGORY LOGC_ACPI -#include #include #include +#include int acpi_write_facs(struct acpi_ctx *ctx, const struct acpi_writer *entry) { diff --git a/lib/acpi/mcfg.c b/lib/acpi/mcfg.c index 7404ae586a..8b8a5bfafa 100644 --- a/lib/acpi/mcfg.c +++ b/lib/acpi/mcfg.c @@ -7,11 +7,13 @@ #define LOG_CATEGORY LOGC_ACPI -#include #include #include #include #include +#include +#include +#include int acpi_create_mcfg_mmconfig(struct acpi_mcfg_mmconfig *mmconfig, u32 base, u16 seg_nr, u8 start, u8 end) diff --git a/lib/acpi/ssdt.c b/lib/acpi/ssdt.c index b140b4b2ff..b0a96f846e 100644 --- a/lib/acpi/ssdt.c +++ b/lib/acpi/ssdt.c @@ -7,10 +7,11 @@ #define LOG_CATEGORY LOGC_ACPI -#include #include #include #include +#include +#include int acpi_write_ssdt(struct acpi_ctx *ctx, const struct acpi_writer *entry) { diff --git a/lib/addr_map.c b/lib/addr_map.c index 86e932e4b5..f85fb0c7fb 100644 --- a/lib/addr_map.c +++ b/lib/addr_map.c @@ -3,7 +3,6 @@ * Copyright 2008 Freescale Semiconductor, Inc. */ -#include #include #include diff --git a/lib/aes.c b/lib/aes.c index 4fca85ebee..39ad4a990f 100644 --- a/lib/aes.c +++ b/lib/aes.c @@ -22,9 +22,9 @@ */ #ifndef USE_HOSTCC -#include #include #include +#include #else #include #endif diff --git a/lib/aes/aes-decrypt.c b/lib/aes/aes-decrypt.c index 345029fa78..741102a472 100644 --- a/lib/aes/aes-decrypt.c +++ b/lib/aes/aes-decrypt.c @@ -4,7 +4,6 @@ */ #ifndef USE_HOSTCC -#include #include #endif #include diff --git a/lib/asm-offsets.c b/lib/asm-offsets.c index 216d9716d0..4e2dbda9a7 100644 --- a/lib/asm-offsets.c +++ b/lib/asm-offsets.c @@ -11,9 +11,9 @@ * #defines from the assembly-language output. */ -#include #include #include +#include #include diff --git a/lib/at91/at91.c b/lib/at91/at91.c index 048597690b..bd31e9e41d 100644 --- a/lib/at91/at91.c +++ b/lib/at91/at91.c @@ -4,7 +4,6 @@ * Wenyou.Yang */ -#include #include #include "atmel_logo_8bpp.h" diff --git a/lib/bch.c b/lib/bch.c index 72b4fdcc9c..a309a8dfcb 100644 --- a/lib/bch.c +++ b/lib/bch.c @@ -54,7 +54,6 @@ */ #ifndef USE_HOSTCC -#include #include #include #include diff --git a/lib/binman.c b/lib/binman.c index cfe1e5f807..9047f5275f 100644 --- a/lib/binman.c +++ b/lib/binman.c @@ -6,7 +6,6 @@ * Written by Simon Glass */ -#include #include #include #include diff --git a/lib/bzip2/bzlib.c b/lib/bzip2/bzlib.c index bd589aa810..f7318b7886 100644 --- a/lib/bzip2/bzlib.c +++ b/lib/bzip2/bzlib.c @@ -1,7 +1,6 @@ -#include -#include #include #include +#include /* * This file is a modified version of bzlib.c from the bzip2-1.0.2 diff --git a/lib/bzip2/bzlib_decompress.c b/lib/bzip2/bzlib_decompress.c index 3b417d57b2..e56ab6674b 100644 --- a/lib/bzip2/bzlib_decompress.c +++ b/lib/bzip2/bzlib_decompress.c @@ -1,5 +1,4 @@ #include -#include #include /*-------------------------------------------------------------*/ diff --git a/lib/charset.c b/lib/charset.c index 5e4c4f948a..89057ef7ce 100644 --- a/lib/charset.c +++ b/lib/charset.c @@ -5,7 +5,6 @@ * Copyright (c) 2017 Rob Clark */ -#include #include #include #include diff --git a/lib/circbuf.c b/lib/circbuf.c index fa79c148da..2e161ae8d8 100644 --- a/lib/circbuf.c +++ b/lib/circbuf.c @@ -4,7 +4,6 @@ * Gerry Hamel, geh@ti.com, Texas Instruments */ -#include #include #include diff --git a/lib/crc16-ccitt.c b/lib/crc16-ccitt.c index 6cadbc103d..6fa4e93ed1 100644 --- a/lib/crc16-ccitt.c +++ b/lib/crc16-ccitt.c @@ -24,8 +24,6 @@ #ifdef USE_HOSTCC #include -#else -#include #endif #include diff --git a/lib/crc32.c b/lib/crc32.c index f6fad8c15d..f36f176306 100644 --- a/lib/crc32.c +++ b/lib/crc32.c @@ -11,7 +11,6 @@ #ifdef USE_HOSTCC #include #else -#include #include #endif #include diff --git a/lib/crc32c.c b/lib/crc32c.c index 016b34a523..7026ac4c33 100644 --- a/lib/crc32c.c +++ b/lib/crc32c.c @@ -10,7 +10,6 @@ * any later version. */ -#include #include uint32_t crc32c_cal(uint32_t crc, const char *data, int length, diff --git a/lib/crc8.c b/lib/crc8.c index 87b87b675b..20d46d1614 100644 --- a/lib/crc8.c +++ b/lib/crc8.c @@ -5,8 +5,6 @@ #ifdef USE_HOSTCC #include -#else -#include #endif #include diff --git a/lib/crypt/crypt-port.h b/lib/crypt/crypt-port.h index 6b9542d75b..50dde68b5c 100644 --- a/lib/crypt/crypt-port.h +++ b/lib/crypt/crypt-port.h @@ -1,6 +1,9 @@ /* SPDX-License-Identifier: GPL-2.0+ */ /* Copyright (C) 2020 Steffen Jaeckel */ +#include +#include +#include #include #include diff --git a/lib/crypt/crypt.c b/lib/crypt/crypt.c index 247c34b2a9..8f5fadb582 100644 --- a/lib/crypt/crypt.c +++ b/lib/crypt/crypt.c @@ -1,7 +1,6 @@ // SPDX-License-Identifier: GPL-2.0+ /* Copyright (C) 2020 Steffen Jaeckel */ -#include #include #include "crypt-port.h" diff --git a/lib/crypto/x509_public_key.c b/lib/crypto/x509_public_key.c index 30071233ee..a10145a7cd 100644 --- a/lib/crypto/x509_public_key.c +++ b/lib/crypto/x509_public_key.c @@ -7,7 +7,6 @@ #define pr_fmt(fmt) "X.509: "fmt #ifdef __UBOOT__ -#include #include #include #include diff --git a/lib/date.c b/lib/date.c index e3d22459cd..0deac8a1be 100644 --- a/lib/date.c +++ b/lib/date.c @@ -4,7 +4,6 @@ * Wolfgang Denk, DENX Software Engineering, wd@denx.de. */ -#include #include #include #include diff --git a/lib/dhry/cmd_dhry.c b/lib/dhry/cmd_dhry.c index 77b52a2300..e52beaeaad 100644 --- a/lib/dhry/cmd_dhry.c +++ b/lib/dhry/cmd_dhry.c @@ -3,9 +3,10 @@ * (C) Copyright 2015 Google, Inc */ -#include #include #include +#include +#include #include "dhry.h" static int do_dhry(struct cmd_tbl *cmdtp, int flag, int argc, diff --git a/lib/dhry/dhry_1.c b/lib/dhry/dhry_1.c index dcc224fb38..252cd14a65 100644 --- a/lib/dhry/dhry_1.c +++ b/lib/dhry/dhry_1.c @@ -42,8 +42,8 @@ ***************************************************************************/ char SCCSid[] = "@(#) @(#)dhry_1.c:3.4 -- 5/15/91 19:30:21"; -#include #include +#include #include "dhry.h" diff --git a/lib/dhry/dhry_2.c b/lib/dhry/dhry_2.c index 1ba879673e..a74197d884 100644 --- a/lib/dhry/dhry_2.c +++ b/lib/dhry/dhry_2.c @@ -39,7 +39,7 @@ ****************************************************************************/ /* SCCSid is defined in dhry_1.c */ -#include +#include #include "dhry.h" #ifndef REG diff --git a/lib/efi/efi.c b/lib/efi/efi.c index aa42f1842f..bcb34d6746 100644 --- a/lib/efi/efi.c +++ b/lib/efi/efi.c @@ -10,7 +10,6 @@ * Common EFI functions */ -#include #include #include #include diff --git a/lib/efi/efi_app.c b/lib/efi/efi_app.c index c5eb816655..119db6602c 100644 --- a/lib/efi/efi_app.c +++ b/lib/efi/efi_app.c @@ -8,7 +8,6 @@ * This file implements U-Boot running as an EFI application. */ -#include #include #include #include diff --git a/lib/efi/efi_info.c b/lib/efi/efi_info.c index 4d78923c4d..5b564c5651 100644 --- a/lib/efi/efi_info.c +++ b/lib/efi/efi_info.c @@ -5,7 +5,6 @@ * Access to the EFI information table */ -#include #include #include #include diff --git a/lib/efi/efi_stub.c b/lib/efi/efi_stub.c index c9eb32ec10..40fc29d9ad 100644 --- a/lib/efi/efi_stub.c +++ b/lib/efi/efi_stub.c @@ -9,7 +9,6 @@ * EFI application. It can be built either in 32-bit or 64-bit mode. */ -#include #include #include #include diff --git a/lib/efi_driver/efi_block_device.c b/lib/efi_driver/efi_block_device.c index e3abd90275..34a0365739 100644 --- a/lib/efi_driver/efi_block_device.c +++ b/lib/efi_driver/efi_block_device.c @@ -28,7 +28,6 @@ * iPXE uses the simple file protocol to load Grub or the Linux Kernel. */ -#include #include #include #include diff --git a/lib/efi_driver/efi_uclass.c b/lib/efi_driver/efi_uclass.c index 66a45e156d..e1e28df20b 100644 --- a/lib/efi_driver/efi_uclass.c +++ b/lib/efi_driver/efi_uclass.c @@ -17,7 +17,6 @@ * controllers. */ -#include #include #include #include diff --git a/lib/efi_selftest/efi_selftest_esrt.c b/lib/efi_selftest/efi_selftest_esrt.c index 922ff253c7..b7688deb49 100644 --- a/lib/efi_selftest/efi_selftest_esrt.c +++ b/lib/efi_selftest/efi_selftest_esrt.c @@ -4,7 +4,6 @@ * * Copyright (C) 2021 Arm Ltd. */ -#include #include #include diff --git a/lib/efi_selftest/efi_selftest_miniapp_exception.c b/lib/efi_selftest/efi_selftest_miniapp_exception.c index a9ad381001..f668cdac4a 100644 --- a/lib/efi_selftest/efi_selftest_miniapp_exception.c +++ b/lib/efi_selftest/efi_selftest_miniapp_exception.c @@ -7,7 +7,6 @@ * This EFI application triggers an exception. */ -#include #include #include diff --git a/lib/efi_selftest/efi_selftest_miniapp_exit.c b/lib/efi_selftest/efi_selftest_miniapp_exit.c index 1c42d6dd40..8b2e60cc71 100644 --- a/lib/efi_selftest/efi_selftest_miniapp_exit.c +++ b/lib/efi_selftest/efi_selftest_miniapp_exit.c @@ -8,7 +8,6 @@ * It uses the Exit boot service to return. */ -#include #include static efi_guid_t loaded_image_protocol_guid = EFI_LOADED_IMAGE_PROTOCOL_GUID; diff --git a/lib/efi_selftest/efi_selftest_miniapp_return.c b/lib/efi_selftest/efi_selftest_miniapp_return.c index 45366aa9c6..8792d78ab3 100644 --- a/lib/efi_selftest/efi_selftest_miniapp_return.c +++ b/lib/efi_selftest/efi_selftest_miniapp_return.c @@ -8,7 +8,6 @@ * It returns directly without calling the Exit boot service. */ -#include #include /* diff --git a/lib/elf.c b/lib/elf.c index 0476b2614c..9a794f9cba 100644 --- a/lib/elf.c +++ b/lib/elf.c @@ -3,7 +3,6 @@ Copyright (c) 2001 William L. Pitts */ -#include #include #include #include diff --git a/lib/errno_str.c b/lib/errno_str.c index 2e5f4a887d..752d4eb47a 100644 --- a/lib/errno_str.c +++ b/lib/errno_str.c @@ -4,8 +4,8 @@ * * SDPX-License-Identifier: GPL-2.0+ */ -#include #include +#include #define ERRNO_MSG(errno, msg) msg #define SAME_AS(x) (const char *)&errno_message[x] diff --git a/lib/fdtdec.c b/lib/fdtdec.c index 7a69167648..4016bf3c11 100644 --- a/lib/fdtdec.c +++ b/lib/fdtdec.c @@ -7,7 +7,6 @@ */ #ifndef USE_HOSTCC -#include #include #include #include diff --git a/lib/fdtdec_common.c b/lib/fdtdec_common.c index ddaca0087e..ca36ff1595 100644 --- a/lib/fdtdec_common.c +++ b/lib/fdtdec_common.c @@ -8,7 +8,6 @@ */ #ifndef USE_HOSTCC -#include #include #include #include diff --git a/lib/fdtdec_test.c b/lib/fdtdec_test.c index 85351c75ca..1e4d5fc832 100644 --- a/lib/fdtdec_test.c +++ b/lib/fdtdec_test.c @@ -6,7 +6,6 @@ * Copyright (c) 2011 The Chromium OS Authors. */ -#include #include #include #include diff --git a/lib/getopt.c b/lib/getopt.c index 8b4515dc19..e9175e2fff 100644 --- a/lib/getopt.c +++ b/lib/getopt.c @@ -8,9 +8,9 @@ #define LOG_CATEGORY LOGC_CORE -#include #include #include +#include void getopt_init_state(struct getopt_state *gs) { diff --git a/lib/gunzip.c b/lib/gunzip.c index 932e3e8036..e71d8d00cc 100644 --- a/lib/gunzip.c +++ b/lib/gunzip.c @@ -4,7 +4,6 @@ * Wolfgang Denk, DENX Software Engineering, wd@denx.de. */ -#include #include #include #include diff --git a/lib/gzip.c b/lib/gzip.c index 2595b2d04b..5d9c19598d 100644 --- a/lib/gzip.c +++ b/lib/gzip.c @@ -4,7 +4,6 @@ * Lei Wen , Marvell Inc. */ -#include #include #include #include diff --git a/lib/hang.c b/lib/hang.c index 2735774f9a..3cfb06e9ca 100644 --- a/lib/hang.c +++ b/lib/hang.c @@ -7,9 +7,9 @@ * u-boot. */ -#include #include #include +#include #include /** diff --git a/lib/hash-checksum.c b/lib/hash-checksum.c index 68c290d64d..1970a74129 100644 --- a/lib/hash-checksum.c +++ b/lib/hash-checksum.c @@ -4,7 +4,6 @@ */ #ifndef USE_HOSTCC -#include #include #include #include diff --git a/lib/hashtable.c b/lib/hashtable.c index f2d36bd34b..a0060f6a0d 100644 --- a/lib/hashtable.c +++ b/lib/hashtable.c @@ -30,7 +30,6 @@ # endif # endif #else /* U-Boot build */ -# include # include # include #endif diff --git a/lib/hexdump.c b/lib/hexdump.c index 149c93ead8..33e3e6e518 100644 --- a/lib/hexdump.c +++ b/lib/hexdump.c @@ -8,9 +8,9 @@ * more details. */ -#include #include #include +#include #include #include #include diff --git a/lib/image-sparse.c b/lib/image-sparse.c index 323aad981c..f828906469 100644 --- a/lib/image-sparse.c +++ b/lib/image-sparse.c @@ -35,7 +35,6 @@ */ #include -#include #include #include #include diff --git a/lib/initcall.c b/lib/initcall.c index 33b7d761dc..ce317af213 100644 --- a/lib/initcall.c +++ b/lib/initcall.c @@ -3,7 +3,6 @@ * Copyright (c) 2013 The Chromium OS Authors. */ -#include #include #include #include diff --git a/lib/linux_compat.c b/lib/linux_compat.c index c83426f59d..985e88eb39 100644 --- a/lib/linux_compat.c +++ b/lib/linux_compat.c @@ -1,5 +1,4 @@ -#include #include #include #include diff --git a/lib/list_sort.c b/lib/list_sort.c index 1c9e061732..a6e54d5bc4 100644 --- a/lib/list_sort.c +++ b/lib/list_sort.c @@ -6,7 +6,6 @@ #include #else #include -#include #include #include #endif diff --git a/lib/lmb.c b/lib/lmb.c index da924c6789..44f9820531 100644 --- a/lib/lmb.c +++ b/lib/lmb.c @@ -6,7 +6,6 @@ * Copyright (C) 2001 Peter Bergner. */ -#include #include #include #include diff --git a/lib/lz4.c b/lib/lz4.c index 5337842126..d365dc727c 100644 --- a/lib/lz4.c +++ b/lib/lz4.c @@ -27,7 +27,6 @@ * - LZ4 homepage : http://www.lz4.org * - LZ4 source repository : https://github.com/lz4/lz4 */ -#include #include #include #include diff --git a/lib/lz4_wrapper.c b/lib/lz4_wrapper.c index 67dea2ff39..4d48e7b0e8 100644 --- a/lib/lz4_wrapper.c +++ b/lib/lz4_wrapper.c @@ -3,7 +3,6 @@ * Copyright 2015 Google Inc. */ -#include #include #include #include diff --git a/lib/lzma/LzmaDec.c b/lib/lzma/LzmaDec.c index a90b35c6a9..1da3f0a14a 100644 --- a/lib/lzma/LzmaDec.c +++ b/lib/lzma/LzmaDec.c @@ -2,7 +2,6 @@ 2009-09-20 : Igor Pavlov : Public domain */ #include -#include #include #include "LzmaDec.h" diff --git a/lib/lzma/LzmaTools.c b/lib/lzma/LzmaTools.c index 55f64cd289..400d606784 100644 --- a/lib/lzma/LzmaTools.c +++ b/lib/lzma/LzmaTools.c @@ -18,7 +18,6 @@ */ #include -#include #include #include diff --git a/lib/lzo/lzo1x_decompress.c b/lib/lzo/lzo1x_decompress.c index 65fef0b0eb..5d70fa4133 100644 --- a/lib/lzo/lzo1x_decompress.c +++ b/lib/lzo/lzo1x_decompress.c @@ -11,8 +11,9 @@ * Richard Purdie */ -#include +#include #include +#include #include #include #include "lzodefs.h" diff --git a/lib/md5.c b/lib/md5.c index 1636ab9366..faf3f78ab1 100644 --- a/lib/md5.c +++ b/lib/md5.c @@ -28,7 +28,6 @@ #include "compiler.h" #ifndef USE_HOSTCC -#include #include #endif /* USE_HOSTCC */ #include diff --git a/lib/membuff.c b/lib/membuff.c index 36dc43a523..3c6c0ae125 100644 --- a/lib/membuff.c +++ b/lib/membuff.c @@ -6,7 +6,6 @@ * Copyright (c) 1992 Simon Glass */ -#include #include #include #include diff --git a/lib/net_utils.c b/lib/net_utils.c index 4283c13a31..c70fef0d99 100644 --- a/lib/net_utils.c +++ b/lib/net_utils.c @@ -9,9 +9,9 @@ * Copyright 2009 Dirk Behme, dirk.behme@googlemail.com */ -#include #include #include +#include struct in_addr string_to_ip(const char *s) { diff --git a/lib/of_live.c b/lib/of_live.c index 812c488f60..90b9459ede 100644 --- a/lib/of_live.c +++ b/lib/of_live.c @@ -10,7 +10,6 @@ #define LOG_CATEGORY LOGC_DT -#include #include #include #include diff --git a/lib/optee/optee.c b/lib/optee/optee.c index b036224044..393f2715a9 100644 --- a/lib/optee/optee.c +++ b/lib/optee/optee.c @@ -4,7 +4,6 @@ * Bryan O'Donoghue */ -#include #include #include #include diff --git a/lib/panic.c b/lib/panic.c index 66ae17f3df..0f578b5b51 100644 --- a/lib/panic.c +++ b/lib/panic.c @@ -9,7 +9,6 @@ * Wirzenius wrote this portably, Torvalds fucked it up :-) */ -#include #include #if !defined(CONFIG_PANIC_HANG) #include diff --git a/lib/physmem.c b/lib/physmem.c index fc90ce4d7c..562c74d37f 100644 --- a/lib/physmem.c +++ b/lib/physmem.c @@ -8,11 +8,11 @@ * Software Foundation. */ -#include #include #include #include #include +#include phys_addr_t __weak arch_phys_memset(phys_addr_t s, int c, phys_size_t n) { diff --git a/lib/qsort.c b/lib/qsort.c index 2f18588dfc..a2562c4942 100644 --- a/lib/qsort.c +++ b/lib/qsort.c @@ -17,7 +17,6 @@ #include #include -#include #include #include diff --git a/lib/rand.c b/lib/rand.c index d256baf5ce..d6f2977e8d 100644 --- a/lib/rand.c +++ b/lib/rand.c @@ -7,7 +7,6 @@ * Michael Walle */ -#include #include static unsigned int y = 1U; diff --git a/lib/rc4.c b/lib/rc4.c index 720112d1fd..3839924a2b 100644 --- a/lib/rc4.c +++ b/lib/rc4.c @@ -7,9 +7,6 @@ * Rivest Cipher 4 (RC4) implementation */ -#ifndef USE_HOSTCC -#include -#endif #include void rc4_encode(unsigned char *buf, unsigned int len, const unsigned char key[16]) diff --git a/lib/rsa/rsa-keyprop.c b/lib/rsa/rsa-keyprop.c index 98855f67b8..80d0594a43 100644 --- a/lib/rsa/rsa-keyprop.c +++ b/lib/rsa/rsa-keyprop.c @@ -9,7 +9,6 @@ * Copyright (c) 2016 Thomas Pornin */ -#include #include #include #include diff --git a/lib/rsa/rsa-mod-exp.c b/lib/rsa/rsa-mod-exp.c index d259b2aedf..5b3ea02f82 100644 --- a/lib/rsa/rsa-mod-exp.c +++ b/lib/rsa/rsa-mod-exp.c @@ -4,7 +4,6 @@ */ #ifndef USE_HOSTCC -#include #include #include #include diff --git a/lib/rsa/rsa-verify.c b/lib/rsa/rsa-verify.c index 096e7f6d17..1007b6979a 100644 --- a/lib/rsa/rsa-verify.c +++ b/lib/rsa/rsa-verify.c @@ -4,7 +4,6 @@ */ #ifndef USE_HOSTCC -#include #include #include #include diff --git a/lib/rtc-lib.c b/lib/rtc-lib.c index 1f7bdade29..46dcfba271 100644 --- a/lib/rtc-lib.c +++ b/lib/rtc-lib.c @@ -10,7 +10,6 @@ * - January is month 1. */ -#include #include #include diff --git a/lib/semihosting.c b/lib/semihosting.c index 831774e356..9be5bffd30 100644 --- a/lib/semihosting.c +++ b/lib/semihosting.c @@ -4,9 +4,10 @@ * Copyright 2014 Broadcom Corporation */ -#include #include #include +#include +#include #define SYSOPEN 0x01 #define SYSCLOSE 0x02 diff --git a/lib/slre.c b/lib/slre.c index e1a50443e0..277a59a03a 100644 --- a/lib/slre.c +++ b/lib/slre.c @@ -21,8 +21,8 @@ #include #else #include -#include #include +#include #endif /* SLRE_TEST */ #include diff --git a/lib/smbios-parser.c b/lib/smbios-parser.c index 2b9392936b..b578c30840 100644 --- a/lib/smbios-parser.c +++ b/lib/smbios-parser.c @@ -5,7 +5,6 @@ #define LOG_CATEGORY LOGC_BOOT -#include #include static inline int verify_checksum(const struct smbios_entry *e) diff --git a/lib/smbios.c b/lib/smbios.c index 3f0e1d5295..45480b01af 100644 --- a/lib/smbios.c +++ b/lib/smbios.c @@ -5,7 +5,6 @@ * Adapted from coreboot src/arch/x86/smbios.c */ -#include #include #include #include diff --git a/lib/strto.c b/lib/strto.c index 154921165c..5157332d6c 100644 --- a/lib/strto.c +++ b/lib/strto.c @@ -9,9 +9,9 @@ * Wirzenius wrote this portably, Torvalds fucked it up :-) */ -#include #include #include +#include #include /* from lib/kstrtox.c */ diff --git a/lib/tables_csum.c b/lib/tables_csum.c index e2630d57d9..636aa59676 100644 --- a/lib/tables_csum.c +++ b/lib/tables_csum.c @@ -3,8 +3,7 @@ * Copyright (C) 2015, Bin Meng */ -#include -#include +#include u8 table_compute_checksum(void *v, int len) { diff --git a/lib/time.c b/lib/time.c index 00f4a1ac8f..872f73d521 100644 --- a/lib/time.c +++ b/lib/time.c @@ -4,7 +4,6 @@ * Wolfgang Denk, DENX Software Engineering, wd@denx.de. */ -#include #include #include #include diff --git a/lib/tiny-printf.c b/lib/tiny-printf.c index f661fc6505..9a70c6095b 100644 --- a/lib/tiny-printf.c +++ b/lib/tiny-printf.c @@ -8,7 +8,6 @@ * Copyright (C) 2004,2008 Kustaa Nyholm */ -#include #include #include #include diff --git a/lib/tpm-common.c b/lib/tpm-common.c index 82ffdc5341..b592c22bfc 100644 --- a/lib/tpm-common.c +++ b/lib/tpm-common.c @@ -6,7 +6,6 @@ #define LOG_CATEGORY UCLASS_TPM -#include #include #include #include diff --git a/lib/tpm-v1.c b/lib/tpm-v1.c index 60a18ca504..e66023da5e 100644 --- a/lib/tpm-v1.c +++ b/lib/tpm-v1.c @@ -6,7 +6,6 @@ #define LOG_CATEGORY UCLASS_TPM -#include #include #include #include diff --git a/lib/tpm-v2.c b/lib/tpm-v2.c index bd0fb078dc..68eaaa639f 100644 --- a/lib/tpm-v2.c +++ b/lib/tpm-v2.c @@ -5,7 +5,6 @@ * Author: Miquel Raynal */ -#include #include #include #include diff --git a/lib/tpm_api.c b/lib/tpm_api.c index 3ef5e81179..39a5121e30 100644 --- a/lib/tpm_api.c +++ b/lib/tpm_api.c @@ -3,7 +3,6 @@ * Copyright 2019 Google LLC */ -#include #include #include #include diff --git a/lib/trace.c b/lib/trace.c index 4874bef861..cabbe47b58 100644 --- a/lib/trace.c +++ b/lib/trace.c @@ -3,10 +3,10 @@ * Copyright (c) 2012 The Chromium OS Authors. */ -#include #include #include #include +#include #include #include #include diff --git a/lib/uuid.c b/lib/uuid.c index afb40bff50..0be22bc05f 100644 --- a/lib/uuid.c +++ b/lib/uuid.c @@ -9,7 +9,6 @@ #define LOG_CATEGOT LOGC_CORE -#include #include #include #include @@ -18,7 +17,6 @@ #include #include #include -#include #include #include #include diff --git a/lib/vsprintf.c b/lib/vsprintf.c index e14c6ca9f9..27ea9c907a 100644 --- a/lib/vsprintf.c +++ b/lib/vsprintf.c @@ -13,7 +13,6 @@ * from hush: simple_itoa() was lifted from boa-0.93.15 */ -#include #include #include #include diff --git a/lib/zstd/zstd.c b/lib/zstd/zstd.c index 3a2abc8367..14bde36906 100644 --- a/lib/zstd/zstd.c +++ b/lib/zstd/zstd.c @@ -5,10 +5,10 @@ #define LOG_CATEGORY LOGC_BOOT -#include #include #include #include +#include #include int zstd_decompress(struct abuf *in, struct abuf *out) -- cgit v1.2.3 From a8efebe71978b3b21e04c7f104987ada879e0800 Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Sun, 31 Dec 2023 08:25:54 -0700 Subject: acpi: Write pointers to tables instead of addresses Sandbox uses an API to map between addresses and pointers. This allows it to have (emulated) memory at zero and avoid arch-specific addressing details. It also allows memory-mapped peripherals to work. As an example, on many machines sandbox maps address 100 to pointer value 10000000. However this is not correct for ACPI, if sandbox starts another program (e.g EFI app) and passes it the tables. That app has no knowledge of sandbox's address mapping. So to make this work we want to store 10000000 as the value in the table. Add two new 'nomap' functions which clearly make this exeption to how sandbox works. This should allow EFI apps to access ACPI tables with sandbox, e.g. for testing purposes. Signed-off-by: Simon Glass Suggested-by: Heinrich Schuchardt --- arch/sandbox/include/asm/io.h | 16 ++++++++++++++++ arch/x86/lib/acpi_table.c | 6 +++--- cmd/acpi.c | 12 ++++++------ include/mapmem.h | 18 ++++++++++++++++++ lib/acpi/acpi.c | 12 ++++++------ lib/acpi/acpi_table.c | 4 ++-- lib/acpi/base.c | 4 ++-- test/dm/acpi.c | 10 +++++----- 8 files changed, 58 insertions(+), 24 deletions(-) (limited to 'lib/acpi/acpi.c') diff --git a/arch/sandbox/include/asm/io.h b/arch/sandbox/include/asm/io.h index 3c0a102697..a23bd64994 100644 --- a/arch/sandbox/include/asm/io.h +++ b/arch/sandbox/include/asm/io.h @@ -231,5 +231,21 @@ static inline void unmap_sysmem(const void *vaddr) unmap_physmem(vaddr, MAP_WRBACK); } +/** + * nomap_sysmem() - pass through an address unchanged + * + * This is used to indicate an address which should NOT be mapped, e.g. in + * SMBIOS tables. Using this function instead of a case shows that the sandbox + * conversion has been done + */ +static inline void *nomap_sysmem(phys_addr_t paddr, unsigned long len) +{ + return (void *)(uintptr_t)paddr; +} + +static inline phys_addr_t nomap_to_sysmem(const void *ptr) +{ + return (phys_addr_t)(uintptr_t)ptr; +} #endif diff --git a/arch/x86/lib/acpi_table.c b/arch/x86/lib/acpi_table.c index c5b33dc65d..b366e44e33 100644 --- a/arch/x86/lib/acpi_table.c +++ b/arch/x86/lib/acpi_table.c @@ -197,7 +197,7 @@ int acpi_write_tcpa(struct acpi_ctx *ctx, const struct acpi_writer *entry) tcpa->platform_class = 0; tcpa->laml = size; - tcpa->lasa = map_to_sysmem(log); + tcpa->lasa = nomap_to_sysmem(log); /* (Re)calculate length and checksum */ current = (u32)tcpa + sizeof(struct acpi_tcpa); @@ -268,7 +268,7 @@ static int acpi_write_tpm2(struct acpi_ctx *ctx, /* Fill the log area size and start address fields. */ tpm2->laml = tpm2_log_len; - tpm2->lasa = map_to_sysmem(lasa); + tpm2->lasa = nomap_to_sysmem(lasa); /* Calculate checksum. */ header->checksum = table_compute_checksum(tpm2, header->length); @@ -430,7 +430,7 @@ int acpi_write_gnvs(struct acpi_ctx *ctx, const struct acpi_writer *entry) u32 *gnvs = (u32 *)((u32)ctx->dsdt + i); if (*gnvs == ACPI_GNVS_ADDR) { - *gnvs = map_to_sysmem(ctx->current); + *gnvs = nomap_to_sysmem(ctx->current); log_debug("Fix up global NVS in DSDT to %#08x\n", *gnvs); break; diff --git a/cmd/acpi.c b/cmd/acpi.c index 0c14409242..79e9335b5d 100644 --- a/cmd/acpi.c +++ b/cmd/acpi.c @@ -45,7 +45,7 @@ static int dump_table_name(const char *sig) if (!hdr) return -ENOENT; printf("%.*s @ %16lx\n", ACPI_NAME_LEN, hdr->signature, - (ulong)map_to_sysmem(hdr)); + (ulong)nomap_to_sysmem(hdr)); print_buffer(0, hdr, 1, hdr->length, 0); return 0; @@ -54,9 +54,9 @@ static int dump_table_name(const char *sig) static void list_fadt(struct acpi_fadt *fadt) { if (fadt->dsdt) - dump_hdr(map_sysmem(fadt->dsdt, 0)); + dump_hdr(nomap_sysmem(fadt->dsdt, 0)); if (fadt->firmware_ctrl) - dump_hdr(map_sysmem(fadt->firmware_ctrl, 0)); + dump_hdr(nomap_sysmem(fadt->firmware_ctrl, 0)); } static void list_rsdt(struct acpi_rsdp *rsdp) @@ -66,11 +66,11 @@ static void list_rsdt(struct acpi_rsdp *rsdp) struct acpi_xsdt *xsdt; if (rsdp->rsdt_address) { - rsdt = map_sysmem(rsdp->rsdt_address, 0); + rsdt = nomap_sysmem(rsdp->rsdt_address, 0); dump_hdr(&rsdt->header); } if (rsdp->xsdt_address) { - xsdt = map_sysmem(rsdp->xsdt_address, 0); + xsdt = nomap_sysmem(rsdp->xsdt_address, 0); dump_hdr(&xsdt->header); len = xsdt->header.length - sizeof(xsdt->header); count = len / sizeof(u64); @@ -91,7 +91,7 @@ static void list_rsdt(struct acpi_rsdp *rsdp) entry = rsdt->entry[i]; if (!entry) break; - hdr = map_sysmem(entry, 0); + hdr = nomap_sysmem(entry, 0); dump_hdr(hdr); if (!memcmp(hdr->signature, "FACP", ACPI_NAME_LEN)) list_fadt((struct acpi_fadt *)hdr); diff --git a/include/mapmem.h b/include/mapmem.h index bb68b4c11a..f496c96d16 100644 --- a/include/mapmem.h +++ b/include/mapmem.h @@ -28,6 +28,24 @@ static inline phys_addr_t map_to_sysmem(const void *ptr) { return (phys_addr_t)(uintptr_t)ptr; } + +/** + * nomap_sysmem() - pass through an address unchanged + * + * This is used to indicate an address which should NOT be mapped, e.g. in + * SMBIOS tables. Using this function instead of a case shows that the sandbox + * conversion has been done + */ +static inline void *nomap_sysmem(phys_addr_t paddr, unsigned long len) +{ + return (void *)(uintptr_t)paddr; +} + +static inline phys_addr_t nomap_to_sysmem(const void *ptr) +{ + return (phys_addr_t)(uintptr_t)ptr; +} + # endif #endif /* __MAPMEM_H */ diff --git a/lib/acpi/acpi.c b/lib/acpi/acpi.c index 939a638bb5..bcafd77175 100644 --- a/lib/acpi/acpi.c +++ b/lib/acpi/acpi.c @@ -22,13 +22,13 @@ struct acpi_table_header *acpi_find_table(const char *sig) if (!rsdp) return NULL; if (rsdp->xsdt_address) { - xsdt = map_sysmem(rsdp->xsdt_address, 0); + xsdt = nomap_sysmem(rsdp->xsdt_address, 0); len = xsdt->header.length - sizeof(xsdt->header); count = len / sizeof(u64); } else { if (!rsdp->rsdt_address) return NULL; - rsdt = map_sysmem(rsdp->rsdt_address, 0); + rsdt = nomap_sysmem(rsdp->rsdt_address, 0); len = rsdt->header.length - sizeof(rsdt->header); count = len / sizeof(u32); } @@ -36,19 +36,19 @@ struct acpi_table_header *acpi_find_table(const char *sig) struct acpi_table_header *hdr; if (rsdp->xsdt_address) - hdr = map_sysmem(xsdt->entry[i], 0); + hdr = nomap_sysmem(xsdt->entry[i], 0); else - hdr = map_sysmem(rsdt->entry[i], 0); + hdr = nomap_sysmem(rsdt->entry[i], 0); if (!memcmp(hdr->signature, sig, ACPI_NAME_LEN)) return hdr; if (!memcmp(hdr->signature, "FACP", ACPI_NAME_LEN)) { struct acpi_fadt *fadt = (struct acpi_fadt *)hdr; if (!memcmp(sig, "DSDT", ACPI_NAME_LEN) && fadt->dsdt) - return map_sysmem(fadt->dsdt, 0); + return nomap_sysmem(fadt->dsdt, 0); if (!memcmp(sig, "FACS", ACPI_NAME_LEN) && fadt->firmware_ctrl) - return map_sysmem(fadt->firmware_ctrl, 0); + return nomap_sysmem(fadt->firmware_ctrl, 0); } } diff --git a/lib/acpi/acpi_table.c b/lib/acpi/acpi_table.c index e74522e997..39dd53ec40 100644 --- a/lib/acpi/acpi_table.c +++ b/lib/acpi/acpi_table.c @@ -167,7 +167,7 @@ int acpi_add_table(struct acpi_ctx *ctx, void *table) } /* Add table to the RSDT */ - rsdt->entry[i] = map_to_sysmem(table); + rsdt->entry[i] = nomap_to_sysmem(table); /* Fix RSDT length or the kernel will assume invalid entries */ rsdt->header.length = sizeof(struct acpi_table_header) + @@ -185,7 +185,7 @@ int acpi_add_table(struct acpi_ctx *ctx, void *table) xsdt = ctx->xsdt; /* Add table to the XSDT */ - xsdt->entry[i] = map_to_sysmem(table); + xsdt->entry[i] = nomap_to_sysmem(table); /* Fix XSDT length */ xsdt->header.length = sizeof(struct acpi_table_header) + diff --git a/lib/acpi/base.c b/lib/acpi/base.c index 07b53e0c56..8b6af2bc43 100644 --- a/lib/acpi/base.c +++ b/lib/acpi/base.c @@ -24,10 +24,10 @@ void acpi_write_rsdp(struct acpi_rsdp *rsdp, struct acpi_rsdt *rsdt, memcpy(rsdp->oem_id, OEM_ID, 6); if (rsdt) - rsdp->rsdt_address = map_to_sysmem(rsdt); + rsdp->rsdt_address = nomap_to_sysmem(rsdt); if (xsdt) - rsdp->xsdt_address = map_to_sysmem(xsdt); + rsdp->xsdt_address = nomap_to_sysmem(xsdt); rsdp->length = sizeof(struct acpi_rsdp); rsdp->revision = ACPI_RSDP_REV_ACPI_2_0; diff --git a/test/dm/acpi.c b/test/dm/acpi.c index 1211e2f0e7..c53ebcdb1c 100644 --- a/test/dm/acpi.c +++ b/test/dm/acpi.c @@ -291,8 +291,8 @@ static int dm_test_acpi_write_tables(struct unit_test_state *uts) /* Check that the pointers were added correctly */ for (i = 0; i < 3; i++) { - ut_asserteq(map_to_sysmem(dmar + i), ctx.rsdt->entry[i]); - ut_asserteq(map_to_sysmem(dmar + i), ctx.xsdt->entry[i]); + ut_asserteq(nomap_to_sysmem(dmar + i), ctx.rsdt->entry[i]); + ut_asserteq(nomap_to_sysmem(dmar + i), ctx.xsdt->entry[i]); } ut_asserteq(0, ctx.rsdt->entry[3]); ut_asserteq(0, ctx.xsdt->entry[3]); @@ -371,8 +371,8 @@ static int dm_test_acpi_ctx_and_base_tables(struct unit_test_state *uts) end = PTR_ALIGN((void *)xsdt + sizeof(*xsdt), 64); ut_asserteq_ptr(end, ctx.current); - ut_asserteq(map_to_sysmem(rsdt), rsdp->rsdt_address); - ut_asserteq(map_to_sysmem(xsdt), rsdp->xsdt_address); + ut_asserteq(nomap_to_sysmem(rsdt), rsdp->rsdt_address); + ut_asserteq(nomap_to_sysmem(xsdt), rsdp->xsdt_address); return 0; } @@ -445,7 +445,7 @@ static int dm_test_acpi_cmd_dump(struct unit_test_state *uts) /* Now a real table */ console_record_reset(); run_command("acpi dump dmar", 0); - addr = ALIGN(map_to_sysmem(ctx.xsdt) + sizeof(struct acpi_xsdt), 64); + addr = ALIGN(nomap_to_sysmem(ctx.xsdt) + sizeof(struct acpi_xsdt), 64); ut_assert_nextline("DMAR @ %16lx", addr); ut_assert_nextlines_are_dump(0x30); ut_assert_console_end(); -- cgit v1.2.3 From f47c86f6d3b468a4d467814783937ee9162b92fc Mon Sep 17 00:00:00 2001 From: Heinrich Schuchardt Date: Sat, 16 Dec 2023 09:12:00 +0100 Subject: acpi: support 64bit in acpi_find_table for DSDT and FACS Use X_DSDT and X_FIRMWARE_CTRL if available. Signed-off-by: Heinrich Schuchardt Reviewed-by: Simon Glass Rebased on -next to use nomap: Signed-off-by: Simon Glass --- lib/acpi/acpi.c | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) (limited to 'lib/acpi/acpi.c') diff --git a/lib/acpi/acpi.c b/lib/acpi/acpi.c index bcafd77175..f4d5c1e25d 100644 --- a/lib/acpi/acpi.c +++ b/lib/acpi/acpi.c @@ -44,11 +44,30 @@ struct acpi_table_header *acpi_find_table(const char *sig) if (!memcmp(hdr->signature, "FACP", ACPI_NAME_LEN)) { struct acpi_fadt *fadt = (struct acpi_fadt *)hdr; - if (!memcmp(sig, "DSDT", ACPI_NAME_LEN) && fadt->dsdt) - return nomap_sysmem(fadt->dsdt, 0); - if (!memcmp(sig, "FACS", ACPI_NAME_LEN) && - fadt->firmware_ctrl) - return nomap_sysmem(fadt->firmware_ctrl, 0); + if (!memcmp(sig, "DSDT", ACPI_NAME_LEN)) { + void *dsdt; + + if (fadt->header.revision >= 3 && fadt->x_dsdt) + dsdt = nomap_sysmem(fadt->x_dsdt, 0); + else if (fadt->dsdt) + dsdt = nomap_sysmem(fadt->dsdt, 0); + else + dsdt = NULL; + return dsdt; + } + + if (!memcmp(sig, "FACS", ACPI_NAME_LEN)) { + void *facs; + + if (fadt->header.revision >= 3 && + fadt->x_firmware_ctrl) + facs = nomap_sysmem(fadt->x_firmware_ctrl, 0); + else if (fadt->firmware_ctrl) + facs = nomap_sysmem(fadt->firmware_ctrl, 0); + else + facs = NULL; + return facs; + } } } -- cgit v1.2.3