Allow the TEE subsystem and OP-TEE driver to be selected on RISC-V systems with the RPMI TEE transport enabled. Prevent OP-TEE from being built in when the transport is modular.
Common OP-TEE code checks the memory type when registering shared memory. Add the RISC-V implementation so that code builds without reaching the unsupported-architecture error. Reject mappings with explicit non-cacheable or I/O memory types.
Signed-off-by: Amirreza Zarrabi amirreza.zarrabi@oss.qualcomm.com --- drivers/tee/Kconfig | 3 ++- drivers/tee/optee/Kconfig | 3 ++- drivers/tee/optee/call.c | 2 ++ 3 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/drivers/tee/Kconfig b/drivers/tee/Kconfig index 98c3ad083940..ad754b647a3c 100644 --- a/drivers/tee/Kconfig +++ b/drivers/tee/Kconfig @@ -2,7 +2,8 @@ # Generic Trusted Execution Environment Configuration menuconfig TEE tristate "Trusted Execution Environment support" - depends on HAVE_ARM_SMCCC || COMPILE_TEST || CPU_SUP_AMD + depends on HAVE_ARM_SMCCC || COMPILE_TEST || CPU_SUP_AMD || \ + RISCV_RPMI_TEE_TRANSPORT select CRYPTO_LIB_SHA1 select DMA_SHARED_BUFFER select GENERIC_ALLOCATOR diff --git a/drivers/tee/optee/Kconfig b/drivers/tee/optee/Kconfig index 891dac63cab8..cc057c76de62 100644 --- a/drivers/tee/optee/Kconfig +++ b/drivers/tee/optee/Kconfig @@ -2,10 +2,11 @@ # OP-TEE Trusted Execution Environment Configuration config OPTEE tristate "OP-TEE" - depends on HAVE_ARM_SMCCC + depends on HAVE_ARM_SMCCC || RISCV_RPMI_TEE_TRANSPORT depends on MMU depends on RPMB || !RPMB depends on ARM_FFA_TRANSPORT || !ARM_FFA_TRANSPORT + depends on RISCV_RPMI_TEE_TRANSPORT || !RISCV_RPMI_TEE_TRANSPORT help This implements the OP-TEE Trusted Execution Environment (TEE) driver. diff --git a/drivers/tee/optee/call.c b/drivers/tee/optee/call.c index e046aff61828..267513cf4ec0 100644 --- a/drivers/tee/optee/call.c +++ b/drivers/tee/optee/call.c @@ -604,6 +604,8 @@ static bool is_normal_memory(pgprot_t p) #elif defined(CONFIG_ARM64) return ((pgprot_val(p) & PTE_ATTRINDX_MASK) == PTE_ATTRINDX(MT_NORMAL)) || ((pgprot_val(p) & PTE_ATTRINDX_MASK) == PTE_ATTRINDX(MT_NORMAL_TAGGED)); +#elif defined(CONFIG_RISCV) + return !(pgprot_val(p) & _PAGE_MTMASK); #else #error "Unsupported architecture" #endif