| From: Stefan Assmann <sassmann@kpanic.de> |
| Date: Wed, 19 Apr 2017 09:22:45 +0200 |
| Subject: PCI: Disable boot interrupt quirk for ASUS M2N-LR |
| |
| commit c4e649b09f55595e6df6da5465a5b3cfc93557c1 upstream. |
| |
| The ASUS M2N-LR should not trigger boot interrupt quirks although it |
| carries an Intel 6702PXH. On this board the boot interrupt quirks cause |
| incorrect IRQ assignments and should be disabled. |
| |
| Fixes: https://bugzilla.kernel.org/show_bug.cgi?id=43074 |
| Tested-by: Solomon Peachy <pizza@shaftnet.org> |
| Signed-off-by: Stefan Assmann <sassmann@kpanic.de> |
| Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| drivers/pci/quirks.c | 24 ++++++++++++++++++++++++ |
| 1 file changed, 24 insertions(+) |
| |
| --- a/drivers/pci/quirks.c |
| +++ b/drivers/pci/quirks.c |
| @@ -1733,6 +1733,29 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_IN |
| DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x260b, quirk_intel_pcie_pm); |
| |
| #ifdef CONFIG_X86_IO_APIC |
| +static int dmi_disable_ioapicreroute(const struct dmi_system_id *d) |
| +{ |
| + noioapicreroute = 1; |
| + pr_info("%s detected: disable boot interrupt reroute\n", d->ident); |
| + |
| + return 0; |
| +} |
| + |
| +static struct dmi_system_id boot_interrupt_dmi_table[] = { |
| + /* |
| + * Systems to exclude from boot interrupt reroute quirks |
| + */ |
| + { |
| + .callback = dmi_disable_ioapicreroute, |
| + .ident = "ASUSTek Computer INC. M2N-LR", |
| + .matches = { |
| + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTek Computer INC."), |
| + DMI_MATCH(DMI_PRODUCT_NAME, "M2N-LR"), |
| + }, |
| + }, |
| + {} |
| +}; |
| + |
| /* |
| * Boot interrupts on some chipsets cannot be turned off. For these chipsets, |
| * remap the original interrupt in the linux kernel to the boot interrupt, so |
| @@ -1741,6 +1764,7 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_IN |
| */ |
| static void quirk_reroute_to_boot_interrupts_intel(struct pci_dev *dev) |
| { |
| + dmi_check_system(boot_interrupt_dmi_table); |
| if (noioapicquirk || noioapicreroute) |
| return; |
| |