diff --git a/services/std_svc/spm/spm_main.c b/services/std_svc/spm/spm_main.c index d740a8d..aa7bd04 100644 --- a/services/std_svc/spm/spm_main.c +++ b/services/std_svc/spm/spm_main.c @@ -328,9 +328,6 @@ /* Initialize context of the SP */ INFO("Secure Partition %u context setup start...\n", i); - /* Assign translation tables context. */ - ctx->xlat_ctx_handle = spm_sp_xlat_context_alloc(); - /* Save location of the image in physical memory */ ctx->image_base = (uintptr_t)sp_base; ctx->image_size = sp_size; diff --git a/services/std_svc/spm/spm_private.h b/services/std_svc/spm/spm_private.h index 8b98e8c..740fee5 100644 --- a/services/std_svc/spm/spm_private.h +++ b/services/std_svc/spm/spm_private.h @@ -100,7 +100,7 @@ uint64_t *spm_exceptions_xlat_get_base_table(void); /* Functions related to the translation tables management */ -xlat_ctx_t *spm_sp_xlat_context_alloc(void); +void spm_sp_xlat_context_alloc(sp_context_t *sp_ctx); void sp_map_memory_regions(sp_context_t *sp_ctx); /* Functions to handle Secure Partition contexts */ diff --git a/services/std_svc/spm/spm_setup.c b/services/std_svc/spm/spm_setup.c index 6cbbc5b..2ed44d1 100644 --- a/services/std_svc/spm/spm_setup.c +++ b/services/std_svc/spm/spm_setup.c @@ -60,6 +60,9 @@ * ------------------------ */ + /* Assign translation tables context. */ + spm_sp_xlat_context_alloc(sp_ctx); + sp_map_memory_regions(sp_ctx); /* diff --git a/services/std_svc/spm/spm_xlat.c b/services/std_svc/spm/spm_xlat.c index 58d61fc..1619f97 100644 --- a/services/std_svc/spm/spm_xlat.c +++ b/services/std_svc/spm/spm_xlat.c @@ -50,17 +50,6 @@ XLAT_TABLE_ENTRIES * sizeof(uint64_t), (PLAT_SP_IMAGE_MAX_XLAT_TABLES + 1) * PLAT_SPM_MAX_PARTITIONS); -/* Allocate base translation tables. */ -static uint64_t sp_xlat_base_tables - [GET_NUM_BASE_LEVEL_ENTRIES(PLAT_VIRT_ADDR_SPACE_SIZE)] - [PLAT_SPM_MAX_PARTITIONS] - __aligned(GET_NUM_BASE_LEVEL_ENTRIES(PLAT_VIRT_ADDR_SPACE_SIZE) - * sizeof(uint64_t)) - __section(PLAT_SP_IMAGE_XLAT_SECTION_NAME); -static OBJECT_POOL(sp_xlat_base_tables_pool, sp_xlat_base_tables, - GET_NUM_BASE_LEVEL_ENTRIES(PLAT_VIRT_ADDR_SPACE_SIZE) * sizeof(uint64_t), - PLAT_SPM_MAX_PARTITIONS); - /* Allocate arrays. */ static int sp_xlat_mapped_regions[PLAT_SP_IMAGE_MAX_XLAT_TABLES] [PLAT_SPM_MAX_PARTITIONS]; @@ -73,13 +62,13 @@ PLAT_SPM_MAX_PARTITIONS); /* Get handle of Secure Partition translation context */ -xlat_ctx_t *spm_sp_xlat_context_alloc(void) +void spm_sp_xlat_context_alloc(sp_context_t *sp_ctx) { xlat_ctx_t *ctx = pool_alloc(&sp_xlat_ctx_pool); struct mmap_region *mmap = pool_alloc(&sp_mmap_regions_pool); - uint64_t *base_table = pool_alloc(&sp_xlat_base_tables_pool); + uint64_t *base_table = pool_alloc(&sp_xlat_tables_pool); uint64_t **tables = pool_alloc_n(&sp_xlat_tables_pool, PLAT_SP_IMAGE_MAX_XLAT_TABLES); @@ -91,7 +80,7 @@ PLAT_SP_IMAGE_MAX_XLAT_TABLES, base_table, EL1_EL0_REGIME, mapped_regions); - return ctx; + sp_ctx->xlat_ctx_handle = ctx; }; /*******************************************************************************