Эх сурвалжийг харах

x86/amd-iommu: Add amd_iommu=off command line option

This patch adds a command line option to tell the AMD IOMMU
driver to not initialize any IOMMU it finds.

Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
Joerg Roedel 15 жил өмнө
parent
commit
a523572596

+ 2 - 0
Documentation/kernel-parameters.txt

@@ -324,6 +324,8 @@ and is between 256 and 4096 characters. It is defined in the file
 				    they are unmapped. Otherwise they are
 				    they are unmapped. Otherwise they are
 				    flushed before they will be reused, which
 				    flushed before they will be reused, which
 				    is a lot of faster
 				    is a lot of faster
+			off	  - do not initialize any AMD IOMMU found in
+				    the system
 
 
 	amijoy.map=	[HW,JOY] Amiga joystick support
 	amijoy.map=	[HW,JOY] Amiga joystick support
 			Map of devices attached to JOY0DAT and JOY1DAT
 			Map of devices attached to JOY0DAT and JOY1DAT

+ 6 - 0
arch/x86/kernel/amd_iommu_init.c

@@ -120,6 +120,7 @@ struct ivmd_header {
 bool amd_iommu_dump;
 bool amd_iommu_dump;
 
 
 static int __initdata amd_iommu_detected;
 static int __initdata amd_iommu_detected;
+static bool __initdata amd_iommu_disabled;
 
 
 u16 amd_iommu_last_bdf;			/* largest PCI device id we have
 u16 amd_iommu_last_bdf;			/* largest PCI device id we have
 					   to handle */
 					   to handle */
@@ -1372,6 +1373,9 @@ void __init amd_iommu_detect(void)
 	if (no_iommu || (iommu_detected && !gart_iommu_aperture))
 	if (no_iommu || (iommu_detected && !gart_iommu_aperture))
 		return;
 		return;
 
 
+	if (amd_iommu_disabled)
+		return;
+
 	if (acpi_table_parse("IVRS", early_amd_iommu_detect) == 0) {
 	if (acpi_table_parse("IVRS", early_amd_iommu_detect) == 0) {
 		iommu_detected = 1;
 		iommu_detected = 1;
 		amd_iommu_detected = 1;
 		amd_iommu_detected = 1;
@@ -1401,6 +1405,8 @@ static int __init parse_amd_iommu_options(char *str)
 	for (; *str; ++str) {
 	for (; *str; ++str) {
 		if (strncmp(str, "fullflush", 9) == 0)
 		if (strncmp(str, "fullflush", 9) == 0)
 			amd_iommu_unmap_flush = true;
 			amd_iommu_unmap_flush = true;
+		if (strncmp(str, "off", 3) == 0)
+			amd_iommu_disabled = true;
 	}
 	}
 
 
 	return 1;
 	return 1;