mbox series

[v5,0/4] media: raspberrypi: Support RPi5's CFE

Message ID 20240910-rp1-cfe-v5-0-9ab4c4c8eace@ideasonboard.com (mailing list archive)
Headers show
Series media: raspberrypi: Support RPi5's CFE | expand

Message

Tomi Valkeinen Sept. 10, 2024, 8:07 a.m. UTC
This series adds support to the CFE hardware block on RaspberryPi 5. The
CFE (Camera Front End) contains a CSI-2 receiver and Front End, a small
ISP.

To run this, you need the basic RPi5 kernel support plus relevant dts
changes to enable the cfe and camera. My work branch with everything
needed to run CFE can be found from:

git://git.kernel.org/pub/scm/linux/kernel/git/tomba/linux.git rp1-cfe

A few notes about the patches:

- The original work was done by RaspberryPi, mostly by Naushir Patuck.
- The second video node only sets V4L2_CAP_META_CAPTURE instead of both
  V4L2_CAP_META_CAPTURE and V4L2_CAP_META_CAPTURE like the other nodes.
  This is a temporary workaround for userspace (libcamera), and
  hopefully can be removed soon.

I have tested this with:
- A single IMX219 sensor connected to the RPi5's CSI-2 port
- Arducam's UB960 FPD-Link board with four imx219 sensors connected

 Tomi

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
---
Changes in v5:
- Add "depends on PM". The platforms that use CFE will always have PM in
  practice, and it's not worth supporting both the PM and !PM cases as
  it adds complexity to the driver.
- Link to v4: https://lore.kernel.org/r/20240904-rp1-cfe-v4-0-f1b5b3d69c81@ideasonboard.com

Changes in v4:
- Drop unnecessary clock-lanes from the DT bindings
- Drop unnecessary linux-media from MAINTAINERS entry
- Drop unnecessary conversion to bool with !!
- Don't set cap->bus_info in cfe_querycap()
- Make debugfs files not readable by the world
- Check the return value of v4l2_fwnode_endpoint_parse()
- Remove the code dealing with remote_ep_fwnode. Instead use
  v4l2_create_fwnode_links_to_pad() and media_pad_remote_pad_unique() to
  create the link and get the pad index.
- Add cfe/csi2/fe/dphy argument to the respective dbg/info/err print
  macros.
- Drop some debug prints and add a few, clarifying the prints for
  enabling and disabling the streams.
- Some cosmetic changes (linefeed, drop unnecessary assignment, move a
  define)
- Link to v3: https://lore.kernel.org/r/20240815-rp1-cfe-v3-0-e15a979db327@ideasonboard.com

Changes in v3:
- Based on v6.11-rc3. The PiSP BE series is now in upstream so no extra
  dependencies are needed.
- Fixed cfe_remove() return value, as the .remove hook has changed
- Added Krzysztof's Rb.
- Link to v2: https://lore.kernel.org/r/20240620-rp1-cfe-v2-0-b8b48fdba3b3@ideasonboard.com

Changes in v2:
- Change the compatible string back to raspberrypi,rp1-cfe from raspberrypi,rpi5-rp1-cfe
- Drop the references to rp1 headers in the DT binding example. This
  allows compiling the example without the rp1 support.
- Fix missing remap lines for mono formats
- Fix csi2_pad_set_fmt() so that the format can be changed back to the
  sink's format from 16-bit or compressed format.
- Link to v1: https://lore.kernel.org/r/20240318-rp1-cfe-v1-0-ac6d960ff22d@ideasonboard.com

