diff options
Diffstat (limited to 'arch/x86/kernel/quirks.c')
-rw-r--r-- | arch/x86/kernel/quirks.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/arch/x86/kernel/quirks.c b/arch/x86/kernel/quirks.c index 6c3b2c6fd772..12e9feaa2f7a 100644 --- a/arch/x86/kernel/quirks.c +++ b/arch/x86/kernel/quirks.c | |||
@@ -491,6 +491,19 @@ void force_hpet_resume(void) | |||
491 | break; | 491 | break; |
492 | } | 492 | } |
493 | } | 493 | } |
494 | |||
495 | /* | ||
496 | * HPET MSI on some boards (ATI SB700/SB800) has side effect on | ||
497 | * floppy DMA. Disable HPET MSI on such platforms. | ||
498 | */ | ||
499 | static void force_disable_hpet_msi(struct pci_dev *unused) | ||
500 | { | ||
501 | hpet_msi_disable = 1; | ||
502 | } | ||
503 | |||
504 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_SBX00_SMBUS, | ||
505 | force_disable_hpet_msi); | ||
506 | |||
494 | #endif | 507 | #endif |
495 | 508 | ||
496 | #if defined(CONFIG_PCI) && defined(CONFIG_NUMA) | 509 | #if defined(CONFIG_PCI) && defined(CONFIG_NUMA) |
@@ -499,6 +512,7 @@ static void __init quirk_amd_nb_node(struct pci_dev *dev) | |||
499 | { | 512 | { |
500 | struct pci_dev *nb_ht; | 513 | struct pci_dev *nb_ht; |
501 | unsigned int devfn; | 514 | unsigned int devfn; |
515 | u32 node; | ||
502 | u32 val; | 516 | u32 val; |
503 | 517 | ||
504 | devfn = PCI_DEVFN(PCI_SLOT(dev->devfn), 0); | 518 | devfn = PCI_DEVFN(PCI_SLOT(dev->devfn), 0); |
@@ -507,7 +521,13 @@ static void __init quirk_amd_nb_node(struct pci_dev *dev) | |||
507 | return; | 521 | return; |
508 | 522 | ||
509 | pci_read_config_dword(nb_ht, 0x60, &val); | 523 | pci_read_config_dword(nb_ht, 0x60, &val); |
510 | set_dev_node(&dev->dev, val & 7); | 524 | node = val & 7; |
525 | /* | ||
526 | * Some hardware may return an invalid node ID, | ||
527 | * so check it first: | ||
528 | */ | ||
529 | if (node_online(node)) | ||
530 | set_dev_node(&dev->dev, node); | ||
511 | pci_dev_put(nb_ht); | 531 | pci_dev_put(nb_ht); |
512 | } | 532 | } |
513 | 533 | ||