Message ID | 1481133996-29973-3-git-send-email-raltherr@google.com |
---|---|
State | Accepted, archived |
Headers | show |
On 12/07/2016 07:06 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> looks good. Reviewed-by: Cédric Le Goater <clg@kaod.org> Thanks, C. > --- > > Changes in v4: > - Remove unused variables from image_setup_linux() > > Changes in v3: > - Remove unused #define IMAGE_ENABLE_RAMDISK_HIGH > > Changes in v2: > - Fix compiler warning caused by ramdisk relocation hack > > 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 16fdea5..8da750e 100644 > --- a/cmd/bootm.c > +++ b/cmd/bootm.c > @@ -131,6 +131,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 0be09e5..f9ee9d5 100644 > --- a/common/image.c > +++ b/common/image.c > @@ -1453,10 +1453,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) > @@ -1470,13 +1467,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 d788c26..a16187f 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 >
On Thu, Dec 8, 2016 at 4:54 AM, Cédric Le Goater <clg@kaod.org> wrote: > On 12/07/2016 07:06 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> > > looks good. > > Reviewed-by: Cédric Le Goater <clg@kaod.org> Reviewed-by: Joel Stanley <joel@jms.id.au> Rick, can you please submit this one upstream too? Please keep all of our reviewed-by tags but drop the version when you do so. Cheers, Joel
diff --git a/cmd/bootm.c b/cmd/bootm.c index 16fdea5..8da750e 100644 --- a/cmd/bootm.c +++ b/cmd/bootm.c @@ -131,6 +131,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 0be09e5..f9ee9d5 100644 --- a/common/image.c +++ b/common/image.c @@ -1453,10 +1453,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) @@ -1470,13 +1467,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 d788c26..a16187f 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