---
Tomi Valkeinen (4):
      media: uapi: Add meta formats for PiSP FE config and stats
      dt-bindings: media: Add bindings for raspberrypi,rp1-cfe
      media: raspberrypi: Add support for RP1-CFE
      media: admin-guide: Document the Raspberry Pi CFE (rp1-cfe)

 .../admin-guide/media/raspberrypi-rp1-cfe.dot      |   27 +
 .../admin-guide/media/raspberrypi-rp1-cfe.rst      |   78 +
 Documentation/admin-guide/media/v4l-drivers.rst    |    1 +
 .../bindings/media/raspberrypi,rp1-cfe.yaml        |   93 +
 .../userspace-api/media/v4l/meta-formats.rst       |    1 +
 .../userspace-api/media/v4l/metafmt-pisp-fe.rst    |   39 +
 MAINTAINERS                                        |    7 +
 drivers/media/platform/raspberrypi/Kconfig         |    1 +
 drivers/media/platform/raspberrypi/Makefile        |    1 +
 drivers/media/platform/raspberrypi/rp1-cfe/Kconfig |   15 +
 .../media/platform/raspberrypi/rp1-cfe/Makefile    |    6 +
 .../media/platform/raspberrypi/rp1-cfe/cfe-fmts.h  |  332 +++
 .../media/platform/raspberrypi/rp1-cfe/cfe-trace.h |  196 ++
 drivers/media/platform/raspberrypi/rp1-cfe/cfe.c   | 2487 ++++++++++++++++++++
 drivers/media/platform/raspberrypi/rp1-cfe/cfe.h   |   43 +
 drivers/media/platform/raspberrypi/rp1-cfe/csi2.c  |  583 +++++
 drivers/media/platform/raspberrypi/rp1-cfe/csi2.h  |   89 +
 drivers/media/platform/raspberrypi/rp1-cfe/dphy.c  |  180 ++
 drivers/media/platform/raspberrypi/rp1-cfe/dphy.h  |   27 +
 .../media/platform/raspberrypi/rp1-cfe/pisp-fe.c   |  581 +++++
 .../media/platform/raspberrypi/rp1-cfe/pisp-fe.h   |   53 +
 drivers/media/v4l2-core/v4l2-ioctl.c               |    2 +
 .../uapi/linux/media/raspberrypi/pisp_fe_config.h  |  273 +++
 .../linux/media/raspberrypi/pisp_fe_statistics.h   |   64 +
 include/uapi/linux/videodev2.h                     |    2 +
 25 files changed, 5181 insertions(+)
---
base-commit: 431c1646e1f86b949fa3685efc50b660a364c2b6
change-id: 20240314-rp1-cfe-142b628b7214

Best regards,

Comments

Tomi Valkeinen Sept. 26, 2024, 7:13 a.m. UTC | #1
Hi,

On 10/09/2024 11:07, Tomi Valkeinen wrote:
> This series adds support to the CFE hardware block on RaspberryPi 5. The
> CFE (Camera Front End) contains a CSI-2 receiver and Front End, a small
> ISP.
> 
> To run this, you need the basic RPi5 kernel support plus relevant dts
> changes to enable the cfe and camera. My work branch with everything
> needed to run CFE can be found from:
> 
> git://git.kernel.org/pub/scm/linux/kernel/git/tomba/linux.git rp1-cfe
> 
> A few notes about the patches:
> 
> - The original work was done by RaspberryPi, mostly by Naushir Patuck.
> - The second video node only sets V4L2_CAP_META_CAPTURE instead of both
>    V4L2_CAP_META_CAPTURE and V4L2_CAP_META_CAPTURE like the other nodes.
>    This is a temporary workaround for userspace (libcamera), and
>    hopefully can be removed soon.
> 
> I have tested this with:
> - A single IMX219 sensor connected to the RPi5's CSI-2 port
> - Arducam's UB960 FPD-Link board with four imx219 sensors connected
> 
>   Tomi
> 
> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
> ---
> Changes in v5:
> - Add "depends on PM". The platforms that use CFE will always have PM in
>    practice, and it's not worth supporting both the PM and !PM cases as
>    it adds complexity to the driver.
> - Link to v4: https://lore.kernel.org/r/20240904-rp1-cfe-v4-0-f1b5b3d69c81@ideasonboard.com

Is this solution to the PM issue ok for everyone? It feels most sensible 
to me. Any other comments?

  Tomi

