lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <34c7c47e753ef6c53cf4aa7554c8ad05707df166.camel@collabora.com>
Date: Fri, 14 Nov 2025 16:31:05 -0500
From: Nicolas Dufresne <nicolas.dufresne@...labora.com>
To: Kyrie Wu <kyrie.wu@...iatek.com>, Tiffany Lin
 <tiffany.lin@...iatek.com>,  Andrew-CT Chen <andrew-ct.chen@...iatek.com>,
 Yunfei Dong <yunfei.dong@...iatek.com>, Mauro Carvalho Chehab	
 <mchehab@...nel.org>, Rob Herring <robh@...nel.org>, Krzysztof Kozlowski	
 <krzk+dt@...nel.org>, Conor Dooley <conor+dt@...nel.org>, Matthias Brugger	
 <matthias.bgg@...il.com>, AngeloGioacchino Del Regno	
 <angelogioacchino.delregno@...labora.com>, Hans Verkuil
 <hverkuil@...all.nl>,  Christophe JAILLET <christophe.jaillet@...adoo.fr>,
 Sebastian Fricke <sebastian.fricke@...labora.com>, Nathan Hebert	
 <nhebert@...omium.org>, Arnd Bergmann <arnd@...db.de>, Irui Wang	
 <irui.wang@...iatek.com>, George Sun <george.sun@...iatek.com>, 
	linux-media@...r.kernel.org, devicetree@...r.kernel.org, 
	linux-kernel@...r.kernel.org, linux-arm-kernel@...ts.infradead.org, 
	linux-mediatek@...ts.infradead.org
Cc: Neil Armstrong <neil.armstrong@...aro.org>, Andrzej Pietrasiewicz
	 <andrzejtp2010@...il.com>
Subject: Re: [PATCH v3 2/6] media: mediatek: encoder: Add support for common
 firmware interface

Hi,

Le jeudi 14 août 2025 à 16:56 +0800, Kyrie Wu a écrit :
> From: Irui Wang <irui.wang@...iatek.com>
> 
> The existing encoder firmware interface implied just one type of codec:
> H.264. Future encoders may support additional codecs; however adding
> entire sets of interfaces for them is not scalable.
> 
> Instead, a new "common" firmware interface is defined for non codec
> specific messages. The new messages encapsulate the old ones for
> backward compatibility.
> 
> This patch adds support for these new messages.
> 
> Signed-off-by: Irui Wang <irui.wang@...iatek.com>

Reviewed-by: Nicolas Dufresne <nicolas.dufresne@...labora.com>

