Skip to contentSkip to conversation

PCI patches for 2.6.22-rc3

PATCH New Greg KH 1 participant 6 messages Jun 1, 2007 PCI

lore
Share & tools
lore

Greg KH

author
#0 lore raw

PATCH 1/1 PCI patches for 2.6.22-rc3

Here are some bugfixes for PCI your 2.6.22-rc3 git tree.

All of these have been in the -mm tree for a month or so.

Please pull from:

	master.kernel.org:/pub/scm/linux/kernel/git/gregkh/pci-2.6.git/

The full patches will be sent to the linux-pci mailing list, if anyone wants to see it

thanks,

greg k-h

 arch/i386/pci/fixup.c   |   11 +++++++++++
 drivers/pci/msi.c       |    2 +-
 drivers/pci/quirks.c    |    2 ++
 drivers/pci/search.c    |    3 ++-
 include/linux/pci_ids.h |    2 ++
 5 files changed, 18 insertions(+), 2 deletions(-)

---------------

Andy Gospodarek (1):
PCI: disable MSI by default on systems with Serverworks HT1000 chips

Ben Gardner (1):
PCI: Fix pci_find_present

Dan Williams (1):
msi: fix ARM compile

Ivan Kokshaysky (1):
PCI: i386: fixup for Siemens Nixdorf AG FSC Multiprocessor Interrupt Controllers

Jay Cliburn (1):
PCI: quirk disable MSI on via vt3351

#1 lore raw

PATCH 1/5 msi: fix ARM compile

From: Dan Williams <[email protected]>

In file included from drivers/pci/msi.c:22:
include/asm/smp.h:17:26: asm/arch/smp.h: No such file or directory include/asm/smp.h:20:3: #error "<asm-arm/smp.h> included in non-SMP build" include/asm/smp.h:23:1: warning: "raw_smp_processor_id" redefined In file included from include/linux/sched.h:65,

                 from include/linux/mm.h:4,
                 from drivers/pci/msi.c:10:

include/linux/smp.h:85:1: warning: this is the location of the previous definition

Tested on powerpc, i386, and x86_64.

---
 drivers/pci/msi.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
drivers/pci/msi.c +1 -1
index d9cbd58..f7f7470 100644
@@ -15,10 +15,10 @@
 #include <linux/pci.h>
 #include <linux/proc_fs.h>
 #include <linux/msi.h>
+#include <linux/smp.h>
 
 #include <asm/errno.h>
 #include <asm/io.h>
-#include <asm/smp.h>
 
 #include "pci.h"
 #include "msi.h"
Signature · 1 line
1.5.2
#2 lore raw

PATCH 2/5 PCI: disable MSI by default on systems with Serverworks HT1000 chips

From: Andy Gospodarek <[email protected]>

I've been seeing lots of messages like these:

eth0: No interrupt was generated using MSI, switching to INTx mode. Please report this failure to the PCI maintainer and include system chipset information.

On several systems that use the following Severworks HT1000 (also sometimes labeled as a Broadcom chipset as well) bridge chips. It doesn't appear MSI works well (if at all) on these systems.

---
 drivers/pci/quirks.c    |    1 +
 include/linux/pci_ids.h |    1 +
 2 files changed, 2 insertions(+), 0 deletions(-)
drivers/pci/quirks.c +1 -0
index 1cff65f..4937982 100644
@@ -1637,6 +1637,7 @@ static void __init quirk_disable_all_msi(struct pci_dev *dev)
 	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_disable_all_msi);
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_HT1000_PCIX, 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);
 
include/linux/pci_ids.h +1 -0
index 4712e26..c4a14c6 100644
@@ -1437,6 +1437,7 @@
 #define PCI_DEVICE_ID_SERVERWORKS_LE	  0x0009
 #define PCI_DEVICE_ID_SERVERWORKS_GCNB_LE 0x0017
 #define PCI_DEVICE_ID_SERVERWORKS_EPB	  0x0103
+#define PCI_DEVICE_ID_SERVERWORKS_HT1000_PCIX	0x0104
 #define PCI_DEVICE_ID_SERVERWORKS_HT2000_PCIE	0x0132
 #define PCI_DEVICE_ID_SERVERWORKS_OSB4	  0x0200
 #define PCI_DEVICE_ID_SERVERWORKS_CSB5	  0x0201
