On 01/19/2018 01:43 PM, Bryan O'Donoghue wrote: > This patch adds support for bootable OPTEE images to mkimage. Currently > there is a (Trusted Execution Environment) TEE image type, the TEE image > type is installed to a memory location with u-boot continuing to own the > boot process whereas the OPTEE image type defined here is a bootable image, > which typically wants to live at a defined location in memory. Defining a > new image type allows us to pull out the load address and entry point > defined in the OPTEE header and having a separate image type lays the > foundation for a subsequent patch to validate the OPTEE memory defined in a > board-port matches the link location specified in the OPTEE bootable > image. > > example usage: > > mkimage -A arm -T optee -C none -d ./out/arm-plat-imx/core/tee.bin > uTee.optee > > making a separate image type means you don't need to specify things like > entry point and load address as you would if you were defining the OPTEE > image as a linux image. >
I'm still not getting the reasoning for this all, you can have the load address checks and relocation stuff inside your loadable handler: U_BOOT_FIT_LOADABLE_HANDLER(IH_TYPE_TEE, board_tee_image_process); Then define 'board_tee_image_process' to do whatever you want to your image. > mkimage -A arm -O linux -C none -a 0x9c0fffe4 -e 0x9c100000 -d > ./out/arm-plat-imx/core/tee.bin uTee > > Signed-off-by: Bryan O'Donoghue <bryan.odonog...@linaro.org> > Cc: Harinarayan Bhatta <harinara...@ti.com> > Cc: Andrew F. Davis <a...@ti.com> > Cc: Tom Rini <tr...@konsulko.com> > Cc: Kever Yang <kever.y...@rock-chips.com> > Cc: Philipp Tomsich <philipp.toms...@theobroma-systems.com> > Cc: Peng Fan <peng....@nxp.com> > Tested-by: Peng Fan <peng....@nxp.com> > --- > common/image.c | 1 + > include/image.h | 1 + > tools/default_image.c | 25 +++++++++++++++++++------ > 3 files changed, 21 insertions(+), 6 deletions(-) > > diff --git a/common/image.c b/common/image.c > index e9609cd..14e738b 100644 > --- a/common/image.c > +++ b/common/image.c > @@ -161,6 +161,7 @@ static const table_entry_t uimage_type[] = { > { IH_TYPE_TEE, "tee", "Trusted Execution > Environment Image",}, > { IH_TYPE_FIRMWARE_IVT, "firmware_ivt", "Firmware with HABv4 IVT" > }, > { IH_TYPE_PMMC, "pmmc", "TI Power Management > Micro-Controller Firmware",}, > + { IH_TYPE_OPTEE, "optee", "OPTEE Boot Image",}, > { -1, "", "", }, > }; > > diff --git a/include/image.h b/include/image.h > index a128a62..9175624 100644 > --- a/include/image.h > +++ b/include/image.h > @@ -271,6 +271,7 @@ enum { > IH_TYPE_TEE, /* Trusted Execution Environment OS Image */ > IH_TYPE_FIRMWARE_IVT, /* Firmware Image with HABv4 IVT */ > IH_TYPE_PMMC, /* TI Power Management Micro-Controller > Firmware */ > + IH_TYPE_OPTEE, /* OPTEE Boot Image */ > > IH_TYPE_COUNT, /* Number of image types */ > }; > diff --git a/tools/default_image.c b/tools/default_image.c > index 4e5568e..5653933 100644 > --- a/tools/default_image.c > +++ b/tools/default_image.c > @@ -18,6 +18,7 @@ > #include "mkimage.h" > > #include <image.h> > +#include <tee/optee.h> > #include <u-boot/crc.h> > > static image_header_t header; > @@ -25,7 +26,8 @@ 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_FIRMWARE_IVT)) > + (type == IH_TYPE_KERNEL_NOLOAD) || (type == IH_TYPE_FIRMWARE_IVT) || > + (type == IH_TYPE_OPTEE)) > return EXIT_SUCCESS; > else > return EXIT_FAILURE; > @@ -90,6 +92,8 @@ static void image_set_header(void *ptr, struct stat *sbuf, > int ifd, > uint32_t checksum; > time_t time; > uint32_t imagesize; > + uint32_t ep; > + uint32_t addr; > > image_header_t * hdr = (image_header_t *)ptr; > > @@ -99,18 +103,27 @@ static void image_set_header(void *ptr, struct stat > *sbuf, int ifd, > sbuf->st_size - sizeof(image_header_t)); > > time = imagetool_get_source_date(params, sbuf->st_mtime); > - if (params->type == IH_TYPE_FIRMWARE_IVT) > + ep = params->ep; > + addr = params->addr; > + imagesize = sbuf->st_size - sizeof(image_header_t); > + > + switch (params->type) { > + case IH_TYPE_FIRMWARE_IVT: > /* Add size of CSF minus IVT */ > imagesize = sbuf->st_size - sizeof(image_header_t) + 0x1FE0; > - else > - imagesize = sbuf->st_size - sizeof(image_header_t); > + break; > + case IH_TYPE_OPTEE: > + addr = optee_image_get_load_addr(hdr); > + ep = optee_image_get_entry_point(hdr); > + break; > + } > > /* Build new header */ > image_set_magic(hdr, IH_MAGIC); > image_set_time(hdr, time); > image_set_size(hdr, imagesize); > - image_set_load(hdr, params->addr); > - image_set_ep(hdr, params->ep); > + 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); > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot