Lines Matching +full:load +full:- +full:reduced

1 // SPDX-License-Identifier: GPL-2.0+
5 * (C) Copyright 2000-2004
9 * Updated-by: Prafulla Wadaskar <prafulla@marvell.com>
22 #include <u-boot/crc.h>
36 tfd = mmap_fdt(params->cmdname, tmpfile, size_inc, &ptr, &sbuf, true); in fit_add_file_data()
38 return -EIO; in fit_add_file_data()
40 if (params->keydest) { in fit_add_file_data()
43 destfd = mmap_fdt(params->cmdname, params->keydest, size_inc, in fit_add_file_data()
46 ret = -EIO; in fit_add_file_data()
53 if (params->datafile) { in fit_add_file_data()
54 time_t time = imagetool_get_source_date(params->cmdname, in fit_add_file_data()
60 ret = fit_add_verification_data(params->keydir, dest_blob, ptr, in fit_add_file_data()
61 params->comment, in fit_add_file_data()
62 params->require_keys, in fit_add_file_data()
63 params->engine_id, in fit_add_file_data()
64 params->cmdname); in fit_add_file_data()
80 * fit_calc_size() - Calculate the approximate size of the FIT we will generate
87 size = imagetool_get_filesize(params, params->datafile); in fit_calc_size()
89 return -1; in fit_calc_size()
92 if (params->fit_ramdisk) { in fit_calc_size()
93 size = imagetool_get_filesize(params, params->fit_ramdisk); in fit_calc_size()
95 return -1; in fit_calc_size()
99 for (cont = params->content_head; cont; cont = cont->next) { in fit_calc_size()
100 size = imagetool_get_filesize(params, cont->fname); in fit_calc_size()
102 return -1; in fit_calc_size()
125 params->cmdname, fname, strerror(errno)); in fdt_property_file()
126 return -1; in fdt_property_file()
131 params->cmdname, fname, strerror(errno)); in fdt_property_file()
141 params->cmdname, fname, strerror(errno)); in fdt_property_file()
149 return -1; in fdt_property_file()
171 * "arch/arm/dts/sun7i-a20-bananapro.dtb" in get_basename()
172 * becomes "sun7i-a20-bananapro" in get_basename()
178 len = end - start; in get_basename()
180 len = size - 1; in get_basename()
186 * fit_write_images() - Write out a list of images to the FIT
188 * We always include the main image (params->datafile). If there are device
189 * tree files, we include an fdt- node for each of those too.
202 typename = genimg_get_type_short_name(params->fit_image_type); in fit_write_images()
203 snprintf(str, sizeof(str), "%s-1", typename); in fit_write_images()
205 fdt_property_string(fdt, FIT_DESC_PROP, params->imagename); in fit_write_images()
208 genimg_get_arch_short_name(params->arch)); in fit_write_images()
210 genimg_get_os_short_name(params->os)); in fit_write_images()
212 genimg_get_comp_short_name(params->comp)); in fit_write_images()
213 fdt_property_u32(fdt, FIT_LOAD_PROP, params->addr); in fit_write_images()
214 fdt_property_u32(fdt, FIT_ENTRY_PROP, params->ep); in fit_write_images()
217 * Put data last since it is large. SPL may only load the first part in fit_write_images()
220 ret = fdt_property_file(params, fdt, FIT_DATA_PROP, params->datafile); in fit_write_images()
227 for (cont = params->content_head; cont; cont = cont->next) { in fit_write_images()
228 if (cont->type != IH_TYPE_FLATDT) in fit_write_images()
230 snprintf(str, sizeof(str), "%s-%d", FIT_FDT_PROP, ++upto); in fit_write_images()
233 get_basename(str, sizeof(str), cont->fname); in fit_write_images()
236 cont->fname); in fit_write_images()
241 genimg_get_arch_short_name(params->arch)); in fit_write_images()
248 if (params->fit_ramdisk) { in fit_write_images()
249 fdt_begin_node(fdt, FIT_RAMDISK_PROP "-1"); in fit_write_images()
253 genimg_get_os_short_name(params->os)); in fit_write_images()
256 params->fit_ramdisk); in fit_write_images()
269 * fit_write_configs() - Write out a list of configurations to the FIT
272 * selects the main image (params->datafile) and its corresponding device
285 fdt_property_string(fdt, FIT_DEFAULT_PROP, "conf-1"); in fit_write_configs()
288 for (cont = params->content_head; cont; cont = cont->next) { in fit_write_configs()
289 if (cont->type != IH_TYPE_FLATDT) in fit_write_configs()
291 typename = genimg_get_type_short_name(cont->type); in fit_write_configs()
292 snprintf(str, sizeof(str), "conf-%d", ++upto); in fit_write_configs()
295 get_basename(str, sizeof(str), cont->fname); in fit_write_configs()
298 typename = genimg_get_type_short_name(params->fit_image_type); in fit_write_configs()
299 snprintf(str, sizeof(str), "%s-1", typename); in fit_write_configs()
303 if (params->fit_ramdisk) in fit_write_configs()
305 FIT_RAMDISK_PROP "-1"); in fit_write_configs()
307 snprintf(str, sizeof(str), FIT_FDT_PROP "-%d", upto); in fit_write_configs()
313 fdt_begin_node(fdt, "conf-1"); in fit_write_configs()
314 typename = genimg_get_type_short_name(params->fit_image_type); in fit_write_configs()
315 snprintf(str, sizeof(str), "%s-1", typename); in fit_write_configs()
318 if (params->fit_ramdisk) in fit_write_configs()
320 FIT_RAMDISK_PROP "-1"); in fit_write_configs()
339 genimg_get_type_name(params->fit_image_type)); in fit_build_fdt()
340 fdt_property_strf(fdt, "creator", "U-Boot mkimage %s", PLAIN_VERSION); in fit_build_fdt()
341 fdt_property_u32(fdt, "#address-cells", 1); in fit_build_fdt()
363 return -1; in fit_build()
367 params->cmdname, size); in fit_build()
368 return -1; in fit_build()
373 params->cmdname); in fit_build()
380 params->cmdname, fname, strerror(errno)); in fit_build()
386 params->cmdname, fname, strerror(errno)); in fit_build()
397 return -1; in fit_build()
401 * fit_extract_data() - Move all data outside the FIT
406 * 'data-offset' properties.
408 * This function cannot cope with FITs with 'data-offset' properties. All
423 fd = mmap_fdt(params->cmdname, fname, 0, &fdt, &sbuf, false); in fit_extract_data()
425 return -EIO; in fit_extract_data()
431 ret = -ENOMEM; in fit_extract_data()
439 ret = -EINVAL; in fit_extract_data()
457 ret = -EPERM; in fit_extract_data()
460 if (params->external_offset > 0) { in fit_extract_data()
463 params->external_offset + buf_ptr); in fit_extract_data()
476 debug("Size reduced from %x to %x\n", fit_size, fdt_totalsize(fdt)); in fit_extract_data()
485 ret = -EIO; in fit_extract_data()
490 if (params->external_offset > 0) { in fit_extract_data()
491 if (params->external_offset < new_size) { in fit_extract_data()
493 params->external_offset, new_size); in fit_extract_data()
494 ret = -EINVAL; in fit_extract_data()
497 new_size = params->external_offset; in fit_extract_data()
502 ret = -EIO; in fit_extract_data()
508 ret = -EIO; in fit_extract_data()
534 fd = mmap_fdt(params->cmdname, fname, 0, &old_fdt, &sbuf, false); in fit_import_data()
536 return -EIO; in fit_import_data()
546 ret = -ENOMEM; in fit_import_data()
553 ret = -EINVAL; in fit_import_data()
560 ret = -EINVAL; in fit_import_data()
570 buf_ptr = fdtdec_get_int(fdt, node, "data-offset", -1); in fit_import_data()
571 len = fdtdec_get_int(fdt, node, "data-size", -1); in fit_import_data()
572 if (buf_ptr == -1 || len == -1) in fit_import_data()
581 ret = -EINVAL; in fit_import_data()
586 /* Close the old fd so we can re-use it. */ in fit_import_data()
598 params->cmdname, fname, strerror(errno)); in fit_import_data()
599 ret = -EIO; in fit_import_data()
605 ret = -EIO; in fit_import_data()
620 * fit_handle_file - main FIT file processing function
625 * datafile - .its file
626 * imagefile - .itb file
642 if (strlen (params->imagefile) + in fit_handle_file()
646 params->imagefile, params->cmdname); in fit_handle_file()
649 sprintf (tmpfile, "%s%s", params->imagefile, MKIMAGE_TMPFILE_SUFFIX); in fit_handle_file()
652 if (params->auto_its) { in fit_handle_file()
655 params->cmdname); in fit_handle_file()
659 } else if (params->datafile) { in fit_handle_file()
660 /* dtc -I dts -O dtb -p 500 -o tmpfile datafile */ in fit_handle_file()
661 snprintf(cmd, sizeof(cmd), "%s %s -o \"%s\" \"%s\"", in fit_handle_file()
662 MKIMAGE_DTC, params->dtc, tmpfile, params->datafile); in fit_handle_file()
666 params->imagefile, tmpfile); in fit_handle_file()
668 if (*cmd && system(cmd) == -1) { in fit_handle_file()
670 params->cmdname, cmd, strerror(errno)); in fit_handle_file()
691 if (!ret || ret != -ENOSPC) in fit_handle_file()
697 params->cmdname, ret); in fit_handle_file()
702 if (params->external_data) { in fit_handle_file()
708 if (rename (tmpfile, params->imagefile) == -1) { in fit_handle_file()
710 params->cmdname, tmpfile, params->imagefile, in fit_handle_file()
713 unlink (params->imagefile); in fit_handle_file()
720 return -1; in fit_handle_file()
724 * fit_image_extract - extract a FIT component image
727 * @file_name: name of the file to store the FIT sub-image
748 * fit_extract_contents - retrieve a sub-image component from the FIT image
769 return -1; in fit_extract_contents()
777 return -1; in fit_extract_contents()
782 if ((params->pflag < 0) || (count <= params->pflag)) { in fit_extract_contents()
783 printf("No such component at '%d'\n", params->pflag); in fit_extract_contents()
784 return -1; in fit_extract_contents()
797 if (params->pflag == count) { in fit_extract_contents()
804 params->outfile); in fit_extract_contents()
816 if (params->auto_its) in fit_check_params()
818 return ((params->dflag && (params->fflag || params->lflag)) || in fit_check_params()
819 (params->fflag && (params->dflag || params->lflag)) || in fit_check_params()
820 (params->lflag && (params->dflag || params->fflag))); in fit_check_params()