+// SPDX-License-Identifier: GPL-2.0+
/*
* (C) Copyright 2008 Semihalf
*
* some functions added to address abstraction
*
* All rights reserved.
- *
- * SPDX-License-Identifier: GPL-2.0+
*/
#include "imagetool.h"
#include "mkimage.h"
+#include <u-boot/crc.h>
#include <image.h>
+#include <tee/optee.h>
#include <u-boot/crc.h>
+#include <imximage.h>
static image_header_t 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_KERNEL_NOLOAD) || (type == IH_TYPE_FIRMWARE_IVT))
return EXIT_SUCCESS;
else
return EXIT_FAILURE;
struct image_tool_params *params)
{
uint32_t checksum;
- char *source_date_epoch;
- struct tm *time_universal;
time_t time;
+ uint32_t imagesize;
+ uint32_t ep;
+ uint32_t addr;
image_header_t * hdr = (image_header_t *)ptr;
sizeof(image_header_t)),
sbuf->st_size - sizeof(image_header_t));
- source_date_epoch = getenv("SOURCE_DATE_EPOCH");
- if (source_date_epoch != NULL) {
- time = (time_t) strtol(source_date_epoch, NULL, 10);
-
- time_universal = gmtime(&time);
- if (time_universal == NULL) {
- fprintf(stderr, "%s: SOURCE_DATE_EPOCH is not valid\n",
- __func__);
- time = 0;
- } else {
- time = mktime(time_universal);
- }
- } else {
- time = sbuf->st_mtime;
+ time = imagetool_get_source_date(params->cmdname, sbuf->st_mtime);
+ ep = params->ep;
+ addr = params->addr;
+
+ if (params->type == IH_TYPE_FIRMWARE_IVT)
+ /* Add size of CSF minus IVT */
+ imagesize = sbuf->st_size - sizeof(image_header_t)
+ + 0x2060 - sizeof(flash_header_v2_t);
+
+ else
+ imagesize = sbuf->st_size - sizeof(image_header_t);
+
+ if (params->os == IH_OS_TEE) {
+ addr = optee_image_get_load_addr(hdr);
+ ep = optee_image_get_entry_point(hdr);
}
/* Build new header */
image_set_magic(hdr, IH_MAGIC);
image_set_time(hdr, time);
- image_set_size(hdr, sbuf->st_size - sizeof(image_header_t));
- image_set_load(hdr, params->addr);
- image_set_ep(hdr, params->ep);
+ image_set_size(hdr, imagesize);
+ image_set_load(hdr, addr);
+ image_set_ep(hdr, ep);
image_set_dcrc(hdr, checksum);
image_set_os(hdr, params->os);
image_set_arch(hdr, params->arch);