Tested-by: alberto.vignani@xxxxxxxxxxxxx >----Messaggio originale---- >Da: andriy.shevchenko@xxxxxxxxxxxxxxx >Data: 06/11/2020 11.05 >A: "Bjorn Helgaas"<bhelgaas@xxxxxxxxxx>, <linux-pci@xxxxxxxxxxxxxxx>, <johan@ke rnel.org>, <linux-usb@xxxxxxxxxxxxxxx> >Cc: "Andy Shevchenko"<andriy.shevchenko@xxxxxxxxxxxxxxx>, <alberto.vignani@fast webnet.it> >Ogg: [PATCH v2 1/2] PCI: Disable MSI for Pericom PCIe-USB adapter > >Pericom PCIe-USB adapter advertises MSI, but documentation says >"The MSI Function is not implemented on this device." in the chapters >7.3.27, 7.3.29-7.3.31. > >Fixes: 306c54d0edb6 ("usb: hcd: Try MSI interrupts on PCI devices") >Datasheet: https://www.diodes.com/assets/Datasheets/PI7C9X440SL.pdf >Reported-by: alberto.vignani@xxxxxxxxxxxxx >Signed-off-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> >--- >v2: dropped confusing word (David), added ifdeffery (Ben) > drivers/pci/quirks.c | 17 +++++++++++++---- > 1 file changed, 13 insertions(+), 4 deletions(-) > >diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c >index f70692ac79c5..e66e0cc8f99b 100644 >--- a/drivers/pci/quirks.c >+++ b/drivers/pci/quirks.c >@@ -5567,17 +5567,26 @@ static void pci_fixup_no_d0_pme(struct pci_dev *dev) > DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ASMEDIA, 0x2142, pci_fixup_no_d0_pme); > > /* >- * Device [12d8:0x400e] and [12d8:0x400f] >+ * Device 12d8:0x400e [OHCI] and 12d8:0x400f [EHCI] >+ * > * These devices advertise PME# support in all power states but don't > * reliably assert it. >+ * >+ * These devices advertise MSI, but documentation (PI7C9X440SL.pdf) says >+ * "The MSI Function is not implemented on this device." in the chapters >+ * 7.3.27, 7.3.29-7.3.31. > */ >-static void pci_fixup_no_pme(struct pci_dev *dev) >+static void pci_fixup_no_msi_no_pme(struct pci_dev *dev) > { >+#ifdef CONFIG_PCI_MSI >+ pci_info(dev, "The MSI is not implemented on this device, disabling it\n"); >+ dev->no_msi = 1; >+#endif > pci_info(dev, "PME# is unreliable, disabling it\n"); > dev->pme_support = 0; > } >-DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_PERICOM, 0x400e, pci_fixup_no_pme); >-DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_PERICOM, 0x400f, pci_fixup_no_pme); >+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_PERICOM, 0x400e, pci_fixup_no_msi_no_pme ); >+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_PERICOM, 0x400f, pci_fixup_no_msi_no_pme ); > > static void apex_pci_fixup_class(struct pci_dev *pdev) > { >-- >2.28.0