From 19911aa6feda9f10998de44d8853ecd28417f45d Mon Sep 17 00:00:00 2001 From: Jens Wiklander <jens.wiklander@linaro.org> Date: Thu, 24 Aug 2017 13:16:22 +0200 Subject: [PATCH] opteed: pass device tree pointer in x2 Pass device tree pointer to OP-TEE in x2. bl2 is expected to fill in the device tree pointer in args.arg3. Passing 0 means that device tree is unavailable. Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org> --- services/spd/opteed/opteed_common.c | 3 ++- services/spd/opteed/opteed_main.c | 7 +++---- services/spd/opteed/opteed_pm.c | 2 +- services/spd/opteed/opteed_private.h | 1 + 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/services/spd/opteed/opteed_common.c b/services/spd/opteed/opteed_common.c index a0cd86cb3..2693e7d1d 100644 --- a/services/spd/opteed/opteed_common.c +++ b/services/spd/opteed/opteed_common.c @@ -20,7 +20,7 @@ void opteed_init_optee_ep_state(struct entry_point_info *optee_entry_point, uint32_t rw, uint64_t pc, uint64_t pageable_part, uint64_t mem_limit, - optee_context_t *optee_ctx) + uint64_t dt_addr, optee_context_t *optee_ctx) { uint32_t ep_attr; @@ -54,6 +54,7 @@ void opteed_init_optee_ep_state(struct entry_point_info *optee_entry_point, zeromem(&optee_entry_point->args, sizeof(optee_entry_point->args)); optee_entry_point->args.arg0 = pageable_part; optee_entry_point->args.arg1 = mem_limit; + optee_entry_point->args.arg2 = dt_addr; } /******************************************************************************* diff --git a/services/spd/opteed/opteed_main.c b/services/spd/opteed/opteed_main.c index b3031e402..13a307a2a 100644 --- a/services/spd/opteed/opteed_main.c +++ b/services/spd/opteed/opteed_main.c @@ -96,6 +96,7 @@ int32_t opteed_setup(void) uint32_t linear_id; uint64_t opteed_pageable_part; uint64_t opteed_mem_limit; + uint64_t dt_addr; linear_id = plat_my_core_pos(); @@ -120,19 +121,17 @@ int32_t opteed_setup(void) if (!optee_ep_info->pc) return 1; - /* - * We could inspect the SP image and determine it's execution - * state i.e whether AArch32 or AArch64. - */ opteed_rw = optee_ep_info->args.arg0; opteed_pageable_part = optee_ep_info->args.arg1; opteed_mem_limit = optee_ep_info->args.arg2; + dt_addr = optee_ep_info->args.arg3; opteed_init_optee_ep_state(optee_ep_info, opteed_rw, optee_ep_info->pc, opteed_pageable_part, opteed_mem_limit, + dt_addr, &opteed_sp_context[linear_id]); /* diff --git a/services/spd/opteed/opteed_pm.c b/services/spd/opteed/opteed_pm.c index 5a1dd4fd6..2420b1e8f 100644 --- a/services/spd/opteed/opteed_pm.c +++ b/services/spd/opteed/opteed_pm.c @@ -99,7 +99,7 @@ static void opteed_cpu_on_finish_handler(uint64_t unused) opteed_init_optee_ep_state(&optee_on_entrypoint, opteed_rw, (uint64_t)&optee_vectors->cpu_on_entry, - 0, 0, optee_ctx); + 0, 0, 0, optee_ctx); /* Initialise this cpu's secure context */ cm_init_my_context(&optee_on_entrypoint); diff --git a/services/spd/opteed/opteed_private.h b/services/spd/opteed/opteed_private.h index 11c1a1fa1..6cda2c8e9 100644 --- a/services/spd/opteed/opteed_private.h +++ b/services/spd/opteed/opteed_private.h @@ -149,6 +149,7 @@ void opteed_init_optee_ep_state(struct entry_point_info *optee_ep, uint64_t pc, uint64_t pageable_part, uint64_t mem_limit, + uint64_t dt_addr, optee_context_t *optee_ctx); extern optee_context_t opteed_sp_context[OPTEED_CORE_COUNT]; -- GitLab