Thread (38 messages) 38 messages, 3 authors, 2024-01-05

Re: [PATCH v3 8/9] mailbox: mediatek: Add CMDQ secure mailbox driver

From: Jason-JH Lin (林睿祥) <hidden>
Date: 2024-01-03 06:53:44
Also in: linux-devicetree, linux-media, linux-mediatek, lkml

On Thu, 2023-12-28 at 01:38 +0000, CK Hu (胡俊光) wrote:
On Wed, 2023-12-27 at 07:25 +0000, Jason-JH Lin (林睿祥) wrote:
quoted
Hi CK,

Thanks for the reviews.

On Tue, 2023-12-26 at 08:58 +0000, CK Hu (胡俊光) wrote:
quoted
Hi, Jason:

On Fri, 2023-12-22 at 12:52 +0800, Jason-JH.Lin wrote:
quoted
To support secure video path feature, GCE have to read/write
registgers
in the secure world. GCE will enable the secure access
permission
to
the
HW who wants to access the secure content buffer.

Add CMDQ secure mailbox driver to make CMDQ client user is able
to
sending their HW settings to the secure world. So that GCE can
execute
all instructions to configure HW in the secure world.

Signed-off-by: Jason-JH.Lin <redacted>
---
[snip]
quoted
+
+static int cmdq_sec_fill_iwc_msg(struct cmdq_sec_context
*context,
+				 struct cmdq_sec_task
*sec_task, u32
thrd_idx)
+{
+	struct iwc_cmdq_message_t *iwc_msg = NULL;
+	struct cmdq_sec_data *data = (struct cmdq_sec_data
*)sec_task-
quoted
task.pkt->sec_data;
+	u32 size = 0, offset = 0, *instr;
+
+	iwc_msg = (struct iwc_cmdq_message_t *)context-
quoted
iwc_msg;
+
+	if (sec_task->task.pkt->cmd_buf_size + 4 *
CMDQ_INST_SIZE >
CMDQ_TZ_CMD_BLOCK_SIZE) {
+		pr_err("sec_task:%p size:%zu > %u",
+		       sec_task, sec_task->task.pkt-
quoted
cmd_buf_size,
CMDQ_TZ_CMD_BLOCK_SIZE);
+		return -EFAULT;
+	}
+
+	if (thrd_idx == CMDQ_INVALID_THREAD) {
+		iwc_msg->command.cmd_size = 0;
+		iwc_msg->command.metadata.addr_list_length = 0;
+		return -EINVAL;
+	}
+
+	iwc_msg->command.thread = thrd_idx;
+	iwc_msg->command.scenario = sec_task->scenario;
+	iwc_msg->command.eng_flag = sec_task->engine_flag;
+	size = sec_task->task.pkt->cmd_buf_size;
+	memcpy(iwc_msg->command.va_base + offset, sec_task-
quoted
task.pkt-
va_base, size);
I think it's not necessary to copy from normal command buffer to
normal
command buffer. Just

iwc_msg->command.va_base = sec_task->task.pkt->va_base;

You have a secure command buffer for secure gce to execute
command.
If
you want to modify command buffer, copy from normal command
buffer
to
secure command buffer, and modify the secure command buffer.

Regards,
CK
I think secure world won't recognize normal world's va, so we nee
to
copy to iwc_msg->command.va_base, which is a world share memory
first.
Referring to cmdq_sec_allocate_wsm(), any kernel buffer could use
tee_shm_register_kernel_buf() to become share buffer between normal
world and secure world. In client driver, use
tee_client_open_context()
to create tee context and register normal command buffer to be share
buffer. This would reduce the redundant memory copy.

Regards,
CK
OK, I'll try to register normal cmd buffer to share memory.

Regards,
Jason-JH.Lin
quoted
Regards,
Jason-JH.Lin
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help