Message ID | 1481223112-27542-1-git-send-email-raltherr@google.com |
---|---|
State | Superseded |
Delegated to: | Tom Rini |
Headers | show |
On 12/08/2016 07:51 PM, Rick Altherr wrote: > 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> Reviewed-by: Cédric Le Goater <clg@kaod.org> and I gave it a good test on various boards we have. Thanks, C. > --- > > cmd/bootm.c | 3 +++ > common/image.c | 10 ---------- > include/image.h | 6 ------ > 3 files changed, 3 insertions(+), 16 deletions(-) > > diff --git a/cmd/bootm.c b/cmd/bootm.c > index 083f3d1..a7e181d 100644 > --- a/cmd/bootm.c > +++ b/cmd/bootm.c > @@ -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 > diff --git a/common/image.c b/common/image.c > index bd07e86..b4a6839 100644 > --- a/common/image.c > +++ b/common/image.c > @@ -1571,10 +1571,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) > @@ -1588,13 +1585,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); > diff --git a/include/image.h b/include/image.h > index 575f592..4c39bd7 100644 > --- a/include/image.h > +++ b/include/image.h > @@ -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 >
diff --git a/cmd/bootm.c b/cmd/bootm.c index 083f3d1..a7e181d 100644 --- a/cmd/bootm.c +++ b/cmd/bootm.c @@ -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 diff --git a/common/image.c b/common/image.c index bd07e86..b4a6839 100644 --- a/common/image.c +++ b/common/image.c @@ -1571,10 +1571,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) @@ -1588,13 +1585,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); diff --git a/include/image.h b/include/image.h index 575f592..4c39bd7 100644 --- a/include/image.h +++ b/include/image.h @@ -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