From: "Barnabás Pőcze" <barnabas.pocze@ideasonboard.com>
To: "Niklas Söderlund" <niklas.soderlund+renesas@ragnatech.se>,
"Jacopo Mondi" <jacopo.mondi+renesas@ideasonboard.com>,
"Jai Luthra" <jai.luthra+renesas@ideasonboard.com>,
"Niklas Söderlund" <niklas.soderlund@ragnatech.se>,
"Mauro Carvalho Chehab" <mchehab@kernel.org>,
"Geert Uytterhoeven" <geert+renesas@glider.be>,
"Magnus Damm" <magnus.damm@gmail.com>,
"Barnabás Pőcze" <barnabas.pocze+renesas@ideasonboard.com>,
"Yusuke Goda" <yusuke.goda.sx@renesas.com>,
"Yuya Hamamachi" <yuya.hamamachi.sx@renesas.com>
Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-renesas-soc@vger.kernel.org
Subject: Re: [PATCH 2/4] media: rcar-isp: ispcore: Update image data flush settings
Date: Tue, 20 Oct 2026 12:19:54 +0200 [thread overview]
Message-ID: <03c04d5b-c93c-4e1e-8889-de079adae312@ideasonboard.com> (raw)
In-Reply-To: <20261019-v4l2-add-nv12-v1-2-4a84736803b6@ragnatech.se>
Hi
2026. 10. 19. 21:35 keltezéssel, Niklas Söderlund írta:
> Later versions of the datasheet have an updated chapter on how the image
> out flush settings depends on proper stride settings. Update the bytes
> per line calculation and flush out settings to match the datasheet
> clarification.
>
> Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
> ---
> drivers/media/platform/renesas/rcar-isp/core-io.c | 28 ++++++++++++++++++++---
> drivers/media/platform/renesas/rcar-isp/core.c | 2 +-
> 2 files changed, 26 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/media/platform/renesas/rcar-isp/core-io.c b/drivers/media/platform/renesas/rcar-isp/core-io.c
> index badde72352c1..48db37bad69c 100644
> --- a/drivers/media/platform/renesas/rcar-isp/core-io.c
> +++ b/drivers/media/platform/renesas/rcar-isp/core-io.c
> @@ -733,6 +733,28 @@ static const struct v4l2_pix_format_mplane risp_io_capture_default_format = {
> },
> };
>
> +static unsigned int risp_io_calture_bytesperline(unsigned int width, unsigned int bpp)
calture -> capture
> +{
> + /*
> + * The datasheet specifies strict alignment and padding rules to be able
> + * to flush out all the pixels. Each line must be 256 byte aligned and
> + * at the end of the frame at least one extra line of space must be
> + * available.
> + *
> + * As we can't extend the buffer with one extra line we need to work
> + * with stride setting to satisfy both constraints. Fortunately the
> + * datasheet gives us a calculation for this.
> + *
> + * FLUSH[pixels] = ALIGN(WIDTH[pixels], 256)
> + *
> + * PADDING[bytes] = ALIGN(BPP[bytes] * WIDTH[pixels], 256) - BPP[bytes] * WIDTH[pixels] + BPP[bytes] * FLUSH[pixels]
> + */
> + unsigned int data = bpp * width;
> + unsigned int padding = ALIGN(data, 256) - data + bpp * ALIGN(width, 256);
So this adds one line's worth of extra padding on top of what is needed to achieve 256-byte alignment
of the actual data? With this change, for an output size of 2304x1296, I see
ioctl(18</dev/video3>, VIDIOC_TRY_FMT, {
type=V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE, fmt.pix_mp={
width=2304, height=1296,
pixelformat=v4l2_fourcc('X', 'R', '2', '4') /* V4L2_PIX_FMT_XBGR32 */,
field=V4L2_FIELD_NONE, colorspace=V4L2_COLORSPACE_DEFAULT,
plane_fmt=[], num_planes=0
}
} => {
fmt.pix_mp={
width=2304, height=1296,
pixelformat=v4l2_fourcc('X', 'R', '2', '4') /* V4L2_PIX_FMT_XBGR32 */,
field=V4L2_FIELD_NONE,
colorspace=V4L2_COLORSPACE_SRGB,
plane_fmt=[
{ sizeimage=23887872, bytesperline=18432 }
],
num_planes=1
}
}) = 0 <0.000074>
which means that the stride is `(2304 * 4) * 2 = 18432`, which is effectively
twice what would be required for just the 256 byte alignment. So this
in practice doubles the size of every buffer, or am I missing something?
> +
> + return data + padding;
> +}
> +
> static void risp_io_capture_try_format(struct rcar_isp_core_io *io,
> struct v4l2_pix_format_mplane *pix)
> {
> @@ -749,16 +771,16 @@ static void risp_io_capture_try_format(struct rcar_isp_core_io *io,
> case V4L2_PIX_FMT_NV16M:
> pix->quantization = V4L2_QUANTIZATION_LIM_RANGE;
> pix->num_planes = 2;
> - pix->plane_fmt[0].bytesperline = ALIGN(pix->width, 256);
> + pix->plane_fmt[0].bytesperline = risp_io_calture_bytesperline(pix->width, 1);
> pix->plane_fmt[0].sizeimage = pix->plane_fmt[0].bytesperline * pix->height;
> - pix->plane_fmt[1].bytesperline = ALIGN(pix->width, 256);
> + pix->plane_fmt[1].bytesperline = pix->plane_fmt[0].bytesperline;
> pix->plane_fmt[1].sizeimage = pix->plane_fmt[1].bytesperline * pix->height;
> break;
> default:
> pix->pixelformat = V4L2_PIX_FMT_XBGR32;
> pix->quantization = V4L2_QUANTIZATION_FULL_RANGE;
> pix->num_planes = 1;
> - pix->plane_fmt[0].bytesperline = ALIGN(pix->width * 4, 256);
> + pix->plane_fmt[0].bytesperline = risp_io_calture_bytesperline(pix->width, 4);
> pix->plane_fmt[0].sizeimage = pix->plane_fmt[0].bytesperline * pix->height;
> break;
> }
> diff --git a/drivers/media/platform/renesas/rcar-isp/core.c b/drivers/media/platform/renesas/rcar-isp/core.c
> index b5861d0cd0e8..3e135e84b75b 100644
> --- a/drivers/media/platform/renesas/rcar-isp/core.c
> +++ b/drivers/media/platform/renesas/rcar-isp/core.c
> @@ -398,7 +398,7 @@ static int risp_core_config_output(struct rcar_isp_core *core,
>
> /* Set image out flush EOF. */
> risp_core_write(core, ISPCORE_DMA_IMAGE_FLUSH_OUT_REG(index),
> - pix->plane_fmt[0].bytesperline <<
> + ALIGN(pix->width, 256) <<
I'm probably mistaken, but does this not need a multiplication by bpp?
Or was the previous version actually incorrect?
> ISPCORE_DMA_IMAGE_FLUSH_OUT_PADDING_PIXEL_EOF_SHIFT);
>
> /* Enable DMA and set burst length. */
>
next prev parent reply other threads:[~2026-10-20 10:20 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-19 19:35 [PATCH 0/4] media: rcar-isp: Add NV12M support and fix stride Niklas Söderlund
2026-10-19 19:35 ` [PATCH 1/4] media: rcar-isp: ispcore: Honour requested bytesperline on RAW input Niklas Söderlund
2026-10-20 9:36 ` Barnabás Pőcze
2026-10-19 19:35 ` [PATCH 2/4] media: rcar-isp: ispcore: Update image data flush settings Niklas Söderlund
2026-10-20 10:19 ` Barnabás Pőcze [this message]
2026-10-19 19:35 ` [PATCH 3/4] media: rcar-isp: ispcore: Look at number of planes when programming Niklas Söderlund
2026-10-20 10:26 ` Barnabás Pőcze
2026-10-19 19:35 ` [PATCH 4/4] media: rcar-isp: ispcore: Add NV12M support Niklas Söderlund
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=03c04d5b-c93c-4e1e-8889-de079adae312@ideasonboard.com \
--to=barnabas.pocze@ideasonboard.com \
--cc=barnabas.pocze+renesas@ideasonboard.com \
--cc=geert+renesas@glider.be \
--cc=jacopo.mondi+renesas@ideasonboard.com \
--cc=jai.luthra+renesas@ideasonboard.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=linux-renesas-soc@vger.kernel.org \
--cc=magnus.damm@gmail.com \
--cc=mchehab@kernel.org \
--cc=niklas.soderlund+renesas@ragnatech.se \
--cc=niklas.soderlund@ragnatech.se \
--cc=yusuke.goda.sx@renesas.com \
--cc=yuya.hamamachi.sx@renesas.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
all inboxes | Powered by JetHome®