R: [PATCH v2 1/2] PCI: Disable MSI for Pericom PCIe-USB adapter

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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







[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux