diff options
-rw-r--r-- | src/arch/x86/boot/acpi.c | 4 | ||||
-rw-r--r-- | src/cpu/x86/mtrr/mtrr.c | 6 | ||||
-rw-r--r-- | src/include/cpu/cpu.h | 3 | ||||
-rw-r--r-- | src/lib/selfboot.c | 5 |
4 files changed, 18 insertions, 0 deletions
diff --git a/src/arch/x86/boot/acpi.c b/src/arch/x86/boot/acpi.c index b04cbe52bf..7b207b48bf 100644 --- a/src/arch/x86/boot/acpi.c +++ b/src/arch/x86/boot/acpi.c @@ -646,6 +646,10 @@ void suspend_resume(void) #if CONFIG_COVERAGE coverage_exit(); #endif + /* Tear down the caching of the ROM. */ + if (disable_cache_rom) + disable_cache_rom(); + post_code(POST_OS_RESUME); acpi_jump_to_wakeup(wake_vec); } diff --git a/src/cpu/x86/mtrr/mtrr.c b/src/cpu/x86/mtrr/mtrr.c index 253a7c318b..608912754c 100644 --- a/src/cpu/x86/mtrr/mtrr.c +++ b/src/cpu/x86/mtrr/mtrr.c @@ -29,6 +29,7 @@ #include <string.h> #include <console/console.h> #include <device/device.h> +#include <cpu/cpu.h> #include <cpu/x86/msr.h> #include <cpu/x86/mtrr.h> #include <cpu/x86/cache.h> @@ -406,6 +407,11 @@ void x86_mtrr_disable_rom_caching(void) wrmsr(MTRRphysBase_MSR(index), msr_val); enable_cache(); } + +void disable_cache_rom(void) +{ + x86_mtrr_disable_rom_caching(); +} #endif struct var_mtrr_state { diff --git a/src/include/cpu/cpu.h b/src/include/cpu/cpu.h index bed77de017..a2272f3e84 100644 --- a/src/include/cpu/cpu.h +++ b/src/include/cpu/cpu.h @@ -9,6 +9,9 @@ struct bus; void initialize_cpus(struct bus *cpu_bus); void asmlinkage secondary_cpu_init(unsigned int cpu_index); +/* If a ROM cache was set up disable it before jumping to the payload or OS. */ +void __attribute__((weak)) disable_cache_rom(void); + #if CONFIG_HAVE_SMI_HANDLER void smm_init(void); void smm_lock(void); diff --git a/src/lib/selfboot.c b/src/lib/selfboot.c index f933142144..be03b853a6 100644 --- a/src/lib/selfboot.c +++ b/src/lib/selfboot.c @@ -20,6 +20,7 @@ #include <arch/byteorder.h> #include <console/console.h> +#include <cpu/cpu.h> #include <fallback.h> #include <boot/elf.h> #include <boot/elf_boot.h> @@ -540,6 +541,10 @@ int selfboot(struct lb_memory *mem, struct cbfs_payload *payload) coverage_exit(); #endif + /* Tear down the caching of the ROM. */ + if (disable_cache_rom) + disable_cache_rom(); + /* Before we go off to run the payload, see if * we stayed within our bounds. */ |