SPM: Remove old SMC interfaces
Remove interfaces based on MM_COMMUNICATE. Change-Id: I628c884b91d9f4758269ea2c4dedc37a66bb93cf Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
This commit is contained in:
parent
ffb7ce70b3
commit
b212ca91cb
|
@ -7,6 +7,8 @@
|
|||
#ifndef MM_SVC_H
|
||||
#define MM_SVC_H
|
||||
|
||||
#if SPM_DEPRECATED
|
||||
|
||||
#include <utils_def.h>
|
||||
|
||||
#define MM_VERSION_MAJOR U(1)
|
||||
|
@ -28,4 +30,6 @@
|
|||
#define MM_COMMUNICATE_AARCH64 U(0xC4000041)
|
||||
#define MM_COMMUNICATE_AARCH32 U(0x84000041)
|
||||
|
||||
#endif /* SPM_DEPRECATED */
|
||||
|
||||
#endif /* MM_SVC_H */
|
||||
|
|
|
@ -11,7 +11,6 @@
|
|||
#include <debug.h>
|
||||
#include <ehf.h>
|
||||
#include <errno.h>
|
||||
#include <mm_svc.h>
|
||||
#include <platform.h>
|
||||
#include <runtime_svc.h>
|
||||
#include <smccc.h>
|
||||
|
@ -200,91 +199,6 @@ int32_t spm_setup(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function to perform a call to a Secure Partition.
|
||||
******************************************************************************/
|
||||
uint64_t spm_sp_call(uint32_t smc_fid, uint64_t x1, uint64_t x2, uint64_t x3)
|
||||
{
|
||||
uint64_t rc;
|
||||
sp_context_t *sp_ptr = &sp_ctx;
|
||||
|
||||
/* Wait until the Secure Partition is idle and set it to busy. */
|
||||
sp_state_wait_switch(sp_ptr, SP_STATE_IDLE, SP_STATE_BUSY);
|
||||
|
||||
/* Set values for registers on SP entry */
|
||||
cpu_context_t *cpu_ctx = &(sp_ptr->cpu_ctx);
|
||||
|
||||
write_ctx_reg(get_gpregs_ctx(cpu_ctx), CTX_GPREG_X0, smc_fid);
|
||||
write_ctx_reg(get_gpregs_ctx(cpu_ctx), CTX_GPREG_X1, x1);
|
||||
write_ctx_reg(get_gpregs_ctx(cpu_ctx), CTX_GPREG_X2, x2);
|
||||
write_ctx_reg(get_gpregs_ctx(cpu_ctx), CTX_GPREG_X3, x3);
|
||||
|
||||
/* Jump to the Secure Partition. */
|
||||
rc = spm_sp_synchronous_entry(sp_ptr);
|
||||
|
||||
/* Flag Secure Partition as idle. */
|
||||
assert(sp_ptr->state == SP_STATE_BUSY);
|
||||
sp_state_set(sp_ptr, SP_STATE_IDLE);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* MM_COMMUNICATE handler
|
||||
******************************************************************************/
|
||||
static uint64_t mm_communicate(uint32_t smc_fid, uint64_t mm_cookie,
|
||||
uint64_t comm_buffer_address,
|
||||
uint64_t comm_size_address, void *handle)
|
||||
{
|
||||
uint64_t rc;
|
||||
|
||||
/* Cookie. Reserved for future use. It must be zero. */
|
||||
if (mm_cookie != 0U) {
|
||||
ERROR("MM_COMMUNICATE: cookie is not zero\n");
|
||||
SMC_RET1(handle, SPM_INVALID_PARAMETER);
|
||||
}
|
||||
|
||||
if (comm_buffer_address == 0U) {
|
||||
ERROR("MM_COMMUNICATE: comm_buffer_address is zero\n");
|
||||
SMC_RET1(handle, SPM_INVALID_PARAMETER);
|
||||
}
|
||||
|
||||
if (comm_size_address != 0U) {
|
||||
VERBOSE("MM_COMMUNICATE: comm_size_address is not 0 as recommended.\n");
|
||||
}
|
||||
|
||||
/*
|
||||
* The current secure partition design mandates
|
||||
* - at any point, only a single core can be
|
||||
* executing in the secure partiton.
|
||||
* - a core cannot be preempted by an interrupt
|
||||
* while executing in secure partition.
|
||||
* Raise the running priority of the core to the
|
||||
* interrupt level configured for secure partition
|
||||
* so as to block any interrupt from preempting this
|
||||
* core.
|
||||
*/
|
||||
ehf_activate_priority(PLAT_SP_PRI);
|
||||
|
||||
/* Save the Normal world context */
|
||||
cm_el1_sysregs_context_save(NON_SECURE);
|
||||
|
||||
rc = spm_sp_call(smc_fid, comm_buffer_address, comm_size_address,
|
||||
plat_my_core_pos());
|
||||
|
||||
/* Restore non-secure state */
|
||||
cm_el1_sysregs_context_restore(NON_SECURE);
|
||||
cm_set_next_eret_context(NON_SECURE);
|
||||
|
||||
/*
|
||||
* Exited from secure partition. This core can take
|
||||
* interrupts now.
|
||||
*/
|
||||
ehf_deactivate_priority(PLAT_SP_PRI);
|
||||
|
||||
SMC_RET1(handle, rc);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Secure Partition Manager SMC handler.
|
||||
******************************************************************************/
|
||||
|
@ -316,9 +230,6 @@ uint64_t spm_smc_handler(uint32_t smc_fid,
|
|||
case SPM_VERSION_AARCH32:
|
||||
SMC_RET1(handle, SPM_VERSION_COMPILED);
|
||||
|
||||
case SP_EVENT_COMPLETE_AARCH64:
|
||||
spm_sp_synchronous_exit(x1);
|
||||
|
||||
case SP_MEMORY_ATTRIBUTES_GET_AARCH64:
|
||||
INFO("Received SP_MEMORY_ATTRIBUTES_GET_AARCH64 SMC\n");
|
||||
|
||||
|
@ -351,13 +262,6 @@ uint64_t spm_smc_handler(uint32_t smc_fid,
|
|||
|
||||
switch (smc_fid) {
|
||||
|
||||
case MM_VERSION_AARCH32:
|
||||
SMC_RET1(handle, MM_VERSION_COMPILED);
|
||||
|
||||
case MM_COMMUNICATE_AARCH32:
|
||||
case MM_COMMUNICATE_AARCH64:
|
||||
return mm_communicate(smc_fid, x1, x2, x3, handle);
|
||||
|
||||
case SP_MEMORY_ATTRIBUTES_GET_AARCH64:
|
||||
case SP_MEMORY_ATTRIBUTES_SET_AARCH64:
|
||||
/* SMC interfaces reserved for secure callers. */
|
||||
|
|
Loading…
Reference in New Issue