public inbox for linux-mediatek@lists.infradead.org
 help / color / mirror / Atom feed
From: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
To: "kyrie.wu" <kyrie.wu@mediatek.com>,
	Hans Verkuil <hverkuil-cisco@xs4all.nl>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Rob Herring <robh+dt@kernel.org>,
	Matthias Brugger <matthias.bgg@gmail.com>,
	Tzung-Bi Shih <tzungbi@chromium.org>
Cc: Rob Herring <robh@kernel.org>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	Conor Dooley <conor+dt@kernel.org>,
	Bin Liu <bin.liu@mediatek.com>,
	kyrie wu <kyrie.wu@mediatek.corp-partner.google.com>,
	linux-media@vger.kernel.org, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-mediatek@lists.infradead.org
Subject: Re: [V1,05/12] media: mediatek: jpeg: fix jpeg hw count setting
Date: Fri, 10 Jan 2025 10:45:08 +0100	[thread overview]
Message-ID: <df63b281-6889-4ac1-8dfc-b61d81061953@collabora.com> (raw)
In-Reply-To: <20250109133513.20151-6-kyrie.wu@mediatek.com>

Il 09/01/25 14:35, kyrie.wu ha scritto:
> 1. different IC has different hw core;
> 2. use a parameter to set jpeg hw count.

In MT8195, each decoder core has its own devicetree node, so you can count
how many cores are actually present and registered.

Please do the same with MT8196, and replace MTK_JPEG{ENC,DEC}_HW_MAX with a
variable that stores the number of cores, counted at probe time.

Regards,
Angelo

