Merge in brillo-m7-mr-dev history after reset to 52909b4b3a1c8058883d6537e1b968a3c47f394e
diff --git a/arch/arm/configs/abox_edge_defconfig b/arch/arm/configs/abox_edge_defconfig
old mode 100644
new mode 100755
index 0891dd3..62fe358
--- a/arch/arm/configs/abox_edge_defconfig
+++ b/arch/arm/configs/abox_edge_defconfig
@@ -2573,7 +2573,7 @@
 # CONFIG_USB_GADGET_DEBUG is not set
 # CONFIG_USB_GADGET_DEBUG_FILES is not set
 # CONFIG_USB_GADGET_DEBUG_FS is not set
-CONFIG_USB_GADGET_CHARGE_ONLY=y
+# CONFIG_USB_GADGET_CHARGE_ONLY is not set
 CONFIG_USB_GADGET_VBUS_DRAW=2
 CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2
 
@@ -2591,9 +2591,17 @@
 # CONFIG_USB_NET2272 is not set
 # CONFIG_USB_DUMMY_HCD is not set
 CONFIG_USB_LIBCOMPOSITE=y
-CONFIG_USB_F_ACM=y
 CONFIG_USB_U_SERIAL=y
-# CONFIG_USB_CONFIGFS is not set
+CONFIG_USB_U_ETHER=y
+CONFIG_USB_F_SERIAL=y
+CONFIG_USB_F_FS=y
+CONFIG_USB_CONFIGFS=y
+CONFIG_USB_CONFIGFS_SERIAL=y
+# CONFIG_USB_CONFIGFS_ACM is not set
+# CONFIG_USB_CONFIGFS_OBEX is not set
+# CONFIG_USB_CONFIGFS_NCM is not set
+# CONFIG_USB_CONFIGFS_F_LB_SS is not set
+CONFIG_USB_CONFIGFS_F_FS=y
 # CONFIG_USB_ZERO is not set
 # CONFIG_USB_AUDIO is not set
 # CONFIG_USB_ETH is not set
@@ -2604,8 +2612,7 @@
 # CONFIG_USB_G_SERIAL is not set
 # CONFIG_USB_MIDI_GADGET is not set
 # CONFIG_USB_G_PRINTER is not set
-CONFIG_USB_G_ANDROID=y
-# CONFIG_USB_ANDROID_RNDIS_DWORD_ALIGNED is not set
+# CONFIG_USB_G_ANDROID is not set
 # CONFIG_USB_CDC_COMPOSITE is not set
 # CONFIG_USB_G_ACM_MS is not set
 # CONFIG_USB_G_MULTI is not set
@@ -3055,7 +3062,7 @@
 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 dcb493b..f8a98e1e 100644
--- a/drivers/marvell/security/mmp-tzdd/src/Makefile
+++ b/drivers/marvell/security/mmp-tzdd/src/Makefile
@@ -14,7 +14,7 @@
 # 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
old mode 100644
new mode 100755
index 7d42d28..1320919
--- 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 9691230..851cb23 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 @@
 
 	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 c3f1eba..70d4854 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 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 @@
 
 	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 20c0fc8..f0876fc 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_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 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 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 @@
 
 	get_user(val, buf);
 	switch (val) {
-	case '1':
-		_g_tee_dbg_log_ctl_header->enable = _TEE_DBG_PROC_ENABLE;
-		g_proc_log_eanbled = true;
-		break;
 	case '0':
-		_g_tee_dbg_log_ctl_header->enable = 0;
-		g_proc_log_eanbled = false;
+		_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->level = _TEE_DBG_PROC_LEVEL1;
+		g_proc_log_level = 1;
+		break;
+	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 f7b1777..d49dfcd 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_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 5d46427..6ef71fe 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 @@
     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 7aa8c65..4017395 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 @@
 			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 57b5751..76de7e3 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 3a1dc80..44ba47b 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 @@
  */
 
 #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 a71a4e8..0b69fa7f 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_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 @@
 	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 @@
 			}
 			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 @@
 			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 @@
 				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 6294d83..e2ac96d 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 @@
 /* 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 0b01892..faba46e 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 f42318d..8376a75 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 @@
 	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 *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 @@
 		 * 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 @@
 
 	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 @@
 			*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 @@
 	pmd_t *pmd;
 	pte_t *pte;
 	ulong_t pfn;
+
 #ifdef CONFIG_64BIT
 	uint64_t mair;
 #else
@@ -1034,7 +1040,7 @@
 	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 c926200..f579be1 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 @@
 	}
 
 	down(&(sem->sem));
+
 	sem_up = true;
 
 	if (msec > 0)
@@ -401,19 +402,17 @@
 	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 @@
 	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 f3859c1..a263e67 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 @@
 		return ret;
 	}
 
+	if (attr->flags & OSA_PF_FREEZER_SKIP)
+		ret->task->flags |= attr->flags;
+
 	while (_THREAD_UNKNOWN == ret->status)
 		yield();