Signature · 1 line
1.5.2
#3 lore raw

PATCH 3/5 PCI: Fix pci_find_present

From: Ben Gardner <[email protected]>

pci_find_present() is only matching the last item in the list of ids.

The break after the match is found only escapes the for loop, not the while loop, so found gets reset to NULL on the next pass.

---
 drivers/pci/search.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)
drivers/pci/search.c +2 -1
index b137a27..c132324 100644
@@ -403,10 +403,11 @@ const struct pci_device_id *pci_find_present(const struct pci_device_id *ids)
 	while (ids->vendor || ids->subvendor || ids->class_mask) {
 		list_for_each_entry(dev, &pci_devices, global_list) {
 			if ((found = pci_match_one_device(ids, dev)) != NULL)
-				break;
+				goto exit;
 		}
 		ids++;
 	}
+exit:
 	up_read(&pci_bus_sem);
 	return found;
 }
Signature · 1 line
1.5.2
#4 lore raw

PATCH 4/5 PCI: i386: fixup for Siemens Nixdorf AG FSC Multiprocessor Interrupt Controllers

From: Ivan Kokshaysky <[email protected]>

Wolfgang gets:

PCI: Cannot allocate resource region 0 of device 0000:00:04.0
PCI: Error while updating region 0000:00:04.0/0 (a8008000 != fec08000)

Note that the BAR seems to have high address bits hardwired to fec00000. And device 0000:00:04.0 is

00:04.0 System peripheral: Siemens Nixdorf AG FSC Multiprocessor Interrupt Controller (rev 02)

I'd guess that when we try to reassign this resource, PCI interrupts might just stop working. This could explain SCSI timeouts and other weird things.

---
 arch/i386/pci/fixup.c |   11 +++++++++++
 1 files changed, 11 insertions(+), 0 deletions(-)
arch/i386/pci/fixup.c +11 -0
index b62eafb..b95b429 100644
@@ -436,3 +436,14 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5530_LEGACY,
 			pci_early_fixup_cyrix_5530);
 DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5530_LEGACY,
 			pci_early_fixup_cyrix_5530);
+
+/*
+ * Siemens Nixdorf AG FSC Multiprocessor Interrupt Controller:
+ * prevent update of the BAR0, which doesn't look like a normal BAR.
+ */
+static void __devinit pci_siemens_interrupt_controller(struct pci_dev *dev)
+{
+	dev->resource[0].flags |= IORESOURCE_PCI_FIXED;
+}
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SIEMENS, 0x0015,
+			  pci_siemens_interrupt_controller);
Signature · 1 line
1.5.2
#5 lore raw

PATCH 5/5 PCI: quirk disable MSI on via vt3351

From: Jay Cliburn <[email protected]>

The Via VT3351 APIC does not play well with MSI and unleashes a flood of APIC errors when MSI is used to deliver interrupts. The problem was recently exposed when the atl1 network device driver, which enables MSI by default, stimulated APIC errors on an Asus M2V mainboard, which employs the Via VT3351.
See http://bugzilla.kernel.org/show_bug.cgi?id=8472 for additional details on this bug.

---
 drivers/pci/quirks.c    |    1 +
 include/linux/pci_ids.h |    1 +
 2 files changed, 2 insertions(+), 0 deletions(-)
drivers/pci/quirks.c +1 -0
index 4937982..01d8f8a 100644
@@ -1640,6 +1640,7 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_GCN
 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_HT1000_PCIX, 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);
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3351, 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)
include/linux/pci_ids.h +1 -0
index c4a14c6..02cf0cd 100644
@@ -1292,6 +1292,7 @@
 #define PCI_DEVICE_ID_VIA_P4M890	0x0327
 #define PCI_DEVICE_ID_VIA_VT3324	0x0324
 #define PCI_DEVICE_ID_VIA_VT3336	0x0336
+#define PCI_DEVICE_ID_VIA_VT3351	0x0351
 #define PCI_DEVICE_ID_VIA_8371_0	0x0391
 #define PCI_DEVICE_ID_VIA_8501_0	0x0501
 #define PCI_DEVICE_ID_VIA_82C561	0x0561
Signature · 1 line
1.5.2