diff options
author | Heinrich Schuchardt <heinrich.schuchardt@canonical.com> | 2023-12-16 09:12:00 +0100 |
---|---|---|
committer | Simon Glass <sjg@chromium.org> | 2024-01-07 13:49:08 -0700 |
commit | f47c86f6d3b468a4d467814783937ee9162b92fc (patch) | |
tree | 0d7688c4b72ea315648f121eabb0b2c7251ee0d8 /lib | |
parent | c95ade8dcd1882d756c43375e91020562bc3886b (diff) | |
download | u-boot-f47c86f6d3b468a4d467814783937ee9162b92fc.tar.gz u-boot-f47c86f6d3b468a4d467814783937ee9162b92fc.tar.bz2 u-boot-f47c86f6d3b468a4d467814783937ee9162b92fc.zip |
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 <heinrich.schuchardt@canonical.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Rebased on -next to use nomap:
Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/acpi/acpi.c | 29 |
1 files changed, 24 insertions, 5 deletions
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; + } } } |