> ---
>  .../vcodec/encoder/mtk_vcodec_enc_drv.h       |  3 ++
>  .../mediatek/vcodec/encoder/venc_drv_if.c     |  3 +-
>  .../mediatek/vcodec/encoder/venc_ipi_msg.h    | 26 +++++++++++++
>  .../mediatek/vcodec/encoder/venc_vpu_if.c     | 37 ++++++++++++-------
>  4 files changed, 54 insertions(+), 15 deletions(-)
> 
> diff --git
> a/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc_drv.h
> b/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc_drv.h
> index b1277bcfcf53..426b1398f815 100644
> --- a/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc_drv.h
> +++ b/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc_drv.h
> @@ -16,6 +16,7 @@
>  
>  #define MTK_ENC_CTX_IS_EXT(ctx) ((ctx)->dev->venc_pdata->uses_ext)
>  #define MTK_ENC_IOVA_IS_34BIT(ctx) ((ctx)->dev->venc_pdata->uses_34bit)
> +#define MTK_ENC_DRV_IS_COMM(ctx) (((ctx)->dev->venc_pdata-
> >uses_common_fw_iface))
>  
>  /**
>   * struct mtk_vcodec_enc_pdata - compatible data for each IC
> @@ -29,6 +30,7 @@
>   * @num_output_formats: number of entries in output_formats
>   * @core_id: stand for h264 or vp8 encode index
>   * @uses_34bit: whether the encoder uses 34-bit iova
> + * @uses_common_fw_iface: whether the encoder uses common driver interface
>   */
>  struct mtk_vcodec_enc_pdata {
>  	bool uses_ext;
> @@ -40,6 +42,7 @@ struct mtk_vcodec_enc_pdata {
>  	size_t num_output_formats;
>  	u8 core_id;
>  	bool uses_34bit;
> +	bool uses_common_fw_iface;
>  };
>  
>  /*
> diff --git a/drivers/media/platform/mediatek/vcodec/encoder/venc_drv_if.c
> b/drivers/media/platform/mediatek/vcodec/encoder/venc_drv_if.c
> index e83747b8d69a..f8c9349c18c0 100644
> --- a/drivers/media/platform/mediatek/vcodec/encoder/venc_drv_if.c
> +++ b/drivers/media/platform/mediatek/vcodec/encoder/venc_drv_if.c
> @@ -19,13 +19,14 @@
>  int venc_if_init(struct mtk_vcodec_enc_ctx *ctx, unsigned int fourcc)
>  {
>  	int ret = 0;
> +	const bool uses_common_fw_iface = MTK_ENC_DRV_IS_COMM(ctx);
>  
>  	switch (fourcc) {
>  	case V4L2_PIX_FMT_VP8:
>  		ctx->enc_if = &venc_vp8_if;
>  		break;
>  	case V4L2_PIX_FMT_H264:
> -		ctx->enc_if = &venc_h264_if;
> +		ctx->enc_if = uses_common_fw_iface ? &venc_if :
> &venc_h264_if;
>  		break;
>  	default:
>  		return -EINVAL;
> diff --git a/drivers/media/platform/mediatek/vcodec/encoder/venc_ipi_msg.h
> b/drivers/media/platform/mediatek/vcodec/encoder/venc_ipi_msg.h
> index bb16d96a7f57..ce3c2c8059fb 100644
> --- a/drivers/media/platform/mediatek/vcodec/encoder/venc_ipi_msg.h
> +++ b/drivers/media/platform/mediatek/vcodec/encoder/venc_ipi_msg.h
> @@ -45,6 +45,20 @@ struct venc_ap_ipi_msg_init {
>  	uint64_t venc_inst;
>  };
>  
> +/**
> + * struct venc_ap_ipi_msg_init_comm - AP to VPU init cmd structure
> + * @base: AP to VPU init cmd structure
> + * @codec_type: encoder type
> + * @reserved: reserved field
> + * @shared_iova: shared iova
> + */
> +struct venc_ap_ipi_msg_init_comm {
> +	struct venc_ap_ipi_msg_init base;
> +	u32 codec_type;
> +	u32 reserved;
> +	u64 shared_iova;
> +};
> +
>  /**
>   * struct venc_ap_ipi_msg_set_param - AP to VPU set_param cmd structure
>   * @msg_id:	message id (AP_IPIMSG_XXX_ENC_SET_PARAM)
> @@ -175,6 +189,18 @@ struct venc_vpu_ipi_msg_init {
>  	uint32_t venc_abi_version;
>  };
>  
> +/**
> + * struct venc_vpu_ipi_msg_init_comm - VPU ack AP init cmd structure
> + * @init_ack: AP init cmd structure
> + * @vpu_vsi_addr: VSI address from VPU
> + * @reserved: reserved field
> + */
> +struct venc_vpu_ipi_msg_init_comm {
> +	struct venc_vpu_ipi_msg_init init_ack;
> +	u32 vpu_vsi_addr;
> +	u32 reserved;
> +};
> +
>  /**
>   * struct venc_vpu_ipi_msg_set_param - VPU ack AP set_param cmd structure
>   * @msg_id:	message id (VPU_IPIMSG_XXX_ENC_SET_PARAM_DONE)
> diff --git a/drivers/media/platform/mediatek/vcodec/encoder/venc_vpu_if.c
> b/drivers/media/platform/mediatek/vcodec/encoder/venc_vpu_if.c
> index 51bb7ee141b9..537b9955932e 100644
> --- a/drivers/media/platform/mediatek/vcodec/encoder/venc_vpu_if.c
> +++ b/drivers/media/platform/mediatek/vcodec/encoder/venc_vpu_if.c
> @@ -10,24 +10,25 @@
>  
>  static void handle_enc_init_msg(struct venc_vpu_inst *vpu, const void *data)
>  {
> -	const struct venc_vpu_ipi_msg_init *msg = data;
> +	const struct venc_vpu_ipi_msg_init_comm *msg = data;
> +	struct mtk_vcodec_fw *fw = vpu->ctx->dev->fw_handler;
>  
> -	vpu->inst_addr = msg->vpu_inst_addr;
> -	vpu->vsi = mtk_vcodec_fw_map_dm_addr(vpu->ctx->dev->fw_handler,
> -					     msg->vpu_inst_addr);
> +	vpu->inst_addr = msg->init_ack.vpu_inst_addr;
> +	vpu->vsi = mtk_vcodec_fw_map_dm_addr(fw, vpu->inst_addr);
>  
>  	/* Firmware version field value is unspecified on MT8173. */
> -	if (mtk_vcodec_fw_get_type(vpu->ctx->dev->fw_handler) == VPU)
> +	if (mtk_vcodec_fw_get_type(fw) == VPU)
>  		return;
>  
>  	/* Check firmware version. */
> -	mtk_venc_debug(vpu->ctx, "firmware version: 0x%x\n", msg-
> >venc_abi_version);
> -	switch (msg->venc_abi_version) {
> +	mtk_venc_debug(vpu->ctx, "firmware version: 0x%x\n",
> +		       msg->init_ack.venc_abi_version);
> +	switch (msg->init_ack.venc_abi_version) {
>  	case 1:
>  		break;
>  	default:
>  		mtk_venc_err(vpu->ctx, "unhandled firmware version 0x%x\n",
> -			     msg->venc_abi_version);
> +			     msg->init_ack.venc_abi_version);
>  		vpu->failure = 1;
>  		break;
>  	}
> @@ -132,7 +133,8 @@ static int vpu_enc_send_msg(struct venc_vpu_inst *vpu,
> void *msg,
>  int vpu_enc_init(struct venc_vpu_inst *vpu)
>  {
>  	int status;
> -	struct venc_ap_ipi_msg_init out;
> +	size_t msg_size;
> +	struct venc_ap_ipi_msg_init_comm out;
>  
>  	init_waitqueue_head(&vpu->wq_hd);
>  	vpu->signaled = 0;
> @@ -149,9 +151,16 @@ int vpu_enc_init(struct venc_vpu_inst *vpu)
>  	}
>  
>  	memset(&out, 0, sizeof(out));
> -	out.msg_id = AP_IPIMSG_ENC_INIT;
> -	out.venc_inst = (unsigned long)vpu;
> -	if (vpu_enc_send_msg(vpu, &out, sizeof(out))) {
> +	out.base.msg_id = AP_IPIMSG_ENC_INIT;
> +	out.base.venc_inst = (unsigned long)vpu;
> +	if (MTK_ENC_DRV_IS_COMM(vpu->ctx)) {
> +		out.codec_type = vpu->ctx->q_data[MTK_Q_DATA_DST].fmt-
> >fourcc;
> +		msg_size = sizeof(struct venc_ap_ipi_msg_init_comm);
> +	} else {
> +		msg_size = sizeof(struct venc_ap_ipi_msg_init);
> +	}
> +
> +	if (vpu_enc_send_msg(vpu, &out, msg_size)) {
>  		mtk_venc_err(vpu->ctx, "AP_IPIMSG_ENC_INIT fail");
>  		return -EINVAL;
>  	}
> @@ -260,7 +269,7 @@ static int vpu_enc_encode_32bits(struct venc_vpu_inst
> *vpu,
>  		sizeof(struct venc_ap_ipi_msg_enc);
>  	struct venc_ap_ipi_msg_enc_ext out;
>  
> -	mtk_venc_debug(vpu->ctx, "bs_mode %d ->", bs_mode);
> +	mtk_venc_debug(vpu->ctx, "%s, bs_mode %d ->", __func__, bs_mode);
>  
>  	memset(&out, 0, sizeof(out));
>  	out.base.msg_id = AP_IPIMSG_ENC_ENCODE;
> @@ -305,7 +314,7 @@ static int vpu_enc_encode_34bits(struct venc_vpu_inst
> *vpu,
>  	struct venc_ap_ipi_msg_enc_ext_34 out;
>  	size_t msg_size = sizeof(struct venc_ap_ipi_msg_enc_ext_34);
>  
> -	mtk_venc_debug(vpu->ctx, "bs_mode %d ->", bs_mode);
> +	mtk_venc_debug(vpu->ctx, "%s, bs_mode %d ->", __func__, bs_mode);
>  
>  	memset(&out, 0, sizeof(out));
>  	out.msg_id = AP_IPIMSG_ENC_ENCODE;

Download attachment "signature.asc" of type "application/pgp-signature" (229 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