summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPengguang Zhu <pengguang.zhu@amlogic.com>2019-12-03 15:15:10 +0800
committerShipeng Sun <shipeng.sun@amlogic.com>2019-12-25 00:36:54 -0700
commit63aff7a40d6bfb43be886959a3f609d15271f264 (patch)
treefcc05d4a13ff17b7c78a1411703b2b26d4f4df7f
parentb6bd4d7a0e25108fd963b53536d55e1da072e199 (diff)
downloadarm64-63aff7a40d6bfb43be886959a3f609d15271f264.tar.gz
tee: add api tee_protect_tvp_mem [1/1]
PD#SWPL-17811 Problem: need API to protect mem for tvp Solution: add api tee_protect_tvp_mem Verify: Android Q + franklin Test: manual Change-Id: I46daec70a843524789aa63b32ef5e43111b65c66 Signed-off-by: Pengguang Zhu <pengguang.zhu@amlogic.com>
-rw-r--r--drivers/amlogic/tee/tee.c32
-rw-r--r--include/linux/amlogic/tee.h3
2 files changed, 35 insertions, 0 deletions
diff --git a/drivers/amlogic/tee/tee.c b/drivers/amlogic/tee/tee.c
index 1c2e3ebd1693..296cacef0afd 100644
--- a/drivers/amlogic/tee/tee.c
+++ b/drivers/amlogic/tee/tee.c
@@ -56,6 +56,13 @@ static int disable_flag;
#define TEE_SMC_LOAD_VIDEO_FW \
TEE_SMC_FAST_CALL_VAL(TEE_SMC_FUNCID_LOAD_VIDEO_FW)
+#define TEE_SMC_FUNCID_PROTECT_TVP_MEM 0xE020
+#define TEE_SMC_PROTECT_TVP_MEM \
+ TEE_SMC_FAST_CALL_VAL(TEE_SMC_FUNCID_PROTECT_TVP_MEM)
+
+#define TEE_SMC_FUNCID_UNPROTECT_TVP_MEM 0xE021
+#define TEE_SMC_UNPROTECT_TVP_MEM \
+ TEE_SMC_FAST_CALL_VAL(TEE_SMC_FUNCID_UNPROTECT_TVP_MEM)
static struct class *tee_sys_class;
struct tee_smc_calls_revision_result {
@@ -172,6 +179,31 @@ bool tee_enabled(void)
}
EXPORT_SYMBOL(tee_enabled);
+uint32_t tee_protect_tvp_mem(uint32_t start, uint32_t size, uint32_t *handle)
+{
+ struct arm_smccc_res res;
+
+ if (handle == NULL)
+ return 0xFFFF0006;
+
+ arm_smccc_smc(TEE_SMC_PROTECT_TVP_MEM,
+ start, size, 0, 0, 0, 0, 0, &res);
+
+ *handle = res.a1;
+
+ return res.a0;
+}
+EXPORT_SYMBOL(tee_protect_tvp_mem);
+
+void tee_unprotect_tvp_mem(uint32_t handle)
+{
+ struct arm_smccc_res res;
+
+ arm_smccc_smc(TEE_SMC_UNPROTECT_TVP_MEM,
+ handle, 0, 0, 0, 0, 0, 0, &res);
+}
+EXPORT_SYMBOL(tee_unprotect_tvp_mem);
+
int tee_create_sysfs(void)
{
int ret;
diff --git a/include/linux/amlogic/tee.h b/include/linux/amlogic/tee.h
index 224dde5cb3ee..e63d886e110b 100644
--- a/include/linux/amlogic/tee.h
+++ b/include/linux/amlogic/tee.h
@@ -22,5 +22,8 @@ extern bool tee_enabled(void);
extern int is_secload_get(void);
extern int tee_load_video_fw(uint32_t index, uint32_t vdec);
extern int tee_load_video_fw_swap(uint32_t index, uint32_t vdec, bool is_swap);
+extern uint32_t tee_protect_tvp_mem(uint32_t start, uint32_t size,
+ uint32_t *handle);
+extern void tee_unprotect_tvp_mem(uint32_t handle);
#endif /* __TEE_H__ */