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>
This commit is contained in:
		
							parent
							
								
									782cfbb259
								
							
						
					
					
						commit
						a51ec63b85
					
				|  | @ -1370,25 +1370,6 @@ int fit_conf_get_kernel_node(const void *fit, int noffset) | ||||||
| 	return fit_conf_get_prop_node(fit, noffset, FIT_KERNEL_PROP); | 	return fit_conf_get_prop_node(fit, noffset, FIT_KERNEL_PROP); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /**
 |  | ||||||
|  * 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 |  * fit_conf_get_fdt_node - get fdt image node offset that corresponds to | ||||||
|  * a given configuration |  * a given configuration | ||||||
|  | @ -1467,49 +1448,6 @@ int fit_image_select(const void *fit, int rd_noffset, int verify) | ||||||
| 	return 0; | 	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, | int fit_get_node_from_config(bootm_headers_t *images, const char *prop_name, | ||||||
| 			ulong addr) | 			ulong addr) | ||||||
| { | { | ||||||
|  |  | ||||||
							
								
								
									
										122
									
								
								common/image.c
								
								
								
								
							
							
						
						
									
										122
									
								
								common/image.c
								
								
								
								
							|  | @ -51,6 +51,7 @@ | ||||||
| 
 | 
 | ||||||
| #include <u-boot/md5.h> | #include <u-boot/md5.h> | ||||||
| #include <sha1.h> | #include <sha1.h> | ||||||
|  | #include <asm/errno.h> | ||||||
| #include <asm/io.h> | #include <asm/io.h> | ||||||
| 
 | 
 | ||||||
| #ifdef CONFIG_CMD_BDI | #ifdef CONFIG_CMD_BDI | ||||||
|  | @ -810,14 +811,10 @@ int boot_get_ramdisk(int argc, char * const argv[], bootm_headers_t *images, | ||||||
| 	char *end; | 	char *end; | ||||||
| #endif | #endif | ||||||
| #if defined(CONFIG_FIT) | #if defined(CONFIG_FIT) | ||||||
| 	void		*fit_hdr; |  | ||||||
| 	const char	*fit_uname_config = NULL; | 	const char	*fit_uname_config = NULL; | ||||||
| 	const char	*fit_uname_ramdisk = NULL; | 	const char	*fit_uname_ramdisk = NULL; | ||||||
| 	ulong		default_addr; | 	ulong		default_addr; | ||||||
| 	int		rd_noffset; | 	int		rd_noffset; | ||||||
| 	int		cfg_noffset; |  | ||||||
| 	const void	*data; |  | ||||||
| 	size_t		size; |  | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| 	*rd_start = 0; | 	*rd_start = 0; | ||||||
|  | @ -865,32 +862,16 @@ int boot_get_ramdisk(int argc, char * const argv[], bootm_headers_t *images, | ||||||
| #if defined(CONFIG_FIT) | #if defined(CONFIG_FIT) | ||||||
| 		} else { | 		} else { | ||||||
| 			/* use FIT configuration provided in first bootm
 | 			/* 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); | 			rd_addr = map_to_sysmem(images->fit_hdr_os); | ||||||
| 			fit_uname_config = images->fit_uname_cfg; | 			rd_noffset = fit_get_node_from_config(images, | ||||||
| 			debug("*  ramdisk: using config '%s' from image " | 					FIT_RAMDISK_PROP, rd_addr); | ||||||
| 					"at 0x%08lx\n", | 			if (rd_noffset == -ENOLINK) | ||||||
| 					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"); |  | ||||||
| 				return 0; | 				return 0; | ||||||
| 			} | 			else if (rd_noffset < 0) | ||||||
|  | 				return 1; | ||||||
| 		} | 		} | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|  | @ -921,87 +902,16 @@ int boot_get_ramdisk(int argc, char * const argv[], bootm_headers_t *images, | ||||||
| 			break; | 			break; | ||||||
| #if defined(CONFIG_FIT) | #if defined(CONFIG_FIT) | ||||||
| 		case IMAGE_FORMAT_FIT: | 		case IMAGE_FORMAT_FIT: | ||||||
| 			fit_hdr = buf; | 			rd_noffset = fit_image_load(images, FIT_RAMDISK_PROP, | ||||||
| 			printf("## Loading init Ramdisk from FIT " | 					rd_addr, &fit_uname_ramdisk, | ||||||
| 					"Image at %08lx ...\n", rd_addr); | 					fit_uname_config, arch, | ||||||
| 
 | 					IH_TYPE_RAMDISK, | ||||||
| 			bootstage_mark(BOOTSTAGE_ID_FIT_RD_FORMAT); | 					BOOTSTAGE_ID_FIT_RD_START, | ||||||
| 			if (!fit_check_format(fit_hdr)) { | 					FIT_LOAD_REQUIRED, &rd_data, &rd_len); | ||||||
| 				puts("Bad FIT ramdisk image format!\n"); | 			if (rd_noffset < 0) | ||||||
| 				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)) |  | ||||||
| 				return 1; | 				return 1; | ||||||
| 
 | 
 | ||||||
| 			/* get ramdisk image data address and length */ | 			images->fit_hdr_rd = map_sysmem(rd_addr, 0); | ||||||
| 			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_uname_rd = fit_uname_ramdisk; | 			images->fit_uname_rd = fit_uname_ramdisk; | ||||||
| 			images->fit_noffset_rd = rd_noffset; | 			images->fit_noffset_rd = rd_noffset; | ||||||
| 			break; | 			break; | ||||||
|  |  | ||||||
|  | @ -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_find_compat(const void *fit, const void *fdt); | ||||||
| int fit_conf_get_node(const void *fit, const char *conf_uname); | 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_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); | int fit_conf_get_fdt_node(const void *fit, int noffset); | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue