Hi Sakari, On 4/16/24 10:10 PM, Sakari Ailus wrote: > Hello everyone, > > This patch series adds a driver for Intel IPU6 input system. > IPU6 is the sixth generation of Imaging Processing Unit, it is a PCI > device which can be found in some Intel Client Platforms. User can use > IPU6 to capture images from MIPI camera sensors. > > IPU6 has its own firmware which exposes ABIs to driver, and communicates > with CSE to do firmware authentication. IPU6 has its MMU hardware, so > the driver sets up a page table to allow IPU6 DMA to access the system > memory. > > IPU6 input system driver uses MC and V4L2 sub-device APIs besides V4L2. > > I can now capture images from ov01a10 and ov2740 sensors (including > metadata from the latter). > > The series applies on top of the metadata patchset > <URL:https://lore.kernel.org/linux-media/20240416193319.778192-1-sakari.ailus@xxxxxxxxxxxxxxx/T/#t>. Thank you for the new version! I assume that the posting of this new version means that you have solved the stability issues where the laptop would freeze after sttreaming from an ov2740 sensor with metadata once ? What about the unrelated ov2740 driver issue where the sensor would not always start streaming for which you temporarily disabled runtime pm for the sensor as a workaround any progress on that ? Do you have a git branch available with the metadata + this series somewhere for easy testing ? I would like to give this a test run on my own IPU6 + ov2740 laptop. Regards, Hans > > --- > since v3: > > - Prepend the series with IPU bridge changes for more reliable > IPU bridge initialisation. > > - Split off the IPU6 PCI device ID table (due to the former change). > > - Documentation improvements (mostly non-technical). > > - Update copyright year. > > - Remove unused struct ipu6_buttress_constraint and a few other unused > definitions. > > - Miscellaneous cleanups. > > - Make functions static if they can be so. > > - Merge watermark setup error handling bugfix from Hongju. > > - Use media_pad_remote_pad_unique() instead of > media_pad_remote_pad_first() in figuring out the remote sub-device. > > - Determine the number of queues by counting the video nodes in the graph. > > - Make the links from the external sub-devices to CSI-2 receivers enabled > and immutable. > > - Simplify determining CSI-2 port control base port offset. > > - Create only as many links as needed between CSI-2 receivers and video > nodes (one per video node). > > v2 -> v3: > - Add line-based metadata capture support > - Fix header files inclusion issues > - Fix the CSI2 timing calculation > - Fix crash when remove module during streaming > - Remove some unused code > - Use cross-referencing links in documentation > - Update Makefile to use ":=" for objects > - Fix several bugs and coding style issues > > v1 -> v2: > - Add multiplexed streams support > - Use auxiliary bus to register IPU6 devices > - Add IPU6 hardware and driver overview documentation > - Updata IPU6 admin-guide documentation > - Update number of source pads and video nodes to support > multiplexed streams > > TODOs: > - Add firmware CSI2 lanes configuration verification > > Bingbu Cao (16): > media: intel/ipu6: add Intel IPU6 PCI device driver > media: intel/ipu6: add IPU auxiliary devices > media: intel/ipu6: add IPU6 buttress interface driver > media: intel/ipu6: CPD parsing for get firmware components > media: intel/ipu6: add IPU6 DMA mapping API and MMU table > media: intel/ipu6: add syscom interfaces between firmware and driver > media: intel/ipu6: input system ABI between firmware and driver > media: intel/ipu6: add IPU6 CSI2 receiver v4l2 sub-device > media: intel/ipu6: add the CSI2 DPHY implementation > media: intel/ipu6: input system video nodes and buffer queues > media: intel/ipu6: add the main input system driver > media: intel/ipu6: add Kconfig and Makefile > MAINTAINERS: add maintainers for Intel IPU6 input system driver > media: intel/ipu6: support line-based metadata capture support > Documentation: add Intel IPU6 ISYS driver admin-guide doc > Documentation: add documentation of Intel IPU6 driver and hardware > overview > > Sakari Ailus (3): > media: ipu6: Add PCI device table header > media: ivsc: csi: Use IPU bridge > media: Kconfig: Select MEDIA_CONTROLLER for VIDEO_V4L2_SUBDEV_API > > Documentation/admin-guide/media/ipu6-isys.rst | 161 ++ > .../admin-guide/media/ipu6_isys_graph.svg | 548 +++++++ > .../admin-guide/media/v4l-drivers.rst | 1 + > .../driver-api/media/drivers/index.rst | 1 + > .../driver-api/media/drivers/ipu6.rst | 205 +++ > MAINTAINERS | 10 + > drivers/media/pci/intel/Kconfig | 1 + > drivers/media/pci/intel/Makefile | 1 + > drivers/media/pci/intel/ipu6/Kconfig | 17 + > drivers/media/pci/intel/ipu6/Makefile | 23 + > drivers/media/pci/intel/ipu6/ipu6-bus.c | 165 ++ > drivers/media/pci/intel/ipu6/ipu6-bus.h | 58 + > drivers/media/pci/intel/ipu6/ipu6-buttress.c | 912 +++++++++++ > drivers/media/pci/intel/ipu6/ipu6-buttress.h | 92 ++ > drivers/media/pci/intel/ipu6/ipu6-cpd.c | 362 +++++ > drivers/media/pci/intel/ipu6/ipu6-cpd.h | 105 ++ > drivers/media/pci/intel/ipu6/ipu6-dma.c | 502 ++++++ > drivers/media/pci/intel/ipu6/ipu6-dma.h | 19 + > drivers/media/pci/intel/ipu6/ipu6-fw-com.c | 413 +++++ > drivers/media/pci/intel/ipu6/ipu6-fw-com.h | 47 + > drivers/media/pci/intel/ipu6/ipu6-fw-isys.c | 487 ++++++ > drivers/media/pci/intel/ipu6/ipu6-fw-isys.h | 568 +++++++ > drivers/media/pci/intel/ipu6/ipu6-isys-csi2.c | 667 ++++++++ > drivers/media/pci/intel/ipu6/ipu6-isys-csi2.h | 82 + > .../media/pci/intel/ipu6/ipu6-isys-dwc-phy.c | 536 +++++++ > .../media/pci/intel/ipu6/ipu6-isys-jsl-phy.c | 242 +++ > .../media/pci/intel/ipu6/ipu6-isys-mcd-phy.c | 720 +++++++++ > .../media/pci/intel/ipu6/ipu6-isys-queue.c | 824 ++++++++++ > .../media/pci/intel/ipu6/ipu6-isys-queue.h | 78 + > .../media/pci/intel/ipu6/ipu6-isys-subdev.c | 408 +++++ > .../media/pci/intel/ipu6/ipu6-isys-subdev.h | 59 + > .../media/pci/intel/ipu6/ipu6-isys-video.c | 1401 +++++++++++++++++ > .../media/pci/intel/ipu6/ipu6-isys-video.h | 137 ++ > drivers/media/pci/intel/ipu6/ipu6-isys.c | 1368 ++++++++++++++++ > drivers/media/pci/intel/ipu6/ipu6-isys.h | 206 +++ > drivers/media/pci/intel/ipu6/ipu6-mmu.c | 845 ++++++++++ > drivers/media/pci/intel/ipu6/ipu6-mmu.h | 73 + > .../intel/ipu6/ipu6-platform-buttress-regs.h | 226 +++ > .../intel/ipu6/ipu6-platform-isys-csi2-reg.h | 172 ++ > .../media/pci/intel/ipu6/ipu6-platform-regs.h | 179 +++ > drivers/media/pci/intel/ipu6/ipu6.c | 895 +++++++++++ > drivers/media/pci/intel/ipu6/ipu6.h | 342 ++++ > drivers/media/pci/intel/ivsc/mei_csi.c | 20 +- > drivers/media/v4l2-core/Kconfig | 3 +- > include/media/ipu6-pci-table.h | 28 + > 45 files changed, 14206 insertions(+), 3 deletions(-) > create mode 100644 Documentation/admin-guide/media/ipu6-isys.rst > create mode 100644 Documentation/admin-guide/media/ipu6_isys_graph.svg > create mode 100644 Documentation/driver-api/media/drivers/ipu6.rst > create mode 100644 drivers/media/pci/intel/ipu6/Kconfig > create mode 100644 drivers/media/pci/intel/ipu6/Makefile > create mode 100644 drivers/media/pci/intel/ipu6/ipu6-bus.c > create mode 100644 drivers/media/pci/intel/ipu6/ipu6-bus.h > create mode 100644 drivers/media/pci/intel/ipu6/ipu6-buttress.c > create mode 100644 drivers/media/pci/intel/ipu6/ipu6-buttress.h > create mode 100644 drivers/media/pci/intel/ipu6/ipu6-cpd.c > create mode 100644 drivers/media/pci/intel/ipu6/ipu6-cpd.h > create mode 100644 drivers/media/pci/intel/ipu6/ipu6-dma.c > create mode 100644 drivers/media/pci/intel/ipu6/ipu6-dma.h > create mode 100644 drivers/media/pci/intel/ipu6/ipu6-fw-com.c > create mode 100644 drivers/media/pci/intel/ipu6/ipu6-fw-com.h > create mode 100644 drivers/media/pci/intel/ipu6/ipu6-fw-isys.c > create mode 100644 drivers/media/pci/intel/ipu6/ipu6-fw-isys.h > create mode 100644 drivers/media/pci/intel/ipu6/ipu6-isys-csi2.c > create mode 100644 drivers/media/pci/intel/ipu6/ipu6-isys-csi2.h > create mode 100644 drivers/media/pci/intel/ipu6/ipu6-isys-dwc-phy.c > create mode 100644 drivers/media/pci/intel/ipu6/ipu6-isys-jsl-phy.c > create mode 100644 drivers/media/pci/intel/ipu6/ipu6-isys-mcd-phy.c > create mode 100644 drivers/media/pci/intel/ipu6/ipu6-isys-queue.c > create mode 100644 drivers/media/pci/intel/ipu6/ipu6-isys-queue.h > create mode 100644 drivers/media/pci/intel/ipu6/ipu6-isys-subdev.c > create mode 100644 drivers/media/pci/intel/ipu6/ipu6-isys-subdev.h > create mode 100644 drivers/media/pci/intel/ipu6/ipu6-isys-video.c > create mode 100644 drivers/media/pci/intel/ipu6/ipu6-isys-video.h > create mode 100644 drivers/media/pci/intel/ipu6/ipu6-isys.c > create mode 100644 drivers/media/pci/intel/ipu6/ipu6-isys.h > create mode 100644 drivers/media/pci/intel/ipu6/ipu6-mmu.c > create mode 100644 drivers/media/pci/intel/ipu6/ipu6-mmu.h > create mode 100644 drivers/media/pci/intel/ipu6/ipu6-platform-buttress-regs.h > create mode 100644 drivers/media/pci/intel/ipu6/ipu6-platform-isys-csi2-reg.h > create mode 100644 drivers/media/pci/intel/ipu6/ipu6-platform-regs.h > create mode 100644 drivers/media/pci/intel/ipu6/ipu6.c > create mode 100644 drivers/media/pci/intel/ipu6/ipu6.h > create mode 100644 include/media/ipu6-pci-table.h >