diff mbox series

venus: move platform specific data to platform file

Message ID 1590736053-30323-1-git-send-email-dikshita@codeaurora.org (mailing list archive)
State New, archived
Headers show
Series venus: move platform specific data to platform file | expand

Commit Message

Dikshita Agarwal May 29, 2020, 7:07 a.m. UTC
Move all data specific to platform into a separate file.

Signed-off-by: Dikshita Agarwal <dikshita@codeaurora.org>
---
 drivers/media/platform/qcom/venus/Makefile         |  3 +-
 drivers/media/platform/qcom/venus/core.c           | 20 ++-----------
 drivers/media/platform/qcom/venus/core.h           | 10 +------
 drivers/media/platform/qcom/venus/helpers.c        |  6 ++--
 .../media/platform/qcom/venus/hfi_platform_data.c  | 35 ++++++++++++++++++++++
 .../media/platform/qcom/venus/hfi_platform_data.h  | 27 +++++++++++++++++
 drivers/media/platform/qcom/venus/pm_helpers.c     |  1 +
 7 files changed, 73 insertions(+), 29 deletions(-)
 create mode 100644 drivers/media/platform/qcom/venus/hfi_platform_data.c
 create mode 100644 drivers/media/platform/qcom/venus/hfi_platform_data.h

Comments

Dikshita Agarwal June 25, 2020, 4:48 a.m. UTC | #1
Hi Stanimir,

A gentle reminder for the review.

