PCI patches for 2.6.22-rc3
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
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
@@ -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
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
@@ -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
@@ -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
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
@@ -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
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
@@ -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
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
@@ -1640,6 +1640,7 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_GCNDECLARE_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
@@ -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