From 321bce4a3f472cfcd1f9af12e0204f6648ce499e Mon Sep 17 00:00:00 2001 From: Kyösti Mälkki Date: Wed, 20 Mar 2019 19:53:44 +0200 Subject: lib/ramtest.c: Make it a bit more arch-agnostic MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I05734515c0bbd043d489c76cf9cf8b2dbe0ff515 Signed-off-by: Kyösti Mälkki Reviewed-on: https://review.coreboot.org/c/coreboot/+/31994 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Georgi --- src/lib/Makefile.inc | 2 +- src/lib/ramtest.c | 49 +++++++++++++++++++------------------------------ 2 files changed, 20 insertions(+), 31 deletions(-) (limited to 'src') 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 #include /* Prototypes */ #include +#include -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); } /** -- cgit v1.2.3