> 
> Signed-off-by: kyrie.wu <kyrie.wu@mediatek.com>
> ---
>   .../platform/mediatek/jpeg/mtk_jpeg_core.c    | 28 +++++++++++++++----
>   .../platform/mediatek/jpeg/mtk_jpeg_core.h    |  2 ++
>   2 files changed, 25 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c
> index 77b3bd6c4d3f..4dc6f82d74fa 100644
> --- a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c
> +++ b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c
> @@ -1468,7 +1468,7 @@ static int mtk_jpegenc_get_hw(struct mtk_jpeg_ctx *ctx)
>   	int i;
>   
>   	spin_lock_irqsave(&jpeg->hw_lock, flags);
> -	for (i = 0; i < MTK_JPEGENC_HW_MAX; i++) {
> +	for (i = 0; i < jpeg->variant->max_hw_count; i++) {
>   		comp_jpeg = jpeg->enc_hw_dev[i];
>   		if (comp_jpeg->hw_state == MTK_JPEG_HW_IDLE) {
>   			hw_id = i;
> @@ -1515,7 +1515,7 @@ static int mtk_jpegdec_get_hw(struct mtk_jpeg_ctx *ctx)
>   	int i;
>   
>   	spin_lock_irqsave(&jpeg->hw_lock, flags);
> -	for (i = 0; i < MTK_JPEGDEC_HW_MAX; i++) {
> +	for (i = 0; i < jpeg->variant->max_hw_count; i++) {
>   		comp_jpeg = jpeg->dec_hw_dev[i];
>   		if (comp_jpeg->hw_state == MTK_JPEG_HW_IDLE) {
>   			hw_id = i;
> @@ -1598,7 +1598,7 @@ static void mtk_jpegenc_worker(struct work_struct *work)
>   		jpeg_work);
>   	struct mtk_jpeg_dev *jpeg = ctx->jpeg;
>   
> -	for (i = 0; i < MTK_JPEGENC_HW_MAX; i++)
> +	for (i = 0; i < jpeg->variant->max_hw_count; i++)
>   		comp_jpeg[i] = jpeg->enc_hw_dev[i];
>   	i = 0;
>   
> @@ -1696,7 +1696,7 @@ static void mtk_jpegdec_worker(struct work_struct *work)
>   	struct mtk_jpeg_fb fb;
>   	unsigned long flags;
>   
> -	for (i = 0; i < MTK_JPEGDEC_HW_MAX; i++)
> +	for (i = 0; i < jpeg->variant->max_hw_count; i++)
>   		comp_jpeg[i] = jpeg->dec_hw_dev[i];
>   	i = 0;
>   
> @@ -1925,6 +1925,7 @@ static struct mtk_jpeg_variant mtk8195_jpegenc_drvdata = {
>   	.out_q_default_fourcc = V4L2_PIX_FMT_YUYV,
>   	.cap_q_default_fourcc = V4L2_PIX_FMT_JPEG,
>   	.multi_core = true,
> +	.max_hw_count = 2,
>   	.jpeg_worker = mtk_jpegenc_worker,
>   };
>   
> @@ -1938,6 +1939,21 @@ static const struct mtk_jpeg_variant mtk8195_jpegdec_drvdata = {
>   	.out_q_default_fourcc = V4L2_PIX_FMT_JPEG,
>   	.cap_q_default_fourcc = V4L2_PIX_FMT_YUV420M,
>   	.multi_core = true,
> +	.max_hw_count = 3,
> +	.jpeg_worker = mtk_jpegdec_worker,
> +};
> +
> +static const struct mtk_jpeg_variant mtk8196_jpegdec_drvdata = {
> +	.formats = mtk_jpeg_dec_formats,
> +	.num_formats = MTK_JPEG_DEC_NUM_FORMATS,
> +	.qops = &mtk_jpeg_dec_qops,
> +	.m2m_ops = &mtk_jpeg_multicore_dec_m2m_ops,
> +	.dev_name = "mtk-jpeg-dec",
> +	.ioctl_ops = &mtk_jpeg_dec_ioctl_ops,
> +	.out_q_default_fourcc = V4L2_PIX_FMT_JPEG,
> +	.cap_q_default_fourcc = V4L2_PIX_FMT_YUV420M,
> +	.multi_core = true,
> +	.max_hw_count = 2,
>   	.jpeg_worker = mtk_jpegdec_worker,
>   };
>   
> @@ -1954,6 +1970,7 @@ static const struct mtk_jpeg_variant mtk8188_jpegenc_drvdata = {
>   	.ioctl_ops = &mtk_jpeg_enc_ioctl_ops,
>   	.out_q_default_fourcc = V4L2_PIX_FMT_YUYV,
>   	.cap_q_default_fourcc = V4L2_PIX_FMT_JPEG,
> +	.max_hw_count = 1,
>   	.support_34bit = true,
>   };
>   
> @@ -1970,6 +1987,7 @@ static const struct mtk_jpeg_variant mtk8188_jpegdec_drvdata = {
>   	.ioctl_ops = &mtk_jpeg_dec_ioctl_ops,
>   	.out_q_default_fourcc = V4L2_PIX_FMT_JPEG,
>   	.cap_q_default_fourcc = V4L2_PIX_FMT_YUV420M,
> +	.max_hw_count = 1,
>   	.support_34bit = true,
>   };
>   
> @@ -2008,7 +2026,7 @@ static const struct of_device_id mtk_jpeg_match[] = {
>   	},
>   	{
>   		.compatible = "mediatek,mt8196-jpgdec",
> -		.data = &mtk8195_jpegdec_drvdata,
> +		.data = &mtk8196_jpegdec_drvdata,
>   	},
>   	{},
>   };
> diff --git a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.h b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.h
> index d3aba1e6cae8..38672499ca18 100644
> --- a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.h
> +++ b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.h
> @@ -74,6 +74,7 @@ enum mtk_jpeg_ctx_state {
>    * @out_q_default_fourcc:	output queue default fourcc
>    * @cap_q_default_fourcc:	capture queue default fourcc
>    * @multi_core:		mark jpeg hw is multi_core or not
> + * @max_hw_count:		jpeg hw-core count
>    * @jpeg_worker:		jpeg dec or enc worker
>    * @support_34bit:	flag to check if support dma_address 34bit
>    */
> @@ -91,6 +92,7 @@ struct mtk_jpeg_variant {
>   	u32 out_q_default_fourcc;
>   	u32 cap_q_default_fourcc;
>   	bool multi_core;
> +	u32 max_hw_count;
>   	void (*jpeg_worker)(struct work_struct *work);
>   	bool support_34bit;
>   };



  reply	other threads:[~2025-01-10  9:46 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-01-09 13:35 [V1,00/12] Enable jpeg enc & dec multi-hardwares for MT8196 kyrie.wu
2025-01-09 13:35 ` [V1,01/12] dt-bindings: mediatek: Add mediatek, mt8196-jpgdec compatible kyrie.wu
2025-01-09 13:54   ` Krzysztof Kozlowski
2025-04-07  7:13     ` Kyrie Wu (吴晗)
2025-04-07  7:19       ` Krzysztof Kozlowski
2025-04-07  9:39         ` Kyrie Wu (吴晗)
2025-01-09 13:35 ` [V1,02/12] dt-bindings: mediatek: Add mediatek, mt8196-jpgenc compatible kyrie.wu
2025-01-09 13:35 ` [V1,03/12] media: mediatek: jpeg: add jpeg compatible kyrie.wu
2025-01-10  9:46   ` AngeloGioacchino Del Regno
2025-04-07  7:15     ` Kyrie Wu (吴晗)
2025-01-09 13:35 ` [V1,04/12] media: mediatek: jpeg: add jpeg smmu sid setting kyrie.wu
2025-01-10  9:39   ` AngeloGioacchino Del Regno
2025-04-07  7:21     ` Kyrie Wu (吴晗)
2025-01-09 13:35 ` [V1,05/12] media: mediatek: jpeg: fix jpeg hw count setting kyrie.wu
2025-01-10  9:45   ` AngeloGioacchino Del Regno [this message]
2025-04-07  7:23     ` Kyrie Wu (吴晗)
2025-01-09 13:35 ` [V1,06/12] media: mediatek: jpeg: refactor jpeg buffer payload setting kyrie.wu
2025-01-09 13:35 ` [V1,07/12] media: mediatek: jpeg: refactor jpeg dst buffer layout kyrie.wu
2025-01-09 13:35 ` [V1,08/12] media: mediatek: jpeg: fix stop streaming flow for multi-core kyrie.wu
2025-01-09 13:35 ` [V1,09/12] media: mediatek: jpeg: refactor multi-core clk suspend and resume setting kyrie.wu
2025-01-09 13:35 ` [V1,10/12] media: mediatek: jpeg: fix decoding buffer number setting timing issue kyrie.wu
2025-01-09 13:35 ` [V1,11/12] media: mediatek: jpeg: refactor decoding resolution change operation kyrie.wu
2025-01-09 13:35 ` [V1,12/12] media: mediatek: jpeg: fix remove buffer operation for multi-core kyrie.wu
2025-01-09 14:06 ` [V1,00/12] Enable jpeg enc & dec multi-hardwares for MT8196 Nicolas Dufresne
2025-01-10  5:31   ` Kyrie Wu (吴晗)
2025-04-07  6:27   ` Kyrie Wu (吴晗)

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=df63b281-6889-4ac1-8dfc-b61d81061953@collabora.com \
    --to=angelogioacchino.delregno@collabora.com \
    --cc=bin.liu@mediatek.com \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=hverkuil-cisco@xs4all.nl \
    --cc=krzk+dt@kernel.org \
    --cc=kyrie.wu@mediatek.com \
    --cc=kyrie.wu@mediatek.corp-partner.google.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=linux-mediatek@lists.infradead.org \
    --cc=matthias.bgg@gmail.com \
    --cc=mchehab@kernel.org \
    --cc=robh+dt@kernel.org \
    --cc=robh@kernel.org \
    --cc=tzungbi@chromium.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox