1/* SPDX-License-Identifier: BSD-2-Clause */ 2/* 3 * OP-TEE related definitions 4 * 5 * (C) Copyright 2016 Linaro Limited 6 * Andrew F. Davis <andrew.davis@linaro.org> 7 */ 8 9#ifndef _OPTEE_H 10#define _OPTEE_H 11 12#include <linux/errno.h> 13#include <image.h> 14 15#define OPTEE_MAGIC 0x4554504f 16#define OPTEE_VERSION 1 17#define OPTEE_ARCH_ARM32 0 18#define OPTEE_ARCH_ARM64 1 19 20struct optee_header { 21 uint32_t magic; 22 uint8_t version; 23 uint8_t arch; 24 uint16_t flags; 25 uint32_t init_size; 26 uint32_t init_load_addr_hi; 27 uint32_t init_load_addr_lo; 28 uint32_t init_mem_usage; 29 uint32_t paged_size; 30}; 31 32static inline uint32_t 33optee_image_get_entry_point(const struct legacy_img_hdr *hdr) 34{ 35 struct optee_header *optee_hdr = (struct optee_header *)(hdr + 1); 36 37 return optee_hdr->init_load_addr_lo; 38} 39 40static inline uint32_t 41optee_image_get_load_addr(const struct legacy_img_hdr *hdr) 42{ 43 return optee_image_get_entry_point(hdr) - sizeof(struct optee_header); 44} 45 46#if defined(CONFIG_OPTEE_IMAGE) 47int optee_verify_bootm_image(unsigned long image_addr, 48 unsigned long image_load_addr, 49 unsigned long image_len); 50#else 51static inline int optee_verify_bootm_image(unsigned long image_addr, 52 unsigned long image_load_addr, 53 unsigned long image_len) 54{ 55 return -EPERM; 56} 57#endif 58 59#if defined(CONFIG_OPTEE_LIB) && defined(CONFIG_OF_LIBFDT) 60int optee_copy_fdt_nodes(void *new_blob); 61#else 62static inline int optee_copy_fdt_nodes(void *new_blob) 63{ 64 return 0; 65} 66#endif 67 68#endif /* _OPTEE_H */ 69