> Changes in v4:
> - Drop unnecessary clock-lanes from the DT bindings
> - Drop unnecessary linux-media from MAINTAINERS entry
> - Drop unnecessary conversion to bool with !!
> - Don't set cap->bus_info in cfe_querycap()
> - Make debugfs files not readable by the world
> - Check the return value of v4l2_fwnode_endpoint_parse()
> - Remove the code dealing with remote_ep_fwnode. Instead use
>    v4l2_create_fwnode_links_to_pad() and media_pad_remote_pad_unique() to
>    create the link and get the pad index.
> - Add cfe/csi2/fe/dphy argument to the respective dbg/info/err print
>    macros.
> - Drop some debug prints and add a few, clarifying the prints for
>    enabling and disabling the streams.
> - Some cosmetic changes (linefeed, drop unnecessary assignment, move a
>    define)
> - Link to v3: https://lore.kernel.org/r/20240815-rp1-cfe-v3-0-e15a979db327@ideasonboard.com
> 
> Changes in v3:
> - Based on v6.11-rc3. The PiSP BE series is now in upstream so no extra
>    dependencies are needed.
> - Fixed cfe_remove() return value, as the .remove hook has changed
> - Added Krzysztof's Rb.
> - Link to v2: https://lore.kernel.org/r/20240620-rp1-cfe-v2-0-b8b48fdba3b3@ideasonboard.com
> 
> Changes in v2:
> - Change the compatible string back to raspberrypi,rp1-cfe from raspberrypi,rpi5-rp1-cfe
> - Drop the references to rp1 headers in the DT binding example. This
>    allows compiling the example without the rp1 support.
> - Fix missing remap lines for mono formats
> - Fix csi2_pad_set_fmt() so that the format can be changed back to the
>    sink's format from 16-bit or compressed format.
> - Link to v1: https://lore.kernel.org/r/20240318-rp1-cfe-v1-0-ac6d960ff22d@ideasonboard.com
> 
> ---
> Tomi Valkeinen (4):
>        media: uapi: Add meta formats for PiSP FE config and stats
>        dt-bindings: media: Add bindings for raspberrypi,rp1-cfe
>        media: raspberrypi: Add support for RP1-CFE
>        media: admin-guide: Document the Raspberry Pi CFE (rp1-cfe)
> 
>   .../admin-guide/media/raspberrypi-rp1-cfe.dot      |   27 +
>   .../admin-guide/media/raspberrypi-rp1-cfe.rst      |   78 +
>   Documentation/admin-guide/media/v4l-drivers.rst    |    1 +
>   .../bindings/media/raspberrypi,rp1-cfe.yaml        |   93 +
>   .../userspace-api/media/v4l/meta-formats.rst       |    1 +
>   .../userspace-api/media/v4l/metafmt-pisp-fe.rst    |   39 +
>   MAINTAINERS                                        |    7 +
>   drivers/media/platform/raspberrypi/Kconfig         |    1 +
>   drivers/media/platform/raspberrypi/Makefile        |    1 +
>   drivers/media/platform/raspberrypi/rp1-cfe/Kconfig |   15 +
>   .../media/platform/raspberrypi/rp1-cfe/Makefile    |    6 +
>   .../media/platform/raspberrypi/rp1-cfe/cfe-fmts.h  |  332 +++
>   .../media/platform/raspberrypi/rp1-cfe/cfe-trace.h |  196 ++
>   drivers/media/platform/raspberrypi/rp1-cfe/cfe.c   | 2487 ++++++++++++++++++++
>   drivers/media/platform/raspberrypi/rp1-cfe/cfe.h   |   43 +
>   drivers/media/platform/raspberrypi/rp1-cfe/csi2.c  |  583 +++++
>   drivers/media/platform/raspberrypi/rp1-cfe/csi2.h  |   89 +
>   drivers/media/platform/raspberrypi/rp1-cfe/dphy.c  |  180 ++
>   drivers/media/platform/raspberrypi/rp1-cfe/dphy.h  |   27 +
>   .../media/platform/raspberrypi/rp1-cfe/pisp-fe.c   |  581 +++++
>   .../media/platform/raspberrypi/rp1-cfe/pisp-fe.h   |   53 +
>   drivers/media/v4l2-core/v4l2-ioctl.c               |    2 +
>   .../uapi/linux/media/raspberrypi/pisp_fe_config.h  |  273 +++
>   .../linux/media/raspberrypi/pisp_fe_statistics.h   |   64 +
>   include/uapi/linux/videodev2.h                     |    2 +
>   25 files changed, 5181 insertions(+)
> ---
> base-commit: 431c1646e1f86b949fa3685efc50b660a364c2b6
> change-id: 20240314-rp1-cfe-142b628b7214
> 
> Best regards,
Jacopo Mondi Sept. 26, 2024, 9:04 a.m. UTC | #2
Hi Tomi

