bootm: relocate ramdisk if CONFIG_SYS_BOOT_RAMDISK_HIGH set
authorRick Altherr <raltherr@google.com>
Thu, 19 Jan 2017 01:12:24 +0000 (17:12 -0800)
committerTom Rini <trini@konsulko.com>
Fri, 20 Jan 2017 14:15:20 +0000 (09:15 -0500)
In 35fc84f, bootm was refactored so plain 'bootm' and
'bootm <subcommand>' shared a common implementation.
The 'bootm ramdisk' command implementation is now part of the common
implementation but not invoke by plain 'bootm' since the original
implementation never did ramdisk relocation.  Instead, ramdisk
relocation happened in image_setup_linux() which is typically called
during the OS portion of 'bootm'.

On ARM, parameters to the Linux kernel can either be passed by FDT or
ATAGS. When using FDT, image_setup_linux() is called which also triggers
ramdisk relocation.  When using ATAGS, image_setup_linux() is _not_
called because it mostly does FDT setup.

Instead of calling image_setup_linux() in both FDT and ATAGS cases,
include BOOTM_STATE_RAMDISK in the requested states during a plain
'bootm' if CONFIG_SYS_BOOT_RAMDISK_HIGH is set and remove the ramdisk
relocation from image_setup_linux().  This causes ramdisk relocation to
happen on any system where CONFIG_SYS_BOOT_RAMDISK_HIGH regardless of
the OS being booted. Also remove IMAGE_ENABLE_RAMDISK_HIGH as it was
only used by the now-removed code from image_setup_linux().

Signed-off-by: Rick Altherr <raltherr@google.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Joel Stanley <joel@jms.id.au>
cmd/bootm.c
common/image.c
include/image.h

index 083f3d19fe513b76e572e055c761c77fbdf4c573..a7e181d22c4c4072d91b3b34ac5f5fb906bf6fa1 100644 (file)
@@ -126,6 +126,9 @@ int do_bootm(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        return do_bootm_states(cmdtp, flag, argc, argv, BOOTM_STATE_START |
                BOOTM_STATE_FINDOS | BOOTM_STATE_FINDOTHER |
                BOOTM_STATE_LOADOS |
+#ifdef CONFIG_SYS_BOOT_RAMDISK_HIGH
+               BOOTM_STATE_RAMDISK |
+#endif
 #if defined(CONFIG_PPC) || defined(CONFIG_MIPS)
                BOOTM_STATE_OS_CMDLINE |
 #endif
index 8c35327745ba2f129b04c6a12403614e7632862e..89b3ef6a4643341a221440d13df03a68fa8a8804 100644 (file)
@@ -1576,10 +1576,7 @@ int image_setup_linux(bootm_headers_t *images)
 {
        ulong of_size = images->ft_len;
        char **of_flat_tree = &images->ft_addr;
-       ulong *initrd_start = &images->initrd_start;
-       ulong *initrd_end = &images->initrd_end;
        struct lmb *lmb = &images->lmb;
-       ulong rd_len;
        int ret;
 
        if (IMAGE_ENABLE_OF_LIBFDT)
@@ -1593,13 +1590,6 @@ int image_setup_linux(bootm_headers_t *images)
                        return ret;
                }
        }
-       if (IMAGE_ENABLE_RAMDISK_HIGH) {
-               rd_len = images->rd_end - images->rd_start;
-               ret = boot_ramdisk_high(lmb, images->rd_start, rd_len,
-                               initrd_start, initrd_end);
-               if (ret)
-                       return ret;
-       }
 
        if (IMAGE_ENABLE_OF_LIBFDT) {
                ret = boot_relocate_fdt(lmb, of_flat_tree, &of_size);
index 164b5845332c6ee11a95b2f5b3379ddbb8b8bb51..1e686b76d3eb0090b502253687b1d445e1f80970 100644 (file)
@@ -99,12 +99,6 @@ struct lmb;
 
 #endif /* IMAGE_ENABLE_FIT */
 
-#ifdef CONFIG_SYS_BOOT_RAMDISK_HIGH
-# define IMAGE_ENABLE_RAMDISK_HIGH     1
-#else
-# define IMAGE_ENABLE_RAMDISK_HIGH     0
-#endif
-
 #ifdef CONFIG_SYS_BOOT_GET_CMDLINE
 # define IMAGE_BOOT_GET_CMDLINE                1
 #else