The Linux Kernel Mailing List
 help / color / mirror / Atom feed
From: Nicolas Dufresne <nicolas.dufresne@collabora.com>
To: Detlev Casanova <detlev.casanova@collabora.com>,
	 linux-kernel@vger.kernel.org
Cc: Mauro Carvalho Chehab <mchehab@kernel.org>,
	Ezequiel Garcia	 <ezequiel@vanguardiasur.com.ar>,
	Heiko Stuebner <heiko@sntech.de>,
	Ricardo Ribalda <ribalda@chromium.org>,
	Hans Verkuil <hverkuil@kernel.org>,
	Hans de Goede <hansg@kernel.org>,  Yunke Cao <yunkec@google.com>,
	Jonathan Corbet <corbet@lwn.net>,
	Laurent Pinchart	 <laurent.pinchart@ideasonboard.com>,
	Sakari Ailus <sakari.ailus@linux.intel.com>,
	 James Cowgill <james.cowgill@blaize.com>,
	linux-media@vger.kernel.org, linux-rockchip@lists.infradead.org,
		linux-arm-kernel@lists.infradead.org, kernel@collabora.com,
	Diederik de Haas	 <didi.debian@cknow.org>
Subject: Re: [PATCH v4 05/15] media: rkvdec: Use structs to represent the HW RPS
Date: Wed, 10 Dec 2025 15:19:50 -0500	[thread overview]
Message-ID: <1e1eeec3f121697f914abee362ee657093fcf42b.camel@collabora.com> (raw)
In-Reply-To: <20251022174508.284929-6-detlev.casanova@collabora.com>

