diff options
author | Jens Wiklander <jens.wiklander@linaro.org> | 2021-08-31 14:30:07 +0200 |
---|---|---|
committer | Jérôme Forissier <jerome@forissier.org> | 2021-10-18 10:51:22 +0200 |
commit | a94111b95c67dabfc6453372fc865a47d8a12ba3 (patch) | |
tree | db756e5f78e84dc00aef1973dee2cc5e9a70240a /core | |
parent | bddb2f8987cb257ec67290f815f9f0ecbd5d3424 (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.h | 2 | ||||
-rw-r--r-- | core/arch/arm/kernel/boot.c | 13 | ||||
-rw-r--r-- | core/arch/arm/kernel/thread.c | 10 | ||||
-rw-r--r-- | core/arch/arm/kernel/thread_optee_smc.c | 31 | ||||
-rw-r--r-- | core/arch/arm/mm/core_mmu.c | 23 | ||||
-rw-r--r-- | core/arch/arm/tee/entry_fast.c | 21 | ||||
-rw-r--r-- | core/include/kernel/virtualization.h | 20 |
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 */ |