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);