[U-Boot] [RFC] bootm: Add sub commands
Kumar Gala
galak at kernel.crashing.org
Thu Sep 18 18:27:50 CEST 2008
On Sep 17, 2008, at 6:57 PM, Jerry Van Baren wrote:
> 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.
thanks
>> +#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/?)
should be '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.
cmdline
> [snip]
Sounds like WD thinks we need this for supporting 2.4 kernels.
>> @@ -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]
yep, fixed.
>> 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]
yep, fix.
- k
More information about the U-Boot
mailing list