diff mbox series

[21/25] media: venus: helpers: Add internal buffer list for v6

Message ID 20210222160300.1811121-22-bryan.odonoghue@linaro.org
State New
Headers show
Series media: venus: Enable 6xx support | expand

Commit Message

Bryan O'Donoghue Feb. 22, 2021, 4:02 p.m. UTC
From: Dikshita Agarwal <dikshita@codeaurora.org>


- Internal buffers required by v6 are different than v4,
  add new list of internal buffers for v6.
- Differentiate encoder/decoder buffers for 6xx

Signed-off-by: Dikshita Agarwal <dikshita@codeaurora.org>

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>

---
 drivers/media/platform/qcom/venus/helpers.c   | 23 ++++++++++++++++++-
 .../media/platform/qcom/venus/hfi_helper.h    |  9 +++++---
 2 files changed, 28 insertions(+), 4 deletions(-)

-- 
2.29.2

Comments

Stanimir Varbanov Feb. 25, 2021, 7:57 a.m. UTC | #1
On 2/22/21 6:02 PM, Bryan O'Donoghue wrote:
> From: Dikshita Agarwal <dikshita@codeaurora.org>

> 

> - Internal buffers required by v6 are different than v4,

>   add new list of internal buffers for v6.

> - Differentiate encoder/decoder buffers for 6xx

> 

> Signed-off-by: Dikshita Agarwal <dikshita@codeaurora.org>

> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>

> ---

>  drivers/media/platform/qcom/venus/helpers.c   | 23 ++++++++++++++++++-

>  .../media/platform/qcom/venus/hfi_helper.h    |  9 +++++---

>  2 files changed, 28 insertions(+), 4 deletions(-)

> 

> diff --git a/drivers/media/platform/qcom/venus/helpers.c b/drivers/media/platform/qcom/venus/helpers.c

> index 2515a2225614..f0413236a56f 100644

> --- a/drivers/media/platform/qcom/venus/helpers.c

> +++ b/drivers/media/platform/qcom/venus/helpers.c

> @@ -279,13 +279,34 @@ static const unsigned int intbuf_types_4xx[] = {

>  	HFI_BUFFER_INTERNAL_PERSIST_1,

>  };

>  

> +static const unsigned int intbuf_types_6xx_enc[] = {

> +	HFI_BUFFER_INTERNAL_SCRATCH(HFI_VERSION_6XX),

> +	HFI_BUFFER_INTERNAL_SCRATCH_1(HFI_VERSION_6XX),

> +	HFI_BUFFER_INTERNAL_SCRATCH_2(HFI_VERSION_6XX),

> +	HFI_BUFFER_INTERNAL_PERSIST,

> +};

> +

> +static const unsigned int intbuf_types_6xx_dec[] = {

> +	HFI_BUFFER_INTERNAL_SCRATCH(HFI_VERSION_6XX),

> +	HFI_BUFFER_INTERNAL_SCRATCH_1(HFI_VERSION_6XX),

> +	HFI_BUFFER_INTERNAL_PERSIST_1,

> +};

> +


This division of decoder and encoder internal buffers smells like a
problem in hfi_plat_bufs_v6.c. I think we can modify the extracting of
buffer requirements in hfi_plat_bufs_v6.c so that they return
buffer_size as zero for internal buffer types which are not applicable
to the current session type. After this this intbuf_type_6xx will
combine both session types and will look like v1 and v4.

>  int venus_helper_intbufs_alloc(struct venus_inst *inst)

>  {

>  	const unsigned int *intbuf;

>  	size_t arr_sz, i;

>  	int ret;

>  

> -	if (IS_V4(inst->core)) {

> +	if (IS_V6(inst->core)) {

> +		if (inst->session_type == VIDC_SESSION_TYPE_DEC) {

> +			arr_sz = ARRAY_SIZE(intbuf_types_6xx_dec);

> +			intbuf = intbuf_types_6xx_dec;

> +		} else {

> +			arr_sz = ARRAY_SIZE(intbuf_types_6xx_enc);

> +			intbuf = intbuf_types_6xx_enc;

> +		}

> +	} else if (IS_V4(inst->core)) {

>  		arr_sz = ARRAY_SIZE(intbuf_types_4xx);

>  		intbuf = intbuf_types_4xx;

>  	} else {

> diff --git a/drivers/media/platform/qcom/venus/hfi_helper.h b/drivers/media/platform/qcom/venus/hfi_helper.h

> index 6b524c7cde5f..f367f43c9fb7 100644

> --- a/drivers/media/platform/qcom/venus/hfi_helper.h

> +++ b/drivers/media/platform/qcom/venus/hfi_helper.h

> @@ -395,11 +395,14 @@

>  #define HFI_BUFFER_INTERNAL_PERSIST		0x4

>  #define HFI_BUFFER_INTERNAL_PERSIST_1		0x5

>  #define HFI_BUFFER_INTERNAL_SCRATCH(ver)	\

> -	(((ver) == HFI_VERSION_4XX) ? 0x6 : 0x1000001)

> +	(((ver) == HFI_VERSION_4XX ||		\

> +	(ver) == HFI_VERSION_6XX) ? 0x6 : 0x1000001)

>  #define HFI_BUFFER_INTERNAL_SCRATCH_1(ver)	\

> -	(((ver) == HFI_VERSION_4XX) ? 0x7 : 0x1000005)

> +	(((ver) == HFI_VERSION_4XX ||		\

> +	(ver) == HFI_VERSION_6XX) ? 0x7 : 0x1000005)

>  #define HFI_BUFFER_INTERNAL_SCRATCH_2(ver)	\

> -	(((ver) == HFI_VERSION_4XX) ? 0x8 : 0x1000006)

> +	(((ver) == HFI_VERSION_4XX ||		\

> +	(ver) == HFI_VERSION_6XX) ? 0x8 : 0x1000006)

>  #define HFI_BUFFER_EXTRADATA_INPUT(ver)		\

>  	(((ver) == HFI_VERSION_4XX) ? 0xc : 0x1000002)

>  #define HFI_BUFFER_EXTRADATA_OUTPUT(ver)	\

> 


-- 
regards,
Stan
diff mbox series

Patch

diff --git a/drivers/media/platform/qcom/venus/helpers.c b/drivers/media/platform/qcom/venus/helpers.c
index 2515a2225614..f0413236a56f 100644
--- a/drivers/media/platform/qcom/venus/helpers.c
+++ b/drivers/media/platform/qcom/venus/helpers.c
@@ -279,13 +279,34 @@  static const unsigned int intbuf_types_4xx[] = {
 	HFI_BUFFER_INTERNAL_PERSIST_1,
 };
 
+static const unsigned int intbuf_types_6xx_enc[] = {
+	HFI_BUFFER_INTERNAL_SCRATCH(HFI_VERSION_6XX),
+	HFI_BUFFER_INTERNAL_SCRATCH_1(HFI_VERSION_6XX),
+	HFI_BUFFER_INTERNAL_SCRATCH_2(HFI_VERSION_6XX),
+	HFI_BUFFER_INTERNAL_PERSIST,
+};
+
+static const unsigned int intbuf_types_6xx_dec[] = {
+	HFI_BUFFER_INTERNAL_SCRATCH(HFI_VERSION_6XX),
+	HFI_BUFFER_INTERNAL_SCRATCH_1(HFI_VERSION_6XX),
+	HFI_BUFFER_INTERNAL_PERSIST_1,
+};
+
 int venus_helper_intbufs_alloc(struct venus_inst *inst)
 {
 	const unsigned int *intbuf;
 	size_t arr_sz, i;
 	int ret;
 
-	if (IS_V4(inst->core)) {
+	if (IS_V6(inst->core)) {
+		if (inst->session_type == VIDC_SESSION_TYPE_DEC) {
+			arr_sz = ARRAY_SIZE(intbuf_types_6xx_dec);
+			intbuf = intbuf_types_6xx_dec;
+		} else {
+			arr_sz = ARRAY_SIZE(intbuf_types_6xx_enc);
+			intbuf = intbuf_types_6xx_enc;
+		}
+	} else if (IS_V4(inst->core)) {
 		arr_sz = ARRAY_SIZE(intbuf_types_4xx);
 		intbuf = intbuf_types_4xx;
 	} else {
diff --git a/drivers/media/platform/qcom/venus/hfi_helper.h b/drivers/media/platform/qcom/venus/hfi_helper.h
index 6b524c7cde5f..f367f43c9fb7 100644
--- a/drivers/media/platform/qcom/venus/hfi_helper.h
+++ b/drivers/media/platform/qcom/venus/hfi_helper.h
@@ -395,11 +395,14 @@ 
 #define HFI_BUFFER_INTERNAL_PERSIST		0x4
 #define HFI_BUFFER_INTERNAL_PERSIST_1		0x5
 #define HFI_BUFFER_INTERNAL_SCRATCH(ver)	\
-	(((ver) == HFI_VERSION_4XX) ? 0x6 : 0x1000001)
+	(((ver) == HFI_VERSION_4XX ||		\
+	(ver) == HFI_VERSION_6XX) ? 0x6 : 0x1000001)
 #define HFI_BUFFER_INTERNAL_SCRATCH_1(ver)	\
-	(((ver) == HFI_VERSION_4XX) ? 0x7 : 0x1000005)
+	(((ver) == HFI_VERSION_4XX ||		\
+	(ver) == HFI_VERSION_6XX) ? 0x7 : 0x1000005)
 #define HFI_BUFFER_INTERNAL_SCRATCH_2(ver)	\
-	(((ver) == HFI_VERSION_4XX) ? 0x8 : 0x1000006)
+	(((ver) == HFI_VERSION_4XX ||		\
+	(ver) == HFI_VERSION_6XX) ? 0x8 : 0x1000006)
 #define HFI_BUFFER_EXTRADATA_INPUT(ver)		\
 	(((ver) == HFI_VERSION_4XX) ? 0xc : 0x1000002)
 #define HFI_BUFFER_EXTRADATA_OUTPUT(ver)	\