Unverified Commit 35c4b414 authored by Antonio Niño Díaz's avatar Antonio Niño Díaz Committed by GitHub
Browse files

Merge pull request #1675 from SNG-ARM/integration

SPM priority level changes
parents a6febeab 6e3bad36
...@@ -8,6 +8,9 @@ ...@@ -8,6 +8,9 @@
# Include SPM Makefile # Include SPM Makefile
################################################################################ ################################################################################
ifeq (${ENABLE_SPM},1) ifeq (${ENABLE_SPM},1)
ifeq (${EL3_EXCEPTION_HANDLING},0)
$(error EL3_EXCEPTION_HANDLING must be 1 for SPM support)
endif
$(info Including SPM makefile) $(info Including SPM makefile)
include services/std_svc/spm/spm.mk include services/std_svc/spm/spm.mk
endif endif
......
...@@ -125,8 +125,9 @@ Interface). This will be referred to as the *Standalone MM Secure Partition* in ...@@ -125,8 +125,9 @@ Interface). This will be referred to as the *Standalone MM Secure Partition* in
the rest of this document. the rest of this document.
To enable SPM support in TF-A, the source code must be compiled with the build To enable SPM support in TF-A, the source code must be compiled with the build
flag ``ENABLE_SPM=1``. On Arm platforms the build option ``ARM_BL31_IN_DRAM`` flag ``ENABLE_SPM=1``, along with ``EL3_EXCEPTION_HANDLING=1``. On Arm
must be set to 1. Also, the location of the binary that contains the BL32 image platforms the build option ``ARM_BL31_IN_DRAM`` must be set to 1. Also, the
location of the binary that contains the BL32 image
(``BL32=path/to/image.bin``) must be specified. (``BL32=path/to/image.bin``) must be specified.
First, build the Standalone MM Secure Partition. To build it, refer to the First, build the Standalone MM Secure Partition. To build it, refer to the
......
...@@ -268,4 +268,6 @@ ...@@ -268,4 +268,6 @@
#define PLAT_ARM_SP_IMAGE_STACK_BASE (ARM_SP_IMAGE_NS_BUF_BASE + \ #define PLAT_ARM_SP_IMAGE_STACK_BASE (ARM_SP_IMAGE_NS_BUF_BASE + \
ARM_SP_IMAGE_NS_BUF_SIZE) ARM_SP_IMAGE_NS_BUF_SIZE)
#define PLAT_SP_PRI PLAT_RAS_PRI
#endif /* PLATFORM_DEF_H */ #endif /* PLATFORM_DEF_H */
...@@ -23,6 +23,9 @@ ehf_pri_desc_t arm_exceptions[] = { ...@@ -23,6 +23,9 @@ ehf_pri_desc_t arm_exceptions[] = {
/* Normal priority SDEI */ /* Normal priority SDEI */
EHF_PRI_DESC(ARM_PRI_BITS, PLAT_SDEI_NORMAL_PRI), EHF_PRI_DESC(ARM_PRI_BITS, PLAT_SDEI_NORMAL_PRI),
#endif #endif
#if ENABLE_SPM
EHF_PRI_DESC(ARM_PRI_BITS, PLAT_SP_PRI),
#endif
}; };
/* Plug in ARM exceptions to Exception Handling Framework. */ /* Plug in ARM exceptions to Exception Handling Framework. */
......
...@@ -142,6 +142,8 @@ ...@@ -142,6 +142,8 @@
SOC_CSS_DEVICE_SIZE, \ SOC_CSS_DEVICE_SIZE, \
MT_DEVICE | MT_RW | MT_SECURE | MT_USER) MT_DEVICE | MT_RW | MT_SECURE | MT_USER)
#define PLAT_SP_PRI PLAT_RAS_PRI
#if RAS_EXTENSION #if RAS_EXTENSION
/* Allocate 128KB for CPER buffers */ /* Allocate 128KB for CPER buffers */
#define PLAT_SP_BUF_BASE ULL(0x20000) #define PLAT_SP_BUF_BASE ULL(0x20000)
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include <bl31.h> #include <bl31.h>
#include <context_mgmt.h> #include <context_mgmt.h>
#include <debug.h> #include <debug.h>
#include <ehf.h>
#include <errno.h> #include <errno.h>
#include <mm_svc.h> #include <mm_svc.h>
#include <platform.h> #include <platform.h>
...@@ -233,6 +234,19 @@ static uint64_t mm_communicate(uint32_t smc_fid, uint64_t mm_cookie, ...@@ -233,6 +234,19 @@ static uint64_t mm_communicate(uint32_t smc_fid, uint64_t mm_cookie,
VERBOSE("MM_COMMUNICATE: comm_size_address is not 0 as recommended.\n"); 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 */ /* Save the Normal world context */
cm_el1_sysregs_context_save(NON_SECURE); cm_el1_sysregs_context_save(NON_SECURE);
...@@ -243,6 +257,12 @@ static uint64_t mm_communicate(uint32_t smc_fid, uint64_t mm_cookie, ...@@ -243,6 +257,12 @@ static uint64_t mm_communicate(uint32_t smc_fid, uint64_t mm_cookie,
cm_el1_sysregs_context_restore(NON_SECURE); cm_el1_sysregs_context_restore(NON_SECURE);
cm_set_next_eret_context(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); SMC_RET1(handle, rc);
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment