]> git.ipfire.org Git - people/ms/u-boot.git/blobdiff - common/image-fdt.c
imx: hab: Check if CSF is valid before authenticating image
[people/ms/u-boot.git] / common / image-fdt.c
index 8c3f3e63740c08db668bcd6a6d9f96c68bdf2696..1e946467e3c762fe03271ad454fab0ece787a207 100644 (file)
@@ -132,7 +132,7 @@ int boot_relocate_fdt(struct lmb *lmb, char **of_flat_tree, ulong *of_size)
        of_len = *of_size + CONFIG_SYS_FDT_PAD;
 
        /* If fdt_high is set use it to select the relocation address */
-       fdt_high = getenv("fdt_high");
+       fdt_high = env_get("fdt_high");
        if (fdt_high) {
                void *desired_addr = (void *)simple_strtoul(fdt_high, NULL, 16);
 
@@ -156,8 +156,8 @@ int boot_relocate_fdt(struct lmb *lmb, char **of_flat_tree, ulong *of_size)
        } else {
                of_start =
                    (void *)(ulong) lmb_alloc_base(lmb, of_len, 0x1000,
-                                                  getenv_bootm_mapsize()
-                                                  + getenv_bootm_low());
+                                                  env_get_bootm_mapsize()
+                                                  + env_get_bootm_low());
        }
 
        if (of_start == NULL) {
@@ -285,7 +285,7 @@ int boot_get_fdt(int flag, int argc, char * const argv[], uint8_t arch,
                        fdt_noffset = fit_get_node_from_config(images,
                                                               FIT_FDT_PROP,
                                                               fdt_addr);
-                       if (fdt_noffset == -ENOLINK)
+                       if (fdt_noffset == -ENOENT)
                                return 0;
                        else if (fdt_noffset < 0)
                                return 1;
@@ -294,9 +294,6 @@ int boot_get_fdt(int flag, int argc, char * const argv[], uint8_t arch,
                debug("## Checking for 'FDT'/'FDT Image' at %08lx\n",
                      fdt_addr);
 
-               /* copy from dataflash if needed */
-               fdt_addr = genimg_get_image(fdt_addr);
-
                /*
                 * Check if there is an FDT image at the
                 * address provided in the second bootm argument
@@ -356,17 +353,16 @@ int boot_get_fdt(int flag, int argc, char * const argv[], uint8_t arch,
                        if (fit_check_format(buf)) {
                                ulong load, len;
 
-                               fdt_noffset = fit_image_load(images,
+                               fdt_noffset = boot_get_fdt_fit(images,
                                        fdt_addr, &fit_uname_fdt,
                                        &fit_uname_config,
-                                       arch, IH_TYPE_FLATDT,
-                                       BOOTSTAGE_ID_FIT_FDT_START,
-                                       FIT_LOAD_OPTIONAL, &load, &len);
+                                       arch, &load, &len);
 
                                images->fit_hdr_fdt = map_sysmem(fdt_addr, 0);
                                images->fit_uname_fdt = fit_uname_fdt;
                                images->fit_noffset_fdt = fdt_noffset;
                                fdt_addr = load;
+
                                break;
                        } else
 #endif
@@ -458,11 +454,6 @@ __weak int ft_verify_fdt(void *fdt)
        return 1;
 }
 
-__weak int arch_fixup_fdt(void *blob)
-{
-       return 0;
-}
-
 int image_setup_libfdt(bootm_headers_t *images, void *blob,
                       int of_size, struct lmb *lmb)
 {
@@ -483,6 +474,8 @@ int image_setup_libfdt(bootm_headers_t *images, void *blob,
                printf("ERROR: arch-specific fdt fixup failed\n");
                goto err;
        }
+       /* Update ethernet nodes */
+       fdt_fixup_ethernet(blob);
        if (IMAGE_OF_BOARD_SETUP) {
                fdt_ret = ft_board_setup(blob, gd->bd);
                if (fdt_ret) {
@@ -499,13 +492,13 @@ int image_setup_libfdt(bootm_headers_t *images, void *blob,
                        goto err;
                }
        }
-       fdt_fixup_ethernet(blob);
 
        /* Delete the old LMB reservation */
-       lmb_free(lmb, (phys_addr_t)(u32)(uintptr_t)blob,
-                (phys_size_t)fdt_totalsize(blob));
+       if (lmb)
+               lmb_free(lmb, (phys_addr_t)(u32)(uintptr_t)blob,
+                        (phys_size_t)fdt_totalsize(blob));
 
-       ret = fdt_shrink_to_minimum(blob);
+       ret = fdt_shrink_to_minimum(blob, 0);
        if (ret < 0)
                goto err;
        of_size = ret;
@@ -515,7 +508,8 @@ int image_setup_libfdt(bootm_headers_t *images, void *blob,
                fdt_set_totalsize(blob, of_size);
        }
        /* Create a new LMB reservation */
-       lmb_reserve(lmb, (ulong)blob, of_size);
+       if (lmb)
+               lmb_reserve(lmb, (ulong)blob, of_size);
 
        fdt_initrd(blob, *initrd_start, *initrd_end);
        if (!ft_verify_fdt(blob))