diff options
author | Brice Goglin <brice@myri.com> | 2006-06-13 14:35:42 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2006-06-21 15:00:01 -0400 |
commit | cf34a8e07f02c76f3f1232eecb681301a3d7b10b (patch) | |
tree | 9148713707b7b5f50bfeceeaefb78d87474a106b | |
parent | ead2bfeb7f739d2ad6e09dc1343f0da51feb7f51 (diff) |
[PATCH] PCI: nVidia quirk to make AER PCI-E extended capability visible
The nVidia CK804 PCI-E chipset supports the AER extended capability
but sometimes fails to link it (with some BIOS or after a warm reboot).
It makes the AER cap invisible to pci_find_ext_capability().
The patch adds a quirk to set the missing bit that controls the
linking of the capability.
By the way, it removes the corresponding code in the myri10ge driver.
Signed-off-by: Brice Goglin <brice@myri.com>
Signed-off-by: Loic Prylli <loic@myri.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r-- | drivers/pci/quirks.c | 19 | ||||
-rw-r--r-- | include/linux/pci_ids.h | 1 |
2 files changed, 20 insertions, 0 deletions
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index aea4d49bcce3..4364d793f73b 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c | |||
@@ -1499,6 +1499,25 @@ static void __devinit quirk_p64h2_1k_io(struct pci_dev *dev) | |||
1499 | } | 1499 | } |
1500 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x1460, quirk_p64h2_1k_io); | 1500 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x1460, quirk_p64h2_1k_io); |
1501 | 1501 | ||
1502 | /* Under some circumstances, AER is not linked with extended capabilities. | ||
1503 | * Force it to be linked by setting the corresponding control bit in the | ||
1504 | * config space. | ||
1505 | */ | ||
1506 | static void __devinit quirk_nvidia_ck804_pcie_aer_ext_cap(struct pci_dev *dev) | ||
1507 | { | ||
1508 | uint8_t b; | ||
1509 | if (pci_read_config_byte(dev, 0xf41, &b) == 0) { | ||
1510 | if (!(b & 0x20)) { | ||
1511 | pci_write_config_byte(dev, 0xf41, b | 0x20); | ||
1512 | printk(KERN_INFO | ||
1513 | "PCI: Linking AER extended capability on %s\n", | ||
1514 | pci_name(dev)); | ||
1515 | } | ||
1516 | } | ||
1517 | } | ||
1518 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_CK804_PCIE, | ||
1519 | quirk_nvidia_ck804_pcie_aer_ext_cap); | ||
1520 | |||
1502 | EXPORT_SYMBOL(pcie_mch_quirk); | 1521 | EXPORT_SYMBOL(pcie_mch_quirk); |
1503 | #ifdef CONFIG_HOTPLUG | 1522 | #ifdef CONFIG_HOTPLUG |
1504 | EXPORT_SYMBOL(pci_fixup_device); | 1523 | EXPORT_SYMBOL(pci_fixup_device); |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index e526e7b5ea47..fd54a9d4c3d4 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
@@ -1023,6 +1023,7 @@ | |||
1023 | #define PCI_DEVICE_ID_NVIDIA_NVENET_8 0x0056 | 1023 | #define PCI_DEVICE_ID_NVIDIA_NVENET_8 0x0056 |
1024 | #define PCI_DEVICE_ID_NVIDIA_NVENET_9 0x0057 | 1024 | #define PCI_DEVICE_ID_NVIDIA_NVENET_9 0x0057 |
1025 | #define PCI_DEVICE_ID_NVIDIA_CK804_AUDIO 0x0059 | 1025 | #define PCI_DEVICE_ID_NVIDIA_CK804_AUDIO 0x0059 |
1026 | #define PCI_DEVICE_ID_NVIDIA_CK804_PCIE 0x005d | ||
1026 | #define PCI_DEVICE_ID_NVIDIA_NFORCE2_SMBUS 0x0064 | 1027 | #define PCI_DEVICE_ID_NVIDIA_NFORCE2_SMBUS 0x0064 |
1027 | #define PCI_DEVICE_ID_NVIDIA_NFORCE2_IDE 0x0065 | 1028 | #define PCI_DEVICE_ID_NVIDIA_NFORCE2_IDE 0x0065 |
1028 | #define PCI_DEVICE_ID_NVIDIA_NVENET_2 0x0066 | 1029 | #define PCI_DEVICE_ID_NVIDIA_NVENET_2 0x0066 |