public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Bartlomiej Sieka <tur@semihalf.com>
To: u-boot@lists.denx.de
Subject: [U-Boot-Users] [PATCH 13/20] [new uImage] Add new uImage format handling to other	bootm related commands
Date: Wed, 12 Mar 2008 21:11:47 +0100	[thread overview]
Message-ID: <20080312201147.6444.36440.stgit@pollux.denx.de> (raw)
In-Reply-To: <20080312201023.6444.52806.stgit@pollux.denx.de>

From: Marian Balakowicz <m8@semihalf.com>

Updated commands:

docboot  - cmd_doc.c
fdcboot  - cmd_fdc.c
diskboot - cmd_ide.c
nboot    - cmd_nand.c
scsiboot - cmd_scsi.c
usbboot  - cmd_usb.c

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

 common/cmd_doc.c  |   34 ++++++++++++++++++----------
 common/cmd_fdc.c  |   27 ++++++++++++++++------
 common/cmd_ide.c  |   25 +++++++++++++++-----
 common/cmd_nand.c |   65 ++++++++++++++++++++++++++++++++++-------------------
 common/cmd_scsi.c |   26 +++++++++++++++------
 common/cmd_usb.c  |   27 +++++++++++++++-------
 6 files changed, 140 insertions(+), 64 deletions(-)

diff --git a/common/cmd_doc.c b/common/cmd_doc.c
index 293b1aa..bf2f0a9 100644
--- a/common/cmd_doc.c
+++ b/common/cmd_doc.c
@@ -205,6 +205,9 @@ int do_docboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 	ulong offset = 0;
 	image_header_t *hdr;
 	int rcode = 0;
+#if defined(CONFIG_FIT)
+	const void *fit_hdr;
+#endif
 
 	show_boot_progress (34);
 	switch (argc) {
@@ -265,29 +268,30 @@ int do_docboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 	case IMAGE_FORMAT_LEGACY:
 		hdr = (image_header_t *)addr;
 
-		if (image_check_magic (hdr)) {
+		image_print_contents (hdr);
 
-			image_print_contents (hdr);
-
-			cnt = image_get_image_size (hdr);
-			cnt -= SECTORSIZE;
-		} else {
-			puts ("\n** Bad Magic Number **\n");
-			show_boot_progress (-39);
-			return 1;
-		}
+		cnt = image_get_image_size (hdr);
 		break;
 #if defined(CONFIG_FIT)
 	case IMAGE_FORMAT_FIT:
-		fit_unsupported ("docboot");
-		return 1;
+		fit_hdr = (const void *)addr;
+		if (!fit_check_format (fit_hdr)) {
+			puts ("** Bad FIT image format\n");
+			return 1;
+		}
+		puts ("Fit image detected...\n");
+
+		cnt = fit_get_size (fit_hdr);
+		break;
 #endif
 	default:
+		show_boot_progress (-39);
 		puts ("** Unknown image type\n");
 		return 1;
 	}
 	show_boot_progress (39);
 
+	cnt -= SECTORSIZE;
 	if (doc_rw (doc_dev_desc + dev, 1, offset + SECTORSIZE, cnt,
 		    NULL, (u_char *)(addr+SECTORSIZE))) {
 		printf ("** Read error on %d\n", dev);
@@ -296,6 +300,12 @@ int do_docboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 	}
 	show_boot_progress (40);
 
+#if defined(CONFIG_FIT)
+	/* This cannot be done earlier, we need complete FIT image in RAM first */
+	if (genimg_get_format ((void *)addr) == IMAGE_FORMAT_FIT)
+		fit_print_contents ((const void *)addr);
+#endif
+
 	/* Loading ok, update default load address */
 
 	load_addr = addr;
diff --git a/common/cmd_fdc.c b/common/cmd_fdc.c
index 80301b9..bf28370 100644
--- a/common/cmd_fdc.c
+++ b/common/cmd_fdc.c
@@ -788,6 +788,9 @@ int do_fdcboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 	int i,nrofblk;
 	char *ep;
 	int rcode = 0;
