[new uImage] Add dual format uImage support framework

This patch adds framework for dual format images. Format detection is added
and the bootm controll flow is updated to include cases for new FIT format
uImages.

When the legacy (image_header based) format is detected appropriate
legacy specific handling is invoked. For the new (FIT based) format uImages
dual boot framework has a minial support, that will only print out a
corresponding debug messages. Implementation of the FIT specific handling will
be added in following patches.

Signed-off-by: Marian Balakowicz <m8@semihalf.com>
diff --git a/common/cmd_ximg.c b/common/cmd_ximg.c
index 7d83dc3..4dadc37 100644
--- a/common/cmd_ximg.c
+++ b/common/cmd_ximg.c
@@ -56,63 +56,76 @@
 		dest = simple_strtoul(argv[3], NULL, 16);
 	}
 
-	printf("## Copying from image at %08lx ...\n", addr);
 
-	hdr = (image_header_t *)addr;
+	switch (gen_image_get_format ((void *)addr)) {
+	case IMAGE_FORMAT_LEGACY:
 
-	if (!image_check_magic (hdr)) {
-		printf("Bad Magic Number\n");
-		return 1;
-	}
-
-	if (!image_check_hcrc (hdr)) {
-		printf("Bad Header Checksum\n");
-		return 1;
-	}
-#ifdef DEBUG
-	image_print_contents (hdr);
-#endif
+		printf("## Copying from legacy image at %08lx ...\n", addr);
+		hdr = (image_header_t *)addr;
+		if (!image_check_magic (hdr)) {
+			printf("Bad Magic Number\n");
+			return 1;
+		}
 
-	if (!image_check_type (hdr, IH_TYPE_MULTI)) {
-		printf("Wrong Image Type for %s command\n", cmdtp->name);
-		return 1;
-	}
+		if (!image_check_hcrc (hdr)) {
+			printf("Bad Header Checksum\n");
+			return 1;
+		}
+	#ifdef DEBUG
+		image_print_contents (hdr);
+	#endif
 
-	if (image_get_comp (hdr) != IH_COMP_NONE) {
-		printf("Wrong Compression Type for %s command\n", cmdtp->name);
-		return 1;
-	}
+		if (!image_check_type (hdr, IH_TYPE_MULTI)) {
+			printf("Wrong Image Type for %s command\n",
+					cmdtp->name);
+			return 1;
+		}
 
-	if (verify) {
-		printf("   Verifying Checksum ... ");
-		if (!image_check_dcrc (hdr)) {
-			printf("Bad Data CRC\n");
+		if (image_get_comp (hdr) != IH_COMP_NONE) {
+			printf("Wrong Compression Type for %s command\n",
+					cmdtp->name);
 			return 1;
 		}
-		printf("OK\n");
-	}
+
+		if (verify) {
+			printf("   Verifying Checksum ... ");
+			if (!image_check_dcrc (hdr)) {
+				printf("Bad Data CRC\n");
+				return 1;
+			}
+			printf("OK\n");
+		}
 
-	data = image_get_data (hdr);
-	len_ptr = (ulong *) data;
+		data = image_get_data (hdr);
+		len_ptr = (ulong *) data;
 
-	data += 4;		/* terminator */
-	for (i = 0; len_ptr[i]; ++i) {
-		data += 4;
-		if (argc > 2 && part > i) {
-			u_long tail;
-			len = image_to_cpu (len_ptr[i]);
-			tail = len % 4;
-			data += len;
-			if (tail) {
-				data += 4 - tail;
+		data += 4;		/* terminator */
+		for (i = 0; len_ptr[i]; ++i) {
+			data += 4;
+			if (argc > 2 && part > i) {
+				u_long tail;
+				len = image_to_cpu (len_ptr[i]);
+				tail = len % 4;
+				data += len;
+				if (tail) {
+					data += 4 - tail;
+				}
 			}
 		}
-	}
-	if (argc > 2 && part >= i) {
-		printf("Bad Image Part\n");
+		if (argc > 2 && part >= i) {
+			printf("Bad Image Part\n");
+			return 1;
+		}
+		len = image_to_cpu (len_ptr[part]);
+#if defined(CONFIG_FIT)
+	case IMAGE_FORMAT_FIT:
+		fit_unsupported ("imxtract");
+		return 1;
+#endif
+	default:
+		puts ("Invalid image type for imxtract\n");
 		return 1;
 	}
-	len = image_to_cpu (len_ptr[part]);
 
 	if (argc > 3) {
 		memcpy((char *) dest, (char *) data, len);