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 --]
next prev parent 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