75 lines
2.5 KiB
Diff
75 lines
2.5 KiB
Diff
From: Ben Hutchings <ben@decadent.org.uk>
|
|
Date: Wed, 21 Aug 2019 00:32:16 +0100
|
|
Subject: 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 <ben@decadent.org.uk>
|
|
---
|
|
--- a/drivers/iommu/intel/Kconfig
|
|
+++ b/drivers/iommu/intel/Kconfig
|
|
@@ -56,13 +56,24 @@ 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_FLOPPY_WA
|
|
def_bool y
|
|
--- a/drivers/iommu/intel/iommu.c
|
|
+++ b/drivers/iommu/intel/iommu.c
|
|
@@ -205,13 +205,13 @@ static LIST_HEAD(dmar_satc_units);
|
|
|
|
static void intel_iommu_domain_free(struct iommu_domain *domain);
|
|
|
|
-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_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;
|
|
@@ -250,6 +250,7 @@ static int __init intel_iommu_setup(char
|
|
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;
|