diff options
| author | Simon Glass <sjg@chromium.org> | 2013-05-16 13:53:22 +0000 | 
|---|---|---|
| committer | Tom Rini <trini@ti.com> | 2013-06-04 16:06:31 -0400 | 
| commit | a51ec63b85edbc6f8987069d0a60eec09d4f35c8 (patch) | |
| tree | 364d706b98d3a65ba484611ff0c14d38ab0e822c | |
| parent | 782cfbb25900797651be8876e834da1d12e0c68d (diff) | |
| download | olio-uboot-2014.01-a51ec63b85edbc6f8987069d0a60eec09d4f35c8.tar.xz olio-uboot-2014.01-a51ec63b85edbc6f8987069d0a60eec09d4f35c8.zip | |
image: Use fit_image_load() to load ramdisk
Use the new common code to load a ramdisk. The functionality should not
change.
Signed-off-by: Simon Glass <sjg@chromium.org>
| -rw-r--r-- | common/image-fit.c | 62 | ||||
| -rw-r--r-- | common/image.c | 122 | ||||
| -rw-r--r-- | include/image.h | 1 | 
3 files changed, 16 insertions, 169 deletions
| diff --git a/common/image-fit.c b/common/image-fit.c index 9f56b5d30..16fb19653 100644 --- a/common/image-fit.c +++ b/common/image-fit.c @@ -1371,25 +1371,6 @@ int fit_conf_get_kernel_node(const void *fit, int noffset)  }  /** - * fit_conf_get_ramdisk_node - get ramdisk image node offset that corresponds to - * a given configuration - * @fit: pointer to the FIT format image header - * @noffset: configuration node offset - * - * fit_conf_get_ramdisk_node() retrives ramdisk image node unit name from - * configuration FIT_KERNEL_PROP property and translates it to the node - * offset. - * - * returns: - *     image node offset when found (>=0) - *     negative number on failure (FDT_ERR_* code) - */ -int fit_conf_get_ramdisk_node(const void *fit, int noffset) -{ -	return fit_conf_get_prop_node(fit, noffset, FIT_RAMDISK_PROP); -} - -/**   * fit_conf_get_fdt_node - get fdt image node offset that corresponds to   * a given configuration   * @fit: pointer to the FIT format image header @@ -1467,49 +1448,6 @@ int fit_image_select(const void *fit, int rd_noffset, int verify)  	return 0;  } -/** - * fit_check_ramdisk - verify FIT format ramdisk subimage - * @fit_hdr: pointer to the FIT ramdisk header - * @rd_noffset: ramdisk subimage node offset within FIT image - * @arch: requested ramdisk image architecture type - * @verify: data CRC verification flag - * - * fit_check_ramdisk() verifies integrity of the ramdisk subimage and from - * specified FIT image. - * - * returns: - *     1, on success - *     0, on failure - */ -int fit_check_ramdisk(const void *fit, int rd_noffset, uint8_t arch, -			int verify) -{ -	fit_image_print(fit, rd_noffset, "   "); - -	if (verify) { -		puts("   Verifying Hash Integrity ... "); -		if (!fit_image_verify(fit, rd_noffset)) { -			puts("Bad Data Hash\n"); -			bootstage_error(BOOTSTAGE_ID_FIT_RD_HASH); -			return 0; -		} -		puts("OK\n"); -	} - -	bootstage_mark(BOOTSTAGE_ID_FIT_RD_CHECK_ALL); -	if (!fit_image_check_os(fit, rd_noffset, IH_OS_LINUX) || -	    !fit_image_check_arch(fit, rd_noffset, arch) || -	    !fit_image_check_type(fit, rd_noffset, IH_TYPE_RAMDISK)) { -		printf("No Linux %s Ramdisk Image\n", -		       genimg_get_arch_name(arch)); -		bootstage_error(BOOTSTAGE_ID_FIT_RD_CHECK_ALL); -		return 0; -	} - -	bootstage_mark(BOOTSTAGE_ID_FIT_RD_CHECK_ALL_OK); -	return 1; -} -  int fit_get_node_from_config(bootm_headers_t *images, const char *prop_name,  			ulong addr)  { diff --git a/common/image.c b/common/image.c index e91c89e1c..f863502ab 100644 --- a/common/image.c +++ b/common/image.c @@ -51,6 +51,7 @@  #include <u-boot/md5.h>  #include <sha1.h> +#include <asm/errno.h>  #include <asm/io.h>  #ifdef CONFIG_CMD_BDI @@ -810,14 +811,10 @@ int boot_get_ramdisk(int argc, char * const argv[], bootm_headers_t *images,  	char *end;  #endif  #if defined(CONFIG_FIT) -	void		*fit_hdr;  	const char	*fit_uname_config = NULL;  	const char	*fit_uname_ramdisk = NULL;  	ulong		default_addr;  	int		rd_noffset; -	int		cfg_noffset; -	const void	*data; -	size_t		size;  #endif  	*rd_start = 0; @@ -865,32 +862,16 @@ int boot_get_ramdisk(int argc, char * const argv[], bootm_headers_t *images,  #if defined(CONFIG_FIT)  		} else {  			/* use FIT configuration provided in first bootm -			 * command argument +			 * command argument. If the property is not defined, +			 * quit silently.  			 */  			rd_addr = map_to_sysmem(images->fit_hdr_os); -			fit_uname_config = images->fit_uname_cfg; -			debug("*  ramdisk: using config '%s' from image " -					"at 0x%08lx\n", -					fit_uname_config, rd_addr); - -			/* -			 * Check whether configuration has ramdisk defined, -			 * if not, don't try to use it, quit silently. -			 */ -			fit_hdr = images->fit_hdr_os; -			cfg_noffset = fit_conf_get_node(fit_hdr, -							fit_uname_config); -			if (cfg_noffset < 0) { -				debug("*  ramdisk: no such config\n"); -				return 1; -			} - -			rd_noffset = fit_conf_get_ramdisk_node(fit_hdr, -								cfg_noffset); -			if (rd_noffset < 0) { -				debug("*  ramdisk: no ramdisk in config\n"); +			rd_noffset = fit_get_node_from_config(images, +					FIT_RAMDISK_PROP, rd_addr); +			if (rd_noffset == -ENOLINK)  				return 0; -			} +			else if (rd_noffset < 0) +				return 1;  		}  #endif @@ -921,87 +902,16 @@ int boot_get_ramdisk(int argc, char * const argv[], bootm_headers_t *images,  			break;  #if defined(CONFIG_FIT)  		case IMAGE_FORMAT_FIT: -			fit_hdr = buf; -			printf("## Loading init Ramdisk from FIT " -					"Image at %08lx ...\n", rd_addr); - -			bootstage_mark(BOOTSTAGE_ID_FIT_RD_FORMAT); -			if (!fit_check_format(fit_hdr)) { -				puts("Bad FIT ramdisk image format!\n"); -				bootstage_error( -					BOOTSTAGE_ID_FIT_RD_FORMAT); -				return 1; -			} -			bootstage_mark(BOOTSTAGE_ID_FIT_RD_FORMAT_OK); - -			if (!fit_uname_ramdisk) { -				/* -				 * no ramdisk image node unit name, try to get config -				 * node first. If config unit node name is NULL -				 * fit_conf_get_node() will try to find default config node -				 */ -				bootstage_mark( -					BOOTSTAGE_ID_FIT_RD_NO_UNIT_NAME); -				cfg_noffset = fit_conf_get_node(fit_hdr, -							fit_uname_config); -				if (cfg_noffset < 0) { -					puts("Could not find configuration " -						"node\n"); -					bootstage_error( -					BOOTSTAGE_ID_FIT_RD_NO_UNIT_NAME); -					return 1; -				} -				fit_uname_config = fdt_get_name(fit_hdr, -							cfg_noffset, NULL); -				printf("   Using '%s' configuration\n", -					fit_uname_config); - -				rd_noffset = fit_conf_get_ramdisk_node(fit_hdr, -							cfg_noffset); -				fit_uname_ramdisk = fit_get_name(fit_hdr, -							rd_noffset, NULL); -			} else { -				/* get ramdisk component image node offset */ -				bootstage_mark( -					BOOTSTAGE_ID_FIT_RD_UNIT_NAME); -				rd_noffset = fit_image_get_node(fit_hdr, -						fit_uname_ramdisk); -			} -			if (rd_noffset < 0) { -				puts("Could not find subimage node\n"); -				bootstage_error(BOOTSTAGE_ID_FIT_RD_SUBNODE); -				return 1; -			} - -			printf("   Trying '%s' ramdisk subimage\n", -				fit_uname_ramdisk); - -			bootstage_mark(BOOTSTAGE_ID_FIT_RD_CHECK); -			if (!fit_check_ramdisk(fit_hdr, rd_noffset, arch, -						images->verify)) +			rd_noffset = fit_image_load(images, FIT_RAMDISK_PROP, +					rd_addr, &fit_uname_ramdisk, +					fit_uname_config, arch, +					IH_TYPE_RAMDISK, +					BOOTSTAGE_ID_FIT_RD_START, +					FIT_LOAD_REQUIRED, &rd_data, &rd_len); +			if (rd_noffset < 0)  				return 1; -			/* get ramdisk image data address and length */ -			if (fit_image_get_data(fit_hdr, rd_noffset, &data, -						&size)) { -				puts("Could not find ramdisk subimage data!\n"); -				bootstage_error(BOOTSTAGE_ID_FIT_RD_GET_DATA); -				return 1; -			} -			bootstage_mark(BOOTSTAGE_ID_FIT_RD_GET_DATA_OK); - -			rd_data = (ulong)data; -			rd_len = size; - -			if (fit_image_get_load(fit_hdr, rd_noffset, &rd_load)) { -				puts("Can't get ramdisk subimage load " -					"address!\n"); -				bootstage_error(BOOTSTAGE_ID_FIT_RD_LOAD); -				return 1; -			} -			bootstage_mark(BOOTSTAGE_ID_FIT_RD_LOAD); - -			images->fit_hdr_rd = fit_hdr; +			images->fit_hdr_rd = map_sysmem(rd_addr, 0);  			images->fit_uname_rd = fit_uname_ramdisk;  			images->fit_noffset_rd = rd_noffset;  			break; diff --git a/include/image.h b/include/image.h index 5b1e98f0e..28a14700d 100644 --- a/include/image.h +++ b/include/image.h @@ -777,7 +777,6 @@ int fit_check_format(const void *fit);  int fit_conf_find_compat(const void *fit, const void *fdt);  int fit_conf_get_node(const void *fit, const char *conf_uname);  int fit_conf_get_kernel_node(const void *fit, int noffset); -int fit_conf_get_ramdisk_node(const void *fit, int noffset);  int fit_conf_get_fdt_node(const void *fit, int noffset);  /** |