mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-18 18:44:22 +00:00
feat(spm): separate StMM SP specifics to add support for a S-EL0 SP
This patch separates the code from SPM_MM to get xlat table context and move it to a common location. In addition, only APIs required from both SPM_MM and FF-A EL3 SPMC are moved to the common location. This allows understanding better what is required to support a S-EL0 SP instead of trying to retrofit what already exists. Signed-off-by: Achin Gupta <achin.gupta@arm.com> Signed-off-by: Nishant Sharma <nishant.sharma@arm.com> Change-Id: I142d7fbef5239869176d0de93842c66051d7ed78
This commit is contained in:
parent
b4bed4b769
commit
549bc04f14
5 changed files with 41 additions and 26 deletions
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2017-2022, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2017-2023, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
@ -32,11 +32,15 @@
|
|||
#ifndef __ASSEMBLER__
|
||||
|
||||
#include <stdint.h>
|
||||
#include <lib/xlat_tables/xlat_tables_v2.h>
|
||||
|
||||
/* Assembly helpers */
|
||||
uint64_t spm_secure_partition_enter(uint64_t *c_rt_ctx);
|
||||
void __dead2 spm_secure_partition_exit(uint64_t c_rt_ctx, uint64_t ret);
|
||||
|
||||
/* Helper to obtain a reference to the SP's translation table context */
|
||||
xlat_ctx_t *spm_get_sp_xlat_context(void);
|
||||
|
||||
#endif /* __ASSEMBLER__ */
|
||||
|
||||
#endif /* SPM_COMMON_H */
|
||||
|
|
|
@ -14,5 +14,10 @@ SPM_SOURCES := $(addprefix services/std_svc/spm/common/, \
|
|||
${ARCH}/spm_helpers.S \
|
||||
${ARCH}/spm_shim_exceptions.S)
|
||||
|
||||
ifeq (1, $(filter 1, ${SPM_MM} ${SPMC_AT_EL3_SEL0_SP}))
|
||||
SPM_SOURCES += $(addprefix services/std_svc/spm/common/, \
|
||||
spm_xlat_common.c)
|
||||
endif
|
||||
|
||||
# Let the top-level Makefile know that we intend to include a BL32 image
|
||||
NEED_BL32 := yes
|
||||
|
|
30
services/std_svc/spm/common/spm_xlat_common.c
Normal file
30
services/std_svc/spm/common/spm_xlat_common.c
Normal file
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
* Copyright (c) 2023, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <lib/xlat_tables/xlat_tables_v2.h>
|
||||
#include <platform_def.h>
|
||||
|
||||
/* Place translation tables by default along with the ones used by BL31. */
|
||||
#ifndef PLAT_SP_IMAGE_XLAT_SECTION_NAME
|
||||
#define PLAT_SP_IMAGE_XLAT_SECTION_NAME ".xlat_table"
|
||||
#endif
|
||||
#ifndef PLAT_SP_IMAGE_BASE_XLAT_SECTION_NAME
|
||||
#define PLAT_SP_IMAGE_BASE_XLAT_SECTION_NAME ".bss"
|
||||
#endif
|
||||
|
||||
/* Allocate and initialise the translation context for the secure partitions. */
|
||||
REGISTER_XLAT_CONTEXT2(sp,
|
||||
PLAT_SP_IMAGE_MMAP_REGIONS,
|
||||
PLAT_SP_IMAGE_MAX_XLAT_TABLES,
|
||||
PLAT_VIRT_ADDR_SPACE_SIZE, PLAT_PHY_ADDR_SPACE_SIZE,
|
||||
EL1_EL0_REGIME, PLAT_SP_IMAGE_XLAT_SECTION_NAME,
|
||||
PLAT_SP_IMAGE_BASE_XLAT_SECTION_NAME);
|
||||
|
||||
/* Get handle of Secure Partition translation context */
|
||||
xlat_ctx_t *spm_get_sp_xlat_context(void)
|
||||
{
|
||||
return &sp_xlat_ctx;
|
||||
};
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2017-2022, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2017-2023, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
@ -55,8 +55,6 @@ typedef struct sp_context {
|
|||
|
||||
void spm_sp_setup(sp_context_t *sp_ctx);
|
||||
|
||||
xlat_ctx_t *spm_get_sp_xlat_context(void);
|
||||
|
||||
int32_t spm_memory_attributes_get_smc_handler(sp_context_t *sp_ctx,
|
||||
uintptr_t base_va);
|
||||
int spm_memory_attributes_set_smc_handler(sp_context_t *sp_ctx,
|
||||
|
|
|
@ -17,31 +17,9 @@
|
|||
#include "spm_mm_private.h"
|
||||
#include "spm_shim_private.h"
|
||||
|
||||
/* Place translation tables by default along with the ones used by BL31. */
|
||||
#ifndef PLAT_SP_IMAGE_XLAT_SECTION_NAME
|
||||
#define PLAT_SP_IMAGE_XLAT_SECTION_NAME ".xlat_table"
|
||||
#endif
|
||||
#ifndef PLAT_SP_IMAGE_BASE_XLAT_SECTION_NAME
|
||||
#define PLAT_SP_IMAGE_BASE_XLAT_SECTION_NAME ".bss"
|
||||
#endif
|
||||
|
||||
/* Allocate and initialise the translation context for the secure partitions. */
|
||||
REGISTER_XLAT_CONTEXT2(sp,
|
||||
PLAT_SP_IMAGE_MMAP_REGIONS,
|
||||
PLAT_SP_IMAGE_MAX_XLAT_TABLES,
|
||||
PLAT_VIRT_ADDR_SPACE_SIZE, PLAT_PHY_ADDR_SPACE_SIZE,
|
||||
EL1_EL0_REGIME, PLAT_SP_IMAGE_XLAT_SECTION_NAME,
|
||||
PLAT_SP_IMAGE_BASE_XLAT_SECTION_NAME);
|
||||
|
||||
/* Lock used for SP_MEMORY_ATTRIBUTES_GET and SP_MEMORY_ATTRIBUTES_SET */
|
||||
static spinlock_t mem_attr_smc_lock;
|
||||
|
||||
/* Get handle of Secure Partition translation context */
|
||||
xlat_ctx_t *spm_get_sp_xlat_context(void)
|
||||
{
|
||||
return &sp_xlat_ctx;
|
||||
};
|
||||
|
||||
/*
|
||||
* Attributes are encoded using a different format in the SMC interface than in
|
||||
* the Trusted Firmware, where the mmap_attr_t enum type is used. This function
|
||||
|
|
Loading…
Add table
Reference in a new issue