<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>