Re: [PATCH 2/7] media: hantro: vp9: use double buffering if needed

Andrzej Pietrasiewicz
2021-11-23T11:22:21Z

W dniu 22.11.2021 o 19:46, Jernej Skrabec pisze:
> Some G2 variants need double buffering to be enabled in order to work
> correctly, like that found in Allwinner H6 SoC.
>
> Add platform quirk for that.
>
> Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com>

Reviewed-by: Andrzej Pietrasiewicz <andrzej.p@collabora.com>

> ---
> drivers/staging/media/hantro/hantro.h | 2 ++
> drivers/staging/media/hantro/hantro_g2_regs.h | 1 +
> drivers/staging/media/hantro/hantro_g2_vp9_dec.c | 2 ++
> 3 files changed, 5 insertions(+)
>
> diff --git a/drivers/staging/media/hantro/hantro.h b/drivers/staging/media/hantro/hantro.h
> index 33eb3e092cc1..d03824fa3222 100644
> --- a/drivers/staging/media/hantro/hantro.h
> +++ b/drivers/staging/media/hantro/hantro.h
> @@ -73,6 +73,7 @@ struct hantro_irq {
> * @num_clocks: number of clocks in the array
> * @reg_names: array of register range names
> * @num_regs: number of register range names in the array
> + * @double_buffer: core needs double buffering
> */
> struct hantro_variant {
> unsigned int enc_offset;
> @@ -94,6 +95,7 @@ struct hantro_variant {
> int num_clocks;
> const char * const *reg_names;
> int num_regs;
> + unsigned int double_buffer : 1;
> };
>
> /**
> diff --git a/drivers/staging/media/hantro/hantro_g2_regs.h b/drivers/staging/media/hantro/hantro_g2_regs.h
> index 9c857dd1ad9b..15a391a4650e 100644
> --- a/drivers/staging/media/hantro/hantro_g2_regs.h
> +++ b/drivers/staging/media/hantro/hantro_g2_regs.h
> @@ -270,6 +270,7 @@
> #define g2_apf_threshold G2_DEC_REG(55, 0, 0xffff)
>
> #define g2_clk_gate_e G2_DEC_REG(58, 16, 0x1)
> +#define g2_double_buffer_e G2_DEC_REG(58, 15, 0x1)
> #define g2_buswidth G2_DEC_REG(58, 8, 0x7)
> #define g2_max_burst G2_DEC_REG(58, 0, 0xff)
>
> diff --git a/drivers/staging/media/hantro/hantro_g2_vp9_dec.c b/drivers/staging/media/hantro/hantro_g2_vp9_dec.c
> index e04242d10fa2..d4fc649a4da1 100644
> --- a/drivers/staging/media/hantro/hantro_g2_vp9_dec.c
> +++ b/drivers/staging/media/hantro/hantro_g2_vp9_dec.c
> @@ -847,6 +847,8 @@ config_registers(struct hantro_ctx *ctx, const struct v4l2_ctrl_vp9_frame *dec_p
> hantro_reg_write(ctx->dev, &g2_clk_gate_e, 1);
> hantro_reg_write(ctx->dev, &g2_max_cb_size, 6);
> hantro_reg_write(ctx->dev, &g2_min_cb_size, 3);
> + if (ctx->dev->variant->double_buffer)
> + hantro_reg_write(ctx->dev, &g2_double_buffer_e, 1);
>
> config_output(ctx, dst, dec_params);
>
>