On Thu, 19 Jan 2012 15:41:09 -0800,
Yinghai Lu <yinghai@xxxxxxxxxx> wrote:
snip
Index: linux-3.2/drivers/pci/quirks.c
===================================================================
--- linux-3.2.orig/drivers/pci/quirks.c
+++ linux-3.2/drivers/pci/quirks.c
@@ -2665,6 +2665,35 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AT
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x4375,
quirk_msi_intx_disable_bug);
+/*
+ * The PCI bridge from Integrated Device Technology(IDT) has a problem
+ * with MSI/MSI-X.
+ * An un-wanted interrupt is generated when PCI driver switches from
+ * MSI/MSI-X to INTx while shutting down the PCI Express port, if it
+ * provides the Native Hotplug service. The interrupt does not happen
+ * if MSI/MSI-X is not used on it. Therefore, turn off MSI/MSI-X for
+ * this device.
+ */
+static void __devinit idt_bridge_msi_disable(struct pci_dev *dev)
+{
+ int pos;
+ u16 reg16;
+ u32 reg32;
+
+ pos = pci_pcie_cap(dev);
+ if (!pos)
+ return;
+ pci_read_config_word(dev, pos + PCI_EXP_FLAGS,®16);
+ if (!(reg16& PCI_EXP_FLAGS_SLOT))
+ return;
+ pci_read_config_dword(dev, pos + PCI_EXP_SLTCAP,®32);
+ if (reg32& PCI_EXP_SLTCAP_HPC) {
+ pci_msi_off(dev);
+ dev->no_msi = 1;
+ }
+}
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_IDT, 0x807f, idt_bridge_msi_disable);
do you have statement for IDT, says that is chipset problem ?
I'm trying to contact to them, but not yet.
it could be your platform fw problem.
if that is the case, you will disable MSI/MSIX for other platform that
do not have fw problem.
Yinghai,
Btw, how about other pieces? I'm thinking to drop the quirk code
temporary, until I get the comment from them.
Can you give an ACK if I remove the hardware specific quirk code?
Thanks,
Takahiro
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html