HAVE_MOVNTI really means SSE2. Also add sfence in the MOVNTI case.

Signed-off-by: Stefan Reinauer <stepan@coresystems.de>
Acked-by: Patrick Georgi <patrick.georgi@coresystems.de>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@5159 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
Stefan Reinauer 2010-02-25 13:40:49 +00:00 committed by Stefan Reinauer
parent 3a54ac9c36
commit a7acc515bd
15 changed files with 38 additions and 19 deletions

View File

@ -184,10 +184,6 @@ config HAVE_MAINBOARD_RESOURCES
bool bool
default n default n
config HAVE_MOVNTI
bool
default n
config HAVE_OPTION_TABLE config HAVE_OPTION_TABLE
bool bool
default y default y

View File

@ -32,14 +32,26 @@ config SMP
This option is used to enable certain functions to make coreboot This option is used to enable certain functions to make coreboot
work correctly on symmetric multi processor (SMP) systems. work correctly on symmetric multi processor (SMP) systems.
# Set MMX and SSE in socket or model if the CPU has them.
# If all CPUs for the socket have MMX or SSE, set them there.
# These options are only needed for boards compiled with romcc.
config MMX config MMX
bool bool
help
Select MMX in your socket or model Kconfig if your CPU has MMX
streaming SIMD instructions. ROMCC can build more efficient
code if it can spill to MMX registers.
config SSE config SSE
bool bool
help
Select SSE in your socket or model Kconfig if your CPU has SSE
streaming SIMD instructions. ROMCC can build more efficient
code if it can spill to SSE (aka XMM) registers.
config SSE2
bool
help
Select SSE2 in your socket or model Kconfig if your CPU has SSE2
streaming SIMD instructions. Some parts of coreboot can be built
with more efficient code if SSE2 instructions are available.
config VAR_MTRR_HOLE config VAR_MTRR_HOLE
bool bool

View File

@ -1,9 +1,9 @@
config CPU_AMD_MODEL_10XXX config CPU_AMD_MODEL_10XXX
bool bool
select HAVE_MOVNTI
select USE_PRINTK_IN_CAR select USE_PRINTK_IN_CAR
select USE_DCACHE_RAM select USE_DCACHE_RAM
select SSE select SSE
select SSE2
select HAVE_INIT_TIMER select HAVE_INIT_TIMER
config CPU_ADDR_BITS config CPU_ADDR_BITS

View File

@ -1,9 +1,10 @@
config CPU_AMD_MODEL_FXX config CPU_AMD_MODEL_FXX
bool bool
select HAVE_MOVNTI
select USE_PRINTK_IN_CAR select USE_PRINTK_IN_CAR
select USE_DCACHE_RAM select USE_DCACHE_RAM
select MMX
select SSE select SSE
select SSE2
select HAVE_INIT_TIMER select HAVE_INIT_TIMER
config CPU_ADDR_BITS config CPU_ADDR_BITS

View File

@ -1,4 +1,4 @@
config CPU_INTEL_CORE2 config CPU_INTEL_CORE2
bool bool
select SMP select SMP
select HAVE_MOVNTI select SSE2

View File

@ -1,4 +1,4 @@
config CPU_INTEL_ATOM_230 config CPU_INTEL_ATOM_230
bool bool
select SMP select SMP
select HAVE_MOVNTI select SSE2

View File

@ -1,4 +1,4 @@
config CPU_INTEL_CORE config CPU_INTEL_CORE
bool bool
select SMP select SMP
select HAVE_MOVNTI select SSE2

View File

@ -1 +1,4 @@
# select HAVE_MOVNTI config CPU_INTEL_CORE2
bool
select SMP
select SSE2

View File

@ -1,4 +1,4 @@
config CPU_INTEL_MODEL_F0X config CPU_INTEL_MODEL_F0X
bool bool
select SMP select SMP
select HAVE_MOVNTI select SSE2

View File

@ -1,4 +1,4 @@
config CPU_INTEL_MODEL_F1X config CPU_INTEL_MODEL_F1X
bool bool
select SMP select SMP
select HAVE_MOVNTI select SSE2

View File

@ -1,4 +1,4 @@
config CPU_INTEL_MODEL_F2X config CPU_INTEL_MODEL_F2X
bool bool
select SMP select SMP
select HAVE_MOVNTI select SSE2

View File

@ -1,4 +1,4 @@
config CPU_INTEL_MODEL_F3X config CPU_INTEL_MODEL_F3X
bool bool
select SMP select SMP
select HAVE_MOVNTI select SSE2

View File

@ -1,4 +1,4 @@
config CPU_INTEL_MODEL_F4X config CPU_INTEL_MODEL_F4X
bool bool
select SMP select SMP
select HAVE_MOVNTI select SSE2

View File

@ -1,3 +1,4 @@
config CPU_VIA_C7 config CPU_VIA_C7
bool bool
select UDELAY_TSC select UDELAY_TSC
select SSE2

View File

@ -1,6 +1,8 @@
static void write_phys(unsigned long addr, unsigned long value) static void write_phys(unsigned long addr, unsigned long value)
{ {
#if CONFIG_HAVE_MOVNTI // Assembler in lib/ is very ugly. But we properly guarded
// it so let's obey this one for now
#if CONFIG_SSE2
asm volatile( asm volatile(
"movnti %1, (%0)" "movnti %1, (%0)"
: /* outputs */ : /* outputs */
@ -50,6 +52,10 @@ static void ram_fill(unsigned long start, unsigned long stop)
} }
write_phys(addr, addr); write_phys(addr, addr);
}; };
#if CONFIG_SSE2
// Needed for movnti
asm volatile ("sfence" ::: "memory");
#endif
/* Display final address */ /* Display final address */
#if CONFIG_USE_PRINTK_IN_CAR #if CONFIG_USE_PRINTK_IN_CAR
printk_debug("%08lx\r\nDRAM filled\r\n", addr); printk_debug("%08lx\r\nDRAM filled\r\n", addr);