SPM: Move initialization flag to context struct
authorAntonio Nino Diaz <antonio.ninodiaz@arm.com>
Mon, 18 Dec 2017 10:51:58 +0000 (10:51 +0000)
committerAntonio Nino Diaz <antonio.ninodiaz@arm.com>
Mon, 8 Jan 2018 09:58:15 +0000 (09:58 +0000)
Whether a Secure Partition is being initialized or not is something
related to that specific partition, so it should be saved with the
rest of the information related to it.

Change-Id: Ie8a780f70df83fb03ef9c01ba37960208d9b5319
Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
services/std_svc/spm/spm_main.c
services/std_svc/spm/spm_private.h

index ae71c1df54c48168b3de78db2583bc170ee46ca1..e156106a7e21b28eea26e28327a46e24f9d95f43 100644 (file)
@@ -29,7 +29,6 @@ static spinlock_t mem_attr_smc_lock;
  * Secure Partition context information.
  ******************************************************************************/
 static secure_partition_context_t sp_ctx;
-unsigned int sp_init_in_progress;
 
 /*******************************************************************************
  * Replace the S-EL1 re-entry information with S-EL0 re-entry
@@ -128,10 +127,10 @@ int32_t spm_init(void)
        /*
         * Arrange for an entry into the secure partition.
         */
-       sp_init_in_progress = 1;
+       sp_ctx.sp_init_in_progress = 1;
        rc = spm_synchronous_sp_entry(&sp_ctx);
        assert(rc == 0);
-       sp_init_in_progress = 0;
+       sp_ctx.sp_init_in_progress = 0;
        VERBOSE("SP_MEMORY_ATTRIBUTES_SET_AARCH64 availability has been revoked\n");
 
        return rc;
@@ -358,7 +357,7 @@ uint64_t spm_smc_handler(uint32_t smc_fid,
                        cm_el1_sysregs_context_save(SECURE);
                        spm_setup_next_eret_into_sel0(handle);
 
-                       if (sp_init_in_progress) {
+                       if (sp_ctx.sp_init_in_progress) {
                                /*
                                 * SPM reports completion. The SPM must have
                                 * initiated the original request through a
@@ -391,7 +390,7 @@ uint64_t spm_smc_handler(uint32_t smc_fid,
                case SP_MEMORY_ATTRIBUTES_GET_AARCH64:
                        INFO("Received SP_MEMORY_ATTRIBUTES_GET_AARCH64 SMC\n");
 
-                       if (!sp_init_in_progress) {
+                       if (!sp_ctx.sp_init_in_progress) {
                                WARN("SP_MEMORY_ATTRIBUTES_GET_AARCH64 is available at boot time only\n");
                                SMC_RET1(handle, SPM_NOT_SUPPORTED);
                        }
@@ -400,7 +399,7 @@ uint64_t spm_smc_handler(uint32_t smc_fid,
                case SP_MEMORY_ATTRIBUTES_SET_AARCH64:
                        INFO("Received SP_MEMORY_ATTRIBUTES_SET_AARCH64 SMC\n");
 
-                       if (!sp_init_in_progress) {
+                       if (!sp_ctx.sp_init_in_progress) {
                                WARN("SP_MEMORY_ATTRIBUTES_SET_AARCH64 is available at boot time only\n");
                                SMC_RET1(handle, SPM_NOT_SUPPORTED);
                        }
index 16993e8c11883f6e40562681756ac6f437996614..2fc46c8da83b6994f7184e6af60bf7453936f19b 100644 (file)
@@ -43,6 +43,7 @@ struct entry_point_info;
 typedef struct secure_partition_context {
        uint64_t c_rt_ctx;
        cpu_context_t cpu_ctx;
+       unsigned int sp_init_in_progress;
 } secure_partition_context_t;
 
 uint64_t spm_secure_partition_enter(uint64_t *c_rt_ctx);