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 472987d5d52f83e64d62a892c4adc4ca9db3a4c2..1ad44bbe3f719e62c19690d621822a8b3c81093d 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 7cdf81f40c1255439ca2164be4d0db6735d0be38..b14746e6b17683c757eaf594015163e996c52398 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 a908843d87ab50d0fd989c160890fc7354905321..6e9d5fe5b7af425e54c03e2ec2c08897bd4915d6 100644 (file)
@@ -20,13 +20,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.