[-- Attachment #1: Type: text/plain, Size: 5386 bytes --]

Hi,

Le mercredi 22 octobre 2025 à 13:44 -0400, Detlev Casanova a écrit :
> This is in preparation to add support for other variants of the decoder.
> 
> Moving to struct representation is mainly to prepare for multicore
> support that is present in e.g. rk3588.
> 
> Tested-by: Diederik de Haas <didi.debian@cknow.org>  # Rock 5B
> Signed-off-by: Detlev Casanova <detlev.casanova@collabora.com>

Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>

> ---
>  .../platform/rockchip/rkvdec/rkvdec-h264.c    | 93 +++++++++++++++++--
>  1 file changed, 84 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/media/platform/rockchip/rkvdec/rkvdec-h264.c b/drivers/media/platform/rockchip/rkvdec/rkvdec-h264.c
> index 989379ae3a73..cb17dfcae5ca 100644
> --- a/drivers/media/platform/rockchip/rkvdec/rkvdec-h264.c
> +++ b/drivers/media/platform/rockchip/rkvdec/rkvdec-h264.c
> @@ -19,7 +19,6 @@ extern const s8 rkvdec_h264_cabac_table[4][464][2];
>  
>  /* Size with u32 units. */
>  #define RKV_CABAC_INIT_BUFFER_SIZE	(3680 + 128)
> -#define RKV_RPS_SIZE			((128 + 128) / 4)
>  #define RKV_ERROR_INFO_SIZE		(256 * 144 * 4)
>  
>  #define RKVDEC_NUM_REFLIST		3
> @@ -34,6 +33,40 @@ struct rkvdec_sps_pps_packet {
>  	u32 info[8];
>  };
>  
> +struct rkvdec_rps_entry {
> +	u32 dpb_info0:          5;
> +	u32 bottom_flag0:       1;
> +	u32 view_index_off0:    1;
> +	u32 dpb_info1:          5;
> +	u32 bottom_flag1:       1;
> +	u32 view_index_off1:    1;
> +	u32 dpb_info2:          5;
> +	u32 bottom_flag2:       1;
> +	u32 view_index_off2:    1;
> +	u32 dpb_info3:          5;
> +	u32 bottom_flag3:       1;
> +	u32 view_index_off3:    1;
> +	u32 dpb_info4:          5;
> +	u32 bottom_flag4:       1;
> +	u32 view_index_off4:    1;
> +	u32 dpb_info5:          5;
> +	u32 bottom_flag5:       1;
> +	u32 view_index_off5:    1;
> +	u32 dpb_info6:          5;
> +	u32 bottom_flag6:       1;
> +	u32 view_index_off6:    1;
> +	u32 dpb_info7:          5;
> +	u32 bottom_flag7:       1;
> +	u32 view_index_off7:    1;
> +} __packed;
> +
> +struct rkvdec_rps {
> +	u16 frame_num[16];
> +	u32 reserved0;
> +	struct rkvdec_rps_entry entries[12];
> +	u32 reserved1[66];
> +} __packed;
> +
>  struct rkvdec_ps_field {
>  	u16 offset;
>  	u8 len;
> @@ -94,7 +127,7 @@ struct rkvdec_ps_field {
>  struct rkvdec_h264_priv_tbl {
>  	s8 cabac_table[4][464][2];
>  	struct rkvdec_h264_scaling_list scaling_list;
> -	u32 rps[RKV_RPS_SIZE];
> +	struct rkvdec_rps rps;
>  	struct rkvdec_sps_pps_packet param_set[256];
>  	u8 err_info[RKV_ERROR_INFO_SIZE];
>  };
> @@ -260,6 +293,51 @@ static void lookup_ref_buf_idx(struct rkvdec_ctx *ctx,
>  	}
>  }
>  
> +static void set_dpb_info(struct rkvdec_rps_entry *entries,
> +			 u8 reflist,
> +			 u8 refnum,
> +			 u8 info,
> +			 bool bottom)
> +{
> +	struct rkvdec_rps_entry *entry = &entries[(reflist * 4) + refnum / 8];
> +	u8 idx = refnum % 8;
> +
> +	switch (idx) {
> +	case 0:
> +		entry->dpb_info0 = info;
> +		entry->bottom_flag0 = bottom;
> +		break;
> +	case 1:
> +		entry->dpb_info1 = info;
> +		entry->bottom_flag1 = bottom;
> +		break;
> +	case 2:
> +		entry->dpb_info2 = info;
> +		entry->bottom_flag2 = bottom;
> +		break;
> +	case 3:
> +		entry->dpb_info3 = info;
> +		entry->bottom_flag3 = bottom;
> +		break;
> +	case 4:
> +		entry->dpb_info4 = info;
> +		entry->bottom_flag4 = bottom;
> +		break;
> +	case 5:
> +		entry->dpb_info5 = info;
> +		entry->bottom_flag5 = bottom;
> +		break;
> +	case 6:
> +		entry->dpb_info6 = info;
> +		entry->bottom_flag6 = bottom;
> +		break;
> +	case 7:
> +		entry->dpb_info7 = info;
> +		entry->bottom_flag7 = bottom;
> +		break;
> +	}
> +}
> +
>  static void assemble_hw_rps(struct rkvdec_ctx *ctx,
>  			    struct v4l2_h264_reflist_builder *builder,
>  			    struct rkvdec_h264_run *run)
> @@ -269,11 +347,10 @@ static void assemble_hw_rps(struct rkvdec_ctx *ctx,
>  	struct rkvdec_h264_ctx *h264_ctx = ctx->priv;
>  	struct rkvdec_h264_priv_tbl *priv_tbl = h264_ctx->priv_tbl.cpu;
>  
> -	u32 *hw_rps = priv_tbl->rps;
> +	struct rkvdec_rps *hw_rps = &priv_tbl->rps;
>  	u32 i, j;
> -	u16 *p = (u16 *)hw_rps;
>  
> -	memset(hw_rps, 0, sizeof(priv_tbl->rps));
> +	memset(hw_rps, 0, sizeof(*hw_rps));
>  
>  	/*
>  	 * Assign an invalid pic_num if DPB entry at that position is inactive.
> @@ -285,7 +362,7 @@ static void assemble_hw_rps(struct rkvdec_ctx *ctx,
>  		if (!(dpb[i].flags & V4L2_H264_DPB_ENTRY_FLAG_ACTIVE))
>  			continue;
>  
> -		p[i] = builder->refs[i].frame_num;
> +		hw_rps->frame_num[i] = builder->refs[i].frame_num;
>  	}
>  
>  	for (j = 0; j < RKVDEC_NUM_REFLIST; j++) {
> @@ -312,9 +389,7 @@ static void assemble_hw_rps(struct rkvdec_ctx *ctx,
>  			dpb_valid = run->ref_buf[ref->index] != NULL;
>  			bottom = ref->fields == V4L2_H264_BOTTOM_FIELD_REF;
>  
> -			set_ps_field(hw_rps, DPB_INFO(i, j),
> -				     ref->index | dpb_valid << 4);
> -			set_ps_field(hw_rps, BOTTOM_FLAG(i, j), bottom);
> +			set_dpb_info(hw_rps->entries, j, i, ref->index | (dpb_valid << 4), bottom);
>  		}
>  	}
>  }

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

  reply	other threads:[~2025-12-10 20:19 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-10-22 17:44 [PATCH v4 00/15] media: rkvdec: Add support for VDPU381 and VDPU383 Detlev Casanova
2025-10-22 17:44 ` [PATCH v4 01/15] media: uapi: HEVC: Add v4l2_ctrl_hevc_ext_sps_[ls]t_rps controls Detlev Casanova
2025-10-22 17:44 ` [PATCH v4 02/15] media: v4l2-ctrls: Add hevc_ext_sps_[ls]t_rps controls Detlev Casanova
2025-10-23  8:04   ` Hans Verkuil
2025-10-23 14:07     ` Detlev Casanova
2025-11-04 16:07     ` Nicolas Dufresne
2025-10-22 17:44 ` [PATCH v4 03/15] media: rkvdec: Switch to using structs instead of writel Detlev Casanova
2025-12-10 20:17   ` Nicolas Dufresne
2025-10-22 17:44 ` [PATCH v4 04/15] media: rkvdec: Move cabac tables to their own source file Detlev Casanova
2025-12-10 20:18   ` Nicolas Dufresne
2025-10-22 17:44 ` [PATCH v4 05/15] media: rkvdec: Use structs to represent the HW RPS Detlev Casanova
2025-12-10 20:19   ` Nicolas Dufresne [this message]
2025-10-22 17:44 ` [PATCH v4 06/15] media: rkvdec: Move h264 functions to common file Detlev Casanova
2025-10-22 21:38   ` Jonas Karlman
2025-12-10 20:20   ` Nicolas Dufresne
2025-10-22 17:44 ` [PATCH v4 07/15] media: rkvdec: Move hevc " Detlev Casanova
2025-10-22 21:44   ` Jonas Karlman
2025-12-10 20:22   ` Nicolas Dufresne
2025-10-22 17:45 ` [PATCH v4 08/15] media: rkvdec: Add generic configuration for variants Detlev Casanova
2025-10-22 20:57   ` Jonas Karlman
2025-10-22 21:12     ` Jonas Karlman
2025-10-23 19:35     ` Detlev Casanova
2025-12-10 20:24   ` Nicolas Dufresne
2025-10-22 17:45 ` [PATCH v4 09/15] media: rkvdec: Add RCB and SRAM support Detlev Casanova
2025-10-22 21:07   ` Jonas Karlman
2025-10-23 19:46     ` Detlev Casanova
2025-12-10 20:32   ` Nicolas Dufresne
2025-10-22 17:45 ` [PATCH v4 10/15] media: rkvdec: Support per-variant interrupt handler Detlev Casanova
2025-12-10 20:35   ` Nicolas Dufresne
2025-10-22 17:45 ` [PATCH v4 11/15] media: rkvdec: Enable all clocks without naming them Detlev Casanova
2025-10-22 21:18   ` Jonas Karlman
2025-12-10 20:36   ` Nicolas Dufresne
2025-10-22 17:45 ` [PATCH v4 12/15] media: rkvdec: Add H264 support for the VDPU381 variant Detlev Casanova
2025-12-10 20:41   ` Nicolas Dufresne
2025-10-22 17:45 ` [PATCH v4 13/15] media: rkvdec: Add H264 support for the VDPU383 variant Detlev Casanova
2025-12-10 20:45   ` Nicolas Dufresne
2025-10-22 17:45 ` [PATCH v4 14/15] media: rkvdec: Add HEVC support for the VDPU381 variant Detlev Casanova
2025-12-10 20:46   ` Nicolas Dufresne
2025-10-22 17:45 ` [PATCH v4 15/15] media: rkvdec: Add HEVC support for the VDPU383 variant Detlev Casanova
2025-12-10 20:47   ` Nicolas Dufresne

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1e1eeec3f121697f914abee362ee657093fcf42b.camel@collabora.com \
    --to=nicolas.dufresne@collabora.com \
    --cc=corbet@lwn.net \
    --cc=detlev.casanova@collabora.com \
    --cc=didi.debian@cknow.org \
    --cc=ezequiel@vanguardiasur.com.ar \
    --cc=hansg@kernel.org \
    --cc=heiko@sntech.de \
    --cc=hverkuil@kernel.org \
    --cc=james.cowgill@blaize.com \
    --cc=kernel@collabora.com \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=linux-rockchip@lists.infradead.org \
    --cc=mchehab@kernel.org \
    --cc=ribalda@chromium.org \
    --cc=sakari.ailus@linux.intel.com \
    --cc=yunkec@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox