From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Cc: linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org,
Kieran Bingham <kieran.bingham@ideasonboard.com>,
Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Subject: Re: [PATCH 5/7] media: renesas: vsp1: Fix RWPF media bus code and frame size enumeration
Date: Thu, 26 Jun 2025 02:47:45 +0300 [thread overview]
Message-ID: <20250625234745.GD15008@pendragon.ideasonboard.com> (raw)
In-Reply-To: <nury6gimeh45moskbhhqtjzpb3uoqhqhrj3hw7cbm2fetiuub7@jmbq2762qfw2>
On Wed, May 28, 2025 at 04:58:45PM +0200, Jacopo Mondi wrote:
> On Wed, Apr 30, 2025 at 02:53:20AM +0300, Laurent Pinchart wrote:
> > The RWPF can't freely convert between all input and output formats. They
> > support RGB <-> YUV conversion, but HSV formats can't be converted. Fix
> > the media bus code and frame size enumeration to take this into account
> > on the source pad.
> >
> > Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
> > ---
> > .../media/platform/renesas/vsp1/vsp1_rwpf.c | 80 +++++++++++++++++--
> > 1 file changed, 74 insertions(+), 6 deletions(-)
> >
> > diff --git a/drivers/media/platform/renesas/vsp1/vsp1_rwpf.c b/drivers/media/platform/renesas/vsp1/vsp1_rwpf.c
> > index 61f7e13ebeee..bd97fc75eb5b 100644
> > --- a/drivers/media/platform/renesas/vsp1/vsp1_rwpf.c
> > +++ b/drivers/media/platform/renesas/vsp1/vsp1_rwpf.c
> > @@ -21,29 +21,97 @@
> > * V4L2 Subdevice Operations
> > */
> >
> > +/* Keep HSV last. */
> > static const unsigned int rwpf_codes[] = {
> > + MEDIA_BUS_FMT_AYUV8_1X32,
> > MEDIA_BUS_FMT_ARGB8888_1X32,
> > MEDIA_BUS_FMT_AHSV8888_1X32,
> > - MEDIA_BUS_FMT_AYUV8_1X32,
> > };
> >
> > static int vsp1_rwpf_enum_mbus_code(struct v4l2_subdev *subdev,
> > struct v4l2_subdev_state *sd_state,
> > struct v4l2_subdev_mbus_code_enum *code)
> > {
> > - if (code->index >= ARRAY_SIZE(rwpf_codes))
> > + struct vsp1_entity *entity = to_vsp1_entity(subdev);
> > + struct v4l2_subdev_state *state;
> > + struct v4l2_mbus_framefmt *format;
>
> minor nit: could you move this one line up for ... reverse xmas tree
> ordering :)
state goes first because in my head you get the state and then access
the format from it. As the line are nearly the same length, the breach
of the reverse xmas tree rule didn't shock me. We're really getting into
nitpicking territory :-)
This will go away when switching to the V4L2 subdev active state API. I
have a patch series for that, but need to fix a lockdep issue.
> > +
> > + if (code->pad == RWPF_PAD_SINK)
> > + return vsp1_subdev_enum_mbus_code(subdev, sd_state, code);
> > +
> > + state = vsp1_entity_get_state(entity, sd_state, code->which);
> > + if (!state)
> > return -EINVAL;
> >
> > - code->code = rwpf_codes[code->index];
> > + format = v4l2_subdev_state_get_format(state, RWPF_PAD_SINK);
> >
> > - if (code->pad == RWPF_PAD_SOURCE &&
> > - code->code == MEDIA_BUS_FMT_AYUV8_1X32)
> > + guard(mutex)(&entity->lock);
> > +
> > + /*
> > + * The RWPF supports conversion between RGB and YUV formats, but HSV
> > + * formats can't be converted.
> > + */
> > + if (format->code == MEDIA_BUS_FMT_AHSV8888_1X32) {
> > + if (code->index)
> > + return -EINVAL;
> > +
> > + code->code = MEDIA_BUS_FMT_AHSV8888_1X32;
> > + } else {
> > + if (code->index >= ARRAY_SIZE(rwpf_codes) - 1)
> > + return -EINVAL;
> > +
> > + code->code = rwpf_codes[code->index];
> > + }
> > +
> > + if (code->code == MEDIA_BUS_FMT_AYUV8_1X32)
> > code->flags = V4L2_SUBDEV_MBUS_CODE_CSC_YCBCR_ENC
> > | V4L2_SUBDEV_MBUS_CODE_CSC_QUANTIZATION;
> >
> > return 0;
> > }
> >
> > +static int vsp1_rwpf_enum_frame_size(struct v4l2_subdev *subdev,
> > + struct v4l2_subdev_state *sd_state,
> > + struct v4l2_subdev_frame_size_enum *fse)
> > +{
> > + struct vsp1_entity *entity = to_vsp1_entity(subdev);
> > + struct v4l2_subdev_state *state;
> > + struct v4l2_mbus_framefmt *format;
> > +
> > + if (fse->pad == RWPF_PAD_SINK)
> > + return vsp1_subdev_enum_frame_size(subdev, sd_state, fse);
> > +
> > + if (fse->index)
> > + return -EINVAL;
> > +
> > + state = vsp1_entity_get_state(entity, sd_state, fse->which);
> > + if (!state)
> > + return -EINVAL;
> > +
> > + format = v4l2_subdev_state_get_format(state, 0);
>
> Could you use RWPF_PAD_SINK ?
Will do.
> > +
> > + guard(mutex)(&entity->lock);
>
> As a general question, shouldn't we use the state lock ?
The series I mentioned above will handle this. The driver doesn't
currently use the active statue API.
> > +
> > + /*
> > + * The RWPF supports conversion between RGB and YUV formats, but
> > + * HSV formats can't be converted.
> > + */
> > + if ((format->code == MEDIA_BUS_FMT_AHSV8888_1X32) !=
> > + (fse->code == MEDIA_BUS_FMT_AHSV8888_1X32))
> > + return -EINVAL;
> > +
> > + /*
> > + * The size on the source pad is fixed and always identical to
> > + * the sink pad.
> > + */
> > + fse->min_width = format->width;
> > + fse->max_width = format->width;
> > + fse->min_height = format->height;
> > + fse->max_height = format->height;
> > +
> > + return 0;
> > +}
>
> All minors
> Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
>
> > +
> > static int vsp1_rwpf_set_format(struct v4l2_subdev *subdev,
> > struct v4l2_subdev_state *sd_state,
> > struct v4l2_subdev_format *fmt)
> > @@ -275,7 +343,7 @@ static int vsp1_rwpf_set_selection(struct v4l2_subdev *subdev,
> >
> > static const struct v4l2_subdev_pad_ops vsp1_rwpf_pad_ops = {
> > .enum_mbus_code = vsp1_rwpf_enum_mbus_code,
> > - .enum_frame_size = vsp1_subdev_enum_frame_size,
> > + .enum_frame_size = vsp1_rwpf_enum_frame_size,
> > .get_fmt = vsp1_subdev_get_pad_format,
> > .set_fmt = vsp1_rwpf_set_format,
> > .get_selection = vsp1_rwpf_get_selection,
--
Regards,
Laurent Pinchart
next prev parent reply other threads:[~2025-06-25 23:48 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-29 23:53 [PATCH 0/7] media: renesas: vsp1: Fix v4l2-compliance failures Laurent Pinchart
2025-04-29 23:53 ` [PATCH 1/7] media: renesas: vsp1: Store supported media bus codes in vsp1_entity Laurent Pinchart
2025-05-28 14:32 ` Jacopo Mondi
2025-04-29 23:53 ` [PATCH 2/7] media: renesas: vsp1: Store size limits " Laurent Pinchart
2025-05-28 14:43 ` Jacopo Mondi
2025-06-25 22:44 ` Laurent Pinchart
2025-04-29 23:53 ` [PATCH 3/7] media: renesas: vsp1: Fix code checks in frame size enumeration Laurent Pinchart
2025-05-28 14:45 ` Jacopo Mondi
2025-06-25 22:52 ` Laurent Pinchart
2025-04-29 23:53 ` [PATCH 4/7] media: renesas: vsp1: Fix RPF sink alignment for YUV formats Laurent Pinchart
2025-05-28 14:49 ` Jacopo Mondi
2025-06-25 23:38 ` Laurent Pinchart
2025-04-29 23:53 ` [PATCH 5/7] media: renesas: vsp1: Fix RWPF media bus code and frame size enumeration Laurent Pinchart
2025-05-28 14:58 ` Jacopo Mondi
2025-06-25 23:47 ` Laurent Pinchart [this message]
2025-04-29 23:53 ` [PATCH 6/7] media: renesas: vsp1: Fix format propagation on the BRX Laurent Pinchart
2025-05-28 15:00 ` Jacopo Mondi
2025-04-29 23:53 ` [PATCH 7/7] media: renesas: vsp1: Implement control events Laurent Pinchart
2025-05-28 15:06 ` Jacopo Mondi
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=20250625234745.GD15008@pendragon.ideasonboard.com \
--to=laurent.pinchart@ideasonboard.com \
--cc=jacopo.mondi@ideasonboard.com \
--cc=kieran.bingham@ideasonboard.com \
--cc=linux-media@vger.kernel.org \
--cc=linux-renesas-soc@vger.kernel.org \
--cc=tomi.valkeinen@ideasonboard.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