Hi, On 10/24/23 13:29, bingbu.cao@xxxxxxxxx wrote: > From: Bingbu Cao <bingbu.cao@xxxxxxxxx> > > Intel Image Processing Unit 6th Gen includes input and processing systems > but the hardware presents itself as a single PCI device in system. > > IPU6 PCI device driver basically does PCI configurations and load > the firmware binary, initialises IPU virtual bus, and sets up platform > specific variants to support multiple IPU6 devices in single device > driver. > > Signed-off-by: Bingbu Cao <bingbu.cao@xxxxxxxxx> > Reported-by: Hans de Goede <hdegoede@xxxxxxxxxx> > Suggested-by: Andreas Helbech Kleist <andreaskleist@xxxxxxxxx> > --- > .../media/pci/intel/ipu6/ipu6-platform-regs.h | 179 ++++ > drivers/media/pci/intel/ipu6/ipu6.c | 952 ++++++++++++++++++ > drivers/media/pci/intel/ipu6/ipu6.h | 352 +++++++ > 3 files changed, 1483 insertions(+) > 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 <snip> > diff --git a/drivers/media/pci/intel/ipu6/ipu6.c b/drivers/media/pci/intel/ipu6/ipu6.c > new file mode 100644 > index 000000000000..84960a283daf > --- /dev/null > +++ b/drivers/media/pci/intel/ipu6/ipu6.c > @@ -0,0 +1,952 @@ <snip> > +static int ipu6_pci_config_setup(struct pci_dev *dev, u8 hw_ver) > +{ > + int ret; > + > + /* disable IPU6 PCI ATS on mtl ES2 */ > + if (is_ipu6ep_mtl(hw_ver) && boot_cpu_data.x86_stepping == 0x2 && > + pci_ats_supported(dev)) > + pci_disable_ats(dev); > + > + /* No PCI msi capability for IPU6EP */ > + if (is_ipu6ep(hw_ver) || is_ipu6ep_mtl(hw_ver)) { > + /* likely do nothing as msi not enabled by default */ > + pci_disable_msi(dev); > + return 0; > + } > + > + ret = pci_alloc_irq_vectors(dev, 1, 1, PCI_IRQ_MSI); This does not work on TGL systems (and is not reached on ADL and RPL). The out of tree driver instead uses: ret = pci_enable_msi(dev); and that does work correctly on TGL. Regards, Hans