Kumar Gala wrote: > Posting this again for discussion. The two features I'm interested in > enabling are: > > * Having the ability to modify the device tree before its passed to > the kernel but after 'fdt boardsetup' > > * Ability to do all setup but not actually jumping to the kernel. > (This is useful as a way to setup the memory image [kernel, ramdisk, > fdt, etc] for a different cpu than the boot one) > > Having bootm sub-commands allows both of these as we can break up > the sequeunce of steps that are part of the bootm process. > > - k
Hi Kumar, Looks like a good proposal. I've been rather distracted the last couple of weeks, but I'll put some eyeball time and runtime on your changes. [snip] > +#if 0 > +are these really common ??? or is there any harm?? > + /* bd_t setup */ > + else if (argv[1][0] == 'p') { > + } If we are using a FDT, there is no reason for a bd_t as part of the boot process. I vote for removal. (typo s/p/b/?) > + /* cmd setup */ > + else if (argv[1][0] == 'c') { > + } I don't know what "cmd setup" is/was off-hand, have to look into that. Probably also a removal. [snip] > @@ -782,6 +883,17 @@ U_BOOT_CMD( > "\tUse iminfo command to get the list of existing component\n" > "\timages and configurations.\n" > #endif > + "\t\nSub-commands to do part of the bootm sequence:\n" > + "\tstart [addr [arg ...]]\n" > + "\tloados - load OS image\n" > + "\tprepos - OS specific prep before relocation or go\n" > +#if defined(CONFIG_PPC) || defined(CONFIG_M68K) || defined(CONFIG_SPARC) > + "\tinitrd - relocate initrd, set env initrd_start/initrd_end\n" > +#endif > +#if defined(CONFIG_OF_LIBFDT) > + "\tfdt - relocate initrd\n" Cut'n'paste? s/initrd/the flattened device tree/ [snip] > diff --git a/lib_ppc/bootm.c b/lib_ppc/bootm.c > index 38266e1..208ed3b 100644 > --- a/lib_ppc/bootm.c > +++ b/lib_ppc/bootm.c > @@ -47,6 +47,7 @@ > > DECLARE_GLOBAL_DATA_PTR; > > +extern int do_reset (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]); > extern ulong get_effective_memsize(void); > static ulong get_sp (void); > static void set_clocks_in_mhz (bd_t *kbd); > @@ -55,30 +56,78 @@ static void set_clocks_in_mhz (bd_t *kbd); > #define CFG_LINUX_LOWMEM_MAX_SIZE (768*1024*1024) > #endif > > -__attribute__((noinline)) > -int do_bootm_linux(int flag, int argc, char *argv[], bootm_headers_t *images) > +static void boot_jump_linux(bootm_headers_t *images) > { > - ulong sp; > - > - ulong initrd_start, initrd_end; > - ulong rd_len; > - ulong size; > - phys_size_t bootm_size; > - > - ulong cmd_start, cmd_end, bootmap_base; > - bd_t *kbd; > void (*kernel)(bd_t *, ulong r4, ulong r5, ulong r6, > ulong r7, ulong r8, ulong r9); > - int ret; > - ulong of_size = images->ft_len; > - struct lmb *lmb = &images->lmb; > + > + kernel = (void (*)(bd_t *, ulong, ulong, ulong, > + ulong, ulong, ulong))images->ep; > +#ifdef CONFIG_OF_LIBFDT > + char *of_flat_tree = images->ft_addr; > +#endif This should be moved above the "kernel = " line to keep it with the rest of the declarations, yes? [big snip] Thanks! gvb _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot