Hi Heinrich, On Thu, 6 Mar 2025 at 08:16, Heinrich Schuchardt <xypron.g...@gmx.de> wrote: > > On 06.03.25 15:31, Simon Glass wrote: > > When BLOBLIST_TABLES is used, the ACPI tables are not currently added to > > the list of EFI tables. While we don't want to create a new memory > > EFI tables are added by InstallConfigurationTable(). > > It seems this patch is not about the list of EFI configuration tables > but about the EFI memory map. > > Could you, please, update the commit message accordingly.
It currently does not install the table. See the 'if (IS_ENABLED(CONFIG_BLOBLIST_TABLES))' below. > > > region, we do want to tell EFI about the tables. > > > > Fix this by covering this case. At some point the non-bloblist code can > > likely be removed. > > > > Signed-off-by: Simon Glass <s...@chromium.org> > > Fixes: 3da59ee9579 ("efi_loader: Avoid mapping the ACPI tables twice") > > --- > > > > lib/efi_loader/efi_acpi.c | 44 ++++++++++++++++++++++++++------------- > > 1 file changed, 30 insertions(+), 14 deletions(-) > > > > diff --git a/lib/efi_loader/efi_acpi.c b/lib/efi_loader/efi_acpi.c > > index ff305a6b13e..b8b3a3670da 100644 > > --- a/lib/efi_loader/efi_acpi.c > > +++ b/lib/efi_loader/efi_acpi.c > > @@ -5,6 +5,9 @@ > > * Copyright (C) 2018, Bin Meng <bmeng...@gmail.com> > > */ > > > > +#define LOG_CATEGORY LOGC_ACPI > > + > > +#include <bloblist.h> > > #include <efi_loader.h> > > #include <log.h> > > #include <mapmem.h> > > @@ -32,25 +35,38 @@ efi_status_t efi_acpi_register(void) > > * add_u_boot_and_runtime(). At some point that function could create > > a > > * more detailed map. > > */ > > - if (IS_ENABLED(CONFIG_BLOBLIST_TABLES)) > > - return EFI_SUCCESS; > > - > > - /* Mark space used for tables */ > > - start = ALIGN_DOWN(gd->arch.table_start, EFI_PAGE_MASK); > > - end = ALIGN(gd->arch.table_end, EFI_PAGE_MASK); > > - 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); > > + if (IS_ENABLED(CONFIG_BLOBLIST_TABLES)) { > > + int size; > > + void *tab = bloblist_get_blob(BLOBLISTT_ACPI_TABLES, &size); > > Why don't you set gd->arch.table_* in the bloblist case? > Wouldn't this be an easier fix? Yes, I did consider that as a quick hack. But I'm going to remove those fields. They are a pain to maintain and bloblist is easier. > > Best regards > > Heinrich > > > + > > + if (!tab) > > + return EFI_NOT_FOUND; > > + addr = map_to_sysmem(tab); > > + > > + ret = efi_add_memory_map(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); > > 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); > > + ret = efi_add_memory_map(start, end - start, > > + EFI_ACPI_RECLAIM_MEMORY); > > + if (ret != EFI_SUCCESS) > > + return ret; > > + } > > > > - addr = gd_acpi_start(); > > + addr = gd_acpi_start(); > > + } > > log_debug("EFI using ACPI tables at %lx\n", addr); > > > > /* And expose them to our EFI payload */ > Regards, Simon