tools: mkimage: add new image type "fdt_legacy"

If the user select the image type "flat_dt" a FIT image will be build.
This breaks the legacy use case of putting a Flat Device Tree into a
legacy u-boot image.

Add a new image type "fdt_legacy" to build a legacy u-boot image
with a "flat_dt" type.

Link: https://lore.kernel.org/all/20221028155205.ojw6tcso2fofgnhm@pengutronix.de
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Reviewed-by: Sean Anderson <seanga2@gmail.com>
diff --git a/boot/image.c b/boot/image.c
index b33d1df..958dbf8 100644
--- a/boot/image.c
+++ b/boot/image.c
@@ -180,6 +180,7 @@
 	{	IH_TYPE_COPRO, "copro", "Coprocessor Image"},
 	{	IH_TYPE_SUNXI_EGON, "sunxi_egon",  "Allwinner eGON Boot Image" },
 	{	IH_TYPE_SUNXI_TOC0, "sunxi_toc0",  "Allwinner TOC0 Boot Image" },
+	{	IH_TYPE_FDT_LEGACY, "fdt_legacy", "legacy Image with Flat Device Tree ", },
 	{	-1,		    "",		  "",			},
 };
 
diff --git a/include/image.h b/include/image.h
index 6f21daf..b6a8098 100644
--- a/include/image.h
+++ b/include/image.h
@@ -229,6 +229,7 @@
 	IH_TYPE_COPRO,			/* Coprocessor Image for remoteproc*/
 	IH_TYPE_SUNXI_EGON,		/* Allwinner eGON Boot Image */
 	IH_TYPE_SUNXI_TOC0,		/* Allwinner TOC0 Boot Image */
+	IH_TYPE_FDT_LEGACY,		/* Binary Flat Device Tree Blob	in a Legacy Image */
 
 	IH_TYPE_COUNT,			/* Number of image types */
 };
diff --git a/tools/default_image.c b/tools/default_image.c
index 4a067e6..0ac3382 100644
--- a/tools/default_image.c
+++ b/tools/default_image.c
@@ -27,7 +27,8 @@
 static int image_check_image_types(uint8_t type)
 {
 	if (((type > IH_TYPE_INVALID) && (type < IH_TYPE_FLATDT)) ||
-	    (type == IH_TYPE_KERNEL_NOLOAD) || (type == IH_TYPE_FIRMWARE_IVT))
+	    (type == IH_TYPE_KERNEL_NOLOAD) || (type == IH_TYPE_FIRMWARE_IVT) ||
+	    (type == IH_TYPE_FDT_LEGACY))
 		return EXIT_SUCCESS;
 	else
 		return EXIT_FAILURE;
@@ -94,6 +95,7 @@
 	uint32_t imagesize;
 	uint32_t ep;
 	uint32_t addr;
+	int type;
 	struct legacy_img_hdr *hdr = (struct legacy_img_hdr *)ptr;
 
 	checksum = crc32(0,
@@ -113,6 +115,11 @@
 	else
 		imagesize = sbuf->st_size - sizeof(struct legacy_img_hdr);
 
+	if (params->type == IH_TYPE_FDT_LEGACY)
+		type = IH_TYPE_FLATDT;
+	else
+		type = params->type;
+
 	if (params->os == IH_OS_TEE) {
 		addr = optee_image_get_load_addr(hdr);
 		ep = optee_image_get_entry_point(hdr);
@@ -127,7 +134,7 @@
 	image_set_dcrc(hdr, checksum);
 	image_set_os(hdr, params->os);
 	image_set_arch(hdr, params->arch);
-	image_set_type(hdr, params->type);
+	image_set_type(hdr, type);
 	image_set_comp(hdr, params->comp);
 
 	image_set_name(hdr, params->imagename);