From 26e1101671aac58640024c25a426765914d3bb8b Mon Sep 17 00:00:00 2001 From: Ben Hutchings Date: Wed, 21 Aug 2019 00:32:16 +0100 Subject: [PATCH] intel-iommu: Add Kconfig option to exclude iGPU by default Bug-Debian: https://bugs.debian.org/935270 Bug-Kali: https://bugs.kali.org/view.php?id=5644 There is still laptop firmware that touches the integrated GPU behind the operating system's back, and doesn't say so in the RMRR table. Enabling the IOMMU for all devices causes breakage. Replace CONFIG_INTEL_IOMMU_DEFAULT_ON with a 3-way choice corresponding to "on", "off", and "on,intgpu_off". Signed-off-by: Ben Hutchings Gbp-Pq: Topic features/x86 Gbp-Pq: Name intel-iommu-add-kconfig-option-to-exclude-igpu-by-default.patch --- drivers/iommu/intel/Kconfig | 23 +++++++++++++++++------ drivers/iommu/intel/iommu.c | 5 +++-- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/drivers/iommu/intel/Kconfig b/drivers/iommu/intel/Kconfig index 247d0f2d5fd..a14f2c68808 100644 --- a/drivers/iommu/intel/Kconfig +++ b/drivers/iommu/intel/Kconfig @@ -58,14 +58,25 @@ config INTEL_IOMMU_SVM to access DMA resources through process address space by means of a Process Address Space ID (PASID). -config INTEL_IOMMU_DEFAULT_ON - bool "Enable Intel DMA Remapping Devices by default" - default y +choice + prompt "Default state of Intel DMA Remapping Devices" + default INTEL_IOMMU_DEFAULT_ON help - Selecting this option will enable a DMAR device at boot time if - one is found. If this option is not selected, DMAR support can - be enabled by passing intel_iommu=on to the kernel. + Choose whether Intel DMA Remapping Devices should be enabled + by default. This can be overridden at boot time using the + intel_iommu= kernel parameter. + +config INTEL_IOMMU_DEFAULT_ON + bool "Enable" + +config INTEL_IOMMU_DEFAULT_ON_INTGPU_OFF + bool "Enable, excluding integrated GPU" + +config INTEL_IOMMU_DEFAULT_OFF + bool "Disable" +endchoice + config INTEL_IOMMU_BROKEN_GFX_WA bool "Workaround broken graphics drivers (going away soon)" depends on BROKEN && X86 diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c index c6c1b1bdb50..dd357eda1a7 100644 --- a/drivers/iommu/intel/iommu.c +++ b/drivers/iommu/intel/iommu.c @@ -333,14 +333,14 @@ static int intel_iommu_attach_device(struct iommu_domain *domain, static phys_addr_t intel_iommu_iova_to_phys(struct iommu_domain *domain, dma_addr_t iova); -int dmar_disabled = !IS_ENABLED(CONFIG_INTEL_IOMMU_DEFAULT_ON); +int dmar_disabled = IS_ENABLED(CONFIG_INTEL_IOMMU_DEFAULT_OFF); int intel_iommu_sm = IS_ENABLED(CONFIG_INTEL_IOMMU_SCALABLE_MODE_DEFAULT_ON); int intel_iommu_enabled = 0; EXPORT_SYMBOL_GPL(intel_iommu_enabled); static int dmar_map_gfx = 1; -static int dmar_map_intgpu = 1; +static int dmar_map_intgpu = IS_ENABLED(CONFIG_INTEL_IOMMU_DEFAULT_ON); static int intel_iommu_superpage = 1; static int iommu_identity_mapping; static int iommu_skip_te_disable; @@ -423,6 +423,7 @@ static int __init intel_iommu_setup(char *str) while (*str) { if (!strncmp(str, "on", 2)) { dmar_disabled = 0; + dmar_map_intgpu = 1; pr_info("IOMMU enabled\n"); } else if (!strncmp(str, "off", 3)) { dmar_disabled = 1; -- 2.30.2