On Thu, Sep 26, 2024 at 10:13:29AM GMT, Tomi Valkeinen wrote:
> Hi,
>
> On 10/09/2024 11:07, Tomi Valkeinen wrote:
> > This series adds support to the CFE hardware block on RaspberryPi 5. The
> > CFE (Camera Front End) contains a CSI-2 receiver and Front End, a small
> > ISP.
> >
> > To run this, you need the basic RPi5 kernel support plus relevant dts
> > changes to enable the cfe and camera. My work branch with everything
> > needed to run CFE can be found from:
> >
> > git://git.kernel.org/pub/scm/linux/kernel/git/tomba/linux.git rp1-cfe
> >
> > A few notes about the patches:
> >
> > - The original work was done by RaspberryPi, mostly by Naushir Patuck.
> > - The second video node only sets V4L2_CAP_META_CAPTURE instead of both
> >    V4L2_CAP_META_CAPTURE and V4L2_CAP_META_CAPTURE like the other nodes.
> >    This is a temporary workaround for userspace (libcamera), and
> >    hopefully can be removed soon.
> >
> > I have tested this with:
> > - A single IMX219 sensor connected to the RPi5's CSI-2 port
> > - Arducam's UB960 FPD-Link board with four imx219 sensors connected
> >
> >   Tomi
> >
> > Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
> > ---
> > Changes in v5:
> > - Add "depends on PM". The platforms that use CFE will always have PM in
> >    practice, and it's not worth supporting both the PM and !PM cases as
> >    it adds complexity to the driver.
> > - Link to v4: https://lore.kernel.org/r/20240904-rp1-cfe-v4-0-f1b5b3d69c81@ideasonboard.com
>
> Is this solution to the PM issue ok for everyone? It feels most sensible to
> me. Any other comments?

There was consensus at the media summit that platform drivers are
allowed to depend on PM.

I'll do the same for my latest PiSP BE series.

>
>  Tomi
>
> > Changes in v4:
> > - Drop unnecessary clock-lanes from the DT bindings
> > - Drop unnecessary linux-media from MAINTAINERS entry
> > - Drop unnecessary conversion to bool with !!
> > - Don't set cap->bus_info in cfe_querycap()
> > - Make debugfs files not readable by the world
> > - Check the return value of v4l2_fwnode_endpoint_parse()
> > - Remove the code dealing with remote_ep_fwnode. Instead use
> >    v4l2_create_fwnode_links_to_pad() and media_pad_remote_pad_unique() to
> >    create the link and get the pad index.
> > - Add cfe/csi2/fe/dphy argument to the respective dbg/info/err print
> >    macros.
> > - Drop some debug prints and add a few, clarifying the prints for
> >    enabling and disabling the streams.
> > - Some cosmetic changes (linefeed, drop unnecessary assignment, move a
> >    define)
> > - Link to v3: https://lore.kernel.org/r/20240815-rp1-cfe-v3-0-e15a979db327@ideasonboard.com
> >
> > Changes in v3:
> > - Based on v6.11-rc3. The PiSP BE series is now in upstream so no extra
> >    dependencies are needed.
> > - Fixed cfe_remove() return value, as the .remove hook has changed
> > - Added Krzysztof's Rb.
> > - Link to v2: https://lore.kernel.org/r/20240620-rp1-cfe-v2-0-b8b48fdba3b3@ideasonboard.com
> >
> > Changes in v2:
> > - Change the compatible string back to raspberrypi,rp1-cfe from raspberrypi,rpi5-rp1-cfe
> > - Drop the references to rp1 headers in the DT binding example. This
> >    allows compiling the example without the rp1 support.
> > - Fix missing remap lines for mono formats
> > - Fix csi2_pad_set_fmt() so that the format can be changed back to the
> >    sink's format from 16-bit or compressed format.
> > - Link to v1: https://lore.kernel.org/r/20240318-rp1-cfe-v1-0-ac6d960ff22d@ideasonboard.com
> >
> > ---
> > Tomi Valkeinen (4):
> >        media: uapi: Add meta formats for PiSP FE config and stats
> >        dt-bindings: media: Add bindings for raspberrypi,rp1-cfe
> >        media: raspberrypi: Add support for RP1-CFE
> >        media: admin-guide: Document the Raspberry Pi CFE (rp1-cfe)
> >
> >   .../admin-guide/media/raspberrypi-rp1-cfe.dot      |   27 +
> >   .../admin-guide/media/raspberrypi-rp1-cfe.rst      |   78 +
> >   Documentation/admin-guide/media/v4l-drivers.rst    |    1 +
> >   .../bindings/media/raspberrypi,rp1-cfe.yaml        |   93 +
> >   .../userspace-api/media/v4l/meta-formats.rst       |    1 +
> >   .../userspace-api/media/v4l/metafmt-pisp-fe.rst    |   39 +
> >   MAINTAINERS                                        |    7 +
> >   drivers/media/platform/raspberrypi/Kconfig         |    1 +
> >   drivers/media/platform/raspberrypi/Makefile        |    1 +
> >   drivers/media/platform/raspberrypi/rp1-cfe/Kconfig |   15 +
> >   .../media/platform/raspberrypi/rp1-cfe/Makefile    |    6 +
> >   .../media/platform/raspberrypi/rp1-cfe/cfe-fmts.h  |  332 +++
> >   .../media/platform/raspberrypi/rp1-cfe/cfe-trace.h |  196 ++
> >   drivers/media/platform/raspberrypi/rp1-cfe/cfe.c   | 2487 ++++++++++++++++++++
> >   drivers/media/platform/raspberrypi/rp1-cfe/cfe.h   |   43 +
> >   drivers/media/platform/raspberrypi/rp1-cfe/csi2.c  |  583 +++++
> >   drivers/media/platform/raspberrypi/rp1-cfe/csi2.h  |   89 +
> >   drivers/media/platform/raspberrypi/rp1-cfe/dphy.c  |  180 ++
> >   drivers/media/platform/raspberrypi/rp1-cfe/dphy.h  |   27 +
> >   .../media/platform/raspberrypi/rp1-cfe/pisp-fe.c   |  581 +++++
> >   .../media/platform/raspberrypi/rp1-cfe/pisp-fe.h   |   53 +
> >   drivers/media/v4l2-core/v4l2-ioctl.c               |    2 +
> >   .../uapi/linux/media/raspberrypi/pisp_fe_config.h  |  273 +++
> >   .../linux/media/raspberrypi/pisp_fe_statistics.h   |   64 +
> >   include/uapi/linux/videodev2.h                     |    2 +
> >   25 files changed, 5181 insertions(+)
> > ---
> > base-commit: 431c1646e1f86b949fa3685efc50b660a364c2b6
> > change-id: 20240314-rp1-cfe-142b628b7214
> >
> > Best regards,
>
>
Sakari Ailus Sept. 26, 2024, 9:15 a.m. UTC | #3
Hi Jacopo,

On Thu, Sep 26, 2024 at 11:04:36AM +0200, Jacopo Mondi wrote:
> Hi Tomi
> 
> On Thu, Sep 26, 2024 at 10:13:29AM GMT, Tomi Valkeinen wrote:
> > Hi,
> >
> > On 10/09/2024 11:07, Tomi Valkeinen wrote:
> > > This series adds support to the CFE hardware block on RaspberryPi 5. The
> > > CFE (Camera Front End) contains a CSI-2 receiver and Front End, a small
> > > ISP.
> > >
> > > To run this, you need the basic RPi5 kernel support plus relevant dts
> > > changes to enable the cfe and camera. My work branch with everything
> > > needed to run CFE can be found from:
> > >
> > > git://git.kernel.org/pub/scm/linux/kernel/git/tomba/linux.git rp1-cfe
> > >
> > > A few notes about the patches:
> > >
> > > - The original work was done by RaspberryPi, mostly by Naushir Patuck.
> > > - The second video node only sets V4L2_CAP_META_CAPTURE instead of both
> > >    V4L2_CAP_META_CAPTURE and V4L2_CAP_META_CAPTURE like the other nodes.
> > >    This is a temporary workaround for userspace (libcamera), and
> > >    hopefully can be removed soon.
> > >
> > > I have tested this with:
> > > - A single IMX219 sensor connected to the RPi5's CSI-2 port
> > > - Arducam's UB960 FPD-Link board with four imx219 sensors connected
> > >
> > >   Tomi
> > >
> > > Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
> > > ---
> > > Changes in v5:
> > > - Add "depends on PM". The platforms that use CFE will always have PM in
> > >    practice, and it's not worth supporting both the PM and !PM cases as
> > >    it adds complexity to the driver.
> > > - Link to v4: https://lore.kernel.org/r/20240904-rp1-cfe-v4-0-f1b5b3d69c81@ideasonboard.com
> >
> > Is this solution to the PM issue ok for everyone? It feels most sensible to
> > me. Any other comments?
> 
> There was consensus at the media summit that platform drivers are
> allowed to depend on PM.

I'd say you should have generally a good idea these devices aren't found in
systems without runtime PM support and that mostly applies to platform
drivers.

> 
> I'll do the same for my latest PiSP BE series.

Ack.