]> git.sur5r.net Git - u-boot/blobdiff - arch/x86/lib/bootm.c
Merge tag 'signed-efi-next' of git://github.com/agraf/u-boot
[u-boot] / arch / x86 / lib / bootm.c
index 80fadef34e99c44b6080bcb2f49e257393f00759..54c22fe6de3f50414446514d06bcda0412e5cfba 100644 (file)
@@ -1,15 +1,16 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * (C) Copyright 2002
  * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
  * Marius Groeger <mgroeger@sysgo.de>
  *
  * Copyright (C) 2001  Erik Mouw (J.A.K.Mouw@its.tudelft.nl)
- *
- * SPDX-License-Identifier:    GPL-2.0+
  */
 
 #include <common.h>
 #include <command.h>
+#include <dm/device.h>
+#include <dm/root.h>
 #include <errno.h>
 #include <fdt_support.h>
 #include <image.h>
@@ -26,10 +27,6 @@ DECLARE_GLOBAL_DATA_PTR;
 
 #define COMMAND_LINE_OFFSET 0x9000
 
-__weak void board_quiesce_devices(void)
-{
-}
-
 void bootm_announce_and_cleanup(void)
 {
        printf("\nStarting kernel ...\n\n");
@@ -41,6 +38,13 @@ void bootm_announce_and_cleanup(void)
 #ifdef CONFIG_BOOTSTAGE_REPORT
        bootstage_report();
 #endif
+
+       /*
+        * Call remove function of all devices with a removal flag set.
+        * This may be useful for last-stage operations, like cancelling
+        * of DMA operation or releasing device internal buffers.
+        */
+       dm_remove_devices_flags(DM_REMOVE_ACTIVE_ALL);
 }
 
 #if defined(CONFIG_OF_LIBFDT) && !defined(CONFIG_OF_NO_KERNEL)
@@ -150,7 +154,14 @@ int boot_linux_kernel(ulong setup_base, ulong load_address, bool image_64bit)
                        puts("Cannot boot 64-bit kernel on 32-bit machine\n");
                        return -EFAULT;
                }
+               /* At present 64-bit U-Boot does not support booting a
+                * kernel.
+                * TODO(sjg@chromium.org): Support booting both 32-bit and
+                * 64-bit kernels from 64-bit U-Boot.
+                */
+#if !CONFIG_IS_ENABLED(X86_64)
                return cpu_jump_to_64bit(setup_base, load_address);
+#endif
        } else {
                /*
                * Set %ebx, %ebp, and %edi to 0, %esi to point to the