diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-10-28 14:59:52 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-10-28 14:59:52 -0400 |
commit | e9f29c9a56ca06d0effa557823a737cbe7ec09f7 (patch) | |
tree | c331c4aa741a8f384ee13d0b08bd340c23164b16 /drivers/pci/quirks.c | |
parent | 800416f799e0723635ac2d720ad4449917a1481c (diff) | |
parent | 1af3c2e45e7a641e774bbb84fa428f2f0bf2d9c9 (diff) |
Merge branch 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci-2.6
* 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci-2.6: (27 commits)
x86: allocate space within a region top-down
x86: update iomem_resource end based on CPU physical address capabilities
x86/PCI: allocate space from the end of a region, not the beginning
PCI: allocate bus resources from the top down
resources: support allocating space within a region from the top down
resources: handle overflow when aligning start of available area
resources: ensure callback doesn't allocate outside available space
resources: factor out resource_clip() to simplify find_resource()
resources: add a default alignf to simplify find_resource()
x86/PCI: MMCONFIG: fix region end calculation
PCI: Add support for polling PME state on suspended legacy PCI devices
PCI: Export some PCI PM functionality
PCI: fix message typo
PCI: log vendor/device ID always
PCI: update Intel chipset names and defines
PCI: use new ccflags variable in Makefile
PCI: add PCI_MSIX_TABLE/PBA defines
PCI: add PCI vendor id for STmicroelectronics
x86/PCI: irq and pci_ids patch for Intel Patsburg DeviceIDs
PCI: OLPC: Only enable PCI configuration type override on XO-1
...
Diffstat (limited to 'drivers/pci/quirks.c')
-rw-r--r-- | drivers/pci/quirks.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index cc96c7142dac..f5c63fe9db5c 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c | |||
@@ -2297,6 +2297,37 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_NVIDIA, | |||
2297 | PCI_DEVICE_ID_NVIDIA_NVENET_15, | 2297 | PCI_DEVICE_ID_NVIDIA_NVENET_15, |
2298 | nvenet_msi_disable); | 2298 | nvenet_msi_disable); |
2299 | 2299 | ||
2300 | /* | ||
2301 | * Some versions of the MCP55 bridge from nvidia have a legacy irq routing | ||
2302 | * config register. This register controls the routing of legacy interrupts | ||
2303 | * from devices that route through the MCP55. If this register is misprogramed | ||
2304 | * interrupts are only sent to the bsp, unlike conventional systems where the | ||
2305 | * irq is broadxast to all online cpus. Not having this register set | ||
2306 | * properly prevents kdump from booting up properly, so lets make sure that | ||
2307 | * we have it set correctly. | ||
2308 | * Note this is an undocumented register. | ||
2309 | */ | ||
2310 | static void __devinit nvbridge_check_legacy_irq_routing(struct pci_dev *dev) | ||
2311 | { | ||
2312 | u32 cfg; | ||
2313 | |||
2314 | pci_read_config_dword(dev, 0x74, &cfg); | ||
2315 | |||
2316 | if (cfg & ((1 << 2) | (1 << 15))) { | ||
2317 | printk(KERN_INFO "Rewriting irq routing register on MCP55\n"); | ||
2318 | cfg &= ~((1 << 2) | (1 << 15)); | ||
2319 | pci_write_config_dword(dev, 0x74, cfg); | ||
2320 | } | ||
2321 | } | ||
2322 | |||
2323 | DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_NVIDIA, | ||
2324 | PCI_DEVICE_ID_NVIDIA_MCP55_BRIDGE_V0, | ||
2325 | nvbridge_check_legacy_irq_routing); | ||
2326 | |||
2327 | DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_NVIDIA, | ||
2328 | PCI_DEVICE_ID_NVIDIA_MCP55_BRIDGE_V4, | ||
2329 | nvbridge_check_legacy_irq_routing); | ||
2330 | |||
2300 | static int __devinit ht_check_msi_mapping(struct pci_dev *dev) | 2331 | static int __devinit ht_check_msi_mapping(struct pci_dev *dev) |
2301 | { | 2332 | { |
2302 | int pos, ttl = 48; | 2333 | int pos, ttl = 48; |