Skip to contentSkip to conversation

pci-quirks: disable MSI on RS400-200 and RS480, take #2

PATCH In review Tejun Heo 4 participants 8 messages May 9, 2007 – May 19, 2007

Subsystems (2)
lore
Share & tools
lore

Tejun Heo

author
#0 lore raw

PATCH 1/1 pci-quirks: disable MSI on RS400-200 and RS480, take #2

MSI doesn't work on RS400-200 and RS480 requiring pci=nomsi kernel boot parameter for ahci to work. This patch renames quirk_svw_msi() to quirk_disable_all_msi() and use it to disable MSI on those chips.

http://thread.gmane.org/gmane.linux.ide/17820
http://thread.gmane.org/gmane.linux.ide/17516
https://bugzilla.novell.com/show_bug.cgi?id=263893

Cc Matí­as Alejandro Torres <[email protected]>

---
Okay, this is the fixed version and should probably included in -stable too as there have been quite some number of reports which got resolved by adding 'pci=nomsi'. Verified by Matí­as Alejandro Torres.

Thanks.

drivers/pci/quirks.c +9 -7
index 3411483..1e3070e 100644
@@ -1624,18 +1624,20 @@ DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_N
 			quirk_nvidia_ck804_pcie_aer_ext_cap);
 
 #ifdef CONFIG_PCI_MSI
-/* The Serverworks PCI-X chipset does not support MSI. We cannot easily rely
- * on setting PCI_BUS_FLAGS_NO_MSI in its bus flags because there are actually
- * some other busses controlled by the chipset even if Linux is not aware of it.
- * Instead of setting the flag on all busses in the machine, simply disable MSI
- * globally.
+/* Some chipsets do not support MSI. We cannot easily rely on setting
+ * PCI_BUS_FLAGS_NO_MSI in its bus flags because there are actually
+ * some other busses controlled by the chipset even if Linux is not
+ * aware of it.  Instead of setting the flag on all busses in the
+ * machine, simply disable MSI globally.
  */
-static void __init quirk_svw_msi(struct pci_dev *dev)
+static void __init quirk_disable_all_msi(struct pci_dev *dev)
 {
 	pci_no_msi();
 	printk(KERN_WARNING "PCI: MSI quirk detected. MSI deactivated.\n");
 }
-DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_GCNB_LE, quirk_svw_msi);
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_GCNB_LE, quirk_disable_all_msi);
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS400_200, quirk_disable_all_msi);
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS480, quirk_disable_all_msi);
 
 /* Disable MSI on chipsets that are known to not support it */
 static void __devinit quirk_disable_msi(struct pci_dev *dev)
#1 lore raw
Quoted 8 lines · Tejun Heo

MSI doesn't work on RS400-200 and RS480 requiring pci=nomsi kernel boot parameter for ahci to work. This patch renames quirk_svw_msi() to quirk_disable_all_msi() and use it to disable MSI on those chips.

http://thread.gmane.org/gmane.linux.ide/17820
http://thread.gmane.org/gmane.linux.ide/17516
https://bugzilla.novell.com/show_bug.cgi?id=263893

FWIW several distros have turned off MSI by default and added a "pci=msi" option to enable it.

author
#2 lore raw
Quoted 5 lines · Chuck Ebbert
Quoted 4 lines · Tejun Heo

MSI doesn't work on RS400-200 and RS480 requiring pci=nomsi kernel boot parameter for ahci to work. This patch renames quirk_svw_msi() to quirk_disable_all_msi() and use it to disable MSI on those chips.

Quoted 7 lines
Quoted 4 lines

http://thread.gmane.org/gmane.linux.ide/17820
http://thread.gmane.org/gmane.linux.ide/17516
https://bugzilla.novell.com/show_bug.cgi?id=263893

FWIW several distros have turned off MSI by default and added a "pci=msi" option to enable it.

Yeah, it seem to cause a lot of problems on certain chips but I think the correct path is to add PCI quirks for those. Most MSI problems I've seen are on these ATI chips. Do you happen to know any other?

Thanks.

Signature · 1 line
tejun
#3 lore raw
Quoted 6 lines · Tejun Heo
Quoted 2 lines

FWIW several distros have turned off MSI by default and added a "pci=msi" option to enable it.

Yeah, it seem to cause a lot of problems on certain chips but I think the correct path is to add PCI quirks for those. Most MSI problems I've seen are on these ATI chips. Do you happen to know any other?

We had devices that didn't do MSI right, e.g. forcedeth and others I can't recall now.

author
#4 lore raw
Quoted 9 lines · Chuck Ebbert
Quoted 5 lines · Tejun Heo
Quoted 2 lines

FWIW several distros have turned off MSI by default and added a "pci=msi" option to enable it.

Yeah, it seem to cause a lot of problems on certain chips but I think the correct path is to add PCI quirks for those. Most MSI problems I've seen are on these ATI chips. Do you happen to know any other?

We had devices that didn't do MSI right, e.g. forcedeth and others I can't recall now.

Right, driver on such devices shouldn't enable MSI. I think we have several of those in ATA too. Oh.. crap. :-(

Signature · 1 line
tejun
#5 lore raw
In reply to Chuck Ebbert
Quoted 9 lines · Chuck Ebbert
Quoted 5 lines · Tejun Heo
Quoted 2 lines

FWIW several distros have turned off MSI by default and added a "pci=msi" option to enable it.

Yeah, it seem to cause a lot of problems on certain chips but I think the correct path is to add PCI quirks for those. Most MSI problems I've seen are on these ATI chips. Do you happen to know any other?

We had devices that didn't do MSI right, e.g. forcedeth and others I can't recall now.

AFAIK that's a broken diagnosis. It's the system, not the device, that is problematic.

Jeff

#6 lore raw
Quoted 4 lines · Jeff Garzik
Quoted 3 lines · Chuck Ebbert
Quoted 2 lines · Tejun Heo
Quoted 2 lines

FWIW several distros have turned off MSI by default and added a "pci=msi" option to enable it.

Quoted 9 lines
Quoted 6 lines
Quoted 3 lines

Yeah, it seem to cause a lot of problems on certain chips but I think the correct path is to add PCI quirks for those. Most MSI problems I've seen are on these ATI chips. Do you happen to know any other?

We had devices that didn't do MSI right, e.g. forcedeth and others I can't recall now.

AFAIK that's a broken diagnosis. It's the system, not the device, that is problematic.

In the case of the Attansic L1 ethernet driver, here's what we see:

chipset kernel arch MSI functionality
=============== =========== =================
Intel 945G/ICH7 x86_64 yes
Intel 945G/ICH7 i386 yes
Via K8T890 x86_64 yes
Via K8T890 i386 no

I still don't know why, but we get a flood of APIC errors after starting the atl1 driver on a Via K8T890 board (Asus M2V, for example) under a 32-bit kernel, and *only* under a 32-bit kernel.

http://lkml.org/lkml/2007/4/8/68

Supporting files and such at ftp://ftp.hogchain.net/pub/linux/m2v/apic-problem

Any hints heartily welcomed...

Jay

#7 lore raw
In reply to Tejun Heo

Can someone (Greg K-H?) tell me the status of the below patch? Is it planned for 2.6.22? It looks like a useful generic "let's disable msi on board x" that I might want to use for the atl1 network driver.

Thanks,
Jay

Quoted 60 lines · On Wed, 09 May 2007 14:23:02 +0200 Tejun Heo <[email protected]> wrote:

MSI doesn't work on RS400-200 and RS480 requiring pci=nomsi kernel boot parameter for ahci to work. This patch renames quirk_svw_msi() to quirk_disable_all_msi() and use it to disable MSI on those chips.

http://thread.gmane.org/gmane.linux.ide/17820
http://thread.gmane.org/gmane.linux.ide/17516
https://bugzilla.novell.com/show_bug.cgi?id=263893

Cc Matí­as Alejandro Torres <[email protected]>

---
Okay, this is the fixed version and should probably included in -stable too as there have been quite some number of reports which got resolved by adding 'pci=nomsi'. Verified by Matí­as Alejandro Torres.

Thanks.

drivers/pci/quirks.c +0 -1
index 3411483..1e3070e 100644
@@ -1624,18 +1624,20 @@ DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_N
 			quirk_nvidia_ck804_pcie_aer_ext_cap);
 
 #ifdef CONFIG_PCI_MSI
-/* The Serverworks PCI-X chipset does not support MSI. We cannot

easily rely
- * on setting PCI_BUS_FLAGS_NO_MSI in its bus flags because there are actually
- * some other busses controlled by the chipset even if Linux is not aware of it.
- * Instead of setting the flag on all busses in the machine, simply disable MSI
- * globally.

drivers/pci/quirks.c +6 -1
+/* Some chipsets do not support MSI. We cannot easily rely on setting
+ * PCI_BUS_FLAGS_NO_MSI in its bus flags because there are actually
+ * some other busses controlled by the chipset even if Linux is not
+ * aware of it.  Instead of setting the flag on all busses in the
+ * machine, simply disable MSI globally.
  */
-static void __init quirk_svw_msi(struct pci_dev *dev)
+static void __init quirk_disable_all_msi(struct pci_dev *dev)
 {
 	pci_no_msi();
 	printk(KERN_WARNING "PCI: MSI quirk detected. MSI

deactivated.\n"); } -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_GCNB_LE, quirk_svw_msi); +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_GCNB_LE, quirk_disable_all_msi); +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS400_200, quirk_disable_all_msi); +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS480, quirk_disable_all_msi); /* Disable MSI on chipsets that are known to not support it */ static void __devinit quirk_disable_msi(struct pci_dev *dev) - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at
http://vger.kernel.org/majordomo-info.html Please read the FAQ at
http://www.tux.org/lkml/