提交 f17f2001 编写于 作者: M Mark Kettenis 提交者: Alexander Graf

efi_loader: ARM: don't attempt to enter non-secure mode twice

Multiple EFI binaries may be executed in sequence.  So if we already
are in non-secure mode after running the first one we should skip
the switching code since it no longer works once we're non-secure.
Signed-off-by: NMark Kettenis <kettenis@openbsd.org>
Signed-off-by: NAlexander Graf <agraf@suse.de>
上级 dc500c36
......@@ -200,6 +200,8 @@ static efi_status_t efi_run_in_el2(EFIAPI efi_status_t (*entry)(
#endif
#ifdef CONFIG_ARMV7_NONSEC
static bool is_nonsec;
static efi_status_t efi_run_in_hyp(EFIAPI efi_status_t (*entry)(
efi_handle_t image_handle, struct efi_system_table *st),
efi_handle_t image_handle, struct efi_system_table *st)
......@@ -207,6 +209,8 @@ static efi_status_t efi_run_in_hyp(EFIAPI efi_status_t (*entry)(
/* Enable caches again */
dcache_enable();
is_nonsec = true;
return efi_do_enter(image_handle, st, entry);
}
#endif
......@@ -368,7 +372,7 @@ static efi_status_t do_bootefi_exec(void *efi,
#endif
#ifdef CONFIG_ARMV7_NONSEC
if (armv7_boot_nonsec()) {
if (armv7_boot_nonsec() && !is_nonsec) {
dcache_disable(); /* flush cache before switch to HYP */
armv7_init_nonsec();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册