diff options
Diffstat (limited to 'arch/i386/kernel/acpi/earlyquirk.c')
-rw-r--r-- | arch/i386/kernel/acpi/earlyquirk.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/arch/i386/kernel/acpi/earlyquirk.c b/arch/i386/kernel/acpi/earlyquirk.c index c9841692bb7c..4b60af7f91dd 100644 --- a/arch/i386/kernel/acpi/earlyquirk.c +++ b/arch/i386/kernel/acpi/earlyquirk.c | |||
@@ -10,6 +10,7 @@ | |||
10 | #include <asm/pci-direct.h> | 10 | #include <asm/pci-direct.h> |
11 | #include <asm/acpi.h> | 11 | #include <asm/acpi.h> |
12 | #include <asm/apic.h> | 12 | #include <asm/apic.h> |
13 | #include <asm/irq.h> | ||
13 | 14 | ||
14 | #ifdef CONFIG_ACPI | 15 | #ifdef CONFIG_ACPI |
15 | 16 | ||
@@ -49,6 +50,24 @@ static int __init check_bridge(int vendor, int device) | |||
49 | return 0; | 50 | return 0; |
50 | } | 51 | } |
51 | 52 | ||
53 | static void check_intel(void) | ||
54 | { | ||
55 | u16 vendor, device; | ||
56 | |||
57 | vendor = read_pci_config_16(0, 0, 0, PCI_VENDOR_ID); | ||
58 | |||
59 | if (vendor != PCI_VENDOR_ID_INTEL) | ||
60 | return; | ||
61 | |||
62 | device = read_pci_config_16(0, 0, 0, PCI_DEVICE_ID); | ||
63 | #ifdef CONFIG_SMP | ||
64 | if (device == PCI_DEVICE_ID_INTEL_E7320_MCH || | ||
65 | device == PCI_DEVICE_ID_INTEL_E7520_MCH || | ||
66 | device == PCI_DEVICE_ID_INTEL_E7525_MCH) | ||
67 | quirk_intel_irqbalance(); | ||
68 | #endif | ||
69 | } | ||
70 | |||
52 | void __init check_acpi_pci(void) | 71 | void __init check_acpi_pci(void) |
53 | { | 72 | { |
54 | int num, slot, func; | 73 | int num, slot, func; |
@@ -60,6 +79,8 @@ void __init check_acpi_pci(void) | |||
60 | if (!early_pci_allowed()) | 79 | if (!early_pci_allowed()) |
61 | return; | 80 | return; |
62 | 81 | ||
82 | check_intel(); | ||
83 | |||
63 | /* Poor man's PCI discovery */ | 84 | /* Poor man's PCI discovery */ |
64 | for (num = 0; num < 32; num++) { | 85 | for (num = 0; num < 32; num++) { |
65 | for (slot = 0; slot < 32; slot++) { | 86 | for (slot = 0; slot < 32; slot++) { |