efi_loader: move efi_save_gd() call to board_r.c
authorHeinrich Schuchardt <xypron.glpk@gmx.de>
Tue, 9 Apr 2019 22:32:07 +0000 (00:32 +0200)
committerHeinrich Schuchardt <xypron.glpk@gmx.de>
Fri, 12 Apr 2019 20:00:42 +0000 (22:00 +0200)
The first functions of the UEFI sub-system are invoked before reaching the
U-Boot shell, e.g. efi_set_bootdev(), efi_dp_from_name(),
efi_dp_from_file(). We should be able to print out device paths for
debugging purposes here.

When printing device paths via printf("%pD\n", dp) this invokes functions
defined as EFIAPI. So efi_save_gd() must be called beforehand.

So let's move the efi_save_gd() call to function initr_reloc_global_data(()
in board_r.c.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
common/board_r.c
lib/efi_driver/efi_uclass.c
lib/efi_loader/efi_setup.c

index 472987d..1ad44bb 100644 (file)
@@ -154,6 +154,13 @@ static int initr_reloc_global_data(void)
        gd->fdt_blob += gd->reloc_off;
 #endif
 #ifdef CONFIG_EFI_LOADER
+       /*
+        * On the ARM architecture gd is mapped to a fixed register (r9 or x18).
+        * As this register may be overwritten by an EFI payload we save it here
+        * and restore it on every callback entered.
+        */
+       efi_save_gd();
+
        efi_runtime_relocate(gd->relocaddr, NULL);
 #endif
 
index 7cdf81f..b14746e 100644 (file)
@@ -300,9 +300,6 @@ efi_status_t efi_driver_init(void)
        struct driver *drv;
        efi_status_t ret = EFI_SUCCESS;
 
-       /* Save 'gd' pointer */
-       efi_save_gd();
-
        debug("EFI: Initializing EFI driver framework\n");
        for (drv = ll_entry_start(struct driver, driver);
             drv < ll_entry_end(struct driver, driver); ++drv) {
index a908843..6e9d5fe 100644 (file)
@@ -21,13 +21,6 @@ efi_status_t efi_init_obj_list(void)
        efi_status_t ret = EFI_SUCCESS;
 
        /*
-        * On the ARM architecture gd is mapped to a fixed register (r9 or x18).
-        * As this register may be overwritten by an EFI payload we save it here
-        * and restore it on every callback entered.
-        */
-       efi_save_gd();
-
-       /*
         * Variable PlatformLang defines the language that the machine has been
         * configured for.
         */