]> git.sur5r.net Git - u-boot/blobdiff - arch/arm/lib/bootm.c
dm: Use dm.h header when driver mode is used
[u-boot] / arch / arm / lib / bootm.c
index 43cc83ec95b6f845ca76d7bcd422f4e5e297de41..eb242223b4c0ae87a254522a36f2227f34bac436 100644 (file)
@@ -14,6 +14,8 @@
 
 #include <common.h>
 #include <command.h>
+#include <dm.h>
+#include <dm/root.h>
 #include <image.h>
 #include <u-boot/zlib.h>
 #include <asm/byteorder.h>
@@ -91,6 +93,13 @@ static void announce_and_cleanup(int fake)
 
        board_quiesce_devices();
 
+       /*
+        * 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);
+
        cleanup_before_linux();
 }
 
@@ -287,11 +296,11 @@ static void switch_to_el1(void)
        if ((IH_ARCH_DEFAULT == IH_ARCH_ARM64) &&
            (images.os.arch == IH_ARCH_ARM))
                armv8_switch_to_el1(0, (u64)gd->bd->bi_arch_number,
-                                   (u64)images.ft_addr,
+                                   (u64)images.ft_addr, 0,
                                    (u64)images.ep,
                                    ES_TO_AARCH32);
        else
-               armv8_switch_to_el1((u64)images.ft_addr, 0, 0,
+               armv8_switch_to_el1((u64)images.ft_addr, 0, 0, 0,
                                    images.ep,
                                    ES_TO_AARCH64);
 }
@@ -324,17 +333,17 @@ static void boot_jump_linux(bootm_headers_t *images, int flag)
                update_os_arch_secondary_cores(images->os.arch);
 
 #ifdef CONFIG_ARMV8_SWITCH_TO_EL1
-               armv8_switch_to_el2((u64)images->ft_addr, 0, 0,
+               armv8_switch_to_el2((u64)images->ft_addr, 0, 0, 0,
                                    (u64)switch_to_el1, ES_TO_AARCH64);
 #else
                if ((IH_ARCH_DEFAULT == IH_ARCH_ARM64) &&
                    (images->os.arch == IH_ARCH_ARM))
                        armv8_switch_to_el2(0, (u64)gd->bd->bi_arch_number,
-                                           (u64)images->ft_addr,
+                                           (u64)images->ft_addr, 0,
                                            (u64)images->ep,
                                            ES_TO_AARCH32);
                else
-                       armv8_switch_to_el2((u64)images->ft_addr, 0, 0,
+                       armv8_switch_to_el2((u64)images->ft_addr, 0, 0, 0,
                                            images->ep,
                                            ES_TO_AARCH64);
 #endif
@@ -347,7 +356,10 @@ static void boot_jump_linux(bootm_headers_t *images, int flag)
        int fake = (flag & BOOTM_STATE_OS_FAKE_GO);
 
        kernel_entry = (void (*)(int, int, uint))images->ep;
-
+#ifdef CONFIG_CPU_V7M
+       ulong addr = (ulong)kernel_entry | 1;
+       kernel_entry = (void *)addr;
+#endif
        s = getenv("machid");
        if (s) {
                if (strict_strtoul(s, 16, &machid) < 0) {