diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/Makefile.inc | 2 | ||||
-rw-r--r-- | src/lib/ramtest.c | 49 |
2 files changed, 20 insertions, 31 deletions
diff --git a/src/lib/Makefile.inc b/src/lib/Makefile.inc index 70bbece49d..1350152a40 100644 --- a/src/lib/Makefile.inc +++ b/src/lib/Makefile.inc @@ -83,7 +83,7 @@ romstage-y += libgcc.c romstage-y += memrange.c romstage-$(CONFIG_PRIMITIVE_MEMTEST) += primitive_memtest.c ramstage-$(CONFIG_PRIMITIVE_MEMTEST) += primitive_memtest.c -romstage-$(CONFIG_CACHE_AS_RAM) += ramtest.c +romstage-y += ramtest.c romstage-$(CONFIG_GENERIC_GPIO_LIB) += gpio.c ramstage-y += region_file.c romstage-y += region_file.c diff --git a/src/lib/ramtest.c b/src/lib/ramtest.c index f0f5c556a6..eb58c30fe5 100644 --- a/src/lib/ramtest.c +++ b/src/lib/ramtest.c @@ -1,50 +1,39 @@ #include <stdint.h> #include <lib.h> /* Prototypes */ #include <console/console.h> +#include <device/mmio.h> -static void write_phys(unsigned long addr, u32 value) +#if CONFIG(ARCH_X86) && CONFIG(SSE2) +/* Assembler in lib/ is ugly. */ +static void write_phys(uintptr_t addr, u32 value) { - // 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)" : /* outputs */ : "r" (addr), "r" (value) /* inputs */ -#ifndef __GNUC__ /* GCC does not like empty clobbers? */ - : /* clobbers */ -#endif - ); -#else - volatile unsigned long *ptr; - ptr = (void *)addr; - *ptr = value; -#endif + ); } -static u32 read_phys(unsigned long addr) +static void phys_memory_barrier(void) +{ + // Needed for movnti + asm volatile ("sfence" ::: "memory"); +} +#else +static void write_phys(uintptr_t addr, u32 value) { - volatile unsigned long *ptr; - ptr = (void *)addr; - return *ptr; + write32((void *)addr, value); } static void phys_memory_barrier(void) { -#if CONFIG(SSE2) - // Needed for movnti - asm volatile ( - "sfence" - :: -#ifdef __GNUC__ /* ROMCC does not like memory clobbers */ - : "memory" -#endif - ); -#else -#ifdef __GNUC__ /* ROMCC does not like empty asm statements */ asm volatile ("" ::: "memory"); +} #endif -#endif + +static u32 read_phys(uintptr_t addr) +{ + return read32((void *)addr); } /** |