diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-09-15 12:19:20 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-09-15 12:19:20 -0400 |
commit | 1aaf2e59135fd67321f47c11c64a54aac27014e9 (patch) | |
tree | 633ffa4db3ac6e8d566cba549510561ffd61d8f4 /drivers | |
parent | 66a4fe0cb80a9fde8cb173289afb863fd279466a (diff) | |
parent | 936e894a976dd3b0f07f1f6f43c17b77b7e6146d (diff) |
Merge branch 'x86-txt-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'x86-txt-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
x86, intel_txt: clean up the impact on generic code, unbreak non-x86
x86, intel_txt: Handle ACPI_SLEEP without X86_TRAMPOLINE
x86, intel_txt: Fix typos in Kconfig help
x86, intel_txt: Factor out the code for S3 setup
x86, intel_txt: tboot.c needs <asm/fixmap.h>
intel_txt: Force IOMMU on for Intel TXT launch
x86, intel_txt: Intel TXT Sx shutdown support
x86, intel_txt: Intel TXT reboot/halt shutdown support
x86, intel_txt: Intel TXT boot support
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/acpi/acpica/hwsleep.c | 3 | ||||
-rw-r--r-- | drivers/pci/dmar.c | 7 | ||||
-rw-r--r-- | drivers/pci/intel-iommu.c | 17 |
3 files changed, 25 insertions, 2 deletions
diff --git a/drivers/acpi/acpica/hwsleep.c b/drivers/acpi/acpica/hwsleep.c index db307a356f0..cc22f9a585b 100644 --- a/drivers/acpi/acpica/hwsleep.c +++ b/drivers/acpi/acpica/hwsleep.c | |||
@@ -45,6 +45,7 @@ | |||
45 | #include <acpi/acpi.h> | 45 | #include <acpi/acpi.h> |
46 | #include "accommon.h" | 46 | #include "accommon.h" |
47 | #include "actables.h" | 47 | #include "actables.h" |
48 | #include <linux/tboot.h> | ||
48 | 49 | ||
49 | #define _COMPONENT ACPI_HARDWARE | 50 | #define _COMPONENT ACPI_HARDWARE |
50 | ACPI_MODULE_NAME("hwsleep") | 51 | ACPI_MODULE_NAME("hwsleep") |
@@ -342,6 +343,8 @@ acpi_status asmlinkage acpi_enter_sleep_state(u8 sleep_state) | |||
342 | 343 | ||
343 | ACPI_FLUSH_CPU_CACHE(); | 344 | ACPI_FLUSH_CPU_CACHE(); |
344 | 345 | ||
346 | tboot_sleep(sleep_state, pm1a_control, pm1b_control); | ||
347 | |||
345 | /* Write #2: Write both SLP_TYP + SLP_EN */ | 348 | /* Write #2: Write both SLP_TYP + SLP_EN */ |
346 | 349 | ||
347 | status = acpi_hw_write_pm1_control(pm1a_control, pm1b_control); | 350 | status = acpi_hw_write_pm1_control(pm1a_control, pm1b_control); |
diff --git a/drivers/pci/dmar.c b/drivers/pci/dmar.c index 7b287cb38b7..ab99783dcce 100644 --- a/drivers/pci/dmar.c +++ b/drivers/pci/dmar.c | |||
@@ -33,6 +33,7 @@ | |||
33 | #include <linux/timer.h> | 33 | #include <linux/timer.h> |
34 | #include <linux/irq.h> | 34 | #include <linux/irq.h> |
35 | #include <linux/interrupt.h> | 35 | #include <linux/interrupt.h> |
36 | #include <linux/tboot.h> | ||
36 | 37 | ||
37 | #undef PREFIX | 38 | #undef PREFIX |
38 | #define PREFIX "DMAR:" | 39 | #define PREFIX "DMAR:" |
@@ -413,6 +414,12 @@ parse_dmar_table(void) | |||
413 | */ | 414 | */ |
414 | dmar_table_detect(); | 415 | dmar_table_detect(); |
415 | 416 | ||
417 | /* | ||
418 | * ACPI tables may not be DMA protected by tboot, so use DMAR copy | ||
419 | * SINIT saved in SinitMleData in TXT heap (which is DMA protected) | ||
420 | */ | ||
421 | dmar_tbl = tboot_get_dmar_table(dmar_tbl); | ||
422 | |||
416 | dmar = (struct acpi_table_dmar *)dmar_tbl; | 423 | dmar = (struct acpi_table_dmar *)dmar_tbl; |
417 | if (!dmar) | 424 | if (!dmar) |
418 | return -ENODEV; | 425 | return -ENODEV; |
diff --git a/drivers/pci/intel-iommu.c b/drivers/pci/intel-iommu.c index 2314ad7ee5f..562221e1191 100644 --- a/drivers/pci/intel-iommu.c +++ b/drivers/pci/intel-iommu.c | |||
@@ -37,6 +37,7 @@ | |||
37 | #include <linux/iommu.h> | 37 | #include <linux/iommu.h> |
38 | #include <linux/intel-iommu.h> | 38 | #include <linux/intel-iommu.h> |
39 | #include <linux/sysdev.h> | 39 | #include <linux/sysdev.h> |
40 | #include <linux/tboot.h> | ||
40 | #include <asm/cacheflush.h> | 41 | #include <asm/cacheflush.h> |
41 | #include <asm/iommu.h> | 42 | #include <asm/iommu.h> |
42 | #include "pci.h" | 43 | #include "pci.h" |
@@ -3183,12 +3184,22 @@ static int __init init_iommu_sysfs(void) | |||
3183 | int __init intel_iommu_init(void) | 3184 | int __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(); |