[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