[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