diff options
Diffstat (limited to 'drivers/pci/quirks.c')
-rw-r--r-- | drivers/pci/quirks.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index bb36bb69803f..140354a2aa72 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c | |||
@@ -422,6 +422,25 @@ static void __devinit quirk_via_ioapic(struct pci_dev *dev) | |||
422 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686, quirk_via_ioapic ); | 422 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686, quirk_via_ioapic ); |
423 | 423 | ||
424 | /* | 424 | /* |
425 | * VIA 8237: Some BIOSs don't set the 'Bypass APIC De-Assert Message' Bit. | ||
426 | * This leads to doubled level interrupt rates. | ||
427 | * Set this bit to get rid of cycle wastage. | ||
428 | * Otherwise uncritical. | ||
429 | */ | ||
430 | static void __devinit quirk_via_vt8237_bypass_apic_deassert(struct pci_dev *dev) | ||
431 | { | ||
432 | u8 misc_control2; | ||
433 | #define BYPASS_APIC_DEASSERT 8 | ||
434 | |||
435 | pci_read_config_byte(dev, 0x5B, &misc_control2); | ||
436 | if (!(misc_control2 & BYPASS_APIC_DEASSERT)) { | ||
437 | printk(KERN_INFO "PCI: Bypassing VIA 8237 APIC De-Assert Message\n"); | ||
438 | pci_write_config_byte(dev, 0x5B, misc_control2|BYPASS_APIC_DEASSERT); | ||
439 | } | ||
440 | } | ||
441 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8237, quirk_via_vt8237_bypass_apic_deassert); | ||
442 | |||
443 | /* | ||
425 | * The AMD io apic can hang the box when an apic irq is masked. | 444 | * The AMD io apic can hang the box when an apic irq is masked. |
426 | * We check all revs >= B0 (yet not in the pre production!) as the bug | 445 | * We check all revs >= B0 (yet not in the pre production!) as the bug |
427 | * is currently marked NoFix | 446 | * is currently marked NoFix |