diff options
| author | Tom Rini <trini@ti.com> | 2012-12-07 06:43:40 -0700 | 
|---|---|---|
| committer | Tom Rini <trini@ti.com> | 2012-12-07 08:47:59 -0700 | 
| commit | fd4d564b3c80b111f18c93adb14233a6a7ddb0e9 (patch) | |
| tree | a42d63aae4f7c07f441321c18098a85cbcc45dee /arch/x86/cpu/cpu.c | |
| parent | 13d43555a9154cf12255023c47e80d947d7d0604 (diff) | |
| parent | ac426b7290e3a96c97fbc093f15cd0660e0edaf2 (diff) | |
| download | olio-uboot-2014.01-fd4d564b3c80b111f18c93adb14233a6a7ddb0e9.tar.xz olio-uboot-2014.01-fd4d564b3c80b111f18c93adb14233a6a7ddb0e9.zip | |
Merge branch 'master' of git://git.denx.de/u-boot-x86
Diffstat (limited to 'arch/x86/cpu/cpu.c')
| -rw-r--r-- | arch/x86/cpu/cpu.c | 38 | 
1 files changed, 32 insertions, 6 deletions
| diff --git a/arch/x86/cpu/cpu.c b/arch/x86/cpu/cpu.c index fabfbd1bf..315e87afe 100644 --- a/arch/x86/cpu/cpu.c +++ b/arch/x86/cpu/cpu.c @@ -34,6 +34,7 @@  #include <common.h>  #include <command.h> +#include <asm/control_regs.h>  #include <asm/processor.h>  #include <asm/processor-flags.h>  #include <asm/interrupt.h> @@ -147,16 +148,27 @@ int cpu_init_r(void) __attribute__((weak, alias("x86_cpu_init_r")));  void x86_enable_caches(void)  { -	const u32 nw_cd_rst = ~(X86_CR0_NW | X86_CR0_CD); +	unsigned long cr0; -	/* turn on the cache and disable write through */ -	asm("movl	%%cr0, %%eax\n" -	    "andl	%0, %%eax\n" -	    "movl	%%eax, %%cr0\n" -	    "wbinvd\n" : : "i" (nw_cd_rst) : "eax"); +	cr0 = read_cr0(); +	cr0 &= ~(X86_CR0_NW | X86_CR0_CD); +	write_cr0(cr0); +	wbinvd();  }  void enable_caches(void) __attribute__((weak, alias("x86_enable_caches"))); +void x86_disable_caches(void) +{ +	unsigned long cr0; + +	cr0 = read_cr0(); +	cr0 |= X86_CR0_NW | X86_CR0_CD; +	wbinvd(); +	write_cr0(cr0); +	wbinvd(); +} +void disable_caches(void) __attribute__((weak, alias("x86_disable_caches"))); +  int x86_init_cache(void)  {  	enable_caches(); @@ -200,3 +212,17 @@ void __reset_cpu(ulong addr)  	generate_gpf();			/* start the show */  }  void reset_cpu(ulong addr) __attribute__((weak, alias("__reset_cpu"))); + +int dcache_status(void) +{ +	return !(read_cr0() & 0x40000000); +} + +/* Define these functions to allow ehch-hcd to function */ +void flush_dcache_range(unsigned long start, unsigned long stop) +{ +} + +void invalidate_dcache_range(unsigned long start, unsigned long stop) +{ +} |