aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammed Habibulla <moch@google.com>2016-01-20 14:24:35 -0800
committerMohammed Habibulla <moch@google.com>2016-01-20 14:24:35 -0800
commitf50fa4cb6f8e34cf991c5e127c6d9ce66df0844d (patch)
treec73ab4662868cb1f59cae4b6786ab013f6958b59
parent101cccb03c4a70a328a74366c88bc6ccaafef931 (diff)
downloadpxa-v3.14-f50fa4cb6f8e34cf991c5e127c6d9ce66df0844d.tar.gz
abox_edge: Enable CONFIG_MRVL_TZDD for security driver.
Update marvell security drive update to date. BUG=25833706 Change-Id: I305347e9571401ef59ee94d7bdf21cbfbaf8a5f4
-rwxr-xr-x[-rw-r--r--]arch/arm/configs/abox_edge_defconfig2
-rw-r--r--drivers/marvell/security/mmp-tzdd/src/Makefile2
-rwxr-xr-x[-rw-r--r--]drivers/marvell/security/mmp-tzdd/src/comm/ntw/tee_cm_internal.h2
-rw-r--r--drivers/marvell/security/mmp-tzdd/src/comm/ntw/tee_cm_misc_ntw.c14
-rw-r--r--drivers/marvell/security/mmp-tzdd/src/comm/ntw/tee_cm_ntw.c13
-rw-r--r--drivers/marvell/security/mmp-tzdd/src/dbg/ntw/tee_dbg_log.c129
-rw-r--r--drivers/marvell/security/mmp-tzdd/src/inc/tee_cm.h5
-rw-r--r--drivers/marvell/security/mmp-tzdd/src/main/teec_cb.c1
-rw-r--r--drivers/marvell/security/mmp-tzdd/src/main/teec_client_api.c1
-rw-r--r--drivers/marvell/security/mmp-tzdd/src/main/tzdd_internal.h1
-rw-r--r--drivers/marvell/security/mmp-tzdd/src/main/tzdd_main.c6
-rw-r--r--drivers/marvell/security/mmp-tzdd/src/main/tzdd_pt.c47
-rw-r--r--drivers/marvell/security/mmp-tzdd/src/msgm/ntw/tee_msgm_op_internal.h21
-rw-r--r--drivers/marvell/security/mmp-tzdd/src/osa/include/osa_thread.h3
-rw-r--r--drivers/marvell/security/mmp-tzdd/src/osa/osa_mem.c24
-rw-r--r--drivers/marvell/security/mmp-tzdd/src/osa/osa_sync.c15
-rw-r--r--drivers/marvell/security/mmp-tzdd/src/osa/osa_thread.c3
17 files changed, 180 insertions, 109 deletions
diff --git a/arch/arm/configs/abox_edge_defconfig b/arch/arm/configs/abox_edge_defconfig
index 0891dd31f13..5b091000a64 100644..100755
--- a/arch/arm/configs/abox_edge_defconfig
+++ b/arch/arm/configs/abox_edge_defconfig
@@ -3055,7 +3055,7 @@ CONFIG_MRVL_WL_SD8777=y
CONFIG_MRVL_WL_BUILD_TYPE=y
CONFIG_MRVL_DEBUG=n
CONFIG_MRVL_LOG=n
-# CONFIG_MRVL_TZDD is not set
+CONFIG_MRVL_TZDD=y
# CONFIG_MRVL_SW_JTAG is not set
CONFIG_MRVL_PANIC_FLUSH=y
# CONFIG_PXA_RAMDUMP is not set
diff --git a/drivers/marvell/security/mmp-tzdd/src/Makefile b/drivers/marvell/security/mmp-tzdd/src/Makefile
index dcb493b86cb..f8a98e1e473 100644
--- a/drivers/marvell/security/mmp-tzdd/src/Makefile
+++ b/drivers/marvell/security/mmp-tzdd/src/Makefile
@@ -14,7 +14,7 @@ TZDD_PERF_REC := N
# sharedMem context checking
TZDD_SHAREDMEM_CONTEXT_CHECKING := N
-obj-m := tzdd.o
+obj-$(CONFIG_MRVL_TZDD) := tzdd.o
tzdd-objs := \
osa/osa.o \
osa/osa_atomic.o \
diff --git a/drivers/marvell/security/mmp-tzdd/src/comm/ntw/tee_cm_internal.h b/drivers/marvell/security/mmp-tzdd/src/comm/ntw/tee_cm_internal.h
index 7d42d2880f8..1320919815f 100644..100755
--- a/drivers/marvell/security/mmp-tzdd/src/comm/ntw/tee_cm_internal.h
+++ b/drivers/marvell/security/mmp-tzdd/src/comm/ntw/tee_cm_internal.h
@@ -31,6 +31,8 @@
typedef struct {
int32_t idx_read; /* res pool read index */
int32_t idx_write; /* req pool write index */
+ uint32_t req_tw; /* call back request number */
+ uint32_t rsp_tw; /* call back response number */
} cm_index_header_t;
/* smi trap arguments */
diff --git a/drivers/marvell/security/mmp-tzdd/src/comm/ntw/tee_cm_misc_ntw.c b/drivers/marvell/security/mmp-tzdd/src/comm/ntw/tee_cm_misc_ntw.c
index 9691230b996..851cb2323b1 100644
--- a/drivers/marvell/security/mmp-tzdd/src/comm/ntw/tee_cm_misc_ntw.c
+++ b/drivers/marvell/security/mmp-tzdd/src/comm/ntw/tee_cm_misc_ntw.c
@@ -75,3 +75,17 @@ inline void _cm_update_out_write_idx(int32_t idx)
return;
}
+
+inline uint32_t _cm_get_cb_req_num(void)
+{
+ cm_index_header_t *in_head = (cm_index_header_t*)in_header;
+
+ return in_head->req_tw;
+}
+
+inline uint32_t _cm_get_cb_rsp_num(void)
+{
+ cm_index_header_t *in_head = (cm_index_header_t*)in_header;
+
+ return in_head->rsp_tw;
+}
diff --git a/drivers/marvell/security/mmp-tzdd/src/comm/ntw/tee_cm_ntw.c b/drivers/marvell/security/mmp-tzdd/src/comm/ntw/tee_cm_ntw.c
index c3f1eba9c92..70d4854b632 100644
--- a/drivers/marvell/security/mmp-tzdd/src/comm/ntw/tee_cm_ntw.c
+++ b/drivers/marvell/security/mmp-tzdd/src/comm/ntw/tee_cm_ntw.c
@@ -45,6 +45,9 @@ extern void cm_call_smi(void *arg);
extern int32_t _cm_get_out_write_idx(void);
extern void _cm_update_out_write_idx(int32_t idx);
+extern uint32_t _cm_get_cb_req_num(void);
+extern uint32_t _cm_get_cb_rsp_num(void);
+
/* get out empty size */
uint32_t _out_empty_size(void)
{
@@ -218,3 +221,13 @@ void tee_cm_get_msgm_head(void *msg_head)
return;
}
+
+uint32_t tee_cm_get_cb_req_num(void)
+{
+ return _cm_get_cb_req_num();
+}
+
+uint32_t tee_cm_get_cb_rsp_num(void)
+{
+ return _cm_get_cb_rsp_num();
+}
diff --git a/drivers/marvell/security/mmp-tzdd/src/dbg/ntw/tee_dbg_log.c b/drivers/marvell/security/mmp-tzdd/src/dbg/ntw/tee_dbg_log.c
index 20c0fc81668..f0876fc5a1f 100644
--- a/drivers/marvell/security/mmp-tzdd/src/dbg/ntw/tee_dbg_log.c
+++ b/drivers/marvell/security/mmp-tzdd/src/dbg/ntw/tee_dbg_log.c
@@ -20,10 +20,10 @@
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
-#define _TEE_DBG_PROC_LOG_TMP_BUF_SZ (255) /* max size of string */
-#define _TEE_DBG_PROC_LOG_BUF_SZ \
- (0x80000 - _TEE_DBG_PROC_LOG_TMP_BUF_SZ - sizeof(tee_dbg_log_t))
-#define _TEE_DBG_PROC_ENABLE (0x55aa55aa)
+#define _TEE_DBG_PROC_LEVEL0 (0x00000000)
+#define _TEE_DBG_PROC_LEVEL1 (0x55aa55aa)
+#define _TEE_DBG_PROC_LEVEL2 (0x66bb66bb)
+#define _TEE_DBG_PROC_LEVEL3 (0x77cc77cc)
#define IS_DBG_PROC_MAGIC_VALID(_m) \
(('P' == _m[0]) && \
@@ -31,71 +31,79 @@
('O' == _m[2]) && \
('c' == _m[3]))
+#define INIT_DBG_PROC_CTRL_MAGIC(_m) do { \
+ _m[0] = 'C'; \
+ _m[1] = 't'; \
+ _m[2] = 'R'; \
+ _m[3] = 'l'; \
+ } while (0)
+
typedef struct _tee_dbg_log_t {
uint8_t magic[4];
uint32_t write_offset;
- uint32_t round;
- bool round_rollback;
+ uint64_t round;
+ uint32_t log_buf_sz;
} tee_dbg_log_t;
typedef struct _tee_dbg_log_ctl_t {
- volatile uint32_t enable;
+ volatile uint8_t magic[4];
+ volatile uint32_t level;
} tee_dbg_log_ctl_t;
static tee_dbg_log_t *_g_tee_dbg_log_header;
static tee_dbg_log_ctl_t *_g_tee_dbg_log_ctl_header;
static uint8_t *_g_tee_dbg_log_buf;
+static uint32_t _g_tee_dbg_log_buf_sz;
void tee_dbg_log_init(ulong_t buffer, ulong_t ctl)
{
_g_tee_dbg_log_header = (tee_dbg_log_t *) buffer;
_g_tee_dbg_log_ctl_header = (tee_dbg_log_ctl_t *) ctl;
_g_tee_dbg_log_buf = (uint8_t *) (_g_tee_dbg_log_header + 1);
- printk(KERN_ERR "proc log buf: %lx, ctl: %lx\n", buffer, ctl);
+
+ if (!IS_DBG_PROC_MAGIC_VALID(_g_tee_dbg_log_header->magic)) {
+ printk(KERN_ERR "proc log invalid magic\n");
+ return;
+ }
+ _g_tee_dbg_log_buf_sz = _g_tee_dbg_log_header->log_buf_sz;
+
+ INIT_DBG_PROC_CTRL_MAGIC(_g_tee_dbg_log_ctl_header->magic);
+
+ printk(KERN_ERR "proc log buf: 0x%lx, size: 0x%x, ctl: 0x%lx\n",
+ buffer, _g_tee_dbg_log_buf_sz, ctl);
+ return;
}
static uint32_t g_snapshot_write_offset;
-static uint32_t g_snapshot_round;
-static uint32_t g_snapshot_round_rollback;
-static uint32_t g_read_round;
+static uint64_t g_snapshot_round;
+static uint64_t g_read_round;
static uint32_t g_read_offset;
static uint32_t g_read_count;
-static bool g_proc_log_eanbled;
+static uint32_t g_proc_log_level;
static void *log_seq_start(struct seq_file *s, loff_t *pos)
{
g_snapshot_write_offset = _g_tee_dbg_log_header->write_offset;
g_snapshot_round = _g_tee_dbg_log_header->round;
- g_snapshot_round_rollback = _g_tee_dbg_log_header->round_rollback;
- if (!IS_DBG_PROC_MAGIC_VALID(_g_tee_dbg_log_header->magic))
+ if ((!IS_DBG_PROC_MAGIC_VALID(_g_tee_dbg_log_header->magic)) ||
+ (!_g_tee_dbg_log_buf_sz))
return NULL;
if (g_read_round == g_snapshot_round
- && g_read_offset == g_snapshot_write_offset)
+ && g_read_offset == g_snapshot_write_offset)
/* nothing to read */
return NULL;
- if (g_snapshot_round_rollback) {
- if (g_snapshot_round != 0 ||
- g_snapshot_round != 0xFFFFFFFF ||
- g_snapshot_write_offset > g_read_offset) {
- seq_printf(s,
- "=========================rollback==========================\n");
- g_read_offset = g_snapshot_write_offset;
- g_read_round = g_snapshot_round - 1;
- g_snapshot_round_rollback = false;
- }
- } else {
- if (g_snapshot_round > g_read_round + 1 ||
- (g_snapshot_round == g_read_round + 1
- && g_snapshot_write_offset > g_read_offset)) {
- g_read_offset = g_snapshot_write_offset;
- g_read_round = g_snapshot_round - 1;
- seq_printf(s,
- "--------------------------rollback--------------------------\n");
- }
+ if ((g_snapshot_round > g_read_round + 1) ||
+ (g_snapshot_round == g_read_round + 1
+ && g_snapshot_write_offset > g_read_offset)) {
+ g_read_offset = g_snapshot_write_offset;
+ g_read_round = g_snapshot_round - 1;
+ seq_printf(s,
+ "--------------------------rollback--------------------------\n");
}
+
g_read_count = s->count;
return _g_tee_dbg_log_buf + g_read_offset;
@@ -103,15 +111,11 @@ static void *log_seq_start(struct seq_file *s, loff_t *pos)
static void *log_seq_next(struct seq_file *s, void *v, loff_t *pos)
{
- g_read_offset += s->count - g_read_count + 1;
- if (g_read_offset > _TEE_DBG_PROC_LOG_BUF_SZ) {
- g_read_offset -= _TEE_DBG_PROC_LOG_BUF_SZ;
- g_read_round++;
- }
g_read_count = s->count;
- if ((g_read_round == g_snapshot_round
- && g_read_offset >= g_snapshot_write_offset)
- || g_read_round > g_snapshot_round)
+
+ if (g_read_round == g_snapshot_round
+ && g_read_offset == g_snapshot_write_offset)
+ /* nothing to read */
return NULL;
return _g_tee_dbg_log_buf + g_read_offset;
@@ -124,8 +128,20 @@ static void log_seq_stop(struct seq_file *s, void *v)
static int log_seq_show(struct seq_file *s, void *v)
{
- seq_printf(s, "%s", (int8_t *) v);
- return 0;
+ int ret;
+ ret = seq_printf(s, "%s", (int8_t *) v);
+ if (ret) {
+ /* over flow */
+ } else {
+ g_read_offset += s->count - g_read_count + 1;
+ }
+
+ if (g_read_offset > _g_tee_dbg_log_buf_sz) {
+ g_read_offset -= _g_tee_dbg_log_buf_sz;
+ g_read_round++;
+ }
+
+ return ret;
}
static const struct seq_operations log_seq_ops = {
@@ -150,8 +166,7 @@ static const struct file_operations log_file_ops = {
static int ctl_seq_show(struct seq_file *m, void *v)
{
- seq_printf(m, "tee proc log %s\n",
- g_proc_log_eanbled ? "enabled" : "disabled");
+ seq_printf(m, "tee proc log level %d\n", g_proc_log_level);
return 0;
}
@@ -167,17 +182,25 @@ static ssize_t ctl_write(struct file *file, const char *buf,
get_user(val, buf);
switch (val) {
+ case '0':
+ _g_tee_dbg_log_ctl_header->level = _TEE_DBG_PROC_LEVEL0;
+ g_proc_log_level = 0;
+ break;
case '1':
- _g_tee_dbg_log_ctl_header->enable = _TEE_DBG_PROC_ENABLE;
- g_proc_log_eanbled = true;
+ _g_tee_dbg_log_ctl_header->level = _TEE_DBG_PROC_LEVEL1;
+ g_proc_log_level = 1;
break;
- case '0':
- _g_tee_dbg_log_ctl_header->enable = 0;
- g_proc_log_eanbled = false;
+ case '2':
+ _g_tee_dbg_log_ctl_header->level = _TEE_DBG_PROC_LEVEL2;
+ g_proc_log_level = 2;
+ break;
+ case '3':
+ _g_tee_dbg_log_ctl_header->level = _TEE_DBG_PROC_LEVEL3;
+ g_proc_log_level = 3;
break;
default:
- printk(KERN_ERR "value should be 1 or 0\n");
- return 0;
+ printk(KERN_ERR "value should be 0/1/2/3\n");
+ return count;
}
return count;
diff --git a/drivers/marvell/security/mmp-tzdd/src/inc/tee_cm.h b/drivers/marvell/security/mmp-tzdd/src/inc/tee_cm.h
index f7b1777a2ba..d49dfcd1f1f 100644
--- a/drivers/marvell/security/mmp-tzdd/src/inc/tee_cm.h
+++ b/drivers/marvell/security/mmp-tzdd/src/inc/tee_cm.h
@@ -38,6 +38,11 @@ extern void tee_cm_recv_data(uint8_t *buf);
extern void tee_cm_smi(uint32_t flag);
extern void tee_cm_get_msgm_head(void *msg_head);
+extern uint32_t tee_cm_get_cb_req_num(void);
+extern uint32_t tee_cm_get_cb_rsp_num(void);
+extern void tee_cm_update_cb_req_num(uint32_t req_tw);
+extern void tee_cm_update_cb_rsq_num(uint32_t rsp_tw);
+
/* read RB phys address */
static inline uint32_t _read_rb_phys_addr(void)
{
diff --git a/drivers/marvell/security/mmp-tzdd/src/main/teec_cb.c b/drivers/marvell/security/mmp-tzdd/src/main/teec_cb.c
index 5d464270239..6ef71fee8a5 100644
--- a/drivers/marvell/security/mmp-tzdd/src/main/teec_cb.c
+++ b/drivers/marvell/security/mmp-tzdd/src/main/teec_cb.c
@@ -253,6 +253,7 @@ teec_cb_handle_t teec_reg_cb(const teec_cb_uuid_t *uuid,
attr.prio = 0; /* highest prio */
attr.stack_addr = NULL; /* not used */
attr.stack_size = 0; /* not used */
+ attr.flags = OSA_PF_FREEZER_SKIP;
cb->worker = osa_create_thread(_teec_cb_worker, cb, &attr);
OSA_ASSERT(cb->worker);
diff --git a/drivers/marvell/security/mmp-tzdd/src/main/teec_client_api.c b/drivers/marvell/security/mmp-tzdd/src/main/teec_client_api.c
index 7aa8c6565d1..40173959280 100644
--- a/drivers/marvell/security/mmp-tzdd/src/main/teec_client_api.c
+++ b/drivers/marvell/security/mmp-tzdd/src/main/teec_client_api.c
@@ -807,6 +807,7 @@ TEEC_Result TEEC_OpenSession(TEEC_Context *context,
unsigned long flags;
local_irq_save(flags);
current->flags |= PF_NOFREEZE;
+ current->flags |= PF_FREEZER_SKIP;
local_irq_restore(flags);
}
break;
diff --git a/drivers/marvell/security/mmp-tzdd/src/main/tzdd_internal.h b/drivers/marvell/security/mmp-tzdd/src/main/tzdd_internal.h
index 57b57513539..76de7e36ffe 100644
--- a/drivers/marvell/security/mmp-tzdd/src/main/tzdd_internal.h
+++ b/drivers/marvell/security/mmp-tzdd/src/main/tzdd_internal.h
@@ -42,6 +42,7 @@
#include <linux/atomic.h>
#include <linux/compat.h>
#include <linux/uidgid.h>
+#include <linux/sched.h>
#include "tee_mrvl_imp.h"
#include "tee_client_api.h"
diff --git a/drivers/marvell/security/mmp-tzdd/src/main/tzdd_main.c b/drivers/marvell/security/mmp-tzdd/src/main/tzdd_main.c
index 3a1dc80f3bf..44ba47b8d59 100644
--- a/drivers/marvell/security/mmp-tzdd/src/main/tzdd_main.c
+++ b/drivers/marvell/security/mmp-tzdd/src/main/tzdd_main.c
@@ -28,11 +28,11 @@ MODULE_LICENSE("GPL");
*/
#ifdef TEE_RES_CFG_16M
-#define TZDD_VERSION "TEEC Drvier Version 1.1.4 16MB, kernel_3_10/3_14"
+#define TZDD_VERSION "TEEC Drvier Version 1.1.10 16MB, kernel_3_10/3_14"
#elif defined(TEE_RES_CFG_24M)
-#define TZDD_VERSION "TEEC Drvier Version 1.1.4 24MB, kernel_3_10/3_14"
+#define TZDD_VERSION "TEEC Drvier Version 1.1.10 24MB, kernel_3_10/3_14"
#else
-#define TZDD_VERSION "TEEC Drvier Version 1.1.4, kernel_3_10/3_14"
+#define TZDD_VERSION "TEEC Drvier Version 1.1.10, kernel_3_10/3_14"
#endif
#define TZDD_DRV_NAME "tzdd"
diff --git a/drivers/marvell/security/mmp-tzdd/src/main/tzdd_pt.c b/drivers/marvell/security/mmp-tzdd/src/main/tzdd_pt.c
index a71a4e83daf..0b69fa7f206 100644
--- a/drivers/marvell/security/mmp-tzdd/src/main/tzdd_pt.c
+++ b/drivers/marvell/security/mmp-tzdd/src/main/tzdd_pt.c
@@ -20,19 +20,20 @@
#include "tzdd_internal.h"
#include "tzdd_pt_core.h"
+extern uint32_t tee_cm_get_cb_req_num(void);
+extern uint32_t tee_cm_get_cb_rsp_num(void);
+
#ifdef CONFIG_64BIT
-#define CALL_SMC (0x72000000)
-#define CALL_IPI (0x73000000)
+#define CALL_SMC (0x72000000)
+#define CALL_IPI (0x73000000)
#else
-#define CALL_SMC (0x33000000)
-#define CALL_IPI (0x34000000)
+#define CALL_SMC (0x33000000)
+#define CALL_IPI (0x34000000)
#endif
static uint32_t _g_tzdd_send_num;
static bool _g_pt_thread_stop_flag;
-#ifdef TEE_DEBUG_ENALBE_PROC_FS_LOG
-
uint32_t g_msg_sent;
uint32_t g_msg_recv;
uint32_t g_msg_fake;
@@ -42,8 +43,6 @@ uint32_t g_pst_ipi_num;
uint32_t g_pre_dmy_num;
uint32_t g_pst_dmy_num;
-#endif /* TEE_DEBUG_ENALBE_PROC_FS_LOG */
-
static int tzdd_proxy_thread(void *data)
{
tzdd_dev_t *dev;
@@ -61,6 +60,7 @@ static int tzdd_proxy_thread(void *data)
set_cpus_allowed_ptr(current, cpumask_of(0));
TZDD_DBG("tzdd_proxy_thread on cpu %d\n", smp_processor_id());
+ current->flags |= PF_FREEZER_SKIP;
nice = task_nice(current);
TZDD_DBG("tzdd_proxy_thread: nice = %d\n", nice);
@@ -96,19 +96,13 @@ static int tzdd_proxy_thread(void *data)
}
tee_add_time_record_point("npct");
/* Call IPI to TW */
-#ifdef TEE_DEBUG_ENALBE_PROC_FS_LOG
g_pre_ipi_num++;
-#endif
tee_cm_smi(CALL_IPI);
-#ifdef TEE_DEBUG_ENALBE_PROC_FS_LOG
g_pst_ipi_num++;
-#endif
tee_add_time_record_point("npbt");
_g_tzdd_send_num++;
-#ifdef TEE_DEBUG_ENALBE_PROC_FS_LOG
g_msg_sent++;
-#endif
}
res_size = tee_cm_get_data_size();
@@ -118,33 +112,27 @@ static int tzdd_proxy_thread(void *data)
msg_flag = tzdd_pt_recv();
if (msg_flag == TEE_MSG_IGNORE_COUNTER) {
/* do nothing */
-#ifdef TEE_DEBUG_ENALBE_PROC_FS_LOG
g_msg_ignd++;
-#endif
} else { /* TEE_MSG_FAKE && TEE_MSG_NORMAL */
-#ifdef TEE_DEBUG_ENALBE_PROC_FS_LOG
if (TEE_MSG_NORMAL == msg_flag)
g_msg_recv++;
else if (TEE_MSG_FAKE == msg_flag)
g_msg_fake++;
else
OSA_ASSERT(0);
-#endif
_g_tzdd_send_num--;
}
res_size = tee_cm_get_data_size();
}
tee_add_time_record_point("nprm");
- if (_g_tzdd_send_num) {
-#ifdef TEE_DEBUG_ENALBE_PROC_FS_LOG
- g_pre_dmy_num++;
-#endif
- tee_cm_smi(CALL_SMC);
-#ifdef TEE_DEBUG_ENALBE_PROC_FS_LOG
- g_pst_dmy_num++;
-#endif
- } else {
+ /*
+ * all the requests are trapped in the callbacks in secure world.
+ * requests from secure world are all served by PT.
+ * */
+ if (0 ==_g_tzdd_send_num ||
+ ((_g_tzdd_send_num == (tee_cm_get_cb_req_num() - tee_cm_get_cb_rsp_num()))
+ && (tee_cm_get_cb_req_num() == g_msg_ignd))) {
/* release D1P LPM constraint */
if (true == is_lpm_blocked) {
pm_qos_update_request(&(dev->tzdd_lpm_cons),
@@ -162,6 +150,11 @@ static int tzdd_proxy_thread(void *data)
break;
}
tee_add_time_record_point("npet");
+ } else {
+ g_pre_dmy_num++;
+
+ tee_cm_smi(CALL_SMC);
+ g_pst_dmy_num++;
}
}
diff --git a/drivers/marvell/security/mmp-tzdd/src/msgm/ntw/tee_msgm_op_internal.h b/drivers/marvell/security/mmp-tzdd/src/msgm/ntw/tee_msgm_op_internal.h
index 6294d834d3b..e2ac96de929 100644
--- a/drivers/marvell/security/mmp-tzdd/src/msgm/ntw/tee_msgm_op_internal.h
+++ b/drivers/marvell/security/mmp-tzdd/src/msgm/ntw/tee_msgm_op_internal.h
@@ -41,15 +41,22 @@ extern const char cmd_magic[];
/* for translate cmd idx */
#define TEE_TW_SUB_CMD_SIZE (8)
#define TEE_TW_PREM_CMD_MASK ((1 << (32 - TEE_TW_SUB_CMD_SIZE)) - 1)
+
/* for parameters */
#define PARAM_NUMBERS (4)
-#define IS_TYPE_NONE(_m) (0x0 == (_m))
-#define IS_TYPE_VALUE(_m) ((_m) >= 0x1 && (_m) <= 0x3)
-#define IS_TYPE_TMPREF(_m) ((_m) >= 0x5 && (_m) <= 0x7)
-#define IS_TYPE_MEMREF(_m) ((_m) >= 0xc && (_m) <= 0xf)
-/* common macro */
-#define IS_PARAM_TAGED_INPUT(_m) (((_m) & 0x1) == 0x1)
-#define IS_PARAM_TAGED_OUTPUT(_m) (((_m) & 0x2) == 0x2)
+#define IS_TYPE_NONE(_m) (TEEC_NONE == (_m))
+#define IS_TYPE_VALUE(_m) ((_m) >= TEEC_VALUE_INPUT && (_m) <= TEEC_VALUE_INOUT)
+/*
+ * shared memory in secure world is treated as
+ * the tmpref memory in non-secure world
+ */
+#define IS_TYPE_TMPREF(_m) ((_m) >= TEEC_MEMREF_TEMP_INPUT && (_m) <= TEEC_MEMREF_TEMP_INOUT)
+#define IS_TYPE_MEMREF(_m) ((_m) >= TEEC_MEMREF_WHOLE && (_m) <= TEEC_MEMREF_PARTIAL_INOUT)
+
+/* memory in/out */
+#define IS_PARAM_TAGED_INPUT(_m) (((_m) & TEEC_MEM_INPUT) == TEEC_MEM_INPUT)
+#define IS_PARAM_TAGED_OUTPUT(_m) (((_m) & TEEC_MEM_OUTPUT) == TEEC_MEM_OUTPUT)
+
#define OFFSETOF(TYPE, MEMBER) __builtin_offsetof(TYPE, MEMBER)
/* vvv cmd_body struct vvv */
diff --git a/drivers/marvell/security/mmp-tzdd/src/osa/include/osa_thread.h b/drivers/marvell/security/mmp-tzdd/src/osa/include/osa_thread.h
index 0b018924022..faba46eac36 100644
--- a/drivers/marvell/security/mmp-tzdd/src/osa/include/osa_thread.h
+++ b/drivers/marvell/security/mmp-tzdd/src/osa/include/osa_thread.h
@@ -36,11 +36,14 @@
#define OSA_THRD_PRIO_ABOVE_IDLE (6)
#define OSA_THRD_PRIO_IDLE (7)
+#define OSA_PF_FREEZER_SKIP PF_FREEZER_SKIP /* Freezer should not count it as freezable */
+
struct osa_thread_attr {
uint8_t *name;
uint32_t prio;
void *stack_addr;
uint32_t stack_size;
+ uint32_t flags;
};
/* for OSA in secure world */
diff --git a/drivers/marvell/security/mmp-tzdd/src/osa/osa_mem.c b/drivers/marvell/security/mmp-tzdd/src/osa/osa_mem.c
index f42318dbb81..8376a75d362 100644
--- a/drivers/marvell/security/mmp-tzdd/src/osa/osa_mem.c
+++ b/drivers/marvell/security/mmp-tzdd/src/osa/osa_mem.c
@@ -134,13 +134,15 @@ void __kernel *osa_kmem_alloc(uint32_t size)
OSA_ASSERT(size);
if (size < OSA_128K)
- return kmalloc(size, GFP_KERNEL);
+ return (void __kernel *)kmalloc(size, GFP_KERNEL);
else if (size <= KMEM_ALLOC_MAX_SIZE) {
struct page *page;
struct _pages_record *record;
void __kernel *ret;
- record = kmalloc(sizeof(struct _pages_record), GFP_KERNEL);
+ record =
+ (struct _pages_record *)
+ kmalloc(sizeof(struct _pages_record), GFP_KERNEL);
if (!record) {
osa_dbg_print(DBG_ERR,
"ERROR - failed to alloc a page record in osa_kmem_alloc\n");
@@ -296,7 +298,9 @@ void __kernel *osa_pages_alloc(uint32_t nr)
void *phys;
uint32_t i;
- record = kmalloc(sizeof(struct _pages_record), GFP_KERNEL);
+ record =
+ (struct _pages_record *)
+ kmalloc(sizeof(struct _pages_record), GFP_KERNEL);
if (!record) {
osa_dbg_print(DBG_ERR,
"ERROR - failed to alloc a page record in osa_pages_alloc\n");
@@ -318,8 +322,8 @@ void __kernel *osa_pages_alloc(uint32_t nr)
* remap_pfn_range works in the condition of
* PageReserved is set.
*/
- phys = (void *)(unsigned long)
- __virt_to_phys((unsigned long)ret);
+ phys = (void *)(ulong_t)
+ __virt_to_phys((ulong_t)ret);
for (i = 0; i < nr; i++) {
SetPageReserved(pfn_to_page
(((ulong_t) phys >> PAGE_SHIFT) + i));
@@ -372,7 +376,8 @@ void osa_pages_free(void __kernel *addr)
OSA_ASSERT(ptr != &_g_alloc_pages_list);
- phys = (void *)(unsigned long)__virt_to_phys((unsigned long)addr);
+ phys = (void *)(ulong_t)
+ __virt_to_phys((ulong_t)addr);
nr = record->size >> PAGE_SHIFT;
for (i = 0; i < nr; i++) {
ClearPageReserved(pfn_to_page
@@ -519,8 +524,8 @@ void *osa_alloc_phys_mem(uint32_t size, bool is_cached, uint32_t alignment,
*phys = NULL;
return NULL;
}
- alloc_phys_addr = (void *)(unsigned long)
- __virt_to_phys((unsigned long)alloc_virt_addr);
+ alloc_phys_addr = (void *)(ulong_t)
+ __virt_to_phys((ulong_t)alloc_virt_addr);
} else {
alloc_virt_addr =
dma_alloc_coherent(NULL, mem_blk_size,
@@ -741,6 +746,7 @@ static osa_err_t _virt_to_phys_by_pg_mapping_ex(struct mm_struct *mm,
pmd_t *pmd;
pte_t *pte;
ulong_t pfn;
+
#ifdef CONFIG_64BIT
uint64_t mair;
#else
@@ -1034,7 +1040,7 @@ void *osa_virt_to_phys_ex(void *virt_addr, bool *cacheable)
if (virt_addr < high_memory &&
(ulong_t) virt_addr >= PAGE_OFFSET) {
*cacheable = true;
- return (void *)(unsigned long)
+ return (void *)(ulong_t)
__virt_to_phys((ulong_t)virt_addr);
} else {
ret = _osa_virt_to_phys_by_cp15_ex((ulong_t)virt_addr, cacheable, &pa);
diff --git a/drivers/marvell/security/mmp-tzdd/src/osa/osa_sync.c b/drivers/marvell/security/mmp-tzdd/src/osa/osa_sync.c
index c92620070cd..f579be15366 100644
--- a/drivers/marvell/security/mmp-tzdd/src/osa/osa_sync.c
+++ b/drivers/marvell/security/mmp-tzdd/src/osa/osa_sync.c
@@ -261,6 +261,7 @@ osa_err_t osa_wait_for_sem(osa_sem_t handle, int32_t msec)
}
down(&(sem->sem));
+
sem_up = true;
if (msec > 0)
@@ -401,19 +402,17 @@ osa_err_t osa_wait_for_sem(osa_sem_t handle, int32_t msec)
OSA_ASSERT(sem && IS_SEM_VALID(sem));
if (0 == msec) {
-
ret = down_trylock(&(sem->sem));
- if (ret)
+ if (ret) {
return OSA_SEM_WAIT_FAILED;
- else
+ } else {
return OSA_OK;
-
+ }
} else if (msec > 0) {
-
ret = down_timeout(&(sem->sem), (msec * HZ + 500) / 1000);
- if (ret < 0)
+ if (ret < 0) {
return OSA_SEM_WAIT_TO;
-
+ }
} else
down(&(sem->sem));
@@ -491,7 +490,7 @@ static osa_mutex_t _osa_create_mutex(uint32_t init_val)
mutex = kmalloc(sizeof(struct _mutex), GFP_KERNEL);
if (!mutex) {
osa_dbg_print(DBG_ERR,
- "ERROR - failed to kmalloc in osa_create_mutex\n");
+ "ERROR - failed to kmalloc in osa_create_mutex\n");
return NULL;
}
diff --git a/drivers/marvell/security/mmp-tzdd/src/osa/osa_thread.c b/drivers/marvell/security/mmp-tzdd/src/osa/osa_thread.c
index f3859c1ad33..a263e6702e5 100644
--- a/drivers/marvell/security/mmp-tzdd/src/osa/osa_thread.c
+++ b/drivers/marvell/security/mmp-tzdd/src/osa/osa_thread.c
@@ -212,6 +212,9 @@ osa_thread_t osa_create_thread(void (*func) (void *), void *arg,
return ret;
}
+ if (attr->flags & OSA_PF_FREEZER_SKIP)
+ ret->task->flags |= attr->flags;
+
while (_THREAD_UNKNOWN == ret->status)
yield();