<div dir="ltr"><div>LGTM to few nits. </div><div><br></div><div dir="ltr"><div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">Thanks,<div>Steve</div></div></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Oct 28, 2021 at 8:56 PM Yunfei Dong <<a href="mailto:yunfei.dong@mediatek.com">yunfei.dong@mediatek.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">There are just one core thread, in order to separeate different<br>
hardware, using codec type to separeate it in scp driver.<br></blockquote><div>s/There are/There is/ ?</div><div>s/separeate/separate/ ?</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Signed-off-by: Yunfei Dong <<a href="mailto:yunfei.dong@mediatek.com" target="_blank">yunfei.dong@mediatek.com</a>><br>
Reviewed-By: AngeloGioacchino Del Regno <<a href="mailto:angelogioacchino.delregno@collabora.com" target="_blank">angelogioacchino.delregno@collabora.com</a>><br>
---<br>
.../media/platform/mtk-vcodec/vdec_ipi_msg.h | 12 ++++---<br>
.../media/platform/mtk-vcodec/vdec_vpu_if.c | 34 ++++++++++++++++---<br>
.../media/platform/mtk-vcodec/vdec_vpu_if.h | 4 +++<br>
3 files changed, 41 insertions(+), 9 deletions(-)<br>
<br>
diff --git a/drivers/media/platform/mtk-vcodec/vdec_ipi_msg.h b/drivers/media/platform/mtk-vcodec/vdec_ipi_msg.h<br>
index 9d8079c4f976..c488f0c40190 100644<br>
--- a/drivers/media/platform/mtk-vcodec/vdec_ipi_msg.h<br>
+++ b/drivers/media/platform/mtk-vcodec/vdec_ipi_msg.h<br>
@@ -35,6 +35,8 @@ enum vdec_ipi_msgid {<br>
* @msg_id : vdec_ipi_msgid<br>
* @vpu_inst_addr : VPU decoder instance address. Used if ABI version < 2.<br>
* @inst_id : instance ID. Used if the ABI version >= 2.<br>
+ * @codec_type : Codec fourcc<br>
+ * @reserved : reserved param<br></blockquote><div>nit: s/Codec/codec/ and other places too.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
*/<br>
struct vdec_ap_ipi_cmd {<br>
uint32_t msg_id;<br>
@@ -42,6 +44,8 @@ struct vdec_ap_ipi_cmd {<br>
uint32_t vpu_inst_addr;<br>
uint32_t inst_id;<br>
};<br>
+ uint32_t codec_type;<br>
+ uint32_t reserved;<br>
};<br>
<br>
/**<br>
@@ -59,12 +63,12 @@ struct vdec_vpu_ipi_ack {<br>
/**<br>
* struct vdec_ap_ipi_init - for AP_IPIMSG_DEC_INIT<br>
* @msg_id : AP_IPIMSG_DEC_INIT<br>
- * @reserved : Reserved field<br>
+ * @codec_type : Codec fourcc<br>
* @ap_inst_addr : AP video decoder instance address<br>
*/<br>
struct vdec_ap_ipi_init {<br>
uint32_t msg_id;<br>
- uint32_t reserved;<br>
+ uint32_t codec_type;<br>
uint64_t ap_inst_addr;<br>
};<br>
<br>
@@ -77,7 +81,7 @@ struct vdec_ap_ipi_init {<br>
* H264 decoder [0]:buf_sz [1]:nal_start<br>
* VP8 decoder [0]:width/height<br>
* VP9 decoder [0]:profile, [1][2] width/height<br>
- * @reserved : Reserved field<br>
+ * @codec_type : Codec fourcc<br>
*/<br>
struct vdec_ap_ipi_dec_start {<br>
uint32_t msg_id;<br>
@@ -86,7 +90,7 @@ struct vdec_ap_ipi_dec_start {<br>
uint32_t inst_id;<br>
};<br>
uint32_t data[3];<br>
- uint32_t reserved;<br>
+ uint32_t codec_type;<br>
};<br>
<br>
/**<br>
diff --git a/drivers/media/platform/mtk-vcodec/vdec_vpu_if.c b/drivers/media/platform/mtk-vcodec/vdec_vpu_if.c<br>
index bfd8e87dceff..c84fac52fe26 100644<br>
--- a/drivers/media/platform/mtk-vcodec/vdec_vpu_if.c<br>
+++ b/drivers/media/platform/mtk-vcodec/vdec_vpu_if.c<br>
@@ -100,18 +100,29 @@ static void vpu_dec_ipi_handler(void *data, unsigned int len, void *priv)<br>
<br>
static int vcodec_vpu_send_msg(struct vdec_vpu_inst *vpu, void *msg, int len)<br>
{<br>
- int err;<br>
+ int err, id, msgid;<br>
<br>
- mtk_vcodec_debug(vpu, "id=%X", *(uint32_t *)msg);<br>
+ msgid = *(uint32_t *)msg;<br>
+ mtk_vcodec_debug(vpu, "id=%X", msgid);<br>
<br>
vpu->failure = 0;<br>
vpu->signaled = 0;<br>
<br>
- err = mtk_vcodec_fw_ipi_send(vpu->ctx->dev->fw_handler, vpu->id, msg,<br>
+ if (vpu->ctx->dev->vdec_pdata->hw_arch == MTK_VDEC_LAT_SINGLE_CORE) {<br>
+ if (msgid == AP_IPIMSG_DEC_CORE ||<br>
+ msgid == AP_IPIMSG_DEC_CORE_END)<br>
+ id = vpu->core_id;<br>
+ else<br>
+ id = vpu->id;<br>
+ } else {<br>
+ id = vpu->id;<br>
+ }<br>
+<br>
+ err = mtk_vcodec_fw_ipi_send(vpu->ctx->dev->fw_handler, id, msg,<br>
len, 2000);<br>
if (err) {<br>
mtk_vcodec_err(vpu, "send fail vpu_id=%d msg_id=%X status=%d",<br>
- vpu->id, *(uint32_t *)msg, err);<br>
+ id, msgid, err);<br>
return err;<br>
}<br>
<br>
@@ -131,6 +142,7 @@ static int vcodec_send_ap_ipi(struct vdec_vpu_inst *vpu, unsigned int msg_id)<br>
msg.vpu_inst_addr = vpu->inst_addr;<br>
else<br>
msg.inst_id = vpu->inst_id;<br>
+ msg.codec_type = vpu->codec_type;<br>
<br>
err = vcodec_vpu_send_msg(vpu, &msg, sizeof(msg));<br>
mtk_vcodec_debug(vpu, "- id=%X ret=%d", msg_id, err);<br>
@@ -149,14 +161,25 @@ int vpu_dec_init(struct vdec_vpu_inst *vpu)<br>
<br>
err = mtk_vcodec_fw_ipi_register(vpu->ctx->dev->fw_handler, vpu->id,<br>
vpu->handler, "vdec", NULL);<br>
- if (err != 0) {<br>
+ if (err) {<br>
mtk_vcodec_err(vpu, "vpu_ipi_register fail status=%d", err);<br>
return err;<br>
}<br>
<br>
+ if (vpu->ctx->dev->vdec_pdata->hw_arch == MTK_VDEC_LAT_SINGLE_CORE) {<br>
+ err = mtk_vcodec_fw_ipi_register(vpu->ctx->dev->fw_handler,<br>
+ vpu->core_id, vpu->handler,<br>
+ "vdec", NULL);<br>
+ if (err) {<br>
+ mtk_vcodec_err(vpu, "vpu_ipi_register core fail status=%d", err);<br>
+ return err;<br>
+ }<br>
+ }<br>
+<br>
memset(&msg, 0, sizeof(msg));<br>
msg.msg_id = AP_IPIMSG_DEC_INIT;<br>
msg.ap_inst_addr = (unsigned long)vpu;<br>
+ msg.codec_type = vpu->codec_type;<br>
<br>
mtk_vcodec_debug(vpu, "vdec_inst=%p", vpu);<br>
<br>
@@ -187,6 +210,7 @@ int vpu_dec_start(struct vdec_vpu_inst *vpu, uint32_t *data, unsigned int len)<br>
<br>
for (i = 0; i < len; i++)<br>
msg.data[i] = data[i];<br>
+ msg.codec_type = vpu->codec_type;<br>
<br>
err = vcodec_vpu_send_msg(vpu, (void *)&msg, sizeof(msg));<br>
mtk_vcodec_debug(vpu, "- ret=%d", err);<br>
diff --git a/drivers/media/platform/mtk-vcodec/vdec_vpu_if.h b/drivers/media/platform/mtk-vcodec/vdec_vpu_if.h<br>
index ae24b75d1649..802660770a87 100644<br>
--- a/drivers/media/platform/mtk-vcodec/vdec_vpu_if.h<br>
+++ b/drivers/media/platform/mtk-vcodec/vdec_vpu_if.h<br>
@@ -14,6 +14,7 @@ struct mtk_vcodec_ctx;<br>
/**<br>
* struct vdec_vpu_inst - VPU instance for video codec<br>
* @id : ipi msg id for each decoder<br>
+ * @core_id : core id used to separate different hardware<br>
* @vsi : driver structure allocated by VPU side and shared to AP side<br>
* for control and info share<br>
* @failure : VPU execution result status, 0: success, others: fail<br>
@@ -26,9 +27,11 @@ struct mtk_vcodec_ctx;<br>
* @dev : platform device of VPU<br>
* @wq : wait queue to wait VPU message ack<br>
* @handler : ipi handler for each decoder<br>
+ * @codec_type : used codec type to separate different codecs<br></blockquote><div><br></div><div>nit: s/used/use/ ?</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
*/<br>
struct vdec_vpu_inst {<br>
int id;<br>
+ int core_id;<br>
void *vsi;<br>
int32_t failure;<br>
uint32_t inst_addr;<br>
@@ -38,6 +41,7 @@ struct vdec_vpu_inst {<br>
struct mtk_vcodec_ctx *ctx;<br>
wait_queue_head_t wq;<br>
mtk_vcodec_ipi_handler handler;<br>
+ unsigned int codec_type;<br>
};<br>
<br>
/**<br>
-- <br>
2.25.1<br>
<br>
</blockquote></div></div>