Skip to content

Commit

Permalink
Abstract out support for locating an EFI config table
Browse files Browse the repository at this point in the history
We want to grab a pointer to the TPM final events table, so abstract out
the existing code for finding an FDT table and make it generic.

Signed-off-by: Matthew Garrett <mjg59@google.com>
Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
Tested-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
  • Loading branch information
Matthew Garrett authored and Jarkko Sakkinen committed Jun 24, 2019
1 parent db4d8cb commit 82d736a
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 18 deletions.
15 changes: 15 additions & 0 deletions drivers/firmware/efi/libstub/efi-stub-helper.c
Original file line number Diff line number Diff line change
Expand Up @@ -926,3 +926,18 @@ efi_status_t efi_exit_boot_services(efi_system_table_t *sys_table_arg,
fail:
return status;
}

void *get_efi_config_table(efi_system_table_t *sys_table, efi_guid_t guid)
{
efi_config_table_t *tables = (efi_config_table_t *)sys_table->tables;
int i;

for (i = 0; i < sys_table->nr_tables; i++) {
if (efi_guidcmp(tables[i].guid, guid) != 0)
continue;

return (void *)tables[i].table;
}

return NULL;
}
2 changes: 2 additions & 0 deletions drivers/firmware/efi/libstub/efistub.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@ efi_status_t check_platform_features(efi_system_table_t *sys_table_arg);

efi_status_t efi_random_get_seed(efi_system_table_t *sys_table_arg);

void *get_efi_config_table(efi_system_table_t *sys_table, efi_guid_t guid);

/* Helper macros for the usual case of using simple C variables: */
#ifndef fdt_setprop_inplace_var
#define fdt_setprop_inplace_var(fdt, node_offset, name, var) \
Expand Down
27 changes: 9 additions & 18 deletions drivers/firmware/efi/libstub/fdt.c
Original file line number Diff line number Diff line change
Expand Up @@ -363,26 +363,17 @@ efi_status_t allocate_new_fdt_and_exit_boot(efi_system_table_t *sys_table,

void *get_fdt(efi_system_table_t *sys_table, unsigned long *fdt_size)
{
efi_guid_t fdt_guid = DEVICE_TREE_GUID;
efi_config_table_t *tables;
int i;
void *fdt;

tables = (efi_config_table_t *)sys_table->tables;
fdt = get_efi_config_table(sys_table, DEVICE_TREE_GUID);

for (i = 0; i < sys_table->nr_tables; i++) {
void *fdt;
if (!fdt)
return NULL;

if (efi_guidcmp(tables[i].guid, fdt_guid) != 0)
continue;

fdt = (void *)tables[i].table;
if (fdt_check_header(fdt) != 0) {
pr_efi_err(sys_table, "Invalid header detected on UEFI supplied FDT, ignoring ...\n");
return NULL;
}
*fdt_size = fdt_totalsize(fdt);
return fdt;
if (fdt_check_header(fdt) != 0) {
pr_efi_err(sys_table, "Invalid header detected on UEFI supplied FDT, ignoring ...\n");
return NULL;
}

return NULL;
*fdt_size = fdt_totalsize(fdt);
return fdt;
}

0 comments on commit 82d736a

Please sign in to comment.