From: "Niklas Söderlund" <niklas.soderlund+renesas@ragnatech.se>
To: "Barnabás Pőcze" <barnabas.pocze@ideasonboard.com>
Cc: "Jacopo Mondi" <jacopo.mondi+renesas@ideasonboard.com>,
"Jai Luthra" <jai.luthra+renesas@ideasonboard.com>,
"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>,
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 15:40:51 +0200 [thread overview]
Message-ID: <20261020134051.GB1172387@ragnatech.se> (raw)
In-Reply-To: <03c04d5b-c93c-4e1e-8889-de079adae312@ideasonboard.com>
Hi Barnabás,
Thanks for your feedback.
On 2026-10-20 12:19:54 +0200, Barnabás Pőcze wrote:
> 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?
No that is correct, check chapter 54.5.11 Notes of additional memory
area of flush out (Image Output DMA).
I'm quiet sure we could be more clever add add the flush out after the
image by sizeimage = bpp * (hight + 2) or something like that. I opted
for the big hammer here as this large padding space is needed to support
NV12 due to how the DMA-engine operates.
In future we could look at using this more clever way for NV16 and RGB
which do not need the large padding are to operate properly.
>
>
> > +
> > + 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?
The whole DMA Flush operation was a tad missunderstood but is better
documented now. The unit here is pixels not bytes. This register covers
all component outputs and each component may have a different bpp.
>
>
> > ISPCORE_DMA_IMAGE_FLUSH_OUT_PADDING_PIXEL_EOF_SHIFT);
> > /* Enable DMA and set burst length. */
> >
>
--
Kind Regards,
Niklas Söderlund
next prev parent reply other threads:[~2026-10-20 13:40 UTC|newest]
Thread overview: 12+ 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-20 13:44 ` Niklas Söderlund
2026-10-20 15:25 ` Barnabás Pőcze
2026-10-20 15:51 ` Niklas Söderlund
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
2026-10-20 13:40 ` Niklas Söderlund [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=20261020134051.GB1172387@ragnatech.se \
--to=niklas.soderlund+renesas@ragnatech.se \
--cc=barnabas.pocze+renesas@ideasonboard.com \
--cc=barnabas.pocze@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=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