aboutsummaryrefslogtreecommitdiff
path: root/arch/x86/boot/compressed/acpi.c
diff options
context:
space:
mode:
authorMichael Roth <michael.roth@amd.com>2022-02-24 10:56:05 -0600
committerBorislav Petkov <bp@suse.de>2022-04-06 17:07:09 +0200
commit58f3e6b71f42f99ab5d0ab26ddf6e7ee5631f5db (patch)
treeac6b1e0154d6c952d678c23920ac930385baa812 /arch/x86/boot/compressed/acpi.c
parent7c4146e8885512719a50b641e9277a1712e052ff (diff)
x86/compressed/acpi: Move EFI system table lookup to helper
Future patches for SEV-SNP-validated CPUID will also require early parsing of the EFI configuration. Incrementally move the related code into a set of helpers that can be re-used for that purpose. Signed-off-by: Michael Roth <michael.roth@amd.com> Signed-off-by: Brijesh Singh <brijesh.singh@amd.com> Signed-off-by: Borislav Petkov <bp@suse.de> Link: https://lore.kernel.org/r/20220307213356.2797205-26-brijesh.singh@amd.com
Diffstat (limited to 'arch/x86/boot/compressed/acpi.c')
-rw-r--r--arch/x86/boot/compressed/acpi.c21
1 files changed, 7 insertions, 14 deletions
diff --git a/arch/x86/boot/compressed/acpi.c b/arch/x86/boot/compressed/acpi.c
index db6c561920f0..58a3d3f3e305 100644
--- a/arch/x86/boot/compressed/acpi.c
+++ b/arch/x86/boot/compressed/acpi.c
@@ -105,7 +105,7 @@ static acpi_physical_address kexec_get_rsdp_addr(void)
}
/* Get systab from boot params. */
- systab = (efi_system_table_64_t *) (ei->efi_systab | ((__u64)ei->efi_systab_hi << 32));
+ systab = (efi_system_table_64_t *)efi_get_system_table(boot_params);
if (!systab)
error("EFI system table not found in kexec boot_params.");
@@ -118,9 +118,8 @@ static acpi_physical_address kexec_get_rsdp_addr(void) { return 0; }
static acpi_physical_address efi_get_rsdp_addr(void)
{
#ifdef CONFIG_EFI
- unsigned long systab, config_tables;
+ unsigned long systab_pa, config_tables;
unsigned int nr_tables;
- struct efi_info *ei;
enum efi_type et;
bool efi_64;
@@ -132,24 +131,18 @@ static acpi_physical_address efi_get_rsdp_addr(void)
else
return 0;
- /* Get systab from boot params. */
- ei = &boot_params->efi_info;
-#ifdef CONFIG_X86_64
- systab = ei->efi_systab | ((__u64)ei->efi_systab_hi << 32);
-#else
- systab = ei->efi_systab;
-#endif
- if (!systab)
- error("EFI system table not found.");
+ systab_pa = efi_get_system_table(boot_params);
+ if (!systab_pa)
+ error("EFI support advertised, but unable to locate system table.");
/* Handle EFI bitness properly */
if (efi_64) {
- efi_system_table_64_t *stbl = (efi_system_table_64_t *)systab;
+ efi_system_table_64_t *stbl = (efi_system_table_64_t *)systab_pa;
config_tables = stbl->tables;
nr_tables = stbl->nr_tables;
} else {
- efi_system_table_32_t *stbl = (efi_system_table_32_t *)systab;
+ efi_system_table_32_t *stbl = (efi_system_table_32_t *)systab_pa;
config_tables = stbl->tables;
nr_tables = stbl->nr_tables;