[PATCH v5 1/4] efi: add EFI_SYSTEM_TABLE_POINTER for debug
Ilias Apalodimas
ilias.apalodimas at linaro.org
Mon Jun 16 15:00:29 CEST 2025
Thanks Paul
On Wed, 11 Jun 2025 at 08:08, Ying-Chun Liu (PaulLiu)
<paulliu at debian.org> wrote:
>
> From: "Ying-Chun Liu (PaulLiu)" <paul.liu at linaro.org>
>
> Add EFI_SYSTEM_TABLE_POINTER structure for remote debugger to locate
> the address of EFI_SYSTEM_TABLE.
>
> This feature is described in UEFI SPEC version 2.10. Section 18.4.2.
> The implementation ensures support for hardware-assisted debugging and
> provides a standardized mechanism for debuggers to discover the EFI
> system table.
>
> Signed-off-by: Ying-Chun Liu (PaulLiu) <paul.liu at linaro.org>
> Cc: Heinrich Schuchardt <xypron.glpk at gmx.de>
> Cc: Ilias Apalodimas <ilias.apalodimas at linaro.org>
> Cc: Peter Robinson <pbrobinson at gmail.com>
> Cc: Simon Glass <sjg at chromium.org>
> ---
Reviewed-by: Ilias Apalodimas <ilias.apalodimas at linaro.org>
A nit below
[...]
> +{
> + const int size_4MB = 0x00400000;
We already have macros for these
Thanks
/Ilias
> + uintptr_t addr;
> + u32 crc32_value;
> +
> + /* Allocate configuration table array */
> + addr = (uintptr_t)efi_alloc_aligned_pages(sizeof(struct efi_system_table_pointer),
> + EFI_RUNTIME_SERVICES_DATA,
> + size_4MB);
> +
> + if (!addr) {
> + log_err("Installing EFI system table pointer failed\n");
> + return EFI_OUT_OF_RESOURCES;
> + }
> +
> + systab_pointer = (struct efi_system_table_pointer *)addr;
> + memset(systab_pointer, 0, sizeof(struct efi_system_table_pointer));
> +
> + systab_pointer->signature = EFI_SYSTEM_TABLE_SIGNATURE;
> + systab_pointer->efi_system_table_base = (efi_physical_addr_t)&systab;
> +
> + crc32_value = crc32(0,
> + (const unsigned char *)systab_pointer,
> + sizeof(struct efi_system_table_pointer));
> + systab_pointer->crc32 = crc32_value;
> +
> + return EFI_SUCCESS;
> +}
> diff --git a/lib/efi_loader/efi_setup.c b/lib/efi_loader/efi_setup.c
> index 48f91da5df7..6193b9f6d0c 100644
> --- a/lib/efi_loader/efi_setup.c
> +++ b/lib/efi_loader/efi_setup.c
> @@ -278,6 +278,14 @@ efi_status_t efi_init_obj_list(void)
> if (ret != EFI_SUCCESS)
> goto out;
>
> + /* Initialize system table pointer */
> + if (IS_ENABLED(CONFIG_EFI_DEBUG_SUPPORT)) {
> + ret = efi_initialize_system_table_pointer();
> + if (ret != EFI_SUCCESS) {
> + goto out;
> + }
> + }
> +
> if (IS_ENABLED(CONFIG_EFI_ECPT)) {
> ret = efi_ecpt_register();
> if (ret != EFI_SUCCESS)
> --
> 2.39.5
>
More information about the U-Boot
mailing list