From nobody Sat Oct 4 16:21:31 2025 Received: from mailgw02.mediatek.com (unknown [210.61.82.184]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5D4042571B3; Fri, 15 Aug 2025 08:52:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=210.61.82.184 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755247979; cv=none; b=XoBaM6z71ZUKnXJXwtpPbFFMDebKl8Aj0kYxsj+gd8UJVTC8uNhhgPSBmug1nbXpwc3v5EdTcjTqosEFSVKDgrbPnfD6ngyMPonGtJHTF1XSj6E41ynOcKDggfvxf4rl3fLE7ubH57szt5J+b4Rvopgi3KTu7lhNRSpNj2cJZgE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755247979; c=relaxed/simple; bh=y55cH+n8fsfM5YU30pqBKSb/fzcSJI5THd/W1aUZON8=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Dzj67ii23GB65iAgvO3TO0FuR+tV9izHaN4Am0dwv6sgHaJkxtbwMJFfFYww0Cf9dmjSIGmO9k9vq+aZBC86yKJssO/kkpU3Re6CVAci9PuoKmm6UZ4gfTRcLGH/nfnENeIiT2sVJTbNOm46gVGFq5+UkOW2afOssKH7j0oqwhU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=mediatek.com; spf=pass smtp.mailfrom=mediatek.com; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b=ok70Ssz3; arc=none smtp.client-ip=210.61.82.184 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=mediatek.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=mediatek.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="ok70Ssz3" X-UUID: 39a1f69479b511f0b33aeb1e7f16c2b6-20250815 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Type:Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:CC:To:From; bh=iwv68IX6IaU+yhiOJPpA8jWaUloaLYVprrgMDaMld2M=; b=ok70Ssz3mofMveDDp4Zu1LbqU+wJxDFpyBhwnyFw/dYSpzhxx4IcjR8BG7oaV3hdZfgIByQ/oKqi2Ep3CFC4YPMEDwJ13+rlkQvgrXX31HeYihzsDWIFatiEOVMy5YORK8MyHe6s1DbgPVmutUXSF/sFc1RzlzpyVE6F73gQHF0=; X-CID-P-RULE: Release_Ham X-CID-O-INFO: VERSION:1.3.3,REQID:4faf6635-3ae3-4bad-88e0-c61d904374c2,IP:0,UR L:0,TC:0,Content:-5,EDM:0,RT:0,SF:0,FILE:0,BULK:0,RULE:Release_Ham,ACTION: release,TS:-5 X-CID-META: VersionHash:f1326cf,CLOUDID:4345f7f3-66cd-4ff9-9728-6a6f64661009,B ulkID:nil,BulkQuantity:0,Recheck:0,SF:81|82|102,TC:-5,Content:0|15|50,EDM: -3,IP:nil,URL:0,File:nil,RT:nil,Bulk:nil,QS:nil,BEC:nil,COL:0,OSI:0,OSA:0, AV:0,LES:1,SPR:NO,DKR:0,DKP:0,BRR:0,BRE:0,ARC:0 X-CID-BVR: 2,SSN|SDN X-CID-BAS: 2,SSN|SDN,0,_ X-CID-FACTOR: TF_CID_SPAM_SNR X-CID-RHF: D41D8CD98F00B204E9800998ECF8427E X-UUID: 39a1f69479b511f0b33aeb1e7f16c2b6-20250815 Received: from mtkmbs14n1.mediatek.inc [(172.21.101.75)] by mailgw02.mediatek.com (envelope-from ) (Generic MTA with TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 256/256) with ESMTP id 2105211070; Fri, 15 Aug 2025 16:52:51 +0800 Received: from mtkmbs13n2.mediatek.inc (172.21.101.108) by MTKMBS14N1.mediatek.inc (172.21.101.75) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1258.39; Fri, 15 Aug 2025 16:52:49 +0800 Received: from mhfsdcap04.gcn.mediatek.inc (10.17.3.154) by mtkmbs13n2.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.2.1258.39 via Frontend Transport; Fri, 15 Aug 2025 16:52:48 +0800 From: Yunfei Dong To: =?UTF-8?q?N=C3=ADcolas=20F=20=2E=20R=20=2E=20A=20=2E=20Prado?= , Sebastian Fricke , Nicolas Dufresne , Hans Verkuil , AngeloGioacchino Del Regno , Benjamin Gaignard , Nathan Hebert , Daniel Almeida CC: Hsin-Yi Wang , Fritz Koenig , Daniel Vetter , Steve Cho , Yunfei Dong , , , , , , Subject: [PATCH v2 04/14] media: mediatek: vcodec: add driver to support vcp encoder Date: Fri, 15 Aug 2025 16:52:17 +0800 Message-ID: <20250815085232.30240-5-yunfei.dong@mediatek.com> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20250815085232.30240-1-yunfei.dong@mediatek.com> References: <20250815085232.30240-1-yunfei.dong@mediatek.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-MTK: N Content-Type: text/plain; charset="utf-8" Encoder also need to call vcp interface to communicate with vcp, add driver to support encoder. Signed-off-by: Yunfei Dong --- .../vcodec/common/mtk_vcodec_fw_vcp.c | 40 +++++++++++++++---- .../vcodec/common/mtk_vcodec_fw_vcp.h | 1 + .../mediatek/vcodec/encoder/mtk_vcodec_enc.c | 1 - .../mediatek/vcodec/encoder/mtk_vcodec_enc.h | 2 + 4 files changed, 36 insertions(+), 8 deletions(-) diff --git a/drivers/media/platform/mediatek/vcodec/common/mtk_vcodec_fw_vc= p.c b/drivers/media/platform/mediatek/vcodec/common/mtk_vcodec_fw_vcp.c index 227310c116c6..c9e5cde40aef 100644 --- a/drivers/media/platform/mediatek/vcodec/common/mtk_vcodec_fw_vcp.c +++ b/drivers/media/platform/mediatek/vcodec/common/mtk_vcodec_fw_vcp.c @@ -13,6 +13,8 @@ =20 #include "../decoder/mtk_vcodec_dec_drv.h" #include "../decoder/vdec_ipi_msg.h" +#include "../encoder/mtk_vcodec_enc.h" +#include "../encoder/mtk_vcodec_enc_drv.h" #include "mtk_vcodec_fw_priv.h" =20 #define IPI_SEND_TIMEOUT_MS 100U @@ -189,8 +191,8 @@ static int mtk_vcodec_vcp_msg_ipi_send(struct mtk_vcode= c_fw *fw, int id, void *b } =20 mutex_lock(msg_mutex); - feature_id =3D VDEC_FEATURE_ID; - mailbox_id =3D IPI_OUT_VDEC_1; + feature_id =3D (fw->fw_use =3D=3D ENCODER) ? VENC_FEATURE_ID : VDEC_FEATU= RE_ID; + mailbox_id =3D (fw->fw_use =3D=3D ENCODER) ? IPI_OUT_VENC_0 : IPI_OUT_VDE= C_1; =20 timeout_jiffies =3D jiffies + msecs_to_jiffies(VCP_SYNC_TIMEOUT_MS); while (!vcp_device->ops->vcp_is_ready(feature_id)) { @@ -300,10 +302,10 @@ static int mtk_vcodec_vcp_load_firmware(struct mtk_vc= odec_fw *fw) =20 vcp_device =3D fw->vcp->vcp_device; =20 - feature_id =3D VDEC_FEATURE_ID; - mem_id =3D VDEC_MEM_ID; - mailbox_id =3D IPI_IN_VDEC_1; - ipi_id =3D VCP_IPI_LAT_DECODER; + feature_id =3D fw->fw_use =3D=3D ENCODER ? VENC_FEATURE_ID : VDEC_FEATURE= _ID; + mem_id =3D fw->fw_use =3D=3D ENCODER ? VENC_MEM_ID : VDEC_MEM_ID; + mailbox_id =3D fw->fw_use =3D=3D ENCODER ? IPI_IN_VENC_0 : IPI_IN_VDEC_1; + ipi_id =3D fw->fw_use =3D=3D ENCODER ? VCP_IPI_ENCODER : VCP_IPI_LAT_DECO= DER; =20 ret =3D mtk_vcp_mbox_ipc_register(vcp_get_ipidev(vcp_device), mailbox_id, mtk_vcodec_vcp_msg_ack_isr, fw, &fw->vcp->share_data); @@ -322,6 +324,20 @@ static int mtk_vcodec_vcp_load_firmware(struct mtk_vco= dec_fw *fw) mutex_init(&fw->vcp->ipi_desc[ipi_id].lock); mutex_init(&fw->vcp->ipi_mutex); =20 + if (fw->fw_use =3D=3D ENCODER) { + kthread_run(mtk_vcodec_vcp_msg_process_thread, fw, "vcp_enc_msq_thread"); + + fw->vcp->vsi_addr =3D vcp_device->ops->vcp_get_mem_virt(mem_id); + fw->vcp->vsi_size =3D vcp_device->ops->vcp_get_mem_size(mem_id); + fw->vcp->iova_addr =3D vcp_device->ops->vcp_get_mem_iova(mem_id); + + dev_dbg(&fw->pdev->dev, "enc vcp init done =3D> va: %p size:0x%x iova:%p= ad.\n", + fw->vcp->vsi_addr, fw->vcp->vsi_size, &fw->vcp->iova_addr); + + init_waitqueue_head(&fw->vcp->msg_wq[VCP_IPI_ENCODER]); + return 0; + } + kthread_run(mtk_vcodec_vcp_msg_process_thread, fw, "vcp_vdec_msq_thread"); =20 fw->vcp->vsi_addr =3D vcp_device->ops->vcp_get_mem_virt(mem_id); @@ -345,6 +361,11 @@ static unsigned int mtk_vcodec_vcp_get_vdec_capa(struc= t mtk_vcodec_fw *fw) MTK_VDEC_IS_SUPPORT_10BIT | MTK_VDEC_IS_SUPPORT_EXT; } =20 +static unsigned int mtk_vcodec_vcp_get_venc_capa(struct mtk_vcodec_fw *fw) +{ + return MTK_VENC_4K_CAPABILITY_ENABLE; +} + static void *mtk_vcodec_vcp_dm_addr(struct mtk_vcodec_fw *fw, u32 dtcm_dme= m_addr) { return NULL; @@ -396,6 +417,7 @@ static void mtk_vcodec_vcp_release(struct mtk_vcodec_fw= *fw) static const struct mtk_vcodec_fw_ops mtk_vcodec_vcp_msg =3D { .load_firmware =3D mtk_vcodec_vcp_load_firmware, .get_vdec_capa =3D mtk_vcodec_vcp_get_vdec_capa, + .get_venc_capa =3D mtk_vcodec_vcp_get_venc_capa, .map_dm_addr =3D mtk_vcodec_vcp_dm_addr, .ipi_register =3D mtk_vcodec_vcp_set_ipi_register, .ipi_send =3D mtk_vcodec_vcp_ipi_send, @@ -409,7 +431,11 @@ struct mtk_vcodec_fw *mtk_vcodec_fw_vcp_init(void *pri= v, enum mtk_vcodec_fw_use struct mtk_vcodec_fw *fw; int i; =20 - if (fw_use =3D=3D DECODER) { + if (fw_use =3D=3D ENCODER) { + struct mtk_vcodec_enc_dev *enc_dev =3D priv; + + plat_dev =3D enc_dev->plat_dev; + } else if (fw_use =3D=3D DECODER) { struct mtk_vcodec_dec_dev *dec_dev =3D priv; =20 plat_dev =3D dec_dev->plat_dev; diff --git a/drivers/media/platform/mediatek/vcodec/common/mtk_vcodec_fw_vc= p.h b/drivers/media/platform/mediatek/vcodec/common/mtk_vcodec_fw_vcp.h index 40f5481d1889..53080ed12c69 100644 --- a/drivers/media/platform/mediatek/vcodec/common/mtk_vcodec_fw_vcp.h +++ b/drivers/media/platform/mediatek/vcodec/common/mtk_vcodec_fw_vcp.h @@ -16,6 +16,7 @@ typedef void (*vcp_ipi_handler_t) (void *data, unsigned i= nt len, void *priv); =20 /* enum mtk_vcp_ipi_index - index used to separate different hardware */ enum mtk_vcp_ipi_index { + VCP_IPI_ENCODER, VCP_IPI_LAT_DECODER, VCP_IPI_CORE_DECODER, VCP_IPI_MAX, diff --git a/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc.= c b/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc.c index a01dc25a7699..dcafb1303c29 100644 --- a/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc.c +++ b/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc.c @@ -26,7 +26,6 @@ =20 #define MTK_DEFAULT_FRAMERATE_NUM 1001 #define MTK_DEFAULT_FRAMERATE_DENOM 30000 -#define MTK_VENC_4K_CAPABILITY_ENABLE BIT(0) =20 static void mtk_venc_worker(struct work_struct *work); =20 diff --git a/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc.= h b/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc.h index 908d8179b2d2..84156c102d8d 100644 --- a/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc.h +++ b/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc.h @@ -23,6 +23,8 @@ #define MTK_VENC_IRQ_STATUS_OFFSET 0x05C #define MTK_VENC_IRQ_ACK_OFFSET 0x060 =20 +#define MTK_VENC_4K_CAPABILITY_ENABLE BIT(0) + /** * struct mtk_video_enc_buf - Private data related to each VB2 buffer. * @m2m_buf: M2M buffer --=20 2.45.2