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

Reply via email to