diff options
| -rw-r--r-- | README | 83 | ||||
| -rw-r--r-- | common/cmd_bootm.c | 30 | ||||
| -rw-r--r-- | common/cmd_doc.c | 2 | ||||
| -rw-r--r-- | common/cmd_ide.c | 2 | ||||
| -rw-r--r-- | common/cmd_nand.c | 4 | ||||
| -rw-r--r-- | common/image.c | 28 | 
6 files changed, 125 insertions, 24 deletions
| @@ -1659,6 +1659,8 @@ The following options need to be configured:  		example, some LED's) on your board. At the moment,  		the following checkpoints are implemented: +Legacy uImage format: +    Arg	Where			When      1	common/cmd_bootm.c	before attempting to boot an image     -1	common/cmd_bootm.c	Image header has bad	 magic number @@ -1669,25 +1671,26 @@ The following options need to be configured:      4	common/cmd_bootm.c	Image data   has correct checksum     -4	common/cmd_bootm.c	Image is for unsupported architecture      5	common/cmd_bootm.c	Architecture check OK -   -5	common/cmd_bootm.c	Wrong Image Type (not kernel, multi, standalone) +   -5	common/cmd_bootm.c	Wrong Image Type (not kernel, multi)      6	common/cmd_bootm.c	Image Type check OK     -6	common/cmd_bootm.c	gunzip uncompression error     -7	common/cmd_bootm.c	Unimplemented compression type      7	common/cmd_bootm.c	Uncompression OK -   -8	common/cmd_bootm.c	Wrong Image Type (not kernel, multi, standalone) -    8	common/cmd_bootm.c	Image Type check OK +    8	common/cmd_bootm.c	No uncompress/copy overwrite error     -9	common/cmd_bootm.c	Unsupported OS (not Linux, BSD, VxWorks, QNX) -    9	common/cmd_bootm.c	Start initial ramdisk verification -  -10	common/cmd_bootm.c	Ramdisk header has bad	   magic number -  -11	common/cmd_bootm.c	Ramdisk header has bad	   checksum -   10	common/cmd_bootm.c	Ramdisk header is OK -  -12	common/cmd_bootm.c	Ramdisk data   has bad	   checksum -   11	common/cmd_bootm.c	Ramdisk data   has correct checksum -   12	common/cmd_bootm.c	Ramdisk verification complete, start loading -  -13	common/cmd_bootm.c	Wrong Image Type (not PPC Linux Ramdisk) -   13	common/cmd_bootm.c	Start multifile image verification -   14	common/cmd_bootm.c	No initial ramdisk, no multifile, continue. -   15	common/cmd_bootm.c	All preparation done, transferring control to OS + +    9	common/image.c		Start initial ramdisk verification +  -10	common/image.c		Ramdisk header has bad	   magic number +  -11	common/image.c		Ramdisk header has bad	   checksum +   10	common/image.c		Ramdisk header is OK +  -12	common/image.c		Ramdisk data   has bad	   checksum +   11	common/image.c		Ramdisk data   has correct checksum +   12	common/image.c		Ramdisk verification complete, start loading +  -13	common/image.c		Wrong Image Type (not PPC Linux Ramdisk) +   13	common/image.c		Start multifile image verification +   14	common/image.c		No initial ramdisk, no multifile, continue. + +   15	lib_<arch>/bootm.c	All preparation done, transferring control to OS    -30	lib_ppc/board.c		Fatal error, hang the system    -31	post/post.c		POST test failed, detected by post_output_backlog() @@ -1757,6 +1760,58 @@ The following options need to be configured:    -83	common/cmd_net.c	some error in automatic boot or autoscript     84	common/cmd_net.c	end without errors +FIT uImage format: + +  Arg	Where			When +  100	common/cmd_bootm.c	Kernel FIT Image has correct format + -100	common/cmd_bootm.c	Kernel FIT Image has incorrect format +  101	common/cmd_bootm.c	No Kernel subimage unit name, using configuration + -101	common/cmd_bootm.c	Can't get configuration for kernel subimage +  102	common/cmd_bootm.c	Kernel unit name specified + -103	common/cmd_bootm.c	Can't get kernel subimage node offset +  104	common/cmd_bootm.c	Got kernel subimage node offset + -104	common/cmd_bootm.c	Kernel subimage hash verification failed +  105	common/cmd_bootm.c	Kernel subimage hash verification OK + -105	common/cmd_bootm.c	Kernel subimage is for unsupported architecture +  106	common/cmd_bootm.c	Architecture check OK + -106	common/cmd_bootm.c	Kernel subimage has wrong typea +  107	common/cmd_bootm.c	Kernel subimge type OK + -107	common/cmd_bootm.c	Can't get kernel subimage data/size +  108	common/cmd_bootm.c	Got kernel subimage data/size + -108	common/cmd_bootm.c	Wrong image type (not legacy, FIT) + -109	common/cmd_bootm.c	Can't get kernel subimage type + -110	common/cmd_bootm.c	Can't get kernel subimage comp + -111	common/cmd_bootm.c	Can't get kernel subimage os + -112	common/cmd_bootm.c	Can't get kernel subimage load address + -113	common/cmd_bootm.c	Image uncompress/copy overwrite error + +  120	common/image.c		Start initial ramdisk verification + -120	common/image.c		Ramdisk FIT image has incorrect format +  121	common/image.c		Ramdisk FIT image has correct format +  122	common/image.c		No Ramdisk subimage unit name, using configuration + -122	common/image.c		Can't get configuration for ramdisk subimage +  123	common/image.c		Ramdisk unit name specified + -124	common/image.c		Can't get ramdisk subimage node offset +  125	common/image.c		Got ramdisk subimage node offset + -125	common/image.c		Ramdisk subimage hash verification failed +  126	common/image.c		Ramdisk subimage hash verification OK + -126	common/image.c		Ramdisk subimage for unsupported architecture +  127	common/image.c		Architecture check OK + -127	common/image.c		Can't get ramdisk subimage data/size +  128	common/image.c		Got ramdisk subimage data/size +  129	common/image.c		Can't get ramdisk load address + -129	common/image.c		Got ramdisk load address + + -130	common/cmd_doc.c	Icorrect FIT image format +  131	common/cmd_doc.c	FIT image format OK + + -140	common/cmd_ide.c	Icorrect FIT image format +  141	common/cmd_ide.c	FIT image format OK + + -150	common/cmd_nand.c	Icorrect FIT image format +  151	common/cmd_nand.c	FIT image format OK + +  Modem Support:  -------------- diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c index 11c476e12..6591e616a 100644 --- a/common/cmd_bootm.c +++ b/common/cmd_bootm.c @@ -155,8 +155,6 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  		return 1;  	} -	show_boot_progress (6); -  	/* get image parameters */  	switch (genimg_get_format (os_hdr)) {  	case IMAGE_FORMAT_LEGACY: @@ -172,18 +170,21 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  		if (fit_image_get_type (images.fit_hdr_os,  					images.fit_noffset_os, &type)) {  			puts ("Can't get image type!\n"); +			show_boot_progress (-109);  			return 1;  		}  		if (fit_image_get_comp (images.fit_hdr_os,  					images.fit_noffset_os, &comp)) {  			puts ("Can't get image compression!\n"); +			show_boot_progress (-110);  			return 1;  		}  		if (fit_image_get_os (images.fit_hdr_os,  					images.fit_noffset_os, &os)) {  			puts ("Can't get image OS!\n"); +			show_boot_progress (-111);  			return 1;  		} @@ -192,6 +193,7 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  		if (fit_image_get_load (images.fit_hdr_os, images.fit_noffset_os,  					&load_start)) {  			puts ("Can't get image load address!\n"); +			show_boot_progress (-112);  			return 1;  		}  		break; @@ -284,6 +286,7 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  		debug ("load_start = 0x%lx, load_end = 0x%lx\n", load_start, load_end);  		puts ("ERROR: image overwritten - must RESET the board to recover.\n"); +		show_boot_progress (-113);  		do_reset (cmdtp, flag, argc, argv);  	} @@ -416,21 +419,27 @@ static int fit_check_kernel (const void *fit, int os_noffset, int verify)  		puts ("   Verifying Hash Integrity ... ");  		if (!fit_image_check_hashes (fit, os_noffset)) {  			puts ("Bad Data Hash\n"); +			show_boot_progress (-104);  			return 0;  		}  		puts ("OK\n");  	} +	show_boot_progress (105);  	if (!fit_image_check_target_arch (fit, os_noffset)) {  		puts ("Unsupported Architecture\n"); +		show_boot_progress (-105);  		return 0;  	} +	show_boot_progress (106);  	if (!fit_image_check_type (fit, os_noffset, IH_TYPE_KERNEL)) {  		puts ("Not a kernel image\n"); +		show_boot_progress (-106);  		return 0;  	} +	show_boot_progress (107);  	return 1;  }  #endif /* CONFIG_FIT */ @@ -515,6 +524,7 @@ static void *boot_get_kernel (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]  		images->legacy_hdr_os = hdr;  		images->legacy_hdr_valid = 1; +		show_boot_progress (6);  		break;  #if defined(CONFIG_FIT)  	case IMAGE_FORMAT_FIT: @@ -524,8 +534,10 @@ static void *boot_get_kernel (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]  		if (!fit_check_format (fit_hdr)) {  			puts ("Bad FIT kernel image format!\n"); +			show_boot_progress (-100);  			return NULL;  		} +		show_boot_progress (100);  		if (!fit_uname_kernel) {  			/* @@ -533,29 +545,38 @@ static void *boot_get_kernel (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]  			 * node first. If config unit node name is NULL  			 * fit_conf_get_node() will try to find default config node  			 */ +			show_boot_progress (101);  			conf_noffset = fit_conf_get_node (fit_hdr, fit_uname_config); -			if (conf_noffset < 0) +			if (conf_noffset < 0) { +				show_boot_progress (-101);  				return NULL; +			}  			os_noffset = fit_conf_get_kernel_node (fit_hdr, conf_noffset);  			fit_uname_kernel = fit_get_name (fit_hdr, os_noffset, NULL);  		} else {  			/* get kernel component image node offset */ +			show_boot_progress (102);  			os_noffset = fit_image_get_node (fit_hdr, fit_uname_kernel);  		} -		if (os_noffset < 0) +		if (os_noffset < 0) { +			show_boot_progress (-103);  			return NULL; +		}  		printf ("   Trying '%s' kernel subimage\n", fit_uname_kernel); +		show_boot_progress (104);  		if (!fit_check_kernel (fit_hdr, os_noffset, images->verify))  			return NULL;  		/* get kernel image data address and length */  		if (fit_image_get_data (fit_hdr, os_noffset, &data, &len)) {  			puts ("Could not find kernel subimage data!\n"); +			show_boot_progress (-107);  			return NULL;  		} +		show_boot_progress (108);  		*os_len = len;  		*os_data = (ulong)data; @@ -566,6 +587,7 @@ static void *boot_get_kernel (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]  #endif  	default:  		printf ("Wrong Image Format for %s command\n", cmdtp->name); +		show_boot_progress (-108);  		return NULL;  	} diff --git a/common/cmd_doc.c b/common/cmd_doc.c index bf2f0a95f..83aba3744 100644 --- a/common/cmd_doc.c +++ b/common/cmd_doc.c @@ -276,9 +276,11 @@ int do_docboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  	case IMAGE_FORMAT_FIT:  		fit_hdr = (const void *)addr;  		if (!fit_check_format (fit_hdr)) { +			show_boot_progress (-130);  			puts ("** Bad FIT image format\n");  			return 1;  		} +		show_boot_progress (131);  		puts ("Fit image detected...\n");  		cnt = fit_get_size (fit_hdr); diff --git a/common/cmd_ide.c b/common/cmd_ide.c index 6a67dd69f..8ace970c7 100644 --- a/common/cmd_ide.c +++ b/common/cmd_ide.c @@ -470,9 +470,11 @@ int do_diskboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  	case IMAGE_FORMAT_FIT:  		fit_hdr = (const void *)addr;  		if (!fit_check_format (fit_hdr)) { +			show_boot_progress (-140);  			puts ("** Bad FIT image format\n");  			return 1;  		} +		show_boot_progress (141);  		puts ("Fit image detected...\n");  		cnt = fit_get_size (fit_hdr); diff --git a/common/cmd_nand.c b/common/cmd_nand.c index 9a168eab2..7b1f83046 100644 --- a/common/cmd_nand.c +++ b/common/cmd_nand.c @@ -528,9 +528,11 @@ static int nand_load_image(cmd_tbl_t *cmdtp, nand_info_t *nand,  	case IMAGE_FORMAT_FIT:  		fit_hdr = (const void *)addr;  		if (!fit_check_format (fit_hdr)) { +			show_boot_progress (-150);  			puts ("** Bad FIT image format\n");  			return 1;  		} +		show_boot_progress (151);  		puts ("Fit image detected...\n");  		cnt = fit_get_size (fit_hdr); @@ -1020,9 +1022,11 @@ int do_nandboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  	case IMAGE_FORMAT_FIT:  		fit_hdr = (const void *)addr;  		if (!fit_check_format (fit_hdr)) { +			show_boot_progress (-150);  			puts ("** Bad FIT image format\n");  			return 1;  		} +		show_boot_progress (151);  		puts ("Fit image detected...\n");  		cnt = fit_get_size (fit_hdr); diff --git a/common/image.c b/common/image.c index e838f65b6..f29614b9e 100644 --- a/common/image.c +++ b/common/image.c @@ -397,10 +397,7 @@ inline void image_print_contents_noindent (image_header_t *hdr)  static image_header_t* image_get_ramdisk (ulong rd_addr, uint8_t arch,  						int verify)  { -	image_header_t *rd_hdr; - -	show_boot_progress (9); -	rd_hdr = (image_header_t *)rd_addr; +	image_header_t *rd_hdr = (image_header_t *)rd_addr;  	if (!image_check_magic (rd_hdr)) {  		puts ("Bad Magic Number\n"); @@ -830,6 +827,7 @@ int boot_get_ramdisk (int argc, char *argv[], bootm_headers_t *images,  			printf ("## Loading init Ramdisk from Legacy "  					"Image at %08lx ...\n", rd_addr); +			show_boot_progress (9);  			rd_hdr = image_get_ramdisk (rd_addr, arch,  							images->verify); @@ -846,10 +844,13 @@ int boot_get_ramdisk (int argc, char *argv[], bootm_headers_t *images,  			printf ("## Loading init Ramdisk from FIT "  					"Image at %08lx ...\n", rd_addr); +			show_boot_progress (120);  			if (!fit_check_format (fit_hdr)) {  				puts ("Bad FIT ramdisk image format!\n"); +				show_boot_progress (-120);  				return 0;  			} +			show_boot_progress (121);  			if (!fit_uname_ramdisk) {  				/* @@ -857,37 +858,48 @@ int boot_get_ramdisk (int argc, char *argv[], bootm_headers_t *images,  				 * node first. If config unit node name is NULL  				 * fit_conf_get_node() will try to find default config node  				 */ +				show_boot_progress (122);  				conf_noffset = fit_conf_get_node (fit_hdr, fit_uname_config); -				if (conf_noffset < 0) +				if (conf_noffset < 0) { +					show_boot_progress (-122);  					return 0; +				}  				rd_noffset = fit_conf_get_ramdisk_node (fit_hdr, conf_noffset);  				fit_uname_ramdisk = fit_get_name (fit_hdr, rd_noffset, NULL);  			} else {  				/* get ramdisk component image node offset */ +				show_boot_progress (123);  				rd_noffset = fit_image_get_node (fit_hdr, fit_uname_ramdisk);  			} -			if (rd_noffset < 0) +			if (rd_noffset < 0) { +				show_boot_progress (-124);  				return 0; +			}  			printf ("   Trying '%s' ramdisk subimage\n", fit_uname_ramdisk); +			show_boot_progress (125);  			if (!fit_check_ramdisk (fit_hdr, rd_noffset, arch, images->verify))  				return 0;  			/* 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"); +				show_boot_progress (-127);  				return 0;  			} +			show_boot_progress (128);  			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"); +				show_boot_progress (-129);  				return 0;  			} +			show_boot_progress (129);  			images->fit_hdr_rd = fit_hdr;  			images->fit_uname_rd = fit_uname_ramdisk; @@ -2445,19 +2457,23 @@ static int fit_check_ramdisk (const void *fit, int rd_noffset, uint8_t arch, int  		puts ("   Verifying Hash Integrity ... ");  		if (!fit_image_check_hashes (fit, rd_noffset)) {  			puts ("Bad Data Hash\n"); +			show_boot_progress (-125);  			return 0;  		}  		puts ("OK\n");  	} +	show_boot_progress (126);  	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)); +		show_boot_progress (-126);  		return 0;  	} +	show_boot_progress (127);  	return 1;  }  #endif /* USE_HOSTCC */ |