From aa6112d0af452fcbb5f2c3d06b60ccdd002db77f Mon Sep 17 00:00:00 2001 From: Tomasz Bursztyka Date: Tue, 15 Dec 2020 11:23:42 +0100 Subject: [PATCH] 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 --- drivers/interrupt_controller/Kconfig.intel_vtd | 6 ++++++ drivers/interrupt_controller/intc_intel_vtd.c | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/drivers/interrupt_controller/Kconfig.intel_vtd b/drivers/interrupt_controller/Kconfig.intel_vtd index 05c5f8ae6d2..12aaba00ef8 100644 --- a/drivers/interrupt_controller/Kconfig.intel_vtd +++ b/drivers/interrupt_controller/Kconfig.intel_vtd @@ -15,6 +15,12 @@ menuconfig INTEL_VTD_ICTL 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 898c7323c11..77bc5ecb1ac 100644 --- a/drivers/interrupt_controller/intc_intel_vtd.c +++ b/drivers/interrupt_controller/intc_intel_vtd.c @@ -109,6 +109,11 @@ static int vtd_ictl_init(const struct device *dev) 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);