aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci/intel-iommu.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/pci/intel-iommu.c')
-rw-r--r--drivers/pci/intel-iommu.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/drivers/pci/intel-iommu.c b/drivers/pci/intel-iommu.c
index ebc9b8dca881..2dc72a6d7412 100644
--- a/drivers/pci/intel-iommu.c
+++ b/drivers/pci/intel-iommu.c
@@ -38,6 +38,7 @@
38#include <linux/intel-iommu.h> 38#include <linux/intel-iommu.h>
39#include <linux/sysdev.h> 39#include <linux/sysdev.h>
40#include <asm/cacheflush.h> 40#include <asm/cacheflush.h>
41#include <asm/tboot.h>
41#include <asm/iommu.h> 42#include <asm/iommu.h>
42#include "pci.h" 43#include "pci.h"
43 44
@@ -3183,12 +3184,22 @@ static int __init init_iommu_sysfs(void)
3183int __init intel_iommu_init(void) 3184int __init intel_iommu_init(void)
3184{ 3185{
3185 int ret = 0; 3186 int ret = 0;
3187 int force_on = 0;
3186 3188
3187 if (dmar_table_init()) 3189 /* VT-d is required for a TXT/tboot launch, so enforce that */
3190 force_on = tboot_force_iommu();
3191
3192 if (dmar_table_init()) {
3193 if (force_on)
3194 panic("tboot: Failed to initialize DMAR table\n");
3188 return -ENODEV; 3195 return -ENODEV;
3196 }
3189 3197
3190 if (dmar_dev_scope_init()) 3198 if (dmar_dev_scope_init()) {
3199 if (force_on)
3200 panic("tboot: Failed to initialize DMAR device scope\n");
3191 return -ENODEV; 3201 return -ENODEV;
3202 }
3192 3203
3193 /* 3204 /*
3194 * Check the need for DMA-remapping initialization now. 3205 * Check the need for DMA-remapping initialization now.
@@ -3204,6 +3215,8 @@ int __init intel_iommu_init(void)
3204 3215
3205 ret = init_dmars(); 3216 ret = init_dmars();
3206 if (ret) { 3217 if (ret) {
3218 if (force_on)
3219 panic("tboot: Failed to initialize DMARs\n");
3207 printk(KERN_ERR "IOMMU: dmar init failed\n"); 3220 printk(KERN_ERR "IOMMU: dmar init failed\n");
3208 put_iova_domain(&reserved_iova_list); 3221 put_iova_domain(&reserved_iova_list);
3209 iommu_exit_mempool(); 3222 iommu_exit_mempool();