lkml.org 
[lkml]   [2019]   [Jul]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH v3 1/4] media: venus: Add codec data table
Hi Stan,

On 2019-07-01 17:13, Stanimir Varbanov wrote:
> On 6/25/19 7:27 PM, Aniket Masule wrote:
>> Add vpp cycles for for different types of codec
>> It indicates the cycles required by video hardware
>> to process each macroblock. Initialize the codec
>> data with core resources.
>>
>> Signed-off-by: Aniket Masule <amasule@codeaurora.org>
>> ---
>> drivers/media/platform/qcom/venus/core.c | 13 +++++++++++++
>> drivers/media/platform/qcom/venus/core.h | 15 +++++++++++++++
>> drivers/media/platform/qcom/venus/helpers.c | 30
>> +++++++++++++++++++++++++++++
>> drivers/media/platform/qcom/venus/helpers.h | 1 +
>> drivers/media/platform/qcom/venus/vdec.c | 4 ++++
>> drivers/media/platform/qcom/venus/venc.c | 4 ++++
>> 6 files changed, 67 insertions(+)
>>
>> diff --git a/drivers/media/platform/qcom/venus/core.c
>> b/drivers/media/platform/qcom/venus/core.c
>> index 7393667..f1597d6 100644
>> --- a/drivers/media/platform/qcom/venus/core.c
>> +++ b/drivers/media/platform/qcom/venus/core.c
>> @@ -473,9 +473,22 @@ static __maybe_unused int
>> venus_runtime_resume(struct device *dev)
>> { 244800, 100000000 }, /* 1920x1080@30 */
>> };
>>
>> +static struct codec_freq_data sdm845_codec_freq_data[] = {
>> + { V4L2_PIX_FMT_H264, VIDC_SESSION_TYPE_ENC, 675 },
>> + { V4L2_PIX_FMT_HEVC, VIDC_SESSION_TYPE_ENC, 675 },
>> + { V4L2_PIX_FMT_VP8, VIDC_SESSION_TYPE_ENC, 675 },
>> + { V4L2_PIX_FMT_MPEG2, VIDC_SESSION_TYPE_DEC, 200 },
>> + { V4L2_PIX_FMT_H264, VIDC_SESSION_TYPE_DEC, 200 },
>> + { V4L2_PIX_FMT_HEVC, VIDC_SESSION_TYPE_DEC, 200 },
>> + { V4L2_PIX_FMT_VP8, VIDC_SESSION_TYPE_DEC, 200 },
>> + { V4L2_PIX_FMT_VP9, VIDC_SESSION_TYPE_DEC, 200 },
>> +};
>> +
>> static const struct venus_resources sdm845_res = {
>> .freq_tbl = sdm845_freq_table,
>> .freq_tbl_size = ARRAY_SIZE(sdm845_freq_table),
>> + .codec_freq_data = sdm845_codec_freq_data,
>> + .codec_freq_data_size = ARRAY_SIZE(sdm845_codec_freq_data),
>> .clks = {"core", "iface", "bus" },
>> .clks_num = 3,
>> .max_load = 2563200,
>> diff --git a/drivers/media/platform/qcom/venus/core.h
>> b/drivers/media/platform/qcom/venus/core.h
>> index 7a3feb5..2ed6496 100644
>> --- a/drivers/media/platform/qcom/venus/core.h
>> +++ b/drivers/media/platform/qcom/venus/core.h
>> @@ -35,12 +35,20 @@ struct reg_val {
>> u32 value;
>> };
>>
>> +struct codec_freq_data {
>> + u32 pixfmt;
>> + u32 session_type;
>> + unsigned int vpp_freq;
>
> isn't unsigned long more suitable?
>
The hard-coded values for this vpp will be in few hundreds.
So, unsigned int would be fine.
>> +};
>> +
>> struct venus_resources {
>> u64 dma_mask;
>> const struct freq_tbl *freq_tbl;
>> unsigned int freq_tbl_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;
>> enum hfi_version hfi_version;
>> @@ -216,6 +224,12 @@ struct venus_buffer {
>> struct list_head ref_list;
>> };
>>
>> +struct clock_data {
>> + u32 core_id;
>> + unsigned long freq;
>> + struct codec_freq_data *codec_freq_data;
>> +};
>> +
>> #define to_venus_buffer(ptr) container_of(ptr, struct venus_buffer,
>> vb)
>>
>> /**
>> @@ -275,6 +289,7 @@ struct venus_inst {
>> struct list_head list;
>> struct mutex lock;
>> struct venus_core *core;
>> + struct clock_data clk_data;
>> struct list_head dpbbufs;
>> struct list_head internalbufs;
>> struct list_head registeredbufs;
>> diff --git a/drivers/media/platform/qcom/venus/helpers.c
>> b/drivers/media/platform/qcom/venus/helpers.c
>> index 5cad601..f7f724b 100644
>> --- a/drivers/media/platform/qcom/venus/helpers.c
>> +++ b/drivers/media/platform/qcom/venus/helpers.c
>> @@ -715,6 +715,36 @@ int venus_helper_set_core_usage(struct venus_inst
>> *inst, u32 usage)
>> }
>> EXPORT_SYMBOL_GPL(venus_helper_set_core_usage);
>>
>> +int venus_helper_init_codec_data(struct venus_inst *inst)
>> +{
>> + const struct codec_data *codec_data;
>
> Something is wrong here, there is no prototype of struct codec_data.
Something went wrong during git rebase, will correct this.


Regards,
Aniket

\
 
 \ /
  Last update: 2019-07-02 06:56    [W:0.079 / U:0.072 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site