diff options
Diffstat (limited to 'drivers/firmware/efi')
-rw-r--r-- | drivers/firmware/efi/efi.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c index 4b7ee3fa9224..25f7e3d22d1c 100644 --- a/drivers/firmware/efi/efi.c +++ b/drivers/firmware/efi/efi.c @@ -52,6 +52,9 @@ EXPORT_SYMBOL(efi); unsigned long __ro_after_init efi_rng_seed = EFI_INVALID_TABLE_ADDR; static unsigned long __initdata mem_reserve = EFI_INVALID_TABLE_ADDR; static unsigned long __initdata rt_prop = EFI_INVALID_TABLE_ADDR; +#ifdef CONFIG_OPTEE_EFI_VARS +static unsigned long __initdata tee_var = EFI_INVALID_TABLE_ADDR; +#endif struct mm_struct efi_mm = { .mm_rb = RB_ROOT, @@ -179,6 +182,17 @@ static struct efivar_operations generic_ops; static int generic_ops_register(void) { +#ifdef CONFIG_OPTEE_EFI_VARS + if (tee_var != EFI_INVALID_TABLE_ADDR ) { + efi_status_t ret; + + pr_err("EFI variable ops swapped\n"); + ret = optee_efi_ops_init(&generic_ops); + if (ret == EFI_SUCCESS) + return efivars_register(&generic_efivars, &generic_ops, efi_kobj); + } +#endif + generic_ops.get_variable = efi.get_variable; generic_ops.get_next_variable = efi.get_next_variable; generic_ops.query_variable_store = efi_query_variable_store; @@ -519,7 +533,10 @@ static const efi_config_table_type_t common_tables[] __initconst = { {LINUX_EFI_TPM_EVENT_LOG_GUID, &efi.tpm_log, "TPMEventLog" }, {LINUX_EFI_TPM_FINAL_LOG_GUID, &efi.tpm_final_log, "TPMFinalLog" }, {LINUX_EFI_MEMRESERVE_TABLE_GUID, &mem_reserve, "MEMRESERVE" }, - {EFI_RT_PROPERTIES_TABLE_GUID, &rt_prop, "RTPROP" }, + {EFI_RT_PROPERTIES_TABLE_GUID, &rt_prop, "RTPROPS" }, +#ifdef CONFIG_OPTEE_EFI_VARS + {EFI_INT_VARIABLES_TABLE_GUID, &tee_var, "INTVAR" }, +#endif #ifdef CONFIG_EFI_RCI2_TABLE {DELLEMC_EFI_RCI2_TABLE_GUID, &rci2_table_phys }, #endif |