Message ID | 20210222160300.1811121-22-bryan.odonoghue@linaro.org |
---|---|
State | New |
Headers | show |
Series | media: venus: Enable 6xx support | expand |
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) \ >
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) \