summaryrefslogtreecommitdiff
path: root/drivers/misc
diff options
context:
space:
mode:
authorTom Rini <[email protected]>2023-07-17 10:38:28 -0400
committerTom Rini <[email protected]>2023-07-17 10:38:28 -0400
commit13aa090b87a0fbdfe690011669b9fdb96bb1ccc7 (patch)
tree69af16bc8ecc4b6e8106a750e31e51d7ec078828 /drivers/misc
parentaa817dfcaf158dda71358d02181bf52c30dbe4c6 (diff)
parentb8956425d525c3c25fd218f252f89a5e44df6a9f (diff)
Merge https://source.denx.de/u-boot/custodians/u-boot-x86
- bootstd: Add a bootmeth for ChromiumOS on x86 - x86: Use qemu-x86_64 to boot EFI installers
Diffstat (limited to 'drivers/misc')
-rw-r--r--drivers/misc/qfw.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/misc/qfw.c b/drivers/misc/qfw.c
index 9ef95caa895..7c01bf23d53 100644
--- a/drivers/misc/qfw.c
+++ b/drivers/misc/qfw.c
@@ -18,6 +18,7 @@
#include <dm.h>
#include <misc.h>
#include <tables_csum.h>
+#include <asm/acpi_table.h>
#if defined(CONFIG_GENERATE_ACPI_TABLE) && !defined(CONFIG_SANDBOX)
/*
@@ -64,6 +65,11 @@ static int bios_linker_allocate(struct udevice *dev,
printf("error: allocating resource\n");
return -ENOMEM;
}
+ if (aligned_addr < gd->arch.table_start_high)
+ gd->arch.table_start_high = aligned_addr;
+ if (aligned_addr + size > gd->arch.table_end_high)
+ gd->arch.table_end_high = aligned_addr + size;
+
} else if (entry->alloc.zone == BIOS_LINKER_LOADER_ALLOC_ZONE_FSEG) {
aligned_addr = ALIGN(*addr, align);
} else {
@@ -188,6 +194,10 @@ ulong write_acpi_tables(ulong addr)
return addr;
}
+ /* QFW always puts tables at high addresses */
+ gd->arch.table_start_high = (ulong)table_loader;
+ gd->arch.table_end_high = (ulong)table_loader;
+
qfw_read_entry(dev, be16_to_cpu(file->cfg.select), size, table_loader);
for (i = 0; i < (size / sizeof(*entry)); i++) {
@@ -227,6 +237,9 @@ out:
}
free(table_loader);
+
+ gd_set_acpi_start(acpi_get_rsdp_addr());
+
return addr;
}