Commit 91800e9977fdf5cd3de2705b1ad1d803ccda48a8

Authored by Neil Horman
Committed by Greg Kroah-Hartman
1 parent f2355ea2f4

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>

Showing 1 changed file with 6 additions and 9 deletions Side-by-side Diff

arch/x86/kernel/early-quirks.c
... ... @@ -203,18 +203,15 @@
203 203 revision = read_pci_config_byte(num, slot, func, PCI_REVISION_ID);
204 204  
205 205 /*
206   - * Revision 13 of all triggering devices id in this quirk have
207   - * a problem draining interrupts when irq remapping is enabled,
208   - * and should be flagged as broken. Additionally revisions 0x12
209   - * and 0x22 of device id 0x3405 has this problem.
  206 + * Revision <= 13 of all triggering devices id in this quirk
  207 + * have a problem draining interrupts when irq remapping is
  208 + * enabled, and should be flagged as broken. Additionally
  209 + * revision 0x22 of device id 0x3405 has this problem.
210 210 */
211   - if (revision == 0x13)
  211 + if (revision <= 0x13)
212 212 set_irq_remapping_broken();
213   - else if ((device == 0x3405) &&
214   - ((revision == 0x12) ||
215   - (revision == 0x22)))
  213 + else if (device == 0x3405 && revision == 0x22)
216 214 set_irq_remapping_broken();
217   -
218 215 }
219 216  
220 217 /*