intel-iommu: Add Kconfig option to exclude iGPU by default
authorBen Hutchings <ben@decadent.org.uk>
Tue, 20 Aug 2019 23:32:16 +0000 (00:32 +0100)
committerSalvatore Bonaccorso <carnil@debian.org>
Mon, 6 Jun 2022 18:45:23 +0000 (19:45 +0100)
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 <ben@decadent.org.uk>
Gbp-Pq: Topic features/x86
Gbp-Pq: Name intel-iommu-add-kconfig-option-to-exclude-igpu-by-default.patch

drivers/iommu/intel/Kconfig
drivers/iommu/intel/iommu.c

index 39a06d245f12e6a422d2bab42dd28dbc60423bac..97526553fd28306e014f20233d829ff541e84727 100644 (file)
@@ -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
index 7f67fe7c6de7d8a324ca5b2889c8ec39ecf54be5..d7f3544ca1ccb431c5742a95fb25ec1de62b3162 100644 (file)
@@ -303,14 +303,14 @@ static void domain_remove_dev_info(struct dmar_domain *domain);
 static void dmar_remove_one_dev_info(struct device *dev);
 static void __dmar_remove_one_dev_info(struct device_domain_info *info);
 
-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;
@@ -378,6 +378,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;