efi_loader: clean up UEFI sub-system initialization
authorHeinrich Schuchardt <xypron.glpk@gmx.de>
Sat, 4 May 2019 09:47:48 +0000 (11:47 +0200)
committerHeinrich Schuchardt <xypron.glpk@gmx.de>
Tue, 7 May 2019 19:10:03 +0000 (21:10 +0200)
allow_unaligned(), switch_to_non_secure_mode(), and efi_init_obj_list() are
called in sequence in multiple places.

Move calls to allow_unaligned() and switch_to_non_secure_mode() to
efi_init_obj_list().

Remove unused includes.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
cmd/bootefi.c
lib/efi_loader/efi_setup.c

index f1d7d8bc6634f4b1624959667457bcd0bbb21372..52116b308cc5050e259d258420a8acf6071b8e79 100644 (file)
@@ -6,7 +6,6 @@
  */
 
 #include <common.h>
-#include <bootm.h>
 #include <charset.h>
 #include <command.h>
 #include <dm.h>
@@ -17,9 +16,7 @@
 #include <linux/libfdt_env.h>
 #include <mapmem.h>
 #include <memalign.h>
-#include <asm/global_data.h>
 #include <asm-generic/sections.h>
-#include <asm-generic/unaligned.h>
 #include <linux/linkage.h>
 
 DECLARE_GLOBAL_DATA_PTR;
@@ -27,15 +24,6 @@ DECLARE_GLOBAL_DATA_PTR;
 static struct efi_device_path *bootefi_image_path;
 static struct efi_device_path *bootefi_device_path;
 
-/*
- * Allow unaligned memory access.
- *
- * This routine is overridden by architectures providing this feature.
- */
-void __weak allow_unaligned(void)
-{
-}
-
 /*
  * Set the load options of an image from an environment variable.
  *
@@ -338,11 +326,6 @@ static int do_efibootmgr(const char *fdt_opt)
        efi_handle_t handle;
        efi_status_t ret;
 
-       /* Allow unaligned memory access */
-       allow_unaligned();
-
-       switch_to_non_secure_mode();
-
        /* Initialize EFI drivers */
        ret = efi_init_obj_list();
        if (ret != EFI_SUCCESS) {
@@ -391,11 +374,6 @@ static int do_bootefi_image(const char *image_opt, const char *fdt_opt)
        efi_handle_t mem_handle = NULL, handle;
        efi_status_t ret;
 
-       /* Allow unaligned memory access */
-       allow_unaligned();
-
-       switch_to_non_secure_mode();
-
        /* Initialize EFI drivers */
        ret = efi_init_obj_list();
        if (ret != EFI_SUCCESS) {
@@ -582,11 +560,6 @@ static int do_efi_selftest(const char *fdt_opt)
        struct efi_loaded_image *loaded_image_info;
        efi_status_t ret;
 
-       /* Allow unaligned memory access */
-       allow_unaligned();
-
-       switch_to_non_secure_mode();
-
        /* Initialize EFI drivers */
        ret = efi_init_obj_list();
        if (ret != EFI_SUCCESS) {
index 87db51cbb74fa58c67fd5462e22ce67ca4b55afd..8691d686d29d02150c50a8ce10c4474498300de8 100644 (file)
@@ -6,12 +6,22 @@
  */
 
 #include <common.h>
+#include <bootm.h>
 #include <efi_loader.h>
 
 #define OBJ_LIST_NOT_INITIALIZED 1
 
 static efi_status_t efi_obj_list_initialized = OBJ_LIST_NOT_INITIALIZED;
 
+/*
+ * Allow unaligned memory access.
+ *
+ * This routine is overridden by architectures providing this feature.
+ */
+void __weak allow_unaligned(void)
+{
+}
+
 /**
  * efi_init_platform_lang() - define supported languages
  *
@@ -86,6 +96,12 @@ efi_status_t efi_init_obj_list(void)
        if (efi_obj_list_initialized != OBJ_LIST_NOT_INITIALIZED)
                return efi_obj_list_initialized;
 
+       /* Allow unaligned memory access */
+       allow_unaligned();
+
+       /* On ARM switch from EL3 or secure mode to EL2 or non-secure mode */
+       switch_to_non_secure_mode();
+
        /* Define supported languages */
        ret = efi_init_platform_lang();
        if (ret != EFI_SUCCESS)