Add RISC-V TEE support
PATCH 1/1 Add RISC-V TEE support
RISC-V Trusted Executable Environment security software includes linux, opensbi, and OP-TEE OS. linux is the non-secure domain, and OP-TEE OS is the secure domain. At boot time, opensbi boots OP-TEE OS and then starts linux. At runtime, opensbi acts as a secure monitor, responsible for context saving and restoring when switching between linux and OP-TEE OS.
TEE function is off by default, when using configuration is added in the config and objects file, such as platform/generic/configs/defconfig add CONFIG_SBI_ECALL_TEE = y, In the platform/generic/objects.mk add CONFIG_TEE_LOAD_ADDR = 0x27c000000, CONFIG_TEE_LOAD_ADDR is the starting address of the OP-TEE OS.
--- include/sbi/sbi_ecall_interface.h | 3 + include/sbi_utils/tee/tee_context.h | 104 ++++++++++ include/sbi_utils/tee/tee_sm_dispatcher.h | 44 +++++ include/sbi_utils/tee/teeecall_opteed.h | 145 ++++++++++++++ lib/sbi/Kconfig | 4 + lib/sbi/objects.mk | 3 + lib/sbi/sbi_ecall_tee.c | 19 ++ lib/sbi/sbi_init.c | 5 + lib/utils/tee/objects.mk | 16 ++ lib/utils/tee/tee_context.S | 189 ++++++++++++++++++ lib/utils/tee/tee_sm_dispatcher.c | 228 ++++++++++++++++++++++ 11 files changed, 760 insertions(+) create mode 100644 include/sbi_utils/tee/tee_context.h create mode 100644 include/sbi_utils/tee/tee_sm_dispatcher.h create mode 100644 include/sbi_utils/tee/teeecall_opteed.h create mode 100644 lib/sbi/sbi_ecall_tee.c create mode 100644 lib/utils/tee/objects.mk create mode 100644 lib/utils/tee/tee_context.S create mode 100644 lib/utils/tee/tee_sm_dispatcher.c
include/sbi/sbi_ecall_interface.h +3 -0
@@ -238,6 +238,9 @@ enum sbi_pmu_ctr_type {#define SBI_EXT_VENDOR_END 0x09FFFFFF#define SBI_EXT_FIRMWARE_START 0x0A000000#define SBI_EXT_FIRMWARE_END 0x0AFFFFFF +#define SBI_EXT_TEE_START 0x0A000000 +#define SBI_EXT_TEE_END 0x0AFFFFFF +#define SBI_EXT_TEE 0xFFFFEEEE/* SBI return error codes */ #define SBI_SUCCESS 0
include/sbi_utils/tee/tee_context.h new file +104 -0
104 lines not on this page · raw message
include/sbi_utils/tee/tee_sm_dispatcher.h new file +44 -0
44 lines not on this page · raw message
include/sbi_utils/tee/teeecall_opteed.h new file +145 -0
145 lines not on this page · raw message
lib/sbi/Kconfig +4 -0
@@ -34,4 +34,8 @@ config SBI_ECALL_VENDOR bool "Platform-defined vendor extensions" default y +config SBI_ECALL_TEE + bool "trusted execution environment" + default n + endmenu
lib/sbi/objects.mk +3 -0
@@ -43,6 +43,9 @@ libsbi-objs-$(CONFIG_SBI_ECALL_LEGACY) += sbi_ecall_legacy.o carray-sbi_ecall_exts-$(CONFIG_SBI_ECALL_VENDOR) += ecall_vendor libsbi-objs-$(CONFIG_SBI_ECALL_VENDOR) += sbi_ecall_vendor.o +carray-sbi_ecall_exts-$(CONFIG_SBI_ECALL_TEE) += ecall_tee +libsbi-objs-$(CONFIG_SBI_ECALL_TEE) += sbi_ecall_tee.o + libsbi-objs-y += sbi_bitmap.o libsbi-objs-y += sbi_bitops.o libsbi-objs-y += sbi_console.o
lib/sbi/sbi_ecall_tee.c new file +19 -0
@@ -0,0 +1,19 @@ +/* +* SPDX-License-Identifier: BSD-2-Clause +* +* Copyright 2023 Beijing ESWIN Computing Technology Co., Ltd. +* +* Authors: +* Chen Chaokai <[email protected]> +* Liu Shiwei <[email protected]> +*/ + +#include <sbi/sbi_ecall.h> +#include <sbi/sbi_ecall_interface.h> +#include <sbi_utils/tee/tee_sm_dispatcher.h> + +struct sbi_ecall_extension ecall_tee = { + .extid_start =SBI_EXT_TEE , + .extid_end =SBI_EXT_TEE , + .handle = sbi_ecall_tee_handler, +};
lib/sbi/sbi_init.c +5 -0
@@ -26,6 +26,7 @@#include <sbi/sbi_timer.h> #include <sbi/sbi_tlb.h> #include <sbi/sbi_version.h> +#include <sbi_utils/tee/tee_sm_dispatcher.h> #define BANNER \ " ____ _____ ____ _____\n" \
@@ -350,6 +351,10 @@ static void __noreturn init_coldboot(struct sbi_scratch *scratch, u32 hartid) init_count =sbi_scratch_offset_ptr (scratch, init_count_offset); (*init_count)++; +#ifdef CONFIG_SBI_ECALL_TEE +tee_os_init (); +#endif +sbi_hsm_prepare_next_jump (scratch, hartid);sbi_hart_switch_mode (hartid, scratch->next_arg1, scratch->next_addr, scratch->next_mode, false);
lib/utils/tee/objects.mk new file +16 -0
@@ -0,0 +1,16 @@ +# +# SPDX-License-Identifier: BSD-2-Clause +# +# Copyright 2023 Beijing ESWIN Computing Technology Co., Ltd. +# +# Authors: +# Chen Chaokai <[email protected]> +# Liu Shiwei <[email protected]> +# + +ifdef CONFIG_TEE_LOAD_ADDR +firmware-cflags-y += -DTEE_LOAD_ADDR=$(CONFIG_TEE_LOAD_ADDR) +endif + +libsbiutils-objs-$(CONFIG_SBI_ECALL_TEE) += tee/tee_context.o +libsbiutils-objs-$(CONFIG_SBI_ECALL_TEE) += tee/tee_sm_dispatcher.o
lib/utils/tee/tee_context.S new file +189 -0
189 lines not on this page · raw message
lib/utils/tee/tee_sm_dispatcher.c new file +228 -0
228 lines not on this page · raw message
Signature · 1 line
2.17.1