aboutsummaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorJens Wiklander <jens.wiklander@linaro.org>2021-08-31 14:30:07 +0200
committerJérôme Forissier <jerome@forissier.org>2021-10-18 10:51:22 +0200
commita94111b95c67dabfc6453372fc865a47d8a12ba3 (patch)
treedb756e5f78e84dc00aef1973dee2cc5e9a70240a /core
parentbddb2f8987cb257ec67290f815f9f0ecbd5d3424 (diff)
core: virtualization.h: add dummy static inline functions
Adds dummy static inline functions to replace the normal virt_*() functions in virtualization.h when CFG_VIRTUALIZATION is not configured. Reviewed-by: Etienne Carriere <etienne.carriere@linaro.org> Reviewed-by: Volodymyr Babchuk <volodymyr_babchuk@epam.com> Reviewed-by: Jerome Forissier <jerome@forissier.org> Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
Diffstat (limited to 'core')
-rw-r--r--core/arch/arm/include/mm/core_mmu.h2
-rw-r--r--core/arch/arm/kernel/boot.c13
-rw-r--r--core/arch/arm/kernel/thread.c10
-rw-r--r--core/arch/arm/kernel/thread_optee_smc.c31
-rw-r--r--core/arch/arm/mm/core_mmu.c23
-rw-r--r--core/arch/arm/tee/entry_fast.c21
-rw-r--r--core/include/kernel/virtualization.h20
7 files changed, 65 insertions, 55 deletions
diff --git a/core/arch/arm/include/mm/core_mmu.h b/core/arch/arm/include/mm/core_mmu.h
index a898048a..c4c34b95 100644
--- a/core/arch/arm/include/mm/core_mmu.h
+++ b/core/arch/arm/include/mm/core_mmu.h
@@ -741,9 +741,9 @@ void core_free_mmu_prtn(struct mmu_partition *prtn);
void core_mmu_set_prtn(struct mmu_partition *prtn);
void core_mmu_set_default_prtn(void);
void core_mmu_set_default_prtn_tbl(void);
+#endif
void core_mmu_init_virtualization(void);
-#endif
/* init some allocation pools */
void core_mmu_init_ta_ram(void);
diff --git a/core/arch/arm/kernel/boot.c b/core/arch/arm/kernel/boot.c
index 131ec1de..4dac6304 100644
--- a/core/arch/arm/kernel/boot.c
+++ b/core/arch/arm/kernel/boot.c
@@ -1259,13 +1259,12 @@ void __weak boot_init_primary_late(unsigned long fdt)
main_init_gic();
init_vfp_nsec();
-#ifndef CFG_VIRTUALIZATION
- init_tee_runtime();
-#endif
-#ifdef CFG_VIRTUALIZATION
- IMSG("Initializing virtualization support");
- core_mmu_init_virtualization();
-#endif
+ if (IS_ENABLED(CFG_VIRTUALIZATION)) {
+ IMSG("Initializing virtualization support");
+ core_mmu_init_virtualization();
+ } else {
+ init_tee_runtime();
+ }
call_finalcalls();
IMSG("Primary CPU switching to normal world boot");
}
diff --git a/core/arch/arm/kernel/thread.c b/core/arch/arm/kernel/thread.c
index 3a948ffe..05dd8697 100644
--- a/core/arch/arm/kernel/thread.c
+++ b/core/arch/arm/kernel/thread.c
@@ -851,9 +851,8 @@ void thread_state_free(void)
threads[ct].flags = 0;
l->curr_thread = THREAD_ID_INVALID;
-#ifdef CFG_VIRTUALIZATION
- virt_unset_guest();
-#endif
+ if (IS_ENABLED(CFG_VIRTUALIZATION))
+ virt_unset_guest();
thread_unlock_global();
}
@@ -923,9 +922,8 @@ int thread_state_suspend(uint32_t flags, uint32_t cpsr, vaddr_t pc)
l->curr_thread = THREAD_ID_INVALID;
-#ifdef CFG_VIRTUALIZATION
- virt_unset_guest();
-#endif
+ if (IS_ENABLED(CFG_VIRTUALIZATION))
+ virt_unset_guest();
thread_unlock_global();
diff --git a/core/arch/arm/kernel/thread_optee_smc.c b/core/arch/arm/kernel/thread_optee_smc.c
index 86ae2d75..3284c921 100644
--- a/core/arch/arm/kernel/thread_optee_smc.c
+++ b/core/arch/arm/kernel/thread_optee_smc.c
@@ -1,6 +1,6 @@
// SPDX-License-Identifier: BSD-2-Clause
/*
- * Copyright (c) 2019, Linaro Limited
+ * Copyright (c) 2019-2021, Linaro Limited
*/
#include <assert.h>
@@ -31,21 +31,19 @@ void thread_handle_fast_smc(struct thread_smc_args *args)
{
thread_check_canaries();
-#ifdef CFG_VIRTUALIZATION
- if (virt_set_guest(args->a7)) {
+ if (IS_ENABLED(CFG_VIRTUALIZATION) &&
+ virt_set_guest(args->a7)) {
args->a0 = OPTEE_SMC_RETURN_ENOTAVAIL;
goto out;
}
-#endif
tee_entry_fast(args);
-#ifdef CFG_VIRTUALIZATION
- virt_unset_guest();
-#endif
- /* Fast handlers must not unmask any exceptions */
+ if (IS_ENABLED(CFG_VIRTUALIZATION))
+ virt_unset_guest();
+
out:
- __maybe_unused;
+ /* Fast handlers must not unmask any exceptions */
assert(thread_get_exceptions() == THREAD_EXCP_ALL);
}
@@ -57,10 +55,8 @@ uint32_t thread_handle_std_smc(uint32_t a0, uint32_t a1, uint32_t a2,
thread_check_canaries();
-#ifdef CFG_VIRTUALIZATION
- if (virt_set_guest(a7))
+ if (IS_ENABLED(CFG_VIRTUALIZATION) && virt_set_guest(a7))
return OPTEE_SMC_RETURN_ENOTAVAIL;
-#endif
/*
* thread_resume_from_rpc() and thread_alloc_and_run() only return
@@ -75,9 +71,8 @@ uint32_t thread_handle_std_smc(uint32_t a0, uint32_t a1, uint32_t a2,
rv = OPTEE_SMC_RETURN_ETHREAD_LIMIT;
}
-#ifdef CFG_VIRTUALIZATION
- virt_unset_guest();
-#endif
+ if (IS_ENABLED(CFG_VIRTUALIZATION))
+ virt_unset_guest();
return rv;
}
@@ -210,9 +205,9 @@ uint32_t __weak __thread_std_smc_entry(uint32_t a0, uint32_t a1, uint32_t a2,
{
uint32_t rv = 0;
-#ifdef CFG_VIRTUALIZATION
- virt_on_stdcall();
-#endif
+ if (IS_ENABLED(CFG_VIRTUALIZATION))
+ virt_on_stdcall();
+
rv = std_smc_entry(a0, a1, a2, a3);
if (rv == OPTEE_SMC_RETURN_OK) {
diff --git a/core/arch/arm/mm/core_mmu.c b/core/arch/arm/mm/core_mmu.c
index ba33cb60..7d359546 100644
--- a/core/arch/arm/mm/core_mmu.c
+++ b/core/arch/arm/mm/core_mmu.c
@@ -158,12 +158,13 @@ static void mmu_unlock(uint32_t exceptions)
static struct tee_mmap_region *get_memory_map(void)
{
-#ifdef CFG_VIRTUALIZATION
- struct tee_mmap_region *map = virt_get_memory_map();
+ if (IS_ENABLED(CFG_VIRTUALIZATION)) {
+ struct tee_mmap_region *map = virt_get_memory_map();
+
+ if (map)
+ return map;
+ }
- if (map)
- return map;
-#endif
return static_memory_map;
}
@@ -2366,12 +2367,10 @@ bool is_unpaged(void *va __unused)
}
#endif
-#ifdef CFG_VIRTUALIZATION
void core_mmu_init_virtualization(void)
{
virt_init_memory(static_memory_map);
}
-#endif
vaddr_t io_pa_or_va(struct io_pa_va *p, size_t len)
{
@@ -2453,11 +2452,11 @@ void core_mmu_init_ta_ram(void)
* Get virtual addr/size of RAM where TA are loaded/executedNSec
* shared mem allocated from teecore.
*/
-#ifndef CFG_VIRTUALIZATION
- core_mmu_get_mem_by_type(MEM_AREA_TA_RAM, &s, &e);
-#else
- virt_get_ta_ram(&s, &e);
-#endif
+ if (IS_ENABLED(CFG_VIRTUALIZATION))
+ virt_get_ta_ram(&s, &e);
+ else
+ core_mmu_get_mem_by_type(MEM_AREA_TA_RAM, &s, &e);
+
ps = virt_to_phys((void *)s);
pe = virt_to_phys((void *)(e - 1)) + 1;
diff --git a/core/arch/arm/tee/entry_fast.c b/core/arch/arm/tee/entry_fast.c
index c22977dc..e935425a 100644
--- a/core/arch/arm/tee/entry_fast.c
+++ b/core/arch/arm/tee/entry_fast.c
@@ -1,17 +1,18 @@
// SPDX-License-Identifier: BSD-2-Clause
/*
- * Copyright (c) 2015, Linaro Limited
+ * Copyright (c) 2015-2021, Linaro Limited
* Copyright (c) 2014, STMicroelectronics International N.V.
*/
-#include <tee/entry_fast.h>
-#include <optee_msg.h>
-#include <sm/optee_smc.h>
+#include <config.h>
#include <kernel/boot.h>
+#include <kernel/misc.h>
#include <kernel/tee_l2cc_mutex.h>
#include <kernel/virtualization.h>
-#include <kernel/misc.h>
#include <mm/core_mmu.h>
+#include <optee_msg.h>
+#include <sm/optee_smc.h>
+#include <tee/entry_fast.h>
#ifdef CFG_CORE_RESERVED_SHM
static void tee_entry_get_shm_config(struct thread_smc_args *args)
@@ -88,9 +89,8 @@ static void tee_entry_exchange_capabilities(struct thread_smc_args *args)
#ifdef CFG_CORE_RESERVED_SHM
args->a1 |= OPTEE_SMC_SEC_CAP_HAVE_RESERVED_SHM;
#endif
-#ifdef CFG_VIRTUALIZATION
- args->a1 |= OPTEE_SMC_SEC_CAP_VIRTUALIZATION;
-#endif
+ if (IS_ENABLED(CFG_VIRTUALIZATION))
+ args->a1 |= OPTEE_SMC_SEC_CAP_VIRTUALIZATION;
args->a1 |= OPTEE_SMC_SEC_CAP_MEMREF_NULL;
#if defined(CFG_CORE_DYN_SHM)
@@ -261,9 +261,8 @@ size_t tee_entry_generic_get_api_call_count(void)
*/
size_t ret = 12;
-#if defined(CFG_VIRTUALIZATION)
- ret += 2;
-#endif
+ if (IS_ENABLED(CFG_VIRTUALIZATION))
+ ret += 2;
return ret;
}
diff --git a/core/include/kernel/virtualization.h b/core/include/kernel/virtualization.h
index def6e804..276210ea 100644
--- a/core/include/kernel/virtualization.h
+++ b/core/include/kernel/virtualization.h
@@ -11,6 +11,7 @@
#define HYP_CLNT_ID 0
+#if defined(CFG_VIRTUALIZATION)
/**
* virt_guest_created() - create new VM partition
* @guest_id: VM id provided by hypervisor
@@ -84,4 +85,23 @@ struct tee_mmap_region *virt_get_memory_map(void);
*/
void virt_get_ta_ram(vaddr_t *start, vaddr_t *end);
+#else
+static inline TEE_Result virt_guest_created(uint16_t guest_id __unused)
+{ return TEE_ERROR_NOT_SUPPORTED; }
+
+static inline TEE_Result virt_guest_destroyed(uint16_t guest_id __unused)
+{ return TEE_ERROR_NOT_SUPPORTED; }
+
+static inline TEE_Result virt_set_guest(uint16_t guest_id __unused)
+{ return TEE_ERROR_NOT_SUPPORTED; }
+
+static inline void virt_unset_guest(void) { }
+static inline void virt_on_stdcall(void) { }
+static inline struct tee_mmap_region *virt_get_memory_map(void) { return NULL; }
+static inline void
+virt_get_ta_ram(vaddr_t *start __unused, vaddr_t *end __unused) { }
+static inline void
+virt_init_memory(struct tee_mmap_region *memory_map __unused) { }
+#endif /*CFG_VIRTUALIZATION*/
+
#endif /* KERNEL_VIRTUALIZATION_H */