]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
tools: mkimage: add new image type "fdt_legacy"
authorMarc Kleine-Budde <mkl@pengutronix.de>
Wed, 23 Nov 2022 11:55:33 +0000 (12:55 +0100)
committerTom Rini <trini@konsulko.com>
Thu, 8 Dec 2022 14:29:02 +0000 (09:29 -0500)
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>
boot/image.c
include/image.h
tools/default_image.c

index b33d1dfc6b3627e532573e55648381c019ea6c33..958dbf853474af322e6f3f9e6cc53543c3aab9d8 100644 (file)
@@ -180,6 +180,7 @@ static const table_entry_t uimage_type[] = {
        {       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,                 "",           "",                   },
 };
 
index 6f21dafba8cec53ebe133a8cfb486e915b8024bb..b6a809834ad30a393df5dd5ea62ecb57ff4a9e73 100644 (file)
@@ -229,6 +229,7 @@ enum image_type_t {
        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 */
 };
index 4a067e65862efaf103387af0e22c06a0452ca879..0ac3382003d5878c31b05a955d914bd04ea0a7a6 100644 (file)
@@ -27,7 +27,8 @@ static struct legacy_img_hdr header;
 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 @@ static void image_set_header(void *ptr, struct stat *sbuf, int ifd,
        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 @@ static void image_set_header(void *ptr, struct stat *sbuf, int ifd,
        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 @@ static void image_set_header(void *ptr, struct stat *sbuf, int ifd,
        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);