aboutsummaryrefslogtreecommitdiff
path: root/lib/acpi
diff options
context:
space:
mode:
Diffstat (limited to 'lib/acpi')
-rw-r--r--lib/acpi/Makefile2
-rw-r--r--lib/acpi/acpi.c37
-rw-r--r--lib/acpi/acpi_table.c4
-rw-r--r--lib/acpi/acpi_writer.c4
-rw-r--r--lib/acpi/base.c4
5 files changed, 35 insertions, 16 deletions
diff --git a/lib/acpi/Makefile b/lib/acpi/Makefile
index c1c9675b5d..cc2868488a 100644
--- a/lib/acpi/Makefile
+++ b/lib/acpi/Makefile
@@ -12,7 +12,7 @@ obj-$(CONFIG_$(SPL_)ACPIGEN) += acpi_table.o
obj-y += acpi_writer.o
# With QEMU the ACPI tables come from there, not from U-Boot
-ifndef CONFIG_QEMU
+ifndef CONFIG_QFW_ACPI
obj-y += base.o
obj-y += csrt.o
obj-y += mcfg.o
diff --git a/lib/acpi/acpi.c b/lib/acpi/acpi.c
index 939a638bb5..f4d5c1e25d 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,38 @@ 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);
- if (!memcmp(sig, "FACS", ACPI_NAME_LEN) &&
- fadt->firmware_ctrl)
- return map_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;
+ }
}
}
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/acpi_writer.c b/lib/acpi/acpi_writer.c
index a8dc207557..bbb9b54786 100644
--- a/lib/acpi/acpi_writer.c
+++ b/lib/acpi/acpi_writer.c
@@ -48,7 +48,7 @@ int acpi_write_one(struct acpi_ctx *ctx, const struct acpi_writer *entry)
return 0;
}
-#ifndef CONFIG_QEMU
+#ifndef CONFIG_QFW_ACPI
static int acpi_write_all(struct acpi_ctx *ctx)
{
const struct acpi_writer *writer =
@@ -115,7 +115,7 @@ ulong acpi_get_rsdp_addr(void)
return map_to_sysmem(gd->acpi_ctx->rsdp);
}
-#endif /* QEMU */
+#endif /* QFW_ACPI */
void acpi_setup_ctx(struct acpi_ctx *ctx, ulong start)
{
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;