From: "Sven Püschel" <s.pueschel@pengutronix.de>
To: Jacob Chen <jacob-chen@iotwrt.com>,
Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>,
Mauro Carvalho Chehab <mchehab@kernel.org>,
Heiko Stuebner <heiko@sntech.de>, Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Hans Verkuil <hverkuil@kernel.org>
Cc: linux-media@vger.kernel.org, linux-rockchip@lists.infradead.org,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, devicetree@vger.kernel.org,
kernel@pengutronix.de, nicolas@ndufresne.ca,
sebastian.reichel@collabora.com,
"Sven Püschel" <s.pueschel@pengutronix.de>,
"Nicolas Dufresne" <nicolas.dufresne@collabora.com>
Subject: [PATCH v5 17/29] media: rockchip: rga: prepare cmdbuf on streamon
Date: Tue, 28 Apr 2026 11:00:52 +0200 [thread overview]
Message-ID: <20260428-spu-rga3-v5-17-eb7f5d019d86@pengutronix.de> (raw)
In-Reply-To: <20260428-spu-rga3-v5-0-eb7f5d019d86@pengutronix.de>
Prepare the command buffer on streamon to reuse it's contents instead of
completely writing it for every frame. Due to the stream settings being
fixed after a streamon we only need to replace the source and destination
addresses for each frame. This reduces the amount of CPU and memory
operations done in each frame.
Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Signed-off-by: Sven Püschel <s.pueschel@pengutronix.de>
---
Changes in v5:
- Don't set the flipping and rotation values at streamon and preventing
the userspace from chainging them at runtime
---
drivers/media/platform/rockchip/rga/rga-hw.c | 13 +++++++++----
drivers/media/platform/rockchip/rga/rga.c | 13 ++++++++++++-
drivers/media/platform/rockchip/rga/rga.h | 1 +
3 files changed, 22 insertions(+), 5 deletions(-)
diff --git a/drivers/media/platform/rockchip/rga/rga-hw.c b/drivers/media/platform/rockchip/rga/rga-hw.c
index 6c1956b04f6ba..11079477a3008 100644
--- a/drivers/media/platform/rockchip/rga/rga-hw.c
+++ b/drivers/media/platform/rockchip/rga/rga-hw.c
@@ -427,8 +427,6 @@ static void rga_cmd_set(struct rga_ctx *ctx,
{
struct rockchip_rga *rga = ctx->rga;
- memset(ctx->cmdbuf_virt, 0, RGA_CMDBUF_SIZE);
-
rga_cmd_set_src_addr(ctx, src->dma_desc_pa);
/*
* Due to hardware bug,
@@ -437,11 +435,9 @@ static void rga_cmd_set(struct rga_ctx *ctx,
rga_cmd_set_src1_addr(ctx, dst->dma_desc_pa);
rga_cmd_set_dst_addr(ctx, dst->dma_desc_pa);
- rga_cmd_set_mode(ctx);
rga_cmd_set_src_info(ctx, &src->offset);
rga_cmd_set_dst_info(ctx, &dst->offset);
- rga_cmd_set_format_scale_info(ctx);
rga_cmd_set_flip_rotate_info(ctx);
rga_write(rga, RGA_CMD_BASE, ctx->cmdbuf_phy);
@@ -451,6 +447,14 @@ static void rga_cmd_set(struct rga_ctx *ctx,
PAGE_SIZE, DMA_BIDIRECTIONAL);
}
+static void rga_hw_setup_cmdbuf(struct rga_ctx *ctx)
+{
+ memset(ctx->cmdbuf_virt, 0, RGA_CMDBUF_SIZE);
+
+ rga_cmd_set_mode(ctx);
+ rga_cmd_set_format_scale_info(ctx);
+}
+
static void rga_hw_start(struct rockchip_rga *rga,
struct rga_vb_buffer *src, struct rga_vb_buffer *dst)
{
@@ -593,6 +597,7 @@ const struct rga_hw rga2_hw = {
.max_height = MAX_HEIGHT,
.stride_alignment = 4,
+ .setup_cmdbuf = rga_hw_setup_cmdbuf,
.start = rga_hw_start,
.handle_irq = rga_handle_irq,
.get_version = rga_get_version,
diff --git a/drivers/media/platform/rockchip/rga/rga.c b/drivers/media/platform/rockchip/rga/rga.c
index 16a663aeef8c9..d111b348255e2 100644
--- a/drivers/media/platform/rockchip/rga/rga.c
+++ b/drivers/media/platform/rockchip/rga/rga.c
@@ -568,6 +568,17 @@ static int vidioc_s_selection(struct file *file, void *priv,
return ret;
}
+static int vidioc_streamon(struct file *file, void *priv,
+ enum v4l2_buf_type type)
+{
+ struct rga_ctx *ctx = file_to_rga_ctx(file);
+ const struct rga_hw *hw = ctx->rga->hw;
+
+ hw->setup_cmdbuf(ctx);
+
+ return v4l2_m2m_streamon(file, ctx->fh.m2m_ctx, type);
+}
+
static const struct v4l2_ioctl_ops rga_ioctl_ops = {
.vidioc_querycap = vidioc_querycap,
@@ -592,7 +603,7 @@ static const struct v4l2_ioctl_ops rga_ioctl_ops = {
.vidioc_subscribe_event = v4l2_ctrl_subscribe_event,
.vidioc_unsubscribe_event = v4l2_event_unsubscribe,
- .vidioc_streamon = v4l2_m2m_ioctl_streamon,
+ .vidioc_streamon = vidioc_streamon,
.vidioc_streamoff = v4l2_m2m_ioctl_streamoff,
.vidioc_g_selection = vidioc_g_selection,
diff --git a/drivers/media/platform/rockchip/rga/rga.h b/drivers/media/platform/rockchip/rga/rga.h
index 38518146910a6..c741213710b32 100644
--- a/drivers/media/platform/rockchip/rga/rga.h
+++ b/drivers/media/platform/rockchip/rga/rga.h
@@ -152,6 +152,7 @@ struct rga_hw {
u32 max_width, max_height;
u8 stride_alignment;
+ void (*setup_cmdbuf)(struct rga_ctx *ctx);
void (*start)(struct rockchip_rga *rga,
struct rga_vb_buffer *src, struct rga_vb_buffer *dst);
bool (*handle_irq)(struct rockchip_rga *rga);
--
2.54.0
next prev parent reply other threads:[~2026-04-28 9:02 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-28 9:00 [PATCH v5 00/29] media: platform: rga: Add RGA3 support Sven Püschel
2026-04-28 9:00 ` [PATCH v5 01/29] media: dt-bindings: media: rockchip-rga: add rockchip,rk3588-rga3 Sven Püschel
2026-04-28 9:00 ` [PATCH v5 02/29] media: v4l2-common: sort RGB formats in v4l2_format_info Sven Püschel
2026-04-28 9:00 ` [PATCH v5 03/29] media: v4l2-common: add missing 1 and 2 byte RGB formats to v4l2_format_info Sven Püschel
2026-04-28 9:00 ` [PATCH v5 04/29] media: v4l2-common: add has_alpha " Sven Püschel
2026-04-28 9:00 ` [PATCH v5 05/29] media: v4l2-common: add v4l2_fill_pixfmt_mp_aligned helper Sven Püschel
2026-05-08 21:09 ` Nicolas Dufresne
2026-04-28 9:00 ` [PATCH v5 06/29] media: rockchip: rga: fix too small buffer size Sven Püschel
2026-05-08 21:11 ` Nicolas Dufresne
2026-05-12 14:14 ` Sven Püschel
2026-04-28 9:00 ` [PATCH v5 07/29] media: rockchip: rga: use clk_bulk api Sven Püschel
2026-04-28 9:00 ` [PATCH v5 08/29] media: rockchip: rga: use stride for offset calculation Sven Püschel
2026-04-28 9:00 ` [PATCH v5 09/29] media: rockchip: rga: remove redundant rga_frame variables Sven Püschel
2026-04-28 9:00 ` [PATCH v5 10/29] media: rockchip: rga: announce and sync colorimetry Sven Püschel
2026-04-28 9:00 ` [PATCH v5 11/29] media: rockchip: rga: move hw specific parts to a dedicated struct Sven Püschel
2026-04-28 9:00 ` [PATCH v5 12/29] media: rockchip: rga: avoid odd frame sizes for YUV formats Sven Püschel
2026-05-08 21:18 ` Nicolas Dufresne
2026-05-12 14:56 ` Sven Püschel
2026-05-12 15:09 ` Nicolas Dufresne
2026-04-28 9:00 ` [PATCH v5 13/29] media: rockchip: rga: calculate x_div/y_div using v4l2_format_info Sven Püschel
2026-04-28 9:00 ` [PATCH v5 14/29] media: rockchip: rga: move cmdbuf to rga_ctx Sven Püschel
2026-04-28 9:00 ` [PATCH v5 15/29] media: rockchip: rga: align stride to 4 bytes Sven Püschel
2026-04-28 9:00 ` [PATCH v5 16/29] media: rockchip: rga: split flip and rotate into separate function Sven Püschel
2026-05-08 22:11 ` Nicolas Dufresne
2026-05-12 14:08 ` Sven Püschel
2026-05-12 14:15 ` Nicolas Dufresne
2026-04-28 9:00 ` Sven Püschel [this message]
2026-04-28 9:00 ` [PATCH v5 18/29] media: rockchip: rga: check scaling factor Sven Püschel
2026-05-08 23:11 ` Nicolas Dufresne
2026-04-28 9:00 ` [PATCH v5 19/29] media: rockchip: rga: use card type to specify rga type Sven Püschel
2026-04-28 9:00 ` [PATCH v5 20/29] media: rockchip: rga: change offset to dma_addresses Sven Püschel
2026-04-28 9:00 ` [PATCH v5 21/29] media: rockchip: rga: support external iommus Sven Püschel
2026-04-28 9:00 ` [PATCH v5 22/29] media: rockchip: rga: share the interrupt when an external iommu is used Sven Püschel
2026-04-28 9:00 ` [PATCH v5 23/29] media: rockchip: rga: remove size from rga_frame Sven Püschel
2026-04-28 9:00 ` [PATCH v5 24/29] media: rockchip: rga: remove stride " Sven Püschel
2026-04-28 9:01 ` [PATCH v5 25/29] media: rockchip: rga: move rga_fmt to rga-hw.h Sven Püschel
2026-04-28 9:01 ` [PATCH v5 26/29] media: rockchip: rga: add feature flags Sven Püschel
2026-04-28 9:01 ` [PATCH v5 27/29] media: rockchip: rga: disable multi-core support Sven Püschel
2026-04-28 9:01 ` [PATCH v5 28/29] media: rockchip: rga: add rga3 support Sven Püschel
2026-04-28 9:01 ` [PATCH v5 29/29] arm64: dts: rockchip: add rga3 dt nodes Sven Püschel
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=20260428-spu-rga3-v5-17-eb7f5d019d86@pengutronix.de \
--to=s.pueschel@pengutronix.de \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=ezequiel@vanguardiasur.com.ar \
--cc=heiko@sntech.de \
--cc=hverkuil@kernel.org \
--cc=jacob-chen@iotwrt.com \
--cc=kernel@pengutronix.de \
--cc=krzk+dt@kernel.org \
--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=nicolas.dufresne@collabora.com \
--cc=nicolas@ndufresne.ca \
--cc=robh@kernel.org \
--cc=sebastian.reichel@collabora.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