[U-Boot-Users] [PATCH 15/20] [new uImage] Use show_boot_progress() for new uImage format

Bartlomiej Sieka tur at semihalf.com
Wed Mar 12 21:12:00 CET 2008


From: Marian Balakowicz <m8 at semihalf.com>

This patch allocates a set of show_boot_progress() IDs for new uImage format
and adds show_boot_progress() calls in new uImage format handling code.

Signed-off-by: Marian Balakowicz <m8 at semihalf.com>
---

 README             |   83 +++++++++++++++++++++++++++++++++++++++++++---------
 common/cmd_bootm.c |   30 ++++++++++++++++---
 common/cmd_doc.c   |    2 +
 common/cmd_ide.c   |    2 +
 common/cmd_nand.c  |    4 +++
 common/image.c     |   28 ++++++++++++++----
 6 files changed, 125 insertions(+), 24 deletions(-)

diff --git a/README b/README
index 491397a..183246e 100644
--- a/README
+++ b/README
@@ -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 11c476e..6591e61 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 bf2f0a9..83aba37 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 6a67dd6..8ace970 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 9a168ea..7b1f830 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 e838f65..f29614b 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 */





More information about the U-Boot mailing list