[U-Boot] [PATCH v2 6/9] tools: mkimage: add optee image type
Andrew F. Davis
afd at ti.com
Fri Jan 19 20:14:31 UTC 2018
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.odonoghue at linaro.org>
> Cc: Harinarayan Bhatta <harinarayan at ti.com>
> Cc: Andrew F. Davis <afd at ti.com>
> Cc: Tom Rini <trini at konsulko.com>
> Cc: Kever Yang <kever.yang at rock-chips.com>
> Cc: Philipp Tomsich <philipp.tomsich at theobroma-systems.com>
> Cc: Peng Fan <peng.fan at nxp.com>
> Tested-by: Peng Fan <peng.fan at 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);
>
More information about the U-Boot
mailing list