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 20 struct 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 32 static inline uint32_t optee_image_get_entry_point(const struct legacy_img_hdr * hdr)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 40 static inline uint32_t optee_image_get_load_addr(const struct legacy_img_hdr * hdr)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) 47 int optee_verify_bootm_image(unsigned long image_addr, 48 unsigned long image_load_addr, 49 unsigned long image_len); 50 #else optee_verify_bootm_image(unsigned long image_addr,unsigned long image_load_addr,unsigned long image_len)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) 60 int optee_copy_fdt_nodes(void *new_blob); 61 #else optee_copy_fdt_nodes(void * new_blob)62static inline int optee_copy_fdt_nodes(void *new_blob) 63 { 64 return 0; 65 } 66 #endif 67 68 #endif /* _OPTEE_H */ 69