Linux Media Controller development
 help / color / mirror / Atom feed
* [PATCH 0/3] Rework IPU6 PCI table
@ 2026-09-07 20:31 Sakari Ailus
  2026-09-07 20:31 ` [PATCH 1/3] media: ipu-bridge: Add ipu_bridge_get_ipu6() Sakari Ailus
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Sakari Ailus @ 2026-09-07 20:31 UTC (permalink / raw)
  To: linux-media
  Cc: antti.laakso, Lixu Zhang, Miguel Vadillo, Dan Scally,
	Hans de Goede, Sapre, Sarang

Hello everyone,

This set reworks IPU PCI tables a little, by moving them from the IVSC and
CVS drivers to the IPU bridge. The IPU 6 driver will need a copy of the
PCI ID table for module device table whereas another copy will reside on
the IPU bridge. That's one copy less.

Sakari Ailus (3):
  media: ipu-bridge: Add ipu_bridge_get_ipu6()
  media: cvs: Use ipu_bridge_get_ipu6()
  media: ivsc: Use ipu_bridge_get_ipu6()

 drivers/media/i2c/cvs/core.c           |  7 ++-----
 drivers/media/pci/intel/ipu-bridge.c   | 14 ++++++++++++++
 drivers/media/pci/intel/ivsc/mei_csi.c |  7 +------
 include/media/ipu-bridge.h             |  2 ++
 4 files changed, 19 insertions(+), 11 deletions(-)


base-commit: 201807737edef3af88c54072e2b895ab9e0ab7c7
-- 
2.47.3


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 1/3] media: ipu-bridge: Add ipu_bridge_get_ipu6()
  2026-09-07 20:31 [PATCH 0/3] Rework IPU6 PCI table Sakari Ailus
@ 2026-09-07 20:31 ` Sakari Ailus
  2026-09-09  7:05   ` Antti Laakso
  2026-09-07 20:31 ` [PATCH 2/3] media: cvs: Use ipu_bridge_get_ipu6() Sakari Ailus
  2026-09-07 20:31 ` [PATCH 3/3] media: ivsc: " Sakari Ailus
  2 siblings, 1 reply; 6+ messages in thread
From: Sakari Ailus @ 2026-09-07 20:31 UTC (permalink / raw)
  To: linux-media
  Cc: antti.laakso, Lixu Zhang, Miguel Vadillo, Dan Scally,
	Hans de Goede, Sapre, Sarang

Add ipu_bridge_get_ipu6() for obtaining the IPU 6 (or soon later) PCI
device. This isn't technically a job of the IPU bridge, but the
functionality is required in conjunction with the firmware definitions
that necessitate the use of the IPU bridge on many systems.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
---
 drivers/media/pci/intel/ipu-bridge.c | 14 ++++++++++++++
 include/media/ipu-bridge.h           |  2 ++
 2 files changed, 16 insertions(+)

diff --git a/drivers/media/pci/intel/ipu-bridge.c b/drivers/media/pci/intel/ipu-bridge.c
index 7e65491faf6d..67a1f233c4c6 100644
--- a/drivers/media/pci/intel/ipu-bridge.c
+++ b/drivers/media/pci/intel/ipu-bridge.c
@@ -8,6 +8,7 @@
 #include <linux/dmi.h>
 #include <linux/i2c.h>
 #include <linux/mei_cl_bus.h>
+#include <linux/pci.h>
 #include <linux/platform_device.h>
 #include <linux/pm_runtime.h>
 #include <linux/property.h>
@@ -15,6 +16,7 @@
 #include <linux/workqueue.h>
 
 #include <media/ipu-bridge.h>
+#include <media/ipu6-pci-table.h>
 #include <media/v4l2-fwnode.h>
 
 #define ADEV_DEV(adev) ACPI_PTR(&((adev)->dev))
@@ -950,6 +952,18 @@ static int ipu_bridge_check_fwnode_graph(struct fwnode_handle *fwnode)
 	return ipu_bridge_check_fwnode_graph(fwnode->secondary);
 }
 
+struct pci_dev *ipu_bridge_get_ipu6(void)
+{
+	struct pci_dev *ipu = NULL;
+
+	for (unsigned int i = 0; !ipu && ipu6_pci_tbl[i].vendor; i++)
+		ipu = pci_get_device(ipu6_pci_tbl[i].vendor,
+				     ipu6_pci_tbl[i].device, NULL);
+
+	return ipu;
+}
+EXPORT_SYMBOL_NS_GPL(ipu_bridge_get_ipu6, "INTEL_IPU_BRIDGE");
+
 static DEFINE_MUTEX(ipu_bridge_mutex);
 
 int ipu_bridge_init(struct device *dev,
diff --git a/include/media/ipu-bridge.h b/include/media/ipu-bridge.h
index 16fac765456e..373c63f98999 100644
--- a/include/media/ipu-bridge.h
+++ b/include/media/ipu-bridge.h
@@ -169,12 +169,14 @@ struct ipu_bridge {
 };
 
 #if IS_ENABLED(CONFIG_IPU_BRIDGE)
+struct pci_dev *ipu_bridge_get_ipu6(void);
 int ipu_bridge_init(struct device *dev,
 		    ipu_parse_sensor_fwnode_t parse_sensor_fwnode);
 int ipu_bridge_parse_ssdb(struct acpi_device *adev, struct ipu_sensor *sensor);
 int ipu_bridge_instantiate_vcm(struct device *sensor);
 #else
 /* Use a define to avoid the @parse_sensor_fwnode argument getting evaluated */
+struct pci_dev *ipu_bridge_get_ipu6(void) { return NULL; }
 #define ipu_bridge_init(dev, parse_sensor_fwnode)	(0)
 static inline int ipu_bridge_instantiate_vcm(struct device *s) { return 0; }
 #endif
-- 
2.47.3


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 2/3] media: cvs: Use ipu_bridge_get_ipu6()
  2026-09-07 20:31 [PATCH 0/3] Rework IPU6 PCI table Sakari Ailus
  2026-09-07 20:31 ` [PATCH 1/3] media: ipu-bridge: Add ipu_bridge_get_ipu6() Sakari Ailus
