drivers/interrupt_controller: Enable xapic pass-through in intel vt-d
In XAPIC mode, it's possible to tell VT-D to let interrupt in compatible
format passing through.
Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
diff --git a/drivers/interrupt_controller/Kconfig.intel_vtd b/drivers/interrupt_controller/Kconfig.intel_vtd
index 05c5f8a..12aaba0 100644
--- a/drivers/interrupt_controller/Kconfig.intel_vtd
+++ b/drivers/interrupt_controller/Kconfig.intel_vtd
@@ -15,6 +15,12 @@
if INTEL_VTD_ICTL
+config INTEL_VTD_ICTL_XAPIC_PASSTHROUGH
+ bool "XAPIC mode pass-through"
+ depends on !X2APIC
+ help
+ If XAPIC mode is enabled, it will avoid remapping all interrupts.
+
config INTEL_VTD_ICTL_INIT_PRIORITY
int "Initialization priority"
default 0
diff --git a/drivers/interrupt_controller/intc_intel_vtd.c b/drivers/interrupt_controller/intc_intel_vtd.c
index 898c732..77bc5ec 100644
--- a/drivers/interrupt_controller/intc_intel_vtd.c
+++ b/drivers/interrupt_controller/intc_intel_vtd.c
@@ -109,6 +109,11 @@
vtd_write_reg64(dev, VTD_IRTA_REG, irta);
+ if (!IS_ENABLED(CONFIG_X2APIC) &&
+ IS_ENABLED(CONFIG_INTEL_VTD_ICTL_XAPIC_PASSTHROUGH)) {
+ vtd_send_cmd(dev, VTD_GCMD_CFI, VTD_GSTS_CFIS);
+ }
+
vtd_send_cmd(dev, VTD_GCMD_SIRTP, VTD_GSTS_SIRTPS);
vtd_send_cmd(dev, VTD_GCMD_IRE, VTD_GSTS_IRES);