Commit c2e7e72b authored by Rick Altherr's avatar Rick Altherr Committed by Tom Rini

bootm: relocate ramdisk if CONFIG_SYS_BOOT_RAMDISK_HIGH set

In 35fc84fa, 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: default avatarRick Altherr <[email protected]>
Reviewed-by: default avatarSimon Glass <[email protected]>
Reviewed-by: Joel Stanley's avatarJoel Stanley <[email protected]>
parent 17fa0326
...@@ -126,6 +126,9 @@ int do_bootm(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) ...@@ -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 | return do_bootm_states(cmdtp, flag, argc, argv, BOOTM_STATE_START |
BOOTM_STATE_FINDOS | BOOTM_STATE_FINDOTHER | BOOTM_STATE_FINDOS | BOOTM_STATE_FINDOTHER |
BOOTM_STATE_LOADOS | BOOTM_STATE_LOADOS |
#ifdef CONFIG_SYS_BOOT_RAMDISK_HIGH
BOOTM_STATE_RAMDISK |
#endif
#if defined(CONFIG_PPC) || defined(CONFIG_MIPS) #if defined(CONFIG_PPC) || defined(CONFIG_MIPS)
BOOTM_STATE_OS_CMDLINE | BOOTM_STATE_OS_CMDLINE |
#endif #endif
......
...@@ -1576,10 +1576,7 @@ int image_setup_linux(bootm_headers_t *images) ...@@ -1576,10 +1576,7 @@ int image_setup_linux(bootm_headers_t *images)
{ {
ulong of_size = images->ft_len; ulong of_size = images->ft_len;
char **of_flat_tree = &images->ft_addr; char **of_flat_tree = &images->ft_addr;
ulong *initrd_start = &images->initrd_start;
ulong *initrd_end = &images->initrd_end;
struct lmb *lmb = &images->lmb; struct lmb *lmb = &images->lmb;
ulong rd_len;
int ret; int ret;
if (IMAGE_ENABLE_OF_LIBFDT) if (IMAGE_ENABLE_OF_LIBFDT)
...@@ -1593,13 +1590,6 @@ int image_setup_linux(bootm_headers_t *images) ...@@ -1593,13 +1590,6 @@ int image_setup_linux(bootm_headers_t *images)
return ret; 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) { if (IMAGE_ENABLE_OF_LIBFDT) {
ret = boot_relocate_fdt(lmb, of_flat_tree, &of_size); ret = boot_relocate_fdt(lmb, of_flat_tree, &of_size);
......
...@@ -99,12 +99,6 @@ struct lmb; ...@@ -99,12 +99,6 @@ struct lmb;
#endif /* IMAGE_ENABLE_FIT */ #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 #ifdef CONFIG_SYS_BOOT_GET_CMDLINE
# define IMAGE_BOOT_GET_CMDLINE 1 # define IMAGE_BOOT_GET_CMDLINE 1
#else #else
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment