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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 2/22/21 6:02 PM, Bryan O'Donoghue wrote:
> From: Dikshita Agarwal <dikshita@xxxxxxxxxxxxxx>
> 
> - 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@xxxxxxxxxxxxxx>
> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@xxxxxxxxxx>
> ---
>  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



[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [Linux for Sparc]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux