* [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; 7+ 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] 7+ 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; 7+ 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] 7+ 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; 7+ 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] 7+ 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; 7+ 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] 7+ 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; 7+ 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] 7+ 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; 7+ 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] 7+ messages in thread
* [PATCH 0/3] Rework IPU6 PCI table
@ 2026-09-09 8:19 Sakari Ailus
0 siblings, 0 replies; 7+ messages in thread
From: Sakari Ailus @ 2026-09-09 8:19 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.
since v1:
- Use static inline for ipu_bridge_get_ipu6() in non-CONFIG_IPU_BRIDGE=[my]
case and move the line above the comment related to the line following
the comment.
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: bc4257aa73edad2ba94a725f8f156eca69fc60ce
--
2.47.3
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2026-09-09 8:19 UTC | newest]
Thread overview: 7+ 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
-- strict thread matches above, loose matches on Subject: below --
2026-09-09 8:19 [PATCH 0/3] Rework IPU6 PCI table Sakari Ailus
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.