On Fri, Nov 06, 2020 at 12:05:25PM +0200, Andy Shevchenko wrote: > 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 Is there a URL to a problem report we can include here? > 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 >