pci-quirks: disable MSI on RS400-200 and RS480, take #2
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
---
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
@@ -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)
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()toquirk_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.
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()toquirk_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=263893FWIW 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
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.
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
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
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
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()toquirk_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=263893Signed-off-by Tejun Heo <[email protected]>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@@ -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 settingPCI_BUS_FLAGS_NO_MSIin 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. MSIdeactivated.\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__devinitquirk_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/