forked from luck/tmp_suning_uos_patched
PCI: Disable MSI for Pericom PCIe-USB adapter
[ Upstream commit f83c37941e881224885f2e694e0626bea358e96b ]
Pericom PCIe-USB adapter advertises MSI, but documentation says "The MSI
Function is not implemented on this device" in chapters 7.3.27,
7.3.29-7.3.31, and Alberto found that MSI in fact does not work.
Disable MSI for these devices.
Datasheet: https://www.diodes.com/assets/Datasheets/PI7C9X440SL.pdf
Fixes: 306c54d0ed
("usb: hcd: Try MSI interrupts on PCI devices")
Link: https://lore.kernel.org/linux-usb/20201030134826.GP4077@smile.fi.intel.com/
Link: https://lore.kernel.org/r/20201106100526.17726-1-andriy.shevchenko@linux.intel.com
Reported-by: alberto.vignani@fastwebnet.it
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
6cf9c3f4df
commit
ddf1dab291
|
@ -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);
|
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
|
* These devices advertise PME# support in all power states but don't
|
||||||
* reliably assert it.
|
* reliably assert it.
|
||||||
|
*
|
||||||
|
* These devices also advertise MSI, but documentation (PI7C9X440SL.pdf)
|
||||||
|
* says "The MSI Function is not implemented on this device" in 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, "MSI is not implemented on this device, disabling it\n");
|
||||||
|
dev->no_msi = 1;
|
||||||
|
#endif
|
||||||
pci_info(dev, "PME# is unreliable, disabling it\n");
|
pci_info(dev, "PME# is unreliable, disabling it\n");
|
||||||
dev->pme_support = 0;
|
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, 0x400e, pci_fixup_no_msi_no_pme);
|
||||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_PERICOM, 0x400f, pci_fixup_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)
|
static void apex_pci_fixup_class(struct pci_dev *pdev)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue
Block a user