aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorNeil Horman <nhorman@tuxdriver.com>2014-03-12 14:44:33 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-04-26 20:15:34 -0400
commitd7a834fb18764f2451847eaafa27f1b70ca6a381 (patch)
treefe68590d32656c1e34600859244243a3806daaf2 /arch
parent96a405de04abddf003b59467d277595e3ba02449 (diff)
x86: Adjust irq remapping quirk for older revisions of 5500/5520 chipsets
commit 6f8a1b335fde143b7407036e2368d3cd6eb55674 upstream. Commit 03bbcb2e7e2 (iommu/vt-d: add quirk for broken interrupt remapping on 55XX chipsets) properly disables irq remapping on the 5500/5520 chipsets that don't correctly perform that feature. However, when I wrote it, I followed the errata sheet linked in that commit too closely, and explicitly tied the activation of the quirk to revision 0x13 of the chip, under the assumption that earlier revisions were not in the field. Recently a system was reported to be suffering from this remap bug and the quirk hadn't triggered, because the revision id register read at a lower value that 0x13, so the quirk test failed improperly. Given this, it seems only prudent to adjust this quirk so that any revision less than 0x13 has the quirk asserted. [ tglx: Removed the 0x12 comparison of pci id 3405 as this is covered by the <= 0x13 check already ] Signed-off-by: Neil Horman <nhorman@tuxdriver.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: x86@kernel.org Link: http://lkml.kernel.org/r/1394649873-14913-1-git-send-email-nhorman@tuxdriver.com Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'arch')
-rw-r--r--arch/x86/kernel/early-quirks.c15
1 files changed, 6 insertions, 9 deletions
diff --git a/arch/x86/kernel/early-quirks.c b/arch/x86/kernel/early-quirks.c
index 63bdb29b2549..4f7c82cdd0f5 100644
--- a/arch/x86/kernel/early-quirks.c
+++ b/arch/x86/kernel/early-quirks.c
@@ -202,18 +202,15 @@ static void __init intel_remapping_check(int num, int slot, int func)
202 revision = read_pci_config_byte(num, slot, func, PCI_REVISION_ID); 202 revision = read_pci_config_byte(num, slot, func, PCI_REVISION_ID);
203 203
204 /* 204 /*
205 * Revision 13 of all triggering devices id in this quirk have 205 * Revision <= 13 of all triggering devices id in this quirk
206 * a problem draining interrupts when irq remapping is enabled, 206 * have a problem draining interrupts when irq remapping is
207 * and should be flagged as broken. Additionally revisions 0x12 207 * enabled, and should be flagged as broken. Additionally
208 * and 0x22 of device id 0x3405 has this problem. 208 * revision 0x22 of device id 0x3405 has this problem.
209 */ 209 */
210 if (revision == 0x13) 210 if (revision <= 0x13)
211 set_irq_remapping_broken(); 211 set_irq_remapping_broken();
212 else if ((device == 0x3405) && 212 else if (device == 0x3405 && revision == 0x22)
213 ((revision == 0x12) ||
214 (revision == 0x22)))
215 set_irq_remapping_broken(); 213 set_irq_remapping_broken();
216
217} 214}
218 215
219#define QFLAG_APPLY_ONCE 0x1 216#define QFLAG_APPLY_ONCE 0x1