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 14 #define OPTEE_MAGIC 0x4554504f 15 #define OPTEE_VERSION 1 16 #define OPTEE_ARCH_ARM32 0 17 #define OPTEE_ARCH_ARM64 1 18 19 struct optee_header { 20 uint32_t magic; 21 uint8_t version; 22 uint8_t arch; 23 uint16_t flags; 24 uint32_t init_size; 25 uint32_t init_load_addr_hi; 26 uint32_t init_load_addr_lo; 27 uint32_t init_mem_usage; 28 uint32_t paged_size; 29 }; 30 31 static inline uint32_t optee_image_get_entry_point(const image_header_t *hdr) 32 { 33 struct optee_header *optee_hdr = (struct optee_header *)(hdr + 1); 34 35 return optee_hdr->init_load_addr_lo; 36 } 37 38 static inline uint32_t optee_image_get_load_addr(const image_header_t *hdr) 39 { 40 return optee_image_get_entry_point(hdr) - sizeof(struct optee_header); 41 } 42 43 #if defined(CONFIG_OPTEE) 44 int optee_verify_image(struct optee_header *hdr, unsigned long tzdram_start, 45 unsigned long tzdram_len, unsigned long image_len); 46 #else 47 static inline int optee_verify_image(struct optee_header *hdr, 48 unsigned long tzdram_start, 49 unsigned long tzdram_len, 50 unsigned long image_len) 51 { 52 return -EPERM; 53 } 54 55 #endif 56 57 #if defined(CONFIG_OPTEE) 58 int optee_verify_bootm_image(unsigned long image_addr, 59 unsigned long image_load_addr, 60 unsigned long image_len); 61 #else 62 static inline int optee_verify_bootm_image(unsigned long image_addr, 63 unsigned long image_load_addr, 64 unsigned long image_len) 65 { 66 return -EPERM; 67 } 68 #endif 69 70 #endif /* _OPTEE_H */ 71