On 2020-05-29 12:37, Dikshita Agarwal wrote:
> Move all data specific to platform into a separate file.
> 
> Signed-off-by: Dikshita Agarwal <dikshita@codeaurora.org>
> ---
>  drivers/media/platform/qcom/venus/Makefile         |  3 +-
>  drivers/media/platform/qcom/venus/core.c           | 20 ++-----------
>  drivers/media/platform/qcom/venus/core.h           | 10 +------
>  drivers/media/platform/qcom/venus/helpers.c        |  6 ++--
>  .../media/platform/qcom/venus/hfi_platform_data.c  | 35 
> ++++++++++++++++++++++
>  .../media/platform/qcom/venus/hfi_platform_data.h  | 27 
> +++++++++++++++++
>  drivers/media/platform/qcom/venus/pm_helpers.c     |  1 +
>  7 files changed, 73 insertions(+), 29 deletions(-)
>  create mode 100644 
> drivers/media/platform/qcom/venus/hfi_platform_data.c
>  create mode 100644 
> drivers/media/platform/qcom/venus/hfi_platform_data.h
> 
> diff --git a/drivers/media/platform/qcom/venus/Makefile
> b/drivers/media/platform/qcom/venus/Makefile
> index dfc6368..3878bc9 100644
> --- a/drivers/media/platform/qcom/venus/Makefile
> +++ b/drivers/media/platform/qcom/venus/Makefile
> @@ -3,7 +3,8 @@
> 
>  venus-core-objs += core.o helpers.o firmware.o \
>  		   hfi_venus.o hfi_msgs.o hfi_cmds.o hfi.o \
> -		   hfi_parser.o pm_helpers.o dbgfs.o
> +		   hfi_parser.o pm_helpers.o dbgfs.o \
> +		   hfi_platform_data.o
> 
>  venus-dec-objs += vdec.o vdec_ctrls.o
>  venus-enc-objs += venc.o venc_ctrls.o
> diff --git a/drivers/media/platform/qcom/venus/core.c
> b/drivers/media/platform/qcom/venus/core.c
> index bbb394c..4fde4aa 100644
> --- a/drivers/media/platform/qcom/venus/core.c
> +++ b/drivers/media/platform/qcom/venus/core.c
> @@ -20,6 +20,7 @@
>  #include "core.h"
>  #include "firmware.h"
>  #include "pm_helpers.h"
> +#include "hfi_platform_data.h"
> 
>  static void venus_event_notify(struct venus_core *core, u32 event)
>  {
> @@ -222,6 +223,8 @@ static int venus_probe(struct platform_device 
> *pdev)
>  			return ret;
>  	}
> 
> +	core->hfi_data = venus_get_hfi_platform(core->res->hfi_version);
> +
>  	ret = dma_set_mask_and_coherent(dev, core->res->dma_mask);
>  	if (ret)
>  		return ret;
> @@ -461,17 +464,6 @@ static __maybe_unused int
> venus_runtime_resume(struct device *dev)
>  	{  244800, 100000000 },	/* 1920x1080@30 */
>  };
> 
> -static const struct codec_freq_data sdm845_codec_freq_data[] =  {
> -	{ V4L2_PIX_FMT_H264, VIDC_SESSION_TYPE_ENC, 675, 10 },
> -	{ V4L2_PIX_FMT_HEVC, VIDC_SESSION_TYPE_ENC, 675, 10 },
> -	{ V4L2_PIX_FMT_VP8, VIDC_SESSION_TYPE_ENC, 675, 10 },
> -	{ V4L2_PIX_FMT_MPEG2, VIDC_SESSION_TYPE_DEC, 200, 10 },
> -	{ V4L2_PIX_FMT_H264, VIDC_SESSION_TYPE_DEC, 200, 10 },
> -	{ V4L2_PIX_FMT_HEVC, VIDC_SESSION_TYPE_DEC, 200, 10 },
> -	{ V4L2_PIX_FMT_VP8, VIDC_SESSION_TYPE_DEC, 200, 10 },
> -	{ V4L2_PIX_FMT_VP9, VIDC_SESSION_TYPE_DEC, 200, 10 },
> -};
> -
>  static const struct bw_tbl sdm845_bw_table_enc[] = {
>  	{ 1944000, 1612000, 0, 2416000, 0 },	/* 3840x2160@60 */
>  	{  972000,  951000, 0, 1434000, 0 },	/* 3840x2160@30 */
> @@ -493,8 +485,6 @@ static __maybe_unused int
> venus_runtime_resume(struct device *dev)
>  	.bw_tbl_enc_size = ARRAY_SIZE(sdm845_bw_table_enc),
>  	.bw_tbl_dec = sdm845_bw_table_dec,
>  	.bw_tbl_dec_size = ARRAY_SIZE(sdm845_bw_table_dec),
> -	.codec_freq_data = sdm845_codec_freq_data,
> -	.codec_freq_data_size = ARRAY_SIZE(sdm845_codec_freq_data),
>  	.clks = {"core", "iface", "bus" },
>  	.clks_num = 3,
>  	.vcodec0_clks = { "core", "bus" },
> @@ -516,8 +506,6 @@ static __maybe_unused int
> venus_runtime_resume(struct device *dev)
>  	.bw_tbl_enc_size = ARRAY_SIZE(sdm845_bw_table_enc),
>  	.bw_tbl_dec = sdm845_bw_table_dec,
>  	.bw_tbl_dec_size = ARRAY_SIZE(sdm845_bw_table_dec),
> -	.codec_freq_data = sdm845_codec_freq_data,
> -	.codec_freq_data_size = ARRAY_SIZE(sdm845_codec_freq_data),
>  	.clks = {"core", "iface", "bus" },
>  	.clks_num = 3,
>  	.vcodec0_clks = { "vcodec0_core", "vcodec0_bus" },
> @@ -562,8 +550,6 @@ static __maybe_unused int
> venus_runtime_resume(struct device *dev)
>  	.bw_tbl_enc_size = ARRAY_SIZE(sc7180_bw_table_enc),
>  	.bw_tbl_dec = sc7180_bw_table_dec,
>  	.bw_tbl_dec_size = ARRAY_SIZE(sc7180_bw_table_dec),
> -	.codec_freq_data = sdm845_codec_freq_data,
> -	.codec_freq_data_size = ARRAY_SIZE(sdm845_codec_freq_data),
>  	.clks = {"core", "iface", "bus" },
>  	.clks_num = 3,
>  	.vcodec0_clks = { "vcodec0_core", "vcodec0_bus" },
> diff --git a/drivers/media/platform/qcom/venus/core.h
> b/drivers/media/platform/qcom/venus/core.h
> index 82438f1..86dc443 100644
> --- a/drivers/media/platform/qcom/venus/core.h
> +++ b/drivers/media/platform/qcom/venus/core.h
> @@ -34,13 +34,6 @@ struct reg_val {
>  	u32 value;
>  };
> 
> -struct codec_freq_data {
> -	u32 pixfmt;
> -	u32 session_type;
> -	unsigned long vpp_freq;
> -	unsigned long vsp_freq;
> -};
> -
>  struct bw_tbl {
>  	u32 mbs_per_sec;
>  	u32 avg;
> @@ -59,8 +52,6 @@ struct venus_resources {
>  	unsigned int bw_tbl_dec_size;
>  	const struct reg_val *reg_tbl;
>  	unsigned int reg_tbl_size;
> -	const struct codec_freq_data *codec_freq_data;
> -	unsigned int codec_freq_data_size;
>  	const char * const clks[VIDC_CLKS_NUM_MAX];
>  	unsigned int clks_num;
>  	const char * const vcodec0_clks[VIDC_VCODEC_CLKS_NUM_MAX];
> @@ -176,6 +167,7 @@ struct venus_core {
>  	bool sys_error;
>  	const struct hfi_core_ops *core_ops;
>  	const struct venus_pm_ops *pm_ops;
> +	const struct venus_hfi_platform_data *hfi_data;
>  	struct mutex pm_lock;
>  	unsigned long enc_codecs;
>  	unsigned long dec_codecs;
> diff --git a/drivers/media/platform/qcom/venus/helpers.c
> b/drivers/media/platform/qcom/venus/helpers.c
> index 115a9a2..62d1197 100644
> --- a/drivers/media/platform/qcom/venus/helpers.c
> +++ b/drivers/media/platform/qcom/venus/helpers.c
> @@ -14,6 +14,7 @@
>  #include "helpers.h"
>  #include "hfi_helper.h"
>  #include "pm_helpers.h"
> +#include "hfi_platform_data.h"
> 
>  struct intbuf {
>  	struct list_head list;
> @@ -811,8 +812,9 @@ int venus_helper_init_codec_freq_data(struct
> venus_inst *inst)
>  	if (!IS_V4(inst->core))
>  		return 0;
> 
> -	data = inst->core->res->codec_freq_data;
> -	data_size = inst->core->res->codec_freq_data_size;
> +	data = inst->core->hfi_data->codec_freq_data;
> +	data_size = inst->core->hfi_data->codec_freq_data_size;
> +
>  	pixfmt = inst->session_type == VIDC_SESSION_TYPE_DEC ?
>  			inst->fmt_out->pixfmt : inst->fmt_cap->pixfmt;
> 
> diff --git a/drivers/media/platform/qcom/venus/hfi_platform_data.c
> b/drivers/media/platform/qcom/venus/hfi_platform_data.c
> new file mode 100644
> index 0000000..9d9035f
> --- /dev/null
> +++ b/drivers/media/platform/qcom/venus/hfi_platform_data.c
> @@ -0,0 +1,35 @@
> +// SPDX-License-Identifier: GPL-2.0-only
> +/*
> + * Copyright (c) 2020, The Linux Foundation. All rights reserved.
> + */
> +#include "hfi_platform_data.h"
> +#include "core.h"
> +
> +static struct codec_freq_data hfi4_codec_freq_data[] =  {
> +{ V4L2_PIX_FMT_H264, VIDC_SESSION_TYPE_ENC, 675, 10 },
> +	{ V4L2_PIX_FMT_HEVC, VIDC_SESSION_TYPE_ENC, 675, 10 },
> +	{ V4L2_PIX_FMT_VP8, VIDC_SESSION_TYPE_ENC, 675, 10 },
> +	{ V4L2_PIX_FMT_MPEG2, VIDC_SESSION_TYPE_DEC, 200, 10 },
> +	{ V4L2_PIX_FMT_H264, VIDC_SESSION_TYPE_DEC, 200, 10 },
> +	{ V4L2_PIX_FMT_HEVC, VIDC_SESSION_TYPE_DEC, 200, 10 },
> +	{ V4L2_PIX_FMT_VP8, VIDC_SESSION_TYPE_DEC, 200, 10 },
> +	{ V4L2_PIX_FMT_VP9, VIDC_SESSION_TYPE_DEC, 200, 10 },
> +};
> +
> +static const struct venus_hfi_platform_data hfi4_data = {
> +	.codec_freq_data = hfi4_codec_freq_data,
> +	.codec_freq_data_size = ARRAY_SIZE(hfi4_codec_freq_data),
> +};
> +
> +const struct venus_hfi_platform_data *venus_get_hfi_platform
> +	(enum hfi_version version)
> +{
> +	switch (version) {
> +	case HFI_VERSION_4XX:
> +		return &hfi4_data;
> +	default:
> +		return NULL;
> +	}
> +	return NULL;
> +}
> +
> diff --git a/drivers/media/platform/qcom/venus/hfi_platform_data.h
> b/drivers/media/platform/qcom/venus/hfi_platform_data.h
> new file mode 100644
> index 0000000..1b4bfb6
> --- /dev/null
> +++ b/drivers/media/platform/qcom/venus/hfi_platform_data.h
> @@ -0,0 +1,27 @@
> +/* SPDX-License-Identifier: GPL-2.0-only */
> +/*
> + * Copyright (c) 2020, The Linux Foundation. All rights reserved.
> + */
> +
> +#ifndef __HFI_PLATFORM_DATA_H__
> +#define __HFI_PLATFORM_DATA_H__
> +
> +#include "core.h"
> +
> +struct codec_freq_data {
> +	u32 pixfmt;
> +	u32 session_type;
> +	unsigned long vpp_freq;
> +	unsigned long vsp_freq;
> +};
> +
> +struct venus_hfi_platform_data {
> +	const struct codec_freq_data *codec_freq_data;
> +	unsigned int codec_freq_data_size;
> +};
> +
> +const struct venus_hfi_platform_data *venus_get_hfi_platform
> +	(enum hfi_version version);
> +
> +#endif
> +
> diff --git a/drivers/media/platform/qcom/venus/pm_helpers.c
> b/drivers/media/platform/qcom/venus/pm_helpers.c
> index f33fc70..4ed5689 100644
> --- a/drivers/media/platform/qcom/venus/pm_helpers.c
> +++ b/drivers/media/platform/qcom/venus/pm_helpers.c
> @@ -17,6 +17,7 @@
>  #include "hfi_parser.h"
>  #include "hfi_venus_io.h"
>  #include "pm_helpers.h"
> +#include "hfi_platform_data.h"
> 
>  static bool legacy_binding;
Stanimir Varbanov July 6, 2020, 3:37 p.m. UTC | #2
On 5/29/20 10:07 AM, Dikshita Agarwal wrote:
> Move all data specific to platform into a separate file.
> 
> Signed-off-by: Dikshita Agarwal <dikshita@codeaurora.org>
> ---
>  drivers/media/platform/qcom/venus/Makefile         |  3 +-
>  drivers/media/platform/qcom/venus/core.c           | 20 ++-----------
>  drivers/media/platform/qcom/venus/core.h           | 10 +------
>  drivers/media/platform/qcom/venus/helpers.c        |  6 ++--
>  .../media/platform/qcom/venus/hfi_platform_data.c  | 35 ++++++++++++++++++++++
>  .../media/platform/qcom/venus/hfi_platform_data.h  | 27 +++++++++++++++++
>  drivers/media/platform/qcom/venus/pm_helpers.c     |  1 +
>  7 files changed, 73 insertions(+), 29 deletions(-)
>  create mode 100644 drivers/media/platform/qcom/venus/hfi_platform_data.c
>  create mode 100644 drivers/media/platform/qcom/venus/hfi_platform_data.h
> 
> diff --git a/drivers/media/platform/qcom/venus/Makefile b/drivers/media/platform/qcom/venus/Makefile
> index dfc6368..3878bc9 100644
> --- a/drivers/media/platform/qcom/venus/Makefile
> +++ b/drivers/media/platform/qcom/venus/Makefile
> @@ -3,7 +3,8 @@
>  
>  venus-core-objs += core.o helpers.o firmware.o \
>  		   hfi_venus.o hfi_msgs.o hfi_cmds.o hfi.o \
> -		   hfi_parser.o pm_helpers.o dbgfs.o
> +		   hfi_parser.o pm_helpers.o dbgfs.o \
> +		   hfi_platform_data.o

Could you shorten to hfi_platform.o

>  
>  venus-dec-objs += vdec.o vdec_ctrls.o
>  venus-enc-objs += venc.o venc_ctrls.o
> diff --git a/drivers/media/platform/qcom/venus/core.c b/drivers/media/platform/qcom/venus/core.c
> index bbb394c..4fde4aa 100644
> --- a/drivers/media/platform/qcom/venus/core.c
> +++ b/drivers/media/platform/qcom/venus/core.c
> @@ -20,6 +20,7 @@
>  #include "core.h"
>  #include "firmware.h"
>  #include "pm_helpers.h"
> +#include "hfi_platform_data.h"
>  
>  static void venus_event_notify(struct venus_core *core, u32 event)
>  {
> @@ -222,6 +223,8 @@ static int venus_probe(struct platform_device *pdev)
>  			return ret;
>  	}
>  
> +	core->hfi_data = venus_get_hfi_platform(core->res->hfi_version);

please make it:

core->hfi_plat = hfi_platform_get(version)

> +
>  	ret = dma_set_mask_and_coherent(dev, core->res->dma_mask);
>  	if (ret)
>  		return ret;
> @@ -461,17 +464,6 @@ static __maybe_unused int venus_runtime_resume(struct device *dev)
>  	{  244800, 100000000 },	/* 1920x1080@30 */
>  };
>  
> -static const struct codec_freq_data sdm845_codec_freq_data[] =  {
> -	{ V4L2_PIX_FMT_H264, VIDC_SESSION_TYPE_ENC, 675, 10 },
> -	{ V4L2_PIX_FMT_HEVC, VIDC_SESSION_TYPE_ENC, 675, 10 },
> -	{ V4L2_PIX_FMT_VP8, VIDC_SESSION_TYPE_ENC, 675, 10 },
> -	{ V4L2_PIX_FMT_MPEG2, VIDC_SESSION_TYPE_DEC, 200, 10 },
> -	{ V4L2_PIX_FMT_H264, VIDC_SESSION_TYPE_DEC, 200, 10 },
> -	{ V4L2_PIX_FMT_HEVC, VIDC_SESSION_TYPE_DEC, 200, 10 },
> -	{ V4L2_PIX_FMT_VP8, VIDC_SESSION_TYPE_DEC, 200, 10 },
> -	{ V4L2_PIX_FMT_VP9, VIDC_SESSION_TYPE_DEC, 200, 10 },
> -};
> -
>  static const struct bw_tbl sdm845_bw_table_enc[] = {
>  	{ 1944000, 1612000, 0, 2416000, 0 },	/* 3840x2160@60 */
>  	{  972000,  951000, 0, 1434000, 0 },	/* 3840x2160@30 */
> @@ -493,8 +485,6 @@ static __maybe_unused int venus_runtime_resume(struct device *dev)
>  	.bw_tbl_enc_size = ARRAY_SIZE(sdm845_bw_table_enc),
>  	.bw_tbl_dec = sdm845_bw_table_dec,
>  	.bw_tbl_dec_size = ARRAY_SIZE(sdm845_bw_table_dec),
> -	.codec_freq_data = sdm845_codec_freq_data,
> -	.codec_freq_data_size = ARRAY_SIZE(sdm845_codec_freq_data),
>  	.clks = {"core", "iface", "bus" },
>  	.clks_num = 3,
>  	.vcodec0_clks = { "core", "bus" },
> @@ -516,8 +506,6 @@ static __maybe_unused int venus_runtime_resume(struct device *dev)
>  	.bw_tbl_enc_size = ARRAY_SIZE(sdm845_bw_table_enc),
>  	.bw_tbl_dec = sdm845_bw_table_dec,
>  	.bw_tbl_dec_size = ARRAY_SIZE(sdm845_bw_table_dec),
> -	.codec_freq_data = sdm845_codec_freq_data,
> -	.codec_freq_data_size = ARRAY_SIZE(sdm845_codec_freq_data),
>  	.clks = {"core", "iface", "bus" },
>  	.clks_num = 3,
>  	.vcodec0_clks = { "vcodec0_core", "vcodec0_bus" },
> @@ -562,8 +550,6 @@ static __maybe_unused int venus_runtime_resume(struct device *dev)
>  	.bw_tbl_enc_size = ARRAY_SIZE(sc7180_bw_table_enc),
>  	.bw_tbl_dec = sc7180_bw_table_dec,
>  	.bw_tbl_dec_size = ARRAY_SIZE(sc7180_bw_table_dec),
> -	.codec_freq_data = sdm845_codec_freq_data,
> -	.codec_freq_data_size = ARRAY_SIZE(sdm845_codec_freq_data),
>  	.clks = {"core", "iface", "bus" },
>  	.clks_num = 3,
>  	.vcodec0_clks = { "vcodec0_core", "vcodec0_bus" },
> diff --git a/drivers/media/platform/qcom/venus/core.h b/drivers/media/platform/qcom/venus/core.h
> index 82438f1..86dc443 100644
> --- a/drivers/media/platform/qcom/venus/core.h
> +++ b/drivers/media/platform/qcom/venus/core.h
> @@ -34,13 +34,6 @@ struct reg_val {
>  	u32 value;
>  };
>  
> -struct codec_freq_data {
> -	u32 pixfmt;
> -	u32 session_type;
> -	unsigned long vpp_freq;
> -	unsigned long vsp_freq;
> -};
> -
>  struct bw_tbl {
>  	u32 mbs_per_sec;
>  	u32 avg;
> @@ -59,8 +52,6 @@ struct venus_resources {
>  	unsigned int bw_tbl_dec_size;
>  	const struct reg_val *reg_tbl;
>  	unsigned int reg_tbl_size;
> -	const struct codec_freq_data *codec_freq_data;
> -	unsigned int codec_freq_data_size;
>  	const char * const clks[VIDC_CLKS_NUM_MAX];
>  	unsigned int clks_num;
>  	const char * const vcodec0_clks[VIDC_VCODEC_CLKS_NUM_MAX];
> @@ -176,6 +167,7 @@ struct venus_core {
>  	bool sys_error;
>  	const struct hfi_core_ops *core_ops;
>  	const struct venus_pm_ops *pm_ops;
> +	const struct venus_hfi_platform_data *hfi_data;

could you rename this to:

const struct hfi_platform *hfi_plat;

>  	struct mutex pm_lock;
>  	unsigned long enc_codecs;
>  	unsigned long dec_codecs;
> diff --git a/drivers/media/platform/qcom/venus/helpers.c b/drivers/media/platform/qcom/venus/helpers.c
> index 115a9a2..62d1197 100644
> --- a/drivers/media/platform/qcom/venus/helpers.c
> +++ b/drivers/media/platform/qcom/venus/helpers.c
> @@ -14,6 +14,7 @@
>  #include "helpers.h"
>  #include "hfi_helper.h"
>  #include "pm_helpers.h"
> +#include "hfi_platform_data.h"
>  
>  struct intbuf {
>  	struct list_head list;
> @@ -811,8 +812,9 @@ int venus_helper_init_codec_freq_data(struct venus_inst *inst)
>  	if (!IS_V4(inst->core))
>  		return 0;
>  
> -	data = inst->core->res->codec_freq_data;
> -	data_size = inst->core->res->codec_freq_data_size;
> +	data = inst->core->hfi_data->codec_freq_data;
> +	data_size = inst->core->hfi_data->codec_freq_data_size;
> +

This doesn't look right. The venus_helper knows details of how to init
codec data. I think this initialization should be made by hfi_platform.

>  	pixfmt = inst->session_type == VIDC_SESSION_TYPE_DEC ?
>  			inst->fmt_out->pixfmt : inst->fmt_cap->pixfmt;
>  
> diff --git a/drivers/media/platform/qcom/venus/hfi_platform_data.c b/drivers/media/platform/qcom/venus/hfi_platform_data.c
> new file mode 100644
> index 0000000..9d9035f
> --- /dev/null
> +++ b/drivers/media/platform/qcom/venus/hfi_platform_data.c
> @@ -0,0 +1,35 @@
> +// SPDX-License-Identifier: GPL-2.0-only
> +/*
> + * Copyright (c) 2020, The Linux Foundation. All rights reserved.
> + */
> +#include "hfi_platform_data.h"
> +#include "core.h"
> +
> +static struct codec_freq_data hfi4_codec_freq_data[] =  {
> +{ V4L2_PIX_FMT_H264, VIDC_SESSION_TYPE_ENC, 675, 10 },

fix the identation

> +	{ V4L2_PIX_FMT_HEVC, VIDC_SESSION_TYPE_ENC, 675, 10 },
> +	{ V4L2_PIX_FMT_VP8, VIDC_SESSION_TYPE_ENC, 675, 10 },
> +	{ V4L2_PIX_FMT_MPEG2, VIDC_SESSION_TYPE_DEC, 200, 10 },
> +	{ V4L2_PIX_FMT_H264, VIDC_SESSION_TYPE_DEC, 200, 10 },
> +	{ V4L2_PIX_FMT_HEVC, VIDC_SESSION_TYPE_DEC, 200, 10 },
> +	{ V4L2_PIX_FMT_VP8, VIDC_SESSION_TYPE_DEC, 200, 10 },
> +	{ V4L2_PIX_FMT_VP9, VIDC_SESSION_TYPE_DEC, 200, 10 },
> +};
> +
> +static const struct venus_hfi_platform_data hfi4_data = {
> +	.codec_freq_data = hfi4_codec_freq_data,
> +	.codec_freq_data_size = ARRAY_SIZE(hfi4_codec_freq_data),
> +};
> +
> +const struct venus_hfi_platform_data *venus_get_hfi_platform
> +	(enum hfi_version version)

It would be better to have:

struct hfi_platform *hfi_platform_get(version)

and all functions in hfi_platform.c should be prefixed with hfi_platform_xxx

> +{
> +	switch (version) {
> +	case HFI_VERSION_4XX:
> +		return &hfi4_data;

s/hfi4_data/hfi_data_v4/

this is the style for the whole driver please follow it (see
pm-helpers.c for example).

> +	default:
> +		return NULL;
> +	}
> +	return NULL;
> +}
> +
> diff --git a/drivers/media/platform/qcom/venus/hfi_platform_data.h b/drivers/media/platform/qcom/venus/hfi_platform_data.h
> new file mode 100644
> index 0000000..1b4bfb6
> --- /dev/null
> +++ b/drivers/media/platform/qcom/venus/hfi_platform_data.h
> @@ -0,0 +1,27 @@
> +/* SPDX-License-Identifier: GPL-2.0-only */
> +/*
> + * Copyright (c) 2020, The Linux Foundation. All rights reserved.
> + */
> +
> +#ifndef __HFI_PLATFORM_DATA_H__
> +#define __HFI_PLATFORM_DATA_H__

just __HFI_PLATFORM_H__ please.

we will have hfi_platform function pointers too.

> +
> +#include "core.h"
> +
> +struct codec_freq_data {
> +	u32 pixfmt;
> +	u32 session_type;
> +	unsigned long vpp_freq;
> +	unsigned long vsp_freq;
> +};
> +
> +struct venus_hfi_platform_data {

please rename to hfi_platform

> +	const struct codec_freq_data *codec_freq_data;
> +	unsigned int codec_freq_data_size;
> +};
> +
> +const struct venus_hfi_platform_data *venus_get_hfi_platform
> +	(enum hfi_version version);
> +
> +#endif
> +
> diff --git a/drivers/media/platform/qcom/venus/pm_helpers.c b/drivers/media/platform/qcom/venus/pm_helpers.c
> index f33fc70..4ed5689 100644
> --- a/drivers/media/platform/qcom/venus/pm_helpers.c
> +++ b/drivers/media/platform/qcom/venus/pm_helpers.c
> @@ -17,6 +17,7 @@
>  #include "hfi_parser.h"
>  #include "hfi_venus_io.h"
>  #include "pm_helpers.h"
> +#include "hfi_platform_data.h"

s/hfi_platform_data.h/hfi_platform.h/
diff mbox series

Patch

diff --git a/drivers/media/platform/qcom/venus/Makefile b/drivers/media/platform/qcom/venus/Makefile
index dfc6368..3878bc9 100644
--- a/drivers/media/platform/qcom/venus/Makefile
+++ b/drivers/media/platform/qcom/venus/Makefile
@@ -3,7 +3,8 @@ 
 
 venus-core-objs += core.o helpers.o firmware.o \
 		   hfi_venus.o hfi_msgs.o hfi_cmds.o hfi.o \
-		   hfi_parser.o pm_helpers.o dbgfs.o
+		   hfi_parser.o pm_helpers.o dbgfs.o \
+		   hfi_platform_data.o
 
 venus-dec-objs += vdec.o vdec_ctrls.o
 venus-enc-objs += venc.o venc_ctrls.o
diff --git a/drivers/media/platform/qcom/venus/core.c b/drivers/media/platform/qcom/venus/core.c
index bbb394c..4fde4aa 100644
--- a/drivers/media/platform/qcom/venus/core.c
+++ b/drivers/media/platform/qcom/venus/core.c
@@ -20,6 +20,7 @@ 
 #include "core.h"
 #include "firmware.h"
 #include "pm_helpers.h"
+#include "hfi_platform_data.h"
 
 static void venus_event_notify(struct venus_core *core, u32 event)
 {
@@ -222,6 +223,8 @@  static int venus_probe(struct platform_device *pdev)
 			return ret;
 	}
 
+	core->hfi_data = venus_get_hfi_platform(core->res->hfi_version);
+
 	ret = dma_set_mask_and_coherent(dev, core->res->dma_mask);
 	if (ret)
 		return ret;
@@ -461,17 +464,6 @@  static __maybe_unused int venus_runtime_resume(struct device *dev)
 	{  244800, 100000000 },	/* 1920x1080@30 */
 };
 
-static const struct codec_freq_data sdm845_codec_freq_data[] =  {
-	{ V4L2_PIX_FMT_H264, VIDC_SESSION_TYPE_ENC, 675, 10 },
-	{ V4L2_PIX_FMT_HEVC, VIDC_SESSION_TYPE_ENC, 675, 10 },
-	{ V4L2_PIX_FMT_VP8, VIDC_SESSION_TYPE_ENC, 675, 10 },
-	{ V4L2_PIX_FMT_MPEG2, VIDC_SESSION_TYPE_DEC, 200, 10 },
-	{ V4L2_PIX_FMT_H264, VIDC_SESSION_TYPE_DEC, 200, 10 },
-	{ V4L2_PIX_FMT_HEVC, VIDC_SESSION_TYPE_DEC, 200, 10 },
-	{ V4L2_PIX_FMT_VP8, VIDC_SESSION_TYPE_DEC, 200, 10 },
-	{ V4L2_PIX_FMT_VP9, VIDC_SESSION_TYPE_DEC, 200, 10 },
-};
-
 static const struct bw_tbl sdm845_bw_table_enc[] = {
 	{ 1944000, 1612000, 0, 2416000, 0 },	/* 3840x2160@60 */
 	{  972000,  951000, 0, 1434000, 0 },	/* 3840x2160@30 */
@@ -493,8 +485,6 @@  static __maybe_unused int venus_runtime_resume(struct device *dev)
 	.bw_tbl_enc_size = ARRAY_SIZE(sdm845_bw_table_enc),
 	.bw_tbl_dec = sdm845_bw_table_dec,
 	.bw_tbl_dec_size = ARRAY_SIZE(sdm845_bw_table_dec),
-	.codec_freq_data = sdm845_codec_freq_data,
-	.codec_freq_data_size = ARRAY_SIZE(sdm845_codec_freq_data),
 	.clks = {"core", "iface", "bus" },
 	.clks_num = 3,
 	.vcodec0_clks = { "core", "bus" },
@@ -516,8 +506,6 @@  static __maybe_unused int venus_runtime_resume(struct device *dev)
 	.bw_tbl_enc_size = ARRAY_SIZE(sdm845_bw_table_enc),
 	.bw_tbl_dec = sdm845_bw_table_dec,
 	.bw_tbl_dec_size = ARRAY_SIZE(sdm845_bw_table_dec),
-	.codec_freq_data = sdm845_codec_freq_data,
-	.codec_freq_data_size = ARRAY_SIZE(sdm845_codec_freq_data),
 	.clks = {"core", "iface", "bus" },
 	.clks_num = 3,
 	.vcodec0_clks = { "vcodec0_core", "vcodec0_bus" },
@@ -562,8 +550,6 @@  static __maybe_unused int venus_runtime_resume(struct device *dev)
 	.bw_tbl_enc_size = ARRAY_SIZE(sc7180_bw_table_enc),
 	.bw_tbl_dec = sc7180_bw_table_dec,
 	.bw_tbl_dec_size = ARRAY_SIZE(sc7180_bw_table_dec),
-	.codec_freq_data = sdm845_codec_freq_data,
-	.codec_freq_data_size = ARRAY_SIZE(sdm845_codec_freq_data),
 	.clks = {"core", "iface", "bus" },
 	.clks_num = 3,
 	.vcodec0_clks = { "vcodec0_core", "vcodec0_bus" },
diff --git a/drivers/media/platform/qcom/venus/core.h b/drivers/media/platform/qcom/venus/core.h
index 82438f1..86dc443 100644
--- a/drivers/media/platform/qcom/venus/core.h
+++ b/drivers/media/platform/qcom/venus/core.h
@@ -34,13 +34,6 @@  struct reg_val {
 	u32 value;
 };
 
-struct codec_freq_data {
-	u32 pixfmt;
-	u32 session_type;
-	unsigned long vpp_freq;
-	unsigned long vsp_freq;
-};
-
 struct bw_tbl {
 	u32 mbs_per_sec;
 	u32 avg;
@@ -59,8 +52,6 @@  struct venus_resources {
 	unsigned int bw_tbl_dec_size;
 	const struct reg_val *reg_tbl;
 	unsigned int reg_tbl_size;
-	const struct codec_freq_data *codec_freq_data;
-	unsigned int codec_freq_data_size;
 	const char * const clks[VIDC_CLKS_NUM_MAX];
 	unsigned int clks_num;
 	const char * const vcodec0_clks[VIDC_VCODEC_CLKS_NUM_MAX];
@@ -176,6 +167,7 @@  struct venus_core {
 	bool sys_error;
 	const struct hfi_core_ops *core_ops;
 	const struct venus_pm_ops *pm_ops;
+	const struct venus_hfi_platform_data *hfi_data;
 	struct mutex pm_lock;
 	unsigned long enc_codecs;
 	unsigned long dec_codecs;
diff --git a/drivers/media/platform/qcom/venus/helpers.c b/drivers/media/platform/qcom/venus/helpers.c
index 115a9a2..62d1197 100644
--- a/drivers/media/platform/qcom/venus/helpers.c
+++ b/drivers/media/platform/qcom/venus/helpers.c
@@ -14,6 +14,7 @@ 
 #include "helpers.h"
 #include "hfi_helper.h"
 #include "pm_helpers.h"
+#include "hfi_platform_data.h"
 
 struct intbuf {
 	struct list_head list;
@@ -811,8 +812,9 @@  int venus_helper_init_codec_freq_data(struct venus_inst *inst)
 	if (!IS_V4(inst->core))
 		return 0;
 
-	data = inst->core->res->codec_freq_data;
-	data_size = inst->core->res->codec_freq_data_size;
+	data = inst->core->hfi_data->codec_freq_data;
+	data_size = inst->core->hfi_data->codec_freq_data_size;
+
 	pixfmt = inst->session_type == VIDC_SESSION_TYPE_DEC ?
 			inst->fmt_out->pixfmt : inst->fmt_cap->pixfmt;
 
diff --git a/drivers/media/platform/qcom/venus/hfi_platform_data.c b/drivers/media/platform/qcom/venus/hfi_platform_data.c
new file mode 100644
index 0000000..9d9035f
--- /dev/null
+++ b/drivers/media/platform/qcom/venus/hfi_platform_data.c
@@ -0,0 +1,35 @@ 
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (c) 2020, The Linux Foundation. All rights reserved.
+ */
+#include "hfi_platform_data.h"
+#include "core.h"
+
+static struct codec_freq_data hfi4_codec_freq_data[] =  {
+{ V4L2_PIX_FMT_H264, VIDC_SESSION_TYPE_ENC, 675, 10 },
+	{ V4L2_PIX_FMT_HEVC, VIDC_SESSION_TYPE_ENC, 675, 10 },
+	{ V4L2_PIX_FMT_VP8, VIDC_SESSION_TYPE_ENC, 675, 10 },
+	{ V4L2_PIX_FMT_MPEG2, VIDC_SESSION_TYPE_DEC, 200, 10 },
+	{ V4L2_PIX_FMT_H264, VIDC_SESSION_TYPE_DEC, 200, 10 },
+	{ V4L2_PIX_FMT_HEVC, VIDC_SESSION_TYPE_DEC, 200, 10 },
+	{ V4L2_PIX_FMT_VP8, VIDC_SESSION_TYPE_DEC, 200, 10 },
+	{ V4L2_PIX_FMT_VP9, VIDC_SESSION_TYPE_DEC, 200, 10 },
+};
+
+static const struct venus_hfi_platform_data hfi4_data = {
+	.codec_freq_data = hfi4_codec_freq_data,
+	.codec_freq_data_size = ARRAY_SIZE(hfi4_codec_freq_data),
+};
+
+const struct venus_hfi_platform_data *venus_get_hfi_platform
+	(enum hfi_version version)
+{
+	switch (version) {
+	case HFI_VERSION_4XX:
+		return &hfi4_data;
+	default:
+		return NULL;
+	}
+	return NULL;
+}
+
diff --git a/drivers/media/platform/qcom/venus/hfi_platform_data.h b/drivers/media/platform/qcom/venus/hfi_platform_data.h
new file mode 100644
index 0000000..1b4bfb6
--- /dev/null
+++ b/drivers/media/platform/qcom/venus/hfi_platform_data.h
@@ -0,0 +1,27 @@ 
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (c) 2020, The Linux Foundation. All rights reserved.
+ */
+
+#ifndef __HFI_PLATFORM_DATA_H__
+#define __HFI_PLATFORM_DATA_H__
+
+#include "core.h"
+
+struct codec_freq_data {
+	u32 pixfmt;
+	u32 session_type;
+	unsigned long vpp_freq;
+	unsigned long vsp_freq;
+};
+
+struct venus_hfi_platform_data {
+	const struct codec_freq_data *codec_freq_data;
+	unsigned int codec_freq_data_size;
+};
+
+const struct venus_hfi_platform_data *venus_get_hfi_platform
+	(enum hfi_version version);
+
+#endif
+
diff --git a/drivers/media/platform/qcom/venus/pm_helpers.c b/drivers/media/platform/qcom/venus/pm_helpers.c
index f33fc70..4ed5689 100644
--- a/drivers/media/platform/qcom/venus/pm_helpers.c
+++ b/drivers/media/platform/qcom/venus/pm_helpers.c
@@ -17,6 +17,7 @@ 
 #include "hfi_parser.h"
 #include "hfi_venus_io.h"
 #include "pm_helpers.h"
+#include "hfi_platform_data.h"
 
 static bool legacy_binding;