diff options
| author | Simon Glass <sjg@chromium.org> | 2013-05-08 08:06:01 +0000 | 
|---|---|---|
| committer | Tom Rini <trini@ti.com> | 2013-05-14 15:37:25 -0400 | 
| commit | 13d06981a9829c9edcfd6f9f582d216fbaed95e5 (patch) | |
| tree | 1e5df63856d117bc14acb5f669ac0dc405e91f06 /common/image.c | |
| parent | 44d3a3066bc789b9a640e71322e593a9983023bb (diff) | |
| download | olio-uboot-2014.01-13d06981a9829c9edcfd6f9f582d216fbaed95e5.tar.xz olio-uboot-2014.01-13d06981a9829c9edcfd6f9f582d216fbaed95e5.zip | |
image: Add device tree setup to image library
This seems to be a common function for several architectures, so create
a common function rather than duplicating the code in each arch.
Also make an attempt to avoid introducing #ifdefs in the new code, partly
by removing useless #ifdefs around function declarations in the image.h
header.
Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'common/image.c')
| -rw-r--r-- | common/image.c | 50 | 
1 files changed, 50 insertions, 0 deletions
| diff --git a/common/image.c b/common/image.c index 0792fdc2e..e91c89e1c 100644 --- a/common/image.c +++ b/common/image.c @@ -70,6 +70,10 @@ static const image_header_t *image_get_ramdisk(ulong rd_addr, uint8_t arch,  #include <u-boot/crc.h> +#ifndef CONFIG_SYS_BARGSIZE +#define CONFIG_SYS_BARGSIZE 512 +#endif +  static const table_entry_t uimage_arch[] = {  	{	IH_ARCH_INVALID,	NULL,		"Invalid ARCH",	},  	{	IH_ARCH_ALPHA,		"alpha",	"Alpha",	}, @@ -1223,4 +1227,50 @@ int boot_get_kbd(struct lmb *lmb, bd_t **kbd)  	return 0;  }  #endif /* CONFIG_SYS_BOOT_GET_KBD */ + +#ifdef CONFIG_LMB +int image_setup_linux(bootm_headers_t *images) +{ +	ulong of_size = images->ft_len; +	char **of_flat_tree = &images->ft_addr; +	ulong *initrd_start = &images->initrd_start; +	ulong *initrd_end = &images->initrd_end; +	struct lmb *lmb = &images->lmb; +	ulong rd_len; +	int ret; + +	if (IMAGE_ENABLE_OF_LIBFDT) +		boot_fdt_add_mem_rsv_regions(lmb, *of_flat_tree); + +	if (IMAGE_BOOT_GET_CMDLINE) { +		ret = boot_get_cmdline(lmb, &images->cmdline_start, +				&images->cmdline_end); +		if (ret) { +			puts("ERROR with allocation of cmdline\n"); +			return ret; +		} +	} +	if (IMAGE_ENABLE_RAMDISK_HIGH) { +		rd_len = images->rd_end - images->rd_start; +		ret = boot_ramdisk_high(lmb, images->rd_start, rd_len, +				initrd_start, initrd_end); +		if (ret) +			return ret; +	} + +	if (IMAGE_ENABLE_OF_LIBFDT) { +		ret = boot_relocate_fdt(lmb, of_flat_tree, &of_size); +		if (ret) +			return ret; +	} + +	if (IMAGE_ENABLE_OF_LIBFDT && of_size) { +		ret = image_setup_libfdt(images, *of_flat_tree, of_size, lmb); +		if (ret) +			return ret; +	} + +	return 0; +} +#endif /* CONFIG_LMB */  #endif /* !USE_HOSTCC */ |