+#if defined(CONFIG_FIT)
+	const void *fit_hdr;
+#endif
 
 	switch (argc) {
 	case 1:
@@ -839,18 +842,21 @@ int do_fdcboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 	switch (genimg_get_format ((void *)addr)) {
 	case IMAGE_FORMAT_LEGACY:
 		hdr = (image_header_t *)addr;
-		if (!image_check_magic (hdr)) {
-			printf ("Bad Magic Number\n");
-			return 1;
-		}
 		image_print_contents (hdr);
 
 		imsize = image_get_image_size (hdr);
 		break;
 #if defined(CONFIG_FIT)
 	case IMAGE_FORMAT_FIT:
-		fit_unsupported ("fdcboot");
-		return 1;
+		fit_hdr = (const void *)addr;
+		if (!fit_check_format (fit_hdr)) {
+			puts ("** Bad FIT image format\n");
+			return 1;
+		}
+		puts ("Fit image detected...\n");
+
+		imsize = fit_get_size (fit_hdr);
+		break;
 #endif
 	default:
 		puts ("** Unknown image type\n");
@@ -872,9 +878,16 @@ int do_fdcboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 	printf("OK %ld Bytes loaded.\n",imsize);
 
 	flush_cache (addr, imsize);
-	/* Loading ok, update default load address */
 
+#if defined(CONFIG_FIT)
+	/* This cannot be done earlier, we need complete FIT image in RAM first */
+	if (genimg_get_format ((void *)addr) == IMAGE_FORMAT_FIT)
+		fit_print_contents ((const void *)addr);
+#endif
+
+	/* Loading ok, update default load address */
 	load_addr = addr;
+
 	/* Check if we should attempt an auto-start */
 	if (((ep = getenv("autostart")) != NULL) && (strcmp(ep,"yes") == 0)) {
 		char *local_args[2];
diff --git a/common/cmd_ide.c b/common/cmd_ide.c
index 79b7dfb..6a67dd6 100644
--- a/common/cmd_ide.c
+++ b/common/cmd_ide.c
@@ -370,6 +370,9 @@ int do_diskboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 	disk_partition_t info;
 	image_header_t *hdr;
 	int rcode = 0;
+#if defined(CONFIG_FIT)
+	const void *fit_hdr;
+#endif
 
 	show_boot_progress (41);
 	switch (argc) {
@@ -450,11 +453,6 @@ int do_diskboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 	case IMAGE_FORMAT_LEGACY:
 		hdr = (image_header_t *)addr;
 
-		if (!image_check_magic (hdr)) {
-			printf("\n** Bad Magic Number **\n");
-			show_boot_progress (-49);
-			return 1;
-		}
 		show_boot_progress (49);
 
 		if (!image_check_hcrc (hdr)) {
@@ -470,10 +468,18 @@ int do_diskboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 		break;
 #if defined(CONFIG_FIT)
 	case IMAGE_FORMAT_FIT:
-		fit_unsupported ("diskboot");
-		return 1;
+		fit_hdr = (const void *)addr;
+		if (!fit_check_format (fit_hdr)) {
+			puts ("** Bad FIT image format\n");
+			return 1;
+		}
+		puts ("Fit image detected...\n");
+
+		cnt = fit_get_size (fit_hdr);
+		break;
 #endif
 	default:
+		show_boot_progress (-49);
 		puts ("** Unknown image type\n");
 		return 1;
 	}
@@ -490,6 +496,11 @@ int do_diskboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 	}
 	show_boot_progress (51);
 
+#if defined(CONFIG_FIT)
+	/* This cannot be done earlier, we need complete FIT image in RAM first */
+	if (genimg_get_format ((void *)addr) == IMAGE_FORMAT_FIT)
+		fit_print_contents ((const void *)addr);
+#endif
 
 	/* Loading ok, update default load address */
 
diff --git a/common/cmd_nand.c b/common/cmd_nand.c
index 86959dc..9a168ea 100644
--- a/common/cmd_nand.c
+++ b/common/cmd_nand.c
@@ -484,6 +484,9 @@ static int nand_load_image(cmd_tbl_t *cmdtp, nand_info_t *nand,
 	ulong cnt;
 	image_header_t *hdr;
 	int jffs2 = 0;
+#if defined(CONFIG_FIT)
+	const void *fit_hdr;
+#endif
 
 	s = strchr(cmd, '.');
 	if (s != NULL &&
@@ -516,24 +519,25 @@ static int nand_load_image(cmd_tbl_t *cmdtp, nand_info_t *nand,
 	case IMAGE_FORMAT_LEGACY:
 		hdr = (image_header_t *)addr;
 
-		if (!image_check_magic (hdr)) {
-			printf("\n** Bad Magic Number 0x%x **\n",
-					image_get_magic (hdr));
-			show_boot_progress (-57);
-			return 1;
-		}
 		show_boot_progress (57);
-
 		image_print_contents (hdr);
 
 		cnt = image_get_image_size (hdr);
 		break;
 #if defined(CONFIG_FIT)
 	case IMAGE_FORMAT_FIT:
-		fit_unsupported ("nand_load_image");
-		return 1;
+		fit_hdr = (const void *)addr;
+		if (!fit_check_format (fit_hdr)) {
+			puts ("** Bad FIT image format\n");
+			return 1;
+		}
+		puts ("Fit image detected...\n");
+
+		cnt = fit_get_size (fit_hdr);
+		break;
 #endif
 	default:
+		show_boot_progress (-57);
 		puts ("** Unknown image type\n");
 		return 1;
 	}
@@ -557,6 +561,12 @@ static int nand_load_image(cmd_tbl_t *cmdtp, nand_info_t *nand,
 	}
 	show_boot_progress (58);
 
+#if defined(CONFIG_FIT)
+	/* This cannot be done earlier, we need complete FIT image in RAM first */
+	if (genimg_get_format ((void *)addr) == IMAGE_FORMAT_FIT)
+		fit_print_contents ((const void *)addr);
+#endif
+
 	/* Loading ok, update default load address */
 
 	load_addr = addr;
@@ -939,6 +949,10 @@ int do_nandboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 	ulong offset = 0;
 	image_header_t *hdr;
 	int rcode = 0;
+#if defined(CONFIG_FIT)
+	const void *fit_hdr;
+#endif
+
 	show_boot_progress (52);
 	switch (argc) {
 	case 1:
@@ -997,26 +1011,25 @@ int do_nandboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 	switch (genimg_get_format ((void *)addr)) {
 	case IMAGE_FORMAT_LEGACY:
 		hdr = (image_header_t *)addr;
+		image_print_contents (hdr);
 
-		if (image_check_magic (hdr)) {
-
-			image_print_contents (hdr);
-
-			cnt = image_get_image_size (hdr);
-			cnt -= SECTORSIZE;
-		} else {
-			printf ("\n** Bad Magic Number 0x%x **\n",
-					image_get_magic (hdr));
-			show_boot_progress (-57);
-			return 1;
-		}
+		cnt = image_get_image_size (hdr);
+		cnt -= SECTORSIZE;
 		break;
 #if defined(CONFIG_FIT)
 	case IMAGE_FORMAT_FIT:
-		fit_unsupported ("nboot");
-		return 1;
+		fit_hdr = (const void *)addr;
+		if (!fit_check_format (fit_hdr)) {
+			puts ("** Bad FIT image format\n");
+			return 1;
+		}
+		puts ("Fit image detected...\n");
+
+		cnt = fit_get_size (fit_hdr);
+		break;
 #endif
 	default:
+		show_boot_progress (-57);
 		puts ("** Unknown image type\n");
 		return 1;
 	}
@@ -1031,6 +1044,12 @@ int do_nandboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 	}
 	show_boot_progress (58);
 
+#if defined(CONFIG_FIT)
+	/* This cannot be done earlier, we need complete FIT image in RAM first */
+	if (genimg_get_format ((void *)addr) == IMAGE_FORMAT_FIT)
+		fit_print_contents ((const void *)addr);
+#endif
+
 	/* Loading ok, update default load address */
 
 	load_addr = addr;
diff --git a/common/cmd_scsi.c b/common/cmd_scsi.c
index 7868805..f49531e 100644
--- a/common/cmd_scsi.c
+++ b/common/cmd_scsi.c
@@ -211,6 +211,9 @@ int do_scsiboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 	disk_partition_t info;
 	image_header_t *hdr;
 	int rcode = 0;
+#if defined(CONFIG_FIT)
+	const void *fit_hdr;
+#endif
 
 	switch (argc) {
 	case 1:
@@ -277,11 +280,6 @@ int do_scsiboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 	case IMAGE_FORMAT_LEGACY:
 		hdr = (image_header_t *)addr;
 
-		if (!image_check_magic (hdr)) {
-			printf("\n** Bad Magic Number **\n");
-			return 1;
-		}
-
 		if (!image_check_hcrc (hdr)) {
 			puts ("\n** Bad Header Checksum **\n");
 			return 1;
@@ -292,8 +290,15 @@ int do_scsiboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 		break;
 #if defined(CONFIG_FIT)
 	case IMAGE_FORMAT_FIT:
-		fit_unsupported ("scsi");
-		return 1;
+		fit_hdr = (const void *)addr;
+		if (!fit_check_format (fit_hdr)) {
+			puts ("** Bad FIT image format\n");
+			return 1;
+		}
+		puts ("Fit image detected...\n");
+
+		cnt = fit_get_size (fit_hdr);
+		break;
 #endif
 	default:
 		puts ("** Unknown image type\n");
@@ -309,6 +314,13 @@ int do_scsiboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 		printf ("** Read error on %d:%d\n", dev, part);
 		return 1;
 	}
+
+#if defined(CONFIG_FIT)
+	/* This cannot be done earlier, we need complete FIT image in RAM first */
+	if (genimg_get_format ((void *)addr) == IMAGE_FORMAT_FIT)
+		fit_print_contents ((const void *)addr);
+#endif
+
 	/* Loading ok, update default load address */
 	load_addr = addr;
 
diff --git a/common/cmd_usb.c b/common/cmd_usb.c
index 8ee7d27..bf56c6a 100644
--- a/common/cmd_usb.c
+++ b/common/cmd_usb.c
@@ -315,7 +315,9 @@ int do_usbboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 	disk_partition_t info;
 	image_header_t *hdr;
 	block_dev_desc_t *stor_dev;
-
+#if defined(CONFIG_FIT)
+	const void *fit_hdr;
+#endif
 
 	switch (argc) {
 	case 1:
@@ -390,11 +392,6 @@ int do_usbboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 	case IMAGE_FORMAT_LEGACY:
 		hdr = (image_header_t *)addr;
 
-		if (!image_check_magic (hdr)) {
-			printf("\n** Bad Magic Number **\n");
-			return 1;
-		}
-
 		if (!image_check_hcrc (hdr)) {
 			puts ("\n** Bad Header Checksum **\n");
 			return 1;
@@ -406,8 +403,15 @@ int do_usbboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 		break;
 #if defined(CONFIG_FIT)
 	case IMAGE_FORMAT_FIT:
-		fit_unsupported ("usbboot");
-		return 1;
+		fit_hdr = (const void *)addr;
+		if (!fit_check_format (fit_hdr)) {
+			puts ("** Bad FIT image format\n");
+			return 1;
+		}
+		puts ("Fit image detected...\n");
+
+		cnt = fit_get_size (fit_hdr);
+		break;
 #endif
 	default:
 		puts ("** Unknown image type\n");
@@ -423,6 +427,13 @@ int do_usbboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 		printf ("\n** Read error on %d:%d\n", dev, part);
 		return 1;
 	}
+
+#if defined(CONFIG_FIT)
+	/* This cannot be done earlier, we need complete FIT image in RAM first */
+	if (genimg_get_format ((void *)addr) == IMAGE_FORMAT_FIT)
+		fit_print_contents ((const void *)addr);
+#endif
+
 	/* Loading ok, update default load address */
 	load_addr = addr;
 

  parent reply	other threads:[~2008-03-12 20:11 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-03-12 20:10 [U-Boot-Users] [PATCH 00/20] [new uImage] patchset 7 - core functionality Bartlomiej Sieka
2008-03-12 20:10 ` [U-Boot-Users] [PATCH 01/20] [new uImage] Make node unit names const in struct bootm_headers Bartlomiej Sieka
2008-03-12 20:10 ` [U-Boot-Users] [PATCH 02/20] [new uImage] Add support for new uImage format to mkimage tool Bartlomiej Sieka
2008-03-14 14:54   ` Luigi 'Comio' Mantellini
2008-03-14 16:19     ` Bartlomiej Sieka
2008-03-12 20:10 ` [U-Boot-Users] [PATCH 03/20] [new uImage] Add new uImage format support for imls and iminfo commands Bartlomiej Sieka
2008-03-12 20:10 ` [U-Boot-Users] [PATCH 04/20] [new uImage] Add new uImage format support for kernel booting Bartlomiej Sieka
2008-03-12 20:10 ` [U-Boot-Users] [PATCH 05/20] [new uImage] Add new uImage format support for ramdisk handling Bartlomiej Sieka
2008-03-12 20:11 ` [U-Boot-Users] [PATCH 06/20] [new uImage] Remove unnecessary arguments passed to ramdisk routines Bartlomiej Sieka
2008-03-12 20:11 ` [U-Boot-Users] [PATCH 07/20] [new uImage] Re-enable interrupts for non automatic booting Bartlomiej Sieka
2008-03-12 20:11 ` [U-Boot-Users] [PATCH 08/20] [new uImage] ppc: Add new uImage format support to FDT handling routines Bartlomiej Sieka
2008-03-12 20:11 ` [U-Boot-Users] [PATCH 09/20] [new uImage] Add node offsets for FIT images listed in struct bootm_headers Bartlomiej Sieka
2008-03-12 20:11 ` [U-Boot-Users] [PATCH 10/20] [new uImage] Add new uImage format support to arch specific do_bootm_linux() routines Bartlomiej Sieka
2008-03-12 20:11 ` [U-Boot-Users] [PATCH 11/20] [new uImage] Add new uImage format support to autoscript routine Bartlomiej Sieka
2008-03-12 20:11 ` [U-Boot-Users] [PATCH 12/20] [new uImage] Add new uImage format support to imgextract command Bartlomiej Sieka
2008-03-12 20:11 ` Bartlomiej Sieka [this message]
2008-03-12 20:11 ` [U-Boot-Users] [PATCH 14/20] [new uImage] Add new uImage fromat support to fpga command Bartlomiej Sieka
2008-03-12 20:12 ` [U-Boot-Users] [PATCH 15/20] [new uImage] Use show_boot_progress() for new uImage format Bartlomiej Sieka
2008-03-12 20:12 ` [U-Boot-Users] [PATCH 16/20] [new uImage] More verbose kernel image uncompress error message Bartlomiej Sieka
2008-03-12 20:12 ` [U-Boot-Users] [PATCH 17/20] [new uImage] Add proper ramdisk/FDT handling when FIT configuration is used Bartlomiej Sieka
2008-03-12 20:12 ` [U-Boot-Users] [PATCH 18/20] [new uImage] Fix build problems on trab board Bartlomiej Sieka
2008-03-12 20:55   ` Wolfgang Denk
2008-03-19  9:01     ` Bartlomiej Sieka
2008-03-12 20:12 ` [U-Boot-Users] [PATCH 19/20] [new uImage] Fix definition of common bootm_headers_t fields Bartlomiej Sieka
2008-03-12 20:12 ` [U-Boot-Users] [PATCH 20/20] [new uImage] Add new uImage format documentation and examples Bartlomiej Sieka

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080312201147.6444.36440.stgit@pollux.denx.de \
    --to=tur@semihalf.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox