VMD does not support legacy interrupts for devices downstream from a VMD endpoint. So initialize the PCI_INTERRUPT_LINE to 0 for these devices to ensure we don't try to set up a legacy irq for them. Note: This patch was proposed by Jim, I am trying to upstream it. Signed-off-by: Jim Harris <james.r.harris@xxxxxxxxx> Signed-off-by: Nirmal Patel <nirmal.patel@xxxxxxxxxxxxxxx> --- arch/x86/pci/fixup.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/arch/x86/pci/fixup.c b/arch/x86/pci/fixup.c index b33afb240601..a3b34a256e7f 100644 --- a/arch/x86/pci/fixup.c +++ b/arch/x86/pci/fixup.c @@ -653,6 +653,20 @@ static void quirk_no_aersid(struct pci_dev *pdev) DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_INTEL, PCI_ANY_ID, PCI_CLASS_BRIDGE_PCI, 8, quirk_no_aersid); +#if IS_ENABLED(CONFIG_VMD) +/* + * VMD does not support legacy interrupts for downstream devices. + * So PCI_INTERRPUT_LINE needs to be initialized to 0 to ensure OS + * doesn't try to configure a legacy irq. + */ +static void quirk_vmd_interrupt_line(struct pci_dev *dev) +{ + if (is_vmd(dev->bus)) + pci_write_config_byte(dev, PCI_INTERRUPT_LINE, 0); +} +DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, quirk_vmd_interrupt_line); +#endif + static void quirk_intel_th_dnv(struct pci_dev *dev) { struct resource *r = &dev->resource[4]; -- 2.39.1