lib/ramtest.c: Make it a bit more arch-agnostic
Change-Id: I05734515c0bbd043d489c76cf9cf8b2dbe0ff515 Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/31994 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Patrick Georgi <pgeorgi@google.com>
This commit is contained in:
committed by
Patrick Georgi
parent
a9506dbaf4
commit
321bce4a3f
@@ -83,7 +83,7 @@ romstage-y += libgcc.c
|
|||||||
romstage-y += memrange.c
|
romstage-y += memrange.c
|
||||||
romstage-$(CONFIG_PRIMITIVE_MEMTEST) += primitive_memtest.c
|
romstage-$(CONFIG_PRIMITIVE_MEMTEST) += primitive_memtest.c
|
||||||
ramstage-$(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
|
romstage-$(CONFIG_GENERIC_GPIO_LIB) += gpio.c
|
||||||
ramstage-y += region_file.c
|
ramstage-y += region_file.c
|
||||||
romstage-y += region_file.c
|
romstage-y += region_file.c
|
||||||
|
@@ -1,50 +1,39 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <lib.h> /* Prototypes */
|
#include <lib.h> /* Prototypes */
|
||||||
#include <console/console.h>
|
#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
|
asm volatile (
|
||||||
// it so let's obey this one for now
|
|
||||||
#if CONFIG(SSE2)
|
|
||||||
asm volatile(
|
|
||||||
"movnti %1, (%0)"
|
"movnti %1, (%0)"
|
||||||
: /* outputs */
|
: /* outputs */
|
||||||
: "r" (addr), "r" (value) /* inputs */
|
: "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)
|
|
||||||
{
|
|
||||||
volatile unsigned long *ptr;
|
|
||||||
ptr = (void *)addr;
|
|
||||||
return *ptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void phys_memory_barrier(void)
|
static void phys_memory_barrier(void)
|
||||||
{
|
{
|
||||||
#if CONFIG(SSE2)
|
|
||||||
// Needed for movnti
|
// Needed for movnti
|
||||||
asm volatile (
|
asm volatile ("sfence" ::: "memory");
|
||||||
"sfence"
|
}
|
||||||
::
|
|
||||||
#ifdef __GNUC__ /* ROMCC does not like memory clobbers */
|
|
||||||
: "memory"
|
|
||||||
#endif
|
|
||||||
);
|
|
||||||
#else
|
#else
|
||||||
#ifdef __GNUC__ /* ROMCC does not like empty asm statements */
|
static void write_phys(uintptr_t addr, u32 value)
|
||||||
|
{
|
||||||
|
write32((void *)addr, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void phys_memory_barrier(void)
|
||||||
|
{
|
||||||
asm volatile ("" ::: "memory");
|
asm volatile ("" ::: "memory");
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
static u32 read_phys(uintptr_t addr)
|
||||||
|
{
|
||||||
|
return read32((void *)addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user