aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kernel')
-rw-r--r--arch/x86/kernel/amd_iommu_init.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/arch/x86/kernel/amd_iommu_init.c b/arch/x86/kernel/amd_iommu_init.c
index 575ca46211bb..48a79b9b2f9e 100644
--- a/arch/x86/kernel/amd_iommu_init.c
+++ b/arch/x86/kernel/amd_iommu_init.c
@@ -260,6 +260,14 @@ static void iommu_enable(struct amd_iommu *iommu)
260 260
261static void iommu_disable(struct amd_iommu *iommu) 261static void iommu_disable(struct amd_iommu *iommu)
262{ 262{
263 /* Disable command buffer */
264 iommu_feature_disable(iommu, CONTROL_CMDBUF_EN);
265
266 /* Disable event logging and event interrupts */
267 iommu_feature_disable(iommu, CONTROL_EVT_INT_EN);
268 iommu_feature_disable(iommu, CONTROL_EVT_LOG_EN);
269
270 /* Disable IOMMU hardware itself */
263 iommu_feature_disable(iommu, CONTROL_IOMMU_EN); 271 iommu_feature_disable(iommu, CONTROL_IOMMU_EN);
264} 272}
265 273
@@ -1042,6 +1050,7 @@ static void enable_iommus(void)
1042 struct amd_iommu *iommu; 1050 struct amd_iommu *iommu;
1043 1051
1044 for_each_iommu(iommu) { 1052 for_each_iommu(iommu) {
1053 iommu_disable(iommu);
1045 iommu_set_device_table(iommu); 1054 iommu_set_device_table(iommu);
1046 iommu_enable_command_buffer(iommu); 1055 iommu_enable_command_buffer(iommu);
1047 iommu_enable_event_buffer(iommu); 1056 iommu_enable_event_buffer(iommu);