riscv: start to use the configstring functions

These functions will allow us to remove hardcodes,
as long as we can verify the qemu and lowrisc targets
implement the configstring correctly. Hence, for the
most part, we'll start with mainboard changes first.

Define a new config variable, CONFIG_RISCV_CONFIGSTRING,
which has a default value that works on all existing
systems but which can be changed
as needed for a new SOC or mainboard.

Change-Id: I7dd3f553d3e61f1c49752fb04402b134fdfdf979
Signed-off-by: Ronald G. Minnich <rminnich@gmail.com>
Reviewed-on: https://review.coreboot.org/17256
Tested-by: build bot (Jenkins)
Reviewed-by: Jonathan Neuschäfer <j.neuschaefer@gmx.net>
This commit is contained in:
Ronald G. Minnich 2016-11-06 20:54:20 -08:00
parent 04c94ded3a
commit 574df1ba67
5 changed files with 23 additions and 7 deletions

View File

@ -19,3 +19,8 @@ config ARCH_ROMSTAGE_RISCV
config ARCH_RAMSTAGE_RISCV
bool
default n
config RISCV_CONFIGSTRING
hex "Location of pointer to RISCV config string"
default 0x100c
depends on ARCH_RISCV

View File

@ -43,7 +43,8 @@ bootblock-y += \
$(top)/src/lib/memcmp.c \
$(top)/src/lib/memcpy.c \
$(top)/src/lib/memmove.c \
$(top)/src/lib/memset.c
$(top)/src/lib/memset.c \
$(top)/src/commonlib/configstring.c
$(objcbfs)/bootblock.debug: $$(bootblock-objs)
@printf " LINK $(subst $(obj)/,,$(@))\n"
@ -69,7 +70,8 @@ romstage-y += \
$(top)/src/lib/memcmp.c \
$(top)/src/lib/memcpy.c \
$(top)/src/lib/memmove.c \
$(top)/src/lib/memset.c
$(top)/src/lib/memset.c \
$(top)/src/commonlib/configstring.c
romstage-$(CONFIG_COLLECT_TIMESTAMPS) += timestamp.c
@ -102,7 +104,8 @@ ramstage-y += \
$(top)/src/lib/memcmp.c \
$(top)/src/lib/memcpy.c \
$(top)/src/lib/memmove.c \
$(top)/src/lib/memset.c
$(top)/src/lib/memset.c \
$(top)/src/commonlib/configstring.c
$(eval $(call create_class_compiler,rmodules,riscv))

View File

@ -18,16 +18,19 @@
#include <arch/encoding.h>
#include <rules.h>
#include <console/console.h>
#include <commonlib/configstring.h>
void arch_prog_run(struct prog *prog)
{
void (*doit)(void *) = prog_entry(prog);
void riscvpayload(void *);
void riscvpayload(const char *configstring, void *payload);
const char *config = configstring();
if (ENV_RAMSTAGE && prog_type(prog) == PROG_PAYLOAD) {
printk(BIOS_SPEW, "Config string: '%s'\n", config);
initVirtualMemory();
printk(BIOS_SPEW, "OK, let's go\n");
riscvpayload(doit);
riscvpayload(config, doit);
}
doit(prog_entry_arg(prog));

View File

@ -28,7 +28,6 @@
*/
#include <config.h>
#include <assert.h>
#include <string.h>
#include <commonlib/configstring.h>
@ -49,6 +48,6 @@ void query_rtc(const char *config_string, uintptr_t *mtime)
const char *configstring(void)
{
uint32_t addr = *(uint32_t *)CONFIG_ARCH_CONFIGSTRING_RISCV;
uint32_t addr = *(uint32_t *)CONFIG_RISCV_CONFIGSTRING;
return (const char *)(uintptr_t)addr;
}

View File

@ -15,9 +15,15 @@
#include <console/console.h>
#include <program_loading.h>
#include <commonlib/configstring.h>
void main(void)
{
uintptr_t base;
size_t size;
console_init();
query_mem(configstring(), &base, &size);
printk(BIOS_SPEW, "0x%zx bytes of memory at 0x%llx\n", size, base);
run_ramstage();
}