[PATCH v3 01/11] efi_loader: use pointers in efi_acpi_register()
Heinrich Schuchardt
heinrich.schuchardt at canonical.com
Sun Jun 28 10:27:59 CEST 2026
Both efi_add_memory_map() and efi_install_configuration_table() expect
pointers and not virtual sandbox addresses.
We need to convert the virtual sandbox addresses in efi_acpi_register() to
pointers in memory before using them.
Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt at canonical.com>
---
v3:
no change
v2:
Use uintptr_t instead of void* to simplify code.
Use EFI_PAGE_SIZE instead of EFI_PAGE_MASK.
---
lib/efi_loader/efi_acpi.c | 35 +++++++++++++++++++++--------------
1 file changed, 21 insertions(+), 14 deletions(-)
diff --git a/lib/efi_loader/efi_acpi.c b/lib/efi_loader/efi_acpi.c
index 046986a7518..43a6cbe6cfc 100644
--- a/lib/efi_loader/efi_acpi.c
+++ b/lib/efi_loader/efi_acpi.c
@@ -25,7 +25,8 @@ static const efi_guid_t acpi_guid = EFI_ACPI_TABLE_GUID;
*/
efi_status_t efi_acpi_register(void)
{
- ulong addr, start, end;
+ void *addr;
+ uintptr_t start, end;
efi_status_t ret;
/*
@@ -37,39 +38,45 @@ efi_status_t efi_acpi_register(void)
*/
if (IS_ENABLED(CONFIG_BLOBLIST_TABLES)) {
int size;
- void *tab = bloblist_get_blob(BLOBLISTT_ACPI_TABLES, &size);
- if (!tab)
+ addr = bloblist_get_blob(BLOBLISTT_ACPI_TABLES, &size);
+
+ if (!addr)
return EFI_NOT_FOUND;
- addr = map_to_sysmem(tab);
- ret = efi_add_memory_map(addr, size,
+ ret = efi_add_memory_map((uintptr_t)addr, size,
EFI_ACPI_RECLAIM_MEMORY);
if (ret != EFI_SUCCESS)
return ret;
} else {
/* Mark space used for tables */
- start = ALIGN_DOWN(gd->arch.table_start, EFI_PAGE_MASK);
- end = ALIGN(gd->arch.table_end, EFI_PAGE_MASK);
+ start = ALIGN_DOWN((uintptr_t)map_sysmem(gd->arch.table_start,
+ 0),
+ EFI_PAGE_SIZE);
+ end = ALIGN((uintptr_t)map_sysmem(gd->arch.table_end, 0),
+ EFI_PAGE_SIZE);
ret = efi_add_memory_map(start, end - start,
EFI_ACPI_RECLAIM_MEMORY);
if (ret != EFI_SUCCESS)
return ret;
if (gd->arch.table_start_high) {
- start = ALIGN_DOWN(gd->arch.table_start_high,
- EFI_PAGE_MASK);
- end = ALIGN(gd->arch.table_end_high, EFI_PAGE_MASK);
+ start = ALIGN_DOWN(
+ (uintptr_t)map_sysmem(gd->arch.table_start_high,
+ 0),
+ EFI_PAGE_SIZE);
+ end = ALIGN((uintptr_t)map_sysmem(
+ gd->arch.table_end_high, 0),
+ EFI_PAGE_SIZE);
ret = efi_add_memory_map(start, end - start,
EFI_ACPI_RECLAIM_MEMORY);
if (ret != EFI_SUCCESS)
return ret;
}
- addr = gd_acpi_start();
+ addr = map_sysmem(gd_acpi_start(), 0);
}
- log_debug("EFI using ACPI tables at %lx\n", addr);
+ log_debug("EFI using ACPI tables at %p\n", addr);
/* And expose them to our EFI payload */
- return efi_install_configuration_table(&acpi_guid,
- (void *)(ulong)addr);
+ return efi_install_configuration_table(&acpi_guid, addr);
}
--
2.53.0
More information about the U-Boot
mailing list