Re: [PATCH] venus: Add platform specific capabilities

2020-07-06 Thread Stanimir Varbanov



On 5/29/20 10:18 AM, Dikshita Agarwal wrote:
> Add platform specific capabilities and use them
> in place of firmware capabilities.
> 
> Signed-off-by: Dikshita Agarwal 
> ---
>  drivers/media/platform/qcom/venus/core.c   |   3 +
>  drivers/media/platform/qcom/venus/hfi_helper.h |   3 +-
>  drivers/media/platform/qcom/venus/hfi_parser.c |  21 +--
>  .../media/platform/qcom/venus/hfi_platform_data.c  | 153 
> -
>  .../media/platform/qcom/venus/hfi_platform_data.h  |  37 -
>  5 files changed, 193 insertions(+), 24 deletions(-)
> 
> diff --git a/drivers/media/platform/qcom/venus/core.c 
> b/drivers/media/platform/qcom/venus/core.c
> index 4fde4aa..8221e5c 100644
> --- a/drivers/media/platform/qcom/venus/core.c
> +++ b/drivers/media/platform/qcom/venus/core.c
> @@ -273,6 +273,9 @@ static int venus_probe(struct platform_device *pdev)
>   if (ret)
>   goto err_venus_shutdown;
>  
> + if (core->hfi_data && core->hfi_data->venus_parse_resources)
> + venus_parse_resources(core);
> +
>   ret = hfi_core_init(core);
>   if (ret)
>   goto err_venus_shutdown;
> diff --git a/drivers/media/platform/qcom/venus/hfi_helper.h 
> b/drivers/media/platform/qcom/venus/hfi_helper.h
> index f6613df..1671012 100644
> --- a/drivers/media/platform/qcom/venus/hfi_helper.h
> +++ b/drivers/media/platform/qcom/venus/hfi_helper.h
> @@ -520,7 +520,8 @@
>  enum hfi_version {
>   HFI_VERSION_1XX,
>   HFI_VERSION_3XX,
> - HFI_VERSION_4XX
> + HFI_VERSION_4XX,
> + HFI_VERSION_6XX
>  };
>  
>  struct hfi_buffer_info {
> diff --git a/drivers/media/platform/qcom/venus/hfi_parser.c 
> b/drivers/media/platform/qcom/venus/hfi_parser.c
> index 7f515a4..b4b60e1 100644
> --- a/drivers/media/platform/qcom/venus/hfi_parser.c
> +++ b/drivers/media/platform/qcom/venus/hfi_parser.c
> @@ -10,30 +10,11 @@
>  #include "core.h"
>  #include "hfi_helper.h"
>  #include "hfi_parser.h"
> +#include "hfi_platform_data.h"
>  
>  typedef void (*func)(struct venus_caps *cap, const void *data,
>unsigned int size);
>  
> -static void init_codecs(struct venus_core *core)
> -{
> - struct venus_caps *caps = core->caps, *cap;
> - unsigned long bit;
> -
> - for_each_set_bit(bit, >dec_codecs, MAX_CODEC_NUM) {
> - cap = [core->codecs_count++];
> - cap->codec = BIT(bit);
> - cap->domain = VIDC_SESSION_TYPE_DEC;
> - cap->valid = false;
> - }
> -
> - for_each_set_bit(bit, >enc_codecs, MAX_CODEC_NUM) {
> - cap = [core->codecs_count++];
> - cap->codec = BIT(bit);
> - cap->domain = VIDC_SESSION_TYPE_ENC;
> - cap->valid = false;
> - }
> -}
> -

Please keep this function in hfi_parse.c and make a copy here. I don't
want to make such cross dependency between hfi_parse and hfi_platform.
Once we are in good shape with hfi_platform we could drop the hfi_parser
completely and don't rely on firmware.

>  static void for_each_codec(struct venus_caps *caps, unsigned int caps_num,
>  u32 codecs, u32 domain, func cb, void *data,
>  unsigned int size)
> diff --git a/drivers/media/platform/qcom/venus/hfi_platform_data.c 
> b/drivers/media/platform/qcom/venus/hfi_platform_data.c
> index 9d9035f..fc838f5 100644
> --- a/drivers/media/platform/qcom/venus/hfi_platform_data.c
> +++ b/drivers/media/platform/qcom/venus/hfi_platform_data.c
> @@ -5,8 +5,132 @@
>  #include "hfi_platform_data.h"
>  #include "core.h"
>  
> +void init_codecs(struct venus_core *core)
> +{
> + struct venus_caps *caps = core->caps, *cap;
> + unsigned long bit;
> +
> + for_each_set_bit(bit, >dec_codecs, MAX_CODEC_NUM) {
> + cap = [core->codecs_count++];
> + cap->codec = BIT(bit);
> + cap->domain = VIDC_SESSION_TYPE_DEC;
> + cap->valid = false;
> + }
> +
> + for_each_set_bit(bit, >enc_codecs, MAX_CODEC_NUM) {
> + cap = [core->codecs_count++];
> + cap->codec = BIT(bit);
> + cap->domain = VIDC_SESSION_TYPE_ENC;
> + cap->valid = false;
> + }
> +}
> +
> +static void parse_codecs(struct venus_core *core)

s/parse_codecs/fill_codecs/

> +{
> + const struct venus_hfi_platform_data *hfi_data = core->hfi_data;
> + const struct venus_codecs *codecs = hfi_data->venus_codecs;
> + unsigned int i, codecs_size;
> +
> + core->enc_codecs = 0;
> + core->dec_codecs = 0;
> + codecs_size = hfi_data->venus_codecs_size;
> +
> + for (i = 0; i < codecs_size; i++) {
> + if (codecs[i].domain == VIDC_SESSION_TYPE_ENC)
> + core->enc_codecs |= codecs[i].codecs;
> + else
> + core->dec_codecs |= codecs[i].codecs;
> + }
> + init_codecs(core);
> +}
> +
> +static int fill_raw_fmt(struct venus_capability *hfi_data_caps,
> + struct 

Re: [PATCH] venus: Add platform specific capabilities

2020-06-24 Thread dikshita

Hi Stanimir,

A gentle reminder for the review.

Thanks,
Dikshita
On 2020-05-29 12:48, Dikshita Agarwal wrote:

Add platform specific capabilities and use them
in place of firmware capabilities.

Signed-off-by: Dikshita Agarwal 
---
 drivers/media/platform/qcom/venus/core.c   |   3 +
 drivers/media/platform/qcom/venus/hfi_helper.h |   3 +-
 drivers/media/platform/qcom/venus/hfi_parser.c |  21 +--
 .../media/platform/qcom/venus/hfi_platform_data.c  | 153 
-

 .../media/platform/qcom/venus/hfi_platform_data.h  |  37 -
 5 files changed, 193 insertions(+), 24 deletions(-)

diff --git a/drivers/media/platform/qcom/venus/core.c
b/drivers/media/platform/qcom/venus/core.c
index 4fde4aa..8221e5c 100644
--- a/drivers/media/platform/qcom/venus/core.c
+++ b/drivers/media/platform/qcom/venus/core.c
@@ -273,6 +273,9 @@ static int venus_probe(struct platform_device 
*pdev)

if (ret)
goto err_venus_shutdown;

+   if (core->hfi_data && core->hfi_data->venus_parse_resources)
+   venus_parse_resources(core);
+
ret = hfi_core_init(core);
if (ret)
goto err_venus_shutdown;
diff --git a/drivers/media/platform/qcom/venus/hfi_helper.h
b/drivers/media/platform/qcom/venus/hfi_helper.h
index f6613df..1671012 100644
--- a/drivers/media/platform/qcom/venus/hfi_helper.h
+++ b/drivers/media/platform/qcom/venus/hfi_helper.h
@@ -520,7 +520,8 @@
 enum hfi_version {
HFI_VERSION_1XX,
HFI_VERSION_3XX,
-   HFI_VERSION_4XX
+   HFI_VERSION_4XX,
+   HFI_VERSION_6XX
 };

 struct hfi_buffer_info {
diff --git a/drivers/media/platform/qcom/venus/hfi_parser.c
b/drivers/media/platform/qcom/venus/hfi_parser.c
index 7f515a4..b4b60e1 100644
--- a/drivers/media/platform/qcom/venus/hfi_parser.c
+++ b/drivers/media/platform/qcom/venus/hfi_parser.c
@@ -10,30 +10,11 @@
 #include "core.h"
 #include "hfi_helper.h"
 #include "hfi_parser.h"
+#include "hfi_platform_data.h"

 typedef void (*func)(struct venus_caps *cap, const void *data,
 unsigned int size);

-static void init_codecs(struct venus_core *core)
-{
-   struct venus_caps *caps = core->caps, *cap;
-   unsigned long bit;
-
-   for_each_set_bit(bit, >dec_codecs, MAX_CODEC_NUM) {
-   cap = [core->codecs_count++];
-   cap->codec = BIT(bit);
-   cap->domain = VIDC_SESSION_TYPE_DEC;
-   cap->valid = false;
-   }
-
-   for_each_set_bit(bit, >enc_codecs, MAX_CODEC_NUM) {
-   cap = [core->codecs_count++];
-   cap->codec = BIT(bit);
-   cap->domain = VIDC_SESSION_TYPE_ENC;
-   cap->valid = false;
-   }
-}
-
 static void for_each_codec(struct venus_caps *caps, unsigned int 
caps_num,

   u32 codecs, u32 domain, func cb, void *data,
   unsigned int size)
diff --git a/drivers/media/platform/qcom/venus/hfi_platform_data.c
b/drivers/media/platform/qcom/venus/hfi_platform_data.c
index 9d9035f..fc838f5 100644
--- a/drivers/media/platform/qcom/venus/hfi_platform_data.c
+++ b/drivers/media/platform/qcom/venus/hfi_platform_data.c
@@ -5,8 +5,132 @@
 #include "hfi_platform_data.h"
 #include "core.h"

+void init_codecs(struct venus_core *core)
+{
+   struct venus_caps *caps = core->caps, *cap;
+   unsigned long bit;
+
+   for_each_set_bit(bit, >dec_codecs, MAX_CODEC_NUM) {
+   cap = [core->codecs_count++];
+   cap->codec = BIT(bit);
+   cap->domain = VIDC_SESSION_TYPE_DEC;
+   cap->valid = false;
+   }
+
+   for_each_set_bit(bit, >enc_codecs, MAX_CODEC_NUM) {
+   cap = [core->codecs_count++];
+   cap->codec = BIT(bit);
+   cap->domain = VIDC_SESSION_TYPE_ENC;
+   cap->valid = false;
+   }
+}
+
+static void parse_codecs(struct venus_core *core)
+{
+   const struct venus_hfi_platform_data *hfi_data = core->hfi_data;
+   const struct venus_codecs *codecs = hfi_data->venus_codecs;
+   unsigned int i, codecs_size;
+
+   core->enc_codecs = 0;
+   core->dec_codecs = 0;
+   codecs_size = hfi_data->venus_codecs_size;
+
+   for (i = 0; i < codecs_size; i++) {
+   if (codecs[i].domain == VIDC_SESSION_TYPE_ENC)
+   core->enc_codecs |= codecs[i].codecs;
+   else
+   core->dec_codecs |= codecs[i].codecs;
+   }
+   init_codecs(core);
+}
+
+static int fill_raw_fmt(struct venus_capability *hfi_data_caps,
+   struct venus_caps *core_caps)
+{
+   if ((core_caps->num_pl + 1) == HFI_MAX_PROFILE_COUNT)
+   return -EINVAL;
+
+   core_caps->fmts[core_caps->num_fmts].buftype =
+   hfi_data_caps->capability_type;
+   core_caps->fmts[core_caps->num_fmts].fmt =
+   hfi_data_caps->defaul_value;
+   core_caps->num_fmts += 1;
+
+   return 0;
+}

[PATCH] venus: Add platform specific capabilities

2020-05-29 Thread Dikshita Agarwal
Add platform specific capabilities and use them
in place of firmware capabilities.

Signed-off-by: Dikshita Agarwal 
---
 drivers/media/platform/qcom/venus/core.c   |   3 +
 drivers/media/platform/qcom/venus/hfi_helper.h |   3 +-
 drivers/media/platform/qcom/venus/hfi_parser.c |  21 +--
 .../media/platform/qcom/venus/hfi_platform_data.c  | 153 -
 .../media/platform/qcom/venus/hfi_platform_data.h  |  37 -
 5 files changed, 193 insertions(+), 24 deletions(-)

diff --git a/drivers/media/platform/qcom/venus/core.c 
b/drivers/media/platform/qcom/venus/core.c
index 4fde4aa..8221e5c 100644
--- a/drivers/media/platform/qcom/venus/core.c
+++ b/drivers/media/platform/qcom/venus/core.c
@@ -273,6 +273,9 @@ static int venus_probe(struct platform_device *pdev)
if (ret)
goto err_venus_shutdown;
 
+   if (core->hfi_data && core->hfi_data->venus_parse_resources)
+   venus_parse_resources(core);
+
ret = hfi_core_init(core);
if (ret)
goto err_venus_shutdown;
diff --git a/drivers/media/platform/qcom/venus/hfi_helper.h 
b/drivers/media/platform/qcom/venus/hfi_helper.h
index f6613df..1671012 100644
--- a/drivers/media/platform/qcom/venus/hfi_helper.h
+++ b/drivers/media/platform/qcom/venus/hfi_helper.h
@@ -520,7 +520,8 @@
 enum hfi_version {
HFI_VERSION_1XX,
HFI_VERSION_3XX,
-   HFI_VERSION_4XX
+   HFI_VERSION_4XX,
+   HFI_VERSION_6XX
 };
 
 struct hfi_buffer_info {
diff --git a/drivers/media/platform/qcom/venus/hfi_parser.c 
b/drivers/media/platform/qcom/venus/hfi_parser.c
index 7f515a4..b4b60e1 100644
--- a/drivers/media/platform/qcom/venus/hfi_parser.c
+++ b/drivers/media/platform/qcom/venus/hfi_parser.c
@@ -10,30 +10,11 @@
 #include "core.h"
 #include "hfi_helper.h"
 #include "hfi_parser.h"
+#include "hfi_platform_data.h"
 
 typedef void (*func)(struct venus_caps *cap, const void *data,
 unsigned int size);
 
-static void init_codecs(struct venus_core *core)
-{
-   struct venus_caps *caps = core->caps, *cap;
-   unsigned long bit;
-
-   for_each_set_bit(bit, >dec_codecs, MAX_CODEC_NUM) {
-   cap = [core->codecs_count++];
-   cap->codec = BIT(bit);
-   cap->domain = VIDC_SESSION_TYPE_DEC;
-   cap->valid = false;
-   }
-
-   for_each_set_bit(bit, >enc_codecs, MAX_CODEC_NUM) {
-   cap = [core->codecs_count++];
-   cap->codec = BIT(bit);
-   cap->domain = VIDC_SESSION_TYPE_ENC;
-   cap->valid = false;
-   }
-}
-
 static void for_each_codec(struct venus_caps *caps, unsigned int caps_num,
   u32 codecs, u32 domain, func cb, void *data,
   unsigned int size)
diff --git a/drivers/media/platform/qcom/venus/hfi_platform_data.c 
b/drivers/media/platform/qcom/venus/hfi_platform_data.c
index 9d9035f..fc838f5 100644
--- a/drivers/media/platform/qcom/venus/hfi_platform_data.c
+++ b/drivers/media/platform/qcom/venus/hfi_platform_data.c
@@ -5,8 +5,132 @@
 #include "hfi_platform_data.h"
 #include "core.h"
 
+void init_codecs(struct venus_core *core)
+{
+   struct venus_caps *caps = core->caps, *cap;
+   unsigned long bit;
+
+   for_each_set_bit(bit, >dec_codecs, MAX_CODEC_NUM) {
+   cap = [core->codecs_count++];
+   cap->codec = BIT(bit);
+   cap->domain = VIDC_SESSION_TYPE_DEC;
+   cap->valid = false;
+   }
+
+   for_each_set_bit(bit, >enc_codecs, MAX_CODEC_NUM) {
+   cap = [core->codecs_count++];
+   cap->codec = BIT(bit);
+   cap->domain = VIDC_SESSION_TYPE_ENC;
+   cap->valid = false;
+   }
+}
+
+static void parse_codecs(struct venus_core *core)
+{
+   const struct venus_hfi_platform_data *hfi_data = core->hfi_data;
+   const struct venus_codecs *codecs = hfi_data->venus_codecs;
+   unsigned int i, codecs_size;
+
+   core->enc_codecs = 0;
+   core->dec_codecs = 0;
+   codecs_size = hfi_data->venus_codecs_size;
+
+   for (i = 0; i < codecs_size; i++) {
+   if (codecs[i].domain == VIDC_SESSION_TYPE_ENC)
+   core->enc_codecs |= codecs[i].codecs;
+   else
+   core->dec_codecs |= codecs[i].codecs;
+   }
+   init_codecs(core);
+}
+
+static int fill_raw_fmt(struct venus_capability *hfi_data_caps,
+   struct venus_caps *core_caps)
+{
+   if ((core_caps->num_pl + 1) == HFI_MAX_PROFILE_COUNT)
+   return -EINVAL;
+
+   core_caps->fmts[core_caps->num_fmts].buftype =
+   hfi_data_caps->capability_type;
+   core_caps->fmts[core_caps->num_fmts].fmt =
+   hfi_data_caps->defaul_value;
+   core_caps->num_fmts += 1;
+
+   return 0;
+}
+
+static int fill_profile(struct venus_capability *hfi_data_caps,
+   struct venus_caps