Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 535ce985 authored by Ming-Fan Chen's avatar Ming-Fan Chen Committed by Jacky Chen
Browse files

[ALPS05452570] cmdq: define MAX_TASK/CMD_SIZE for each thread



define MAX_TASK/CMD_SIZE for each thread

MTK-Commit-Id: f63f5c9c57d8d1bdb44508f570821cae361bdf90

Change-Id: Ib29d40ee42958ead97a473c7389e30731013bad1
Feature: [Module]CMDQ Driver
CR-Id: ALPS05452570
Signed-off-by: default avatarMing-Fan Chen <ming-fan.chen@mediatek.com>
parent 8371d74d
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -72,7 +72,7 @@
#define CMDQ_MAX_INST_CYCLE             (27)
#define CMDQ_MAX_ERROR_SIZE             (8 * 1024)

#define CMDQ_MAX_TASK_IN_SECURE_THREAD	(3)
#define CMDQ_MAX_TASK_IN_SECURE_THREAD_MAX (10)

/* max value of CMDQ_THR_EXEC_CMD_CNT (value starts from 0) */
#ifdef CMDQ_USE_LARGE_MAX_COOKIE
+36 −15
Original line number Diff line number Diff line
@@ -101,7 +101,7 @@ struct cmdq_sec_thread {
	u32			wait_cookie;
	u32			next_cookie;
	u32			task_cnt;
	struct cmdq_task	*task_list[CMDQ_MAX_TASK_IN_SECURE_THREAD];
	struct cmdq_task	*task_list[CMDQ_MAX_TASK_IN_SECURE_THREAD_MAX];
	struct workqueue_struct *task_exec_wq;
	struct timer_list	timeout;
	struct work_struct	timeout_work;
@@ -125,6 +125,19 @@ struct cmdq {
/* TODO: should be removed? */
static struct cmdq *g_cmdq;

#if IS_ENABLED(CONFIG_MACH_MT6779) || IS_ENABLED(CONFIG_MACH_MT6785)
static const s32 cmdq_max_task_in_secure_thread[
	CMDQ_MAX_SECURE_THREAD_COUNT] = {10, 10, 4, 10};
static const s32 cmdq_tz_cmd_block_size[CMDQ_MAX_SECURE_THREAD_COUNT] = {
	4 << 12, 4 << 12, 20 << 12, 4 << 12};
#else
static const s32 cmdq_max_task_in_secure_thread[
	CMDQ_MAX_SECURE_THREAD_COUNT] = {10, 10, 4};
static const s32 cmdq_tz_cmd_block_size[CMDQ_MAX_SECURE_THREAD_COUNT] = {
	4 << 12, 4 << 12, 20 << 12};
#endif


const u32 isp_iwc_buf_size[] = {
	CMDQ_SEC_ISP_CQ_SIZE,
	CMDQ_SEC_ISP_VIRT_SIZE,
@@ -445,9 +458,10 @@ s32 cmdq_sec_fill_iwc_command_msg_unlocked(

	/* check command size first */
	if ((task->pkt->cmd_buf_size + reserve_cmd_size) >
		CMDQ_TZ_CMD_BLOCK_SIZE) {
		cmdq_tz_cmd_block_size[thread - CMDQ_MIN_SECURE_THREAD_ID]) {
		CMDQ_ERR("[SEC]SESSION_MSG: task %p size %zu > %d\n",
			task, task->pkt->cmd_buf_size, CMDQ_TZ_CMD_BLOCK_SIZE);
			task, task->pkt->cmd_buf_size, cmdq_tz_cmd_block_size[
			thread - CMDQ_MIN_SECURE_THREAD_ID]);
		return -EFAULT;
	}

@@ -1358,7 +1372,8 @@ static s32 cmdq_sec_remove_handle_from_thread_by_cookie(
{
	struct cmdq_task *task;

	if (!thread || index < 0 || index >= CMDQ_MAX_TASK_IN_SECURE_THREAD) {
	if (!thread || index < 0 || index >= cmdq_max_task_in_secure_thread[
		thread->idx - CMDQ_MIN_SECURE_THREAD_ID]) {
		CMDQ_ERR(
			"remove task from thread array, invalid param THR:0x%p task_slot:%d\n",
			thread, index);
@@ -1482,7 +1497,8 @@ s32 cmdq_sec_handle_wait_result_impl(struct cmdqRecStruct *handle, s32 thread,
		/* remove all tasks in tread since we have reset HW thread
		 * in SWd
		 */
		for (i = 0; i < CMDQ_MAX_TASK_IN_SECURE_THREAD; i++) {
		for (i = 0; i < cmdq_max_task_in_secure_thread[
			thread - CMDQ_MIN_SECURE_THREAD_ID]; i++) {
			struct cmdq_task *task = thread_context->task_list[i];

			if (!task)
@@ -1862,13 +1878,15 @@ static s32 cmdq_sec_insert_handle_from_thread_array_by_cookie(
		thread->task_cnt++;
	}

	thread->task_list[cookie % CMDQ_MAX_TASK_IN_SECURE_THREAD] = task;
	thread->task_list[cookie % cmdq_max_task_in_secure_thread[
		thread->idx - CMDQ_MIN_SECURE_THREAD_ID]] = task;
	task->handle->secData.waitCookie = cookie;
	task->handle->secData.resetExecCnt = reset_thread;

	CMDQ_MSG("%s leave task:0x%p handle:0x%p insert with idx:%d\n",
		__func__, task, task->handle,
		cookie % CMDQ_MAX_TASK_IN_SECURE_THREAD);
		cookie % cmdq_max_task_in_secure_thread[
		thread->idx - CMDQ_MIN_SECURE_THREAD_ID]);

	return 0;
}
@@ -2023,7 +2041,8 @@ static bool cmdq_sec_thread_timeout_excceed(struct cmdq_sec_thread *thread)
	s32 i, last_idx;
	CMDQ_TIME last_trigger = 0;

	for (i = CMDQ_MAX_TASK_IN_SECURE_THREAD - 1; i >= 0; i--) {
	for (i = cmdq_max_task_in_secure_thread[
		thread->idx - CMDQ_MIN_SECURE_THREAD_ID] - 1; i >= 0; i--) {
		/* task put in array from index 1 */
		if (!thread->task_list[i])
			continue;
@@ -2061,7 +2080,8 @@ static bool cmdq_sec_task_list_empty(struct cmdq_sec_thread *thread)
{
	u32 i;

	for (i = 0; i < CMDQ_MAX_TASK_IN_SECURE_THREAD; i++) {
	for (i = 0; i < cmdq_max_task_in_secure_thread[
		thread->idx - CMDQ_MIN_SECURE_THREAD_ID]; i++) {
		if (thread->task_list[i])
			return false;
	}
@@ -2085,7 +2105,8 @@ static void cmdq_sec_thread_irq_handle_by_cookie(
{
	u32 task_done_cnt, i;
	unsigned long flags;
	u32 max_task_cnt = CMDQ_MAX_TASK_IN_SECURE_THREAD;
	u32 max_task_cnt = cmdq_max_task_in_secure_thread[
		thread->idx - CMDQ_MIN_SECURE_THREAD_ID];
	struct cmdq_task *task;

	spin_lock_irqsave(&cmdq_sec_task_list_lock, flags);
@@ -2132,7 +2153,7 @@ static void cmdq_sec_thread_irq_handle_by_cookie(
		/* remove all task */
		struct cmdq_task *tmp;

		for (i = 0; i < CMDQ_MAX_TASK_IN_SECURE_THREAD; i++) {
		for (i = 0; i < max_task_cnt; i++) {
			if (!thread->task_list[i])
				continue;

@@ -2168,8 +2189,7 @@ static void cmdq_sec_thread_irq_handle_by_cookie(
		/* min cookie value is 0 */
		thread->wait_cookie -= (CMDQ_MAX_COOKIE_VALUE + 1);
	}
	task = thread->task_list[thread->wait_cookie %
		CMDQ_MAX_TASK_IN_SECURE_THREAD];
	task = thread->task_list[thread->wait_cookie % max_task_cnt];

	if (task) {
		mod_timer(&thread->timeout,
@@ -2179,7 +2199,7 @@ static void cmdq_sec_thread_irq_handle_by_cookie(

		CMDQ_ERR("%s task is empty, wait cookie:%d dump for sure\n",
			__func__, thread->wait_cookie);
		for (i = 0; i < CMDQ_MAX_TASK_IN_SECURE_THREAD; i++) {
		for (i = 0; i < max_task_cnt; i++) {
			task = thread->task_list[i];
			if (task)
				CMDQ_LOG(
@@ -2227,7 +2247,8 @@ static void cmdq_sec_task_timeout_work(struct work_struct *work_item)

	cookie = cmdq_sec_get_secure_thread_exec_counter(thread->idx);
	timeout_task = thread->task_list[(cookie + 1) %
		CMDQ_MAX_TASK_IN_SECURE_THREAD];
		cmdq_max_task_in_secure_thread[
		thread->idx - CMDQ_MIN_SECURE_THREAD_ID]];

	wait_cookie = thread->wait_cookie;

+1 −3
Original line number Diff line number Diff line
@@ -17,9 +17,7 @@
#define CMDQ_SEC_SHARED_RESET_CNT		0x308

/* commanad buffer & metadata */
#define CMDQ_TZ_CMD_BLOCK_SIZE	 (79 * 1024)

#define CMDQ_IWC_MAX_CMD_LENGTH (CMDQ_TZ_CMD_BLOCK_SIZE / 4)
#define CMDQ_IWC_MAX_CMD_LENGTH (5 << 12)

#define CMDQ_IWC_MAX_ADDR_LIST_LENGTH (30)