diff options
author | Ronald G. Minnich <rminnich@gmail.com> | 2016-11-06 20:54:20 -0800 |
---|---|---|
committer | Ronald G. Minnich <rminnich@gmail.com> | 2016-11-12 19:23:22 +0100 |
commit | 574df1ba670aaac265ba44b2c94e831dfff9f96d (patch) | |
tree | 229c0ab937fbee26b1c8c8c79b5c105afae06204 /src | |
parent | 04c94ded3a1b4143c3186321a95c547af5377d99 (diff) | |
download | coreboot-574df1ba670aaac265ba44b2c94e831dfff9f96d.tar.xz |
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>
Diffstat (limited to 'src')
-rw-r--r-- | src/arch/riscv/Kconfig | 5 | ||||
-rw-r--r-- | src/arch/riscv/Makefile.inc | 9 | ||||
-rw-r--r-- | src/arch/riscv/boot.c | 7 | ||||
-rw-r--r-- | src/commonlib/configstring.c | 3 | ||||
-rw-r--r-- | src/mainboard/emulation/spike-riscv/romstage.c | 6 |
5 files changed, 23 insertions, 7 deletions
diff --git a/src/arch/riscv/Kconfig b/src/arch/riscv/Kconfig index a30cb7091b..f05a98b106 100644 --- a/src/arch/riscv/Kconfig +++ b/src/arch/riscv/Kconfig @@ -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 diff --git a/src/arch/riscv/Makefile.inc b/src/arch/riscv/Makefile.inc index 1fe8f7c268..c68fd1e066 100644 --- a/src/arch/riscv/Makefile.inc +++ b/src/arch/riscv/Makefile.inc @@ -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)) diff --git a/src/arch/riscv/boot.c b/src/arch/riscv/boot.c index ff1844eb0a..9483c48177 100644 --- a/src/arch/riscv/boot.c +++ b/src/arch/riscv/boot.c @@ -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)); diff --git a/src/commonlib/configstring.c b/src/commonlib/configstring.c index 40beb1659c..4eca6af39a 100644 --- a/src/commonlib/configstring.c +++ b/src/commonlib/configstring.c @@ -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; } diff --git a/src/mainboard/emulation/spike-riscv/romstage.c b/src/mainboard/emulation/spike-riscv/romstage.c index b6314ccd1c..dccdf226fb 100644 --- a/src/mainboard/emulation/spike-riscv/romstage.c +++ b/src/mainboard/emulation/spike-riscv/romstage.c @@ -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(); } |