diff options
Diffstat (limited to 'arch/x86/kernel/early-quirks.c')
-rw-r--r-- | arch/x86/kernel/early-quirks.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/arch/x86/kernel/early-quirks.c b/arch/x86/kernel/early-quirks.c index 3755ef494390..94ab6b90dd3f 100644 --- a/arch/x86/kernel/early-quirks.c +++ b/arch/x86/kernel/early-quirks.c | |||
@@ -18,6 +18,7 @@ | |||
18 | #include <asm/apic.h> | 18 | #include <asm/apic.h> |
19 | #include <asm/iommu.h> | 19 | #include <asm/iommu.h> |
20 | #include <asm/gart.h> | 20 | #include <asm/gart.h> |
21 | #include <asm/irq_remapping.h> | ||
21 | 22 | ||
22 | static void __init fix_hypertransport_config(int num, int slot, int func) | 23 | static void __init fix_hypertransport_config(int num, int slot, int func) |
23 | { | 24 | { |
@@ -192,6 +193,21 @@ static void __init ati_bugs_contd(int num, int slot, int func) | |||
192 | } | 193 | } |
193 | #endif | 194 | #endif |
194 | 195 | ||
196 | static void __init intel_remapping_check(int num, int slot, int func) | ||
197 | { | ||
198 | u8 revision; | ||
199 | |||
200 | revision = read_pci_config_byte(num, slot, func, PCI_REVISION_ID); | ||
201 | |||
202 | /* | ||
203 | * Revision 0x13 of this chipset supports irq remapping | ||
204 | * but has an erratum that breaks its behavior, flag it as such | ||
205 | */ | ||
206 | if (revision == 0x13) | ||
207 | set_irq_remapping_broken(); | ||
208 | |||
209 | } | ||
210 | |||
195 | #define QFLAG_APPLY_ONCE 0x1 | 211 | #define QFLAG_APPLY_ONCE 0x1 |
196 | #define QFLAG_APPLIED 0x2 | 212 | #define QFLAG_APPLIED 0x2 |
197 | #define QFLAG_DONE (QFLAG_APPLY_ONCE|QFLAG_APPLIED) | 213 | #define QFLAG_DONE (QFLAG_APPLY_ONCE|QFLAG_APPLIED) |
@@ -221,6 +237,10 @@ static struct chipset early_qrk[] __initdata = { | |||
221 | PCI_CLASS_SERIAL_SMBUS, PCI_ANY_ID, 0, ati_bugs }, | 237 | PCI_CLASS_SERIAL_SMBUS, PCI_ANY_ID, 0, ati_bugs }, |
222 | { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_SBX00_SMBUS, | 238 | { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_SBX00_SMBUS, |
223 | PCI_CLASS_SERIAL_SMBUS, PCI_ANY_ID, 0, ati_bugs_contd }, | 239 | PCI_CLASS_SERIAL_SMBUS, PCI_ANY_ID, 0, ati_bugs_contd }, |
240 | { PCI_VENDOR_ID_INTEL, 0x3403, PCI_CLASS_BRIDGE_HOST, | ||
241 | PCI_BASE_CLASS_BRIDGE, 0, intel_remapping_check }, | ||
242 | { PCI_VENDOR_ID_INTEL, 0x3406, PCI_CLASS_BRIDGE_HOST, | ||
243 | PCI_BASE_CLASS_BRIDGE, 0, intel_remapping_check }, | ||
224 | {} | 244 | {} |
225 | }; | 245 | }; |
226 | 246 | ||