[U-Boot] [PATCH V13 01/12] Add cmd_spl command

Wolfgang Denk wd at denx.de
Mon Feb 13 08:54:04 CET 2012


Dear Stefano Babic,

In message <1328350963-30989-2-git-send-email-sbabic at denx.de> you wrote:
> From: Simon Schwarz <simonschwarzcor at googlemail.com>
> 
> This adds a spl command to the u-boot.
> 
> Related config:
> CONFIG_CMD_CPL
> 	activate/deactivate the command

CONFIG_CMD_CPL??? Is this a typo, and you mean CONFIG_CMD_SPL ?

> CONFIG_CMD_SPL_NAND_OFS
> 	Offset in NAND to use

What about other storage devices?

...
> +/* Calls bootm with the parameters given */
> +static int call_bootm(int argc, char * const argv[], char *subcommand[])
> +{
> +	char *bootm_argv[5];
> +	char command[] = "do_bootm";
...
> +}

Why is this needed?  Why don't you run do_bootm() directly?

> +static int spl_export_fdt(int argc, char * const argv[])
> +{
...
> +	/* inspect paramters and execute bootm */
> +	argc--;
> +	argv++;
> +	if (call_bootm(argc, argv, subcommand))
> +		return -1;
> +
> +	printf("Argument image is now in RAM: 0x%p\n",
> +		(void *)images.ft_addr);
> +	return 0;
> +#else
> +	printf("Das U-Boot was build without fdt support - aborting\n");
> +	return -1;
> +#endif
> +}
> +
> +/* assemble the bootm patameters for atags creation */
> +static int spl_export_atags(int argc, char * const argv[])
> +{
...
> +	/* inspect parameters and execute bootm */
> +	argc--;
> +	argv++;
> +	if (call_bootm(argc, argv, subcommand))
> +		return -1;
> +
> +	printf("Argument image is now in RAM at: 0x%p\n",
> +		(void *)gd->bd->bi_boot_params);
> +	return 0;
> +#endif
> +	printf("Das U-Boot was build without ATAGS support - aborting\n");
> +	return -1;
> +}

This is basicly identical code, only the data structures differ.

Please use a common function, and pass (a pointer to) the data as
argument.

> +	if (c) {
> +		cmd = (int)c->cmd;
> +		switch (cmd) {
> +		case SPL_EXPORT_FDT:
> +			argc--;
> +			argv++;
> +			return spl_export_fdt(argc, argv);
> +			break;
> +		case SPL_EXPORT_ATAGS:
> +			argc--;
> +			argv++;
> +			return spl_export_atags(argc, argv);
> +			break;
> +		default:

This will also eliminate this switch() - you just have to set the
pointer to the respective data to pass.

> +/*
> + * Arguments:
> + * 1: subcommand
> + * 2: image_type
> + * 3: nand_offset
> + * 4: kernel_addr
> + * 5: initrd_addr
> + * 6: fdt_adr
> + */

I think it is broken to restrict this by design to NAND booting only.

This is a command that attemtps to deal with SPL booting in general,
so it should support all possible kinds of boot media - NOR, NAND,
MMC, SPI flash, USB, ...

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
That said, there may be good reasons for what you did beyond obsequi-
ous sycophantic parody. Perhaps you might be so kind as to elucidate.
         -- Tom Christiansen in <5ldjbm$jtk$1 at csnews.cs.colorado.edu>


More information about the U-Boot mailing list