diff options
author | Karsten Wiese <annabellesgarden@yahoo.de> | 2005-09-03 18:56:33 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@evo.osdl.org> | 2005-09-05 03:06:10 -0400 |
commit | a1740913cae231fb8e485306fb09671ed9a6e550 (patch) | |
tree | 60cde26b254d6df2433016cfa1f328b59b00b828 /drivers/pci | |
parent | 252943efcfce945d8dd3738ca4c4b9cbeb4f3fa9 (diff) |
[PATCH] via vt8237 apic bypass deassertion quirk
The VIA VT8237's IOAPIC sends 'APIC De-Assert Messages' by default, causing
another CPU interrupt when the IRQ pin is de-asserted. This feature is
switched off by the patch to get rid of doubled ioapic level interrupt
rates.
Signed-off-by: Karsten Wiese <annabellesgarden@yahoo.de>
Tested-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/pci')
-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 |