All of lore.kernel.org
 help / color / mirror / Atom feed
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Sakari Ailus <sakari.ailus@iki.fi>
Cc: Jacopo Mondi <jacopo.mondi@ideasonboard.com>,
	Linux Media Mailing List <linux-media@vger.kernel.org>,
	David Plowman <david.plowman@raspberrypi.com>,
	Naushir Patuck <naush@raspberrypi.com>,
	Nick Hollinghurst <nick.hollinghurst@raspberrypi.org>,
	Dave Stevenson <dave.stevenson@raspberrypi.com>,
	Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>,
	Kieran Bingham <kieran.bingham@ideasonboard.com>,
	Hans Verkuil <hverkuil-cisco@xs4all.nl>,
	Mauro Carvalho Chehab <mchehab@kernel.org>
Subject: Re: [PATCH v7 7/8] media: raspberrypi: Add support for PiSP BE
Date: Mon, 27 May 2024 04:19:11 +0300	[thread overview]
Message-ID: <20240527011911.GD24374@pendragon.ideasonboard.com> (raw)
In-Reply-To: <ZlOimSRFNNt1fdN3@valkosipuli.retiisi.eu>

Hi Sakari,

On Sun, May 26, 2024 at 08:59:05PM +0000, Sakari Ailus wrote:
> Hi Jacppo,
> 
> Thanks for the update.
> 
> A few comments on the driver itself...
> 
> On Fri, May 24, 2024 at 04:00:22PM +0200, Jacopo Mondi wrote:
> > From: Naushir Patuck <naush@raspberrypi.com>
> > 
> > Add support for the Raspberry Pi PiSP Back End.
> > 
> > The driver has been upported from the Raspberry Pi kernel at revision
> > f74893f8a0c2 ("drivers: media: pisp_be: Update seqeuence numbers of the
> > buffers").
> > 
> > The ISP documentation is available at:
> > https://datasheets.raspberrypi.com/camera/raspberry-pi-image-signal-processor-specification.pdf
> > 
> > Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
> > Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
> > Signed-off-by: Nick Hollinghurst <nick.hollinghurst@raspberrypi.org>
> > Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
> > ---
> >  MAINTAINERS                                   |    1 +
> >  drivers/media/platform/Kconfig                |    1 +
> >  drivers/media/platform/Makefile               |    1 +
> >  drivers/media/platform/raspberrypi/Kconfig    |    5 +
> >  drivers/media/platform/raspberrypi/Makefile   |    3 +
> >  .../platform/raspberrypi/pisp_be/Kconfig      |   12 +
> >  .../platform/raspberrypi/pisp_be/Makefile     |    6 +
> >  .../platform/raspberrypi/pisp_be/pisp_be.c    | 1848 +++++++++++++++++
> >  .../raspberrypi/pisp_be/pisp_be_formats.h     |  519 +++++
> >  9 files changed, 2396 insertions(+)
> >  create mode 100644 drivers/media/platform/raspberrypi/Kconfig
> >  create mode 100644 drivers/media/platform/raspberrypi/Makefile
> >  create mode 100644 drivers/media/platform/raspberrypi/pisp_be/Kconfig
> >  create mode 100644 drivers/media/platform/raspberrypi/pisp_be/Makefile
> >  create mode 100644 drivers/media/platform/raspberrypi/pisp_be/pisp_be.c
> >  create mode 100644 drivers/media/platform/raspberrypi/pisp_be/pisp_be_formats.h

[snip]

> > diff --git a/drivers/media/platform/raspberrypi/pisp_be/pisp_be.c b/drivers/media/platform/raspberrypi/pisp_be/pisp_be.c
> > new file mode 100644
> > index 000000000000..c4d13462eb81
> > --- /dev/null
> > +++ b/drivers/media/platform/raspberrypi/pisp_be/pisp_be.c
> > @@ -0,0 +1,1848 @@
> > +// SPDX-License-Identifier: GPL-2.0
> > +/*
> > + * PiSP Back End driver.
> > + * Copyright (c) 2021-2024 Raspberry Pi Limited.
> > + *
> > + */
> > +#include <linux/clk.h>
> > +#include <linux/interrupt.h>
> > +#include <linux/io.h>
> > +#include <linux/kernel.h>
> > +#include <linux/lockdep.h>
> > +#include <linux/media/raspberrypi/pisp_be_config.h>
> 
> Where is the header included from? If it's just this driver, then I'd put
> it in the driver's directory.
> 
> > +#include <linux/module.h>
> > +#include <linux/platform_device.h>
> > +#include <linux/pm_runtime.h>
> > +#include <media/v4l2-device.h>
> > +#include <media/v4l2-ioctl.h>
> > +#include <media/videobuf2-dma-contig.h>
> > +#include <media/videobuf2-vmalloc.h>
> > +
> > +#include "pisp_be_formats.h"
> > +
> > +/* Maximum number of config buffers possible */
> > +#define PISP_BE_NUM_CONFIG_BUFFERS VB2_MAX_FRAME
> > +
> > +/*
> > + * We want to support 2 independent instances allowing 2 simultaneous users
> > + * of the ISP-BE (of course they share hardware, platform resources and mutex).
> > + * Each such instance comprises a group of device nodes representing input
> > + * and output queues, and a media controller device node to describe them.
> > + */
> > +#define PISPBE_NUM_NODE_GROUPS 2
> 
> While MC and V4L2 don't have a good support for contexts currently, just
> duplicating the device nodes is a really poor solution. We should do better
> than that. If we merge this, where is the limit in the number of contexts?
> Is it 4? 8? Or when we run out of minor numbers?
> 
> One API-based solution could be moving the IOCTL interface to MC device
> node only. This wouldn't be a small change so I'm not proposing doing that
> now.

I think we could also use the request API. It is a bit more cumbersome
to use from a userspace point of view, but this driver is meant to be
used from libcamera, so we can isolate applications from the extra
burden.

We will need to add support for formats in the request API (or rather
for requests in the format ioctls).

From a kernel point of view, the helpers used by the codec drivers may
not be suitable for ISP drivers, but I don't think it would be very
difficult to implement other helpers is needed, isolating the ISP driver
from the complexity of the request API.

This doesn't preclude developing a better userspace API with ioctls on
the MC device node only at a later point. If the above-mentioned kernel
helpers are done right, transitioning to a new userspace API will have
minimal impact on drivers.

> The two short term alternatives I can think of are:
> 
> - Merge the driver with one set of device nodes. Once the better APIs are
>   available, move to use those.

That could be a suitable short term option. It would allow merging the
userspace code in libcamera, which I would really like to do sooner than
later.

> - Merge the driver to the staging tree. I'm not very eager to go this route
>   as the drivers simply end up being abandoned in the staging tree. Work to
>   get the driver out of staging should continue.

I don't like this option. Regardless of whether this particular driver
would end up bit-rotting in drivers/staging/ or not (I do agree most
drivers do, we should discuss the IPU3 ImgU driver at some point), I
think the code quality is suitable for drivers/media/.

> Perhaps the upside here is that this isn't the only device that would
> benefit from better context support in MC/V4L2 so multiple parties have
> incentives to have this matter addressed.

[snip]

-- 
Regards,

Laurent Pinchart

  reply	other threads:[~2024-05-27  1:19 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-05-24 14:00 [PATCH v7 0/8] media: raspberrypi: Add support for PiSP Back End Jacopo Mondi
2024-05-24 14:00 ` [PATCH v7 1/8] media: uapi: pixfmt-luma: Document MIPI CSI-2 packing Jacopo Mondi
2024-05-24 14:00 ` [PATCH v7 2/8] media: uapi: Add a pixel format for BGR48 and RGB48 Jacopo Mondi
2024-05-24 14:00 ` [PATCH v7 3/8] media: uapi: Add Raspberry Pi PiSP Back End uAPI Jacopo Mondi
2024-05-24 14:00 ` [PATCH v7 4/8] media: uapi: Add meta pixel format for PiSP BE config Jacopo Mondi
2024-05-24 14:00 ` [PATCH v7 5/8] media: uapi: Add PiSP Compressed RAW Bayer formats Jacopo Mondi
2024-05-24 14:00 ` [PATCH v7 6/8] media: dt-bindings: Add bindings for Raspberry Pi PiSP Back End Jacopo Mondi
2024-05-24 14:00 ` [PATCH v7 7/8] media: raspberrypi: Add support for PiSP BE Jacopo Mondi
2024-05-26 20:59   ` Sakari Ailus
2024-05-27  1:19     ` Laurent Pinchart [this message]
2024-05-27  6:44       ` Sakari Ailus
2024-05-27 10:18         ` Jacopo Mondi
2024-05-27 12:43           ` Sakari Ailus
2024-05-27 15:39             ` Laurent Pinchart
2024-05-28  7:44               ` Jacopo Mondi
2024-05-27  7:56     ` Jacopo Mondi
2024-05-27  8:14       ` Sakari Ailus
2024-05-27  8:31         ` Laurent Pinchart
2024-05-27  8:45           ` Sakari Ailus
2024-05-27 10:55             ` Laurent Pinchart
2024-05-27  9:46         ` Jacopo Mondi
2024-05-24 14:00 ` [PATCH v7 8/8] media: admin-guide: Document the Raspberry Pi " 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=20240527011911.GD24374@pendragon.ideasonboard.com \
    --to=laurent.pinchart@ideasonboard.com \
    --cc=dave.stevenson@raspberrypi.com \
    --cc=david.plowman@raspberrypi.com \
    --cc=hverkuil-cisco@xs4all.nl \
    --cc=jacopo.mondi@ideasonboard.com \
    --cc=kieran.bingham@ideasonboard.com \
    --cc=linux-media@vger.kernel.org \
    --cc=mchehab@kernel.org \
    --cc=naush@raspberrypi.com \
    --cc=nick.hollinghurst@raspberrypi.org \
    --cc=sakari.ailus@iki.fi \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.