@ 2026-09-07 20:31 ` Sakari Ailus
  2026-09-07 20:31 ` [PATCH 3/3] media: ivsc: " Sakari Ailus
  2 siblings, 0 replies; 6+ messages in thread
From: Sakari Ailus @ 2026-09-07 20:31 UTC (permalink / raw)
  To: linux-media
  Cc: antti.laakso, Lixu Zhang, Miguel Vadillo, Dan Scally,
	Hans de Goede, Sapre, Sarang

Instead of going through the PCI device ID table, use
ipu_bridge_get_ipu6() to obtain a pointer to the IPU PCI device.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
---
 drivers/media/i2c/cvs/core.c | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/drivers/media/i2c/cvs/core.c b/drivers/media/i2c/cvs/core.c
index d4a3b9c3bab1..98cadd58a075 100644
--- a/drivers/media/i2c/cvs/core.c
+++ b/drivers/media/i2c/cvs/core.c
@@ -21,7 +21,6 @@
 #include <linux/workqueue.h>
 
 #include <media/ipu-bridge.h>
-#include <media/ipu6-pci-table.h>
 
 #include "icvs.h"
 
@@ -656,14 +655,12 @@ static int cvs_configure_dev_caps(struct icvs *ctx)
  */
 static int cvs_core_probe(struct device *dev, struct i2c_client *i2c)
 {
-	struct pci_dev *ipu = NULL;
+	struct pci_dev *ipu;
 	struct icvs *ctx;
 	int ret;
 
 	/* Locate IPU device */
-	for (unsigned int i = 0; !ipu && ipu6_pci_tbl[i].vendor; i++)
-		ipu = pci_get_device(ipu6_pci_tbl[i].vendor,
-				     ipu6_pci_tbl[i].device, NULL);
+	ipu = ipu_bridge_get_ipu6();
 	for (unsigned int i = 0; !ipu && icvs_ipu7_tbl[i].vendor; i++)
 		ipu = pci_get_device(icvs_ipu7_tbl[i].vendor,
 				     icvs_ipu7_tbl[i].device, NULL);
-- 
2.47.3


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 3/3] media: ivsc: Use ipu_bridge_get_ipu6()
  2026-09-07 20:31 [PATCH 0/3] Rework IPU6 PCI table Sakari Ailus
  2026-09-07 20:31 ` [PATCH 1/3] media: ipu-bridge: Add ipu_bridge_get_ipu6() Sakari Ailus
  2026-09-07 20:31 ` [PATCH 2/3] media: cvs: Use ipu_bridge_get_ipu6() Sakari Ailus
@ 2026-09-07 20:31 ` Sakari Ailus
  2 siblings, 0 replies; 6+ messages in thread
From: Sakari Ailus @ 2026-09-07 20:31 UTC (permalink / raw)
  To: linux-media
  Cc: antti.laakso, Lixu Zhang, Miguel Vadillo, Dan Scally,
	Hans de Goede, Sapre, Sarang

Instead of going through the PCI device ID table, use
ipu_bridge_get_ipu6() to obtain a pointer to the IPU PCI device.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
---
 drivers/media/pci/intel/ivsc/mei_csi.c | 7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/drivers/media/pci/intel/ivsc/mei_csi.c b/drivers/media/pci/intel/ivsc/mei_csi.c
index c2917e156345..d4256415a829 100644
--- a/drivers/media/pci/intel/ivsc/mei_csi.c
+++ b/drivers/media/pci/intel/ivsc/mei_csi.c
@@ -27,7 +27,6 @@
 #include <linux/workqueue.h>
 
 #include <media/ipu-bridge.h>
-#include <media/ipu6-pci-table.h>
 #include <media/v4l2-async.h>
 #include <media/v4l2-ctrls.h>
 #include <media/v4l2-fwnode.h>
@@ -644,13 +643,9 @@ static int mei_csi_probe(struct mei_cl_device *cldev,
 	struct device *dev = &cldev->dev;
 	struct pci_dev *ipu;
 	struct mei_csi *csi;
-	unsigned int i;
 	int ret;
 
-	for (i = 0, ipu = NULL; !ipu && ipu6_pci_tbl[i].vendor; i++)
-		ipu = pci_get_device(ipu6_pci_tbl[i].vendor,
-				     ipu6_pci_tbl[i].device, NULL);
-
+	ipu = ipu_bridge_get_ipu6();
 	if (!ipu)
 		return -ENODEV;
 
-- 
2.47.3


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/3] media: ipu-bridge: Add ipu_bridge_get_ipu6()
  2026-09-07 20:31 ` [PATCH 1/3] media: ipu-bridge: Add ipu_bridge_get_ipu6() Sakari Ailus
@ 2026-09-09  7:05   ` Antti Laakso
  2026-09-09  7:45     ` Sakari Ailus
  0 siblings, 1 reply; 6+ messages in thread
From: Antti Laakso @ 2026-09-09  7:05 UTC (permalink / raw)
  To: Sakari Ailus
  Cc: linux-media, antti.laakso, Lixu Zhang, Miguel Vadillo, Dan Scally,
	Hans de Goede, Sapre, Sarang

Hi Sakari,

On Mon, Sep 07, 2026 at 11:31:40PM +0300, Sakari Ailus wrote:
> diff --git a/include/media/ipu-bridge.h b/include/media/ipu-bridge.h
> index 16fac765456e..373c63f98999 100644
> --- a/include/media/ipu-bridge.h
> +++ b/include/media/ipu-bridge.h
> @@ -169,12 +169,14 @@ struct ipu_bridge {
>  };
>  
>  #if IS_ENABLED(CONFIG_IPU_BRIDGE)
> +struct pci_dev *ipu_bridge_get_ipu6(void);
>  int ipu_bridge_init(struct device *dev,
>  		    ipu_parse_sensor_fwnode_t parse_sensor_fwnode);
>  int ipu_bridge_parse_ssdb(struct acpi_device *adev, struct ipu_sensor *sensor);
>  int ipu_bridge_instantiate_vcm(struct device *sensor);
>  #else
>  /* Use a define to avoid the @parse_sensor_fwnode argument getting evaluated */
> +struct pci_dev *ipu_bridge_get_ipu6(void) { return NULL; }

I think this should be above the comment line. Should this also be
static?

>  #define ipu_bridge_init(dev, parse_sensor_fwnode)	(0)
>  static inline int ipu_bridge_instantiate_vcm(struct device *s) { return 0; }
>  #endif
> -- 
> 2.47.3
> 
> 

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/3] media: ipu-bridge: Add ipu_bridge_get_ipu6()
  2026-09-09  7:05   ` Antti Laakso
@ 2026-09-09  7:45     ` Sakari Ailus
  0 siblings, 0 replies; 6+ messages in thread
From: Sakari Ailus @ 2026-09-09  7:45 UTC (permalink / raw)
  To: Antti Laakso
  Cc: linux-media, antti.laakso, Lixu Zhang, Miguel Vadillo, Dan Scally,
	Hans de Goede, Sapre, Sarang

Moi,

On Wed, Sep 09, 2026 at 10:05:06AM +0300, Antti Laakso wrote:
> Hi Sakari,
> 
> On Mon, Sep 07, 2026 at 11:31:40PM +0300, Sakari Ailus wrote:
> > diff --git a/include/media/ipu-bridge.h b/include/media/ipu-bridge.h
> > index 16fac765456e..373c63f98999 100644
> > --- a/include/media/ipu-bridge.h
> > +++ b/include/media/ipu-bridge.h
> > @@ -169,12 +169,14 @@ struct ipu_bridge {
> >  };
> >  
> >  #if IS_ENABLED(CONFIG_IPU_BRIDGE)
> > +struct pci_dev *ipu_bridge_get_ipu6(void);
> >  int ipu_bridge_init(struct device *dev,
> >  		    ipu_parse_sensor_fwnode_t parse_sensor_fwnode);
> >  int ipu_bridge_parse_ssdb(struct acpi_device *adev, struct ipu_sensor *sensor);
> >  int ipu_bridge_instantiate_vcm(struct device *sensor);
> >  #else
> >  /* Use a define to avoid the @parse_sensor_fwnode argument getting evaluated */
> > +struct pci_dev *ipu_bridge_get_ipu6(void) { return NULL; }
> 
> I think this should be above the comment line. Should this also be
> static?

Indeed. I'll fix this for v2.

> 
> >  #define ipu_bridge_init(dev, parse_sensor_fwnode)	(0)
> >  static inline int ipu_bridge_instantiate_vcm(struct device *s) { return 0; }
> >  #endif

-- 
Terveisin,

Sakari Ailus

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2026-09-09  7:45 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-07 20:31 [PATCH 0/3] Rework IPU6 PCI table Sakari Ailus
2026-09-07 20:31 ` [PATCH 1/3] media: ipu-bridge: Add ipu_bridge_get_ipu6() Sakari Ailus
2026-09-09  7:05   ` Antti Laakso
2026-09-09  7:45     ` Sakari Ailus
2026-09-07 20:31 ` [PATCH 2/3] media: cvs: Use ipu_bridge_get_ipu6() Sakari Ailus
2026-09-07 20:31 ` [PATCH 3/3] media: ivsc: " Sakari Ailus

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox