diff options
| author | Simon Glass <sjg@chromium.org> | 2012-10-25 16:31:11 +0000 | 
|---|---|---|
| committer | Gerald Van Baren <gvb@unssw.com> | 2012-11-12 23:14:57 -0500 | 
| commit | fcabc24f4fd2fd581036c7a20eee47a204f04f39 (patch) | |
| tree | 2d534f1bb42bf9890ee233d2a7ae9865f888ed29 | |
| parent | d95f6ec7334076a1e4b13f3748ebfd1b58ac90f6 (diff) | |
| download | olio-uboot-2014.01-fcabc24f4fd2fd581036c7a20eee47a204f04f39.tar.xz olio-uboot-2014.01-fcabc24f4fd2fd581036c7a20eee47a204f04f39.zip | |
fdt: Set kernaddr if fdt indicates a kernel is present
If kernel-offset is specified in the fdt, set an environment variable
so that scripts can access the attached kernel.
This can be used by a packaging program to tell U-Boot about a kernel
that has been downloaded alongside U-Boot. The value in the fdt is
the offset of the kernel from the start of the U-Boot image, so we can
find it just by adding CONFIG_SYS_TEXT_BASE.
It is then fairly easy to put something like this in the environment
variables in the board header file:
		"if test ${kernaddr} != \"\"; then "\
			"echo \"Using bundled kernel\"; "\
			"bootm ${kernaddr};" \
		"fi; "\
		/* rest of boot sequence follows here */
Signed-off-by: Simon Glass <sjg@chromium.org>
| -rw-r--r-- | common/main.c | 16 | 
1 files changed, 16 insertions, 0 deletions
| diff --git a/common/main.c b/common/main.c index 61c6cac88..8052d4222 100644 --- a/common/main.c +++ b/common/main.c @@ -333,6 +333,20 @@ err:  	hang();  } +static void process_fdt_options(const void *blob) +{ +	ulong addr; + +	/* Add an env variable to point to a kernel payload, if available */ +	addr = fdtdec_get_config_int(gd->fdt_blob, "kernel-offset", 0); +	if (addr) +		setenv_addr("kernaddr", (void *)(CONFIG_SYS_TEXT_BASE + addr)); + +	/* Add an env variable to point to a root disk, if available */ +	addr = fdtdec_get_config_int(gd->fdt_blob, "rootdisk-offset", 0); +	if (addr) +		setenv_addr("rootaddr", (void *)(CONFIG_SYS_TEXT_BASE + addr)); +}  #endif /* CONFIG_OF_CONTROL */ @@ -451,6 +465,8 @@ void main_loop (void)  	if (env)  		s = env; +	process_fdt_options(gd->fdt_blob); +  	/*  	 * If the bootsecure option was chosen, use secure_boot_cmd().  	 * Always use 'env' in this case, since bootsecure requres that the |