aboutsummaryrefslogtreecommitdiff
path: root/src/arch/riscv/boot.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/riscv/boot.c')
-rw-r--r--src/arch/riscv/boot.c23
1 files changed, 19 insertions, 4 deletions
diff --git a/src/arch/riscv/boot.c b/src/arch/riscv/boot.c
index b73f3cade4..d7233fe3da 100644
--- a/src/arch/riscv/boot.c
+++ b/src/arch/riscv/boot.c
@@ -15,20 +15,35 @@
#include <program_loading.h>
#include <vm.h>
+#include <arch/boot.h>
#include <arch/encoding.h>
#include <rules.h>
#include <console/console.h>
+/*
+ * A pointer to the Flattened Device Tree passed to coreboot by the boot ROM.
+ * Presumably this FDT is also in ROM.
+ *
+ * This pointer is only used in ramstage!
+ */
+const void *rom_fdt;
+
void arch_prog_run(struct prog *prog)
{
void (*doit)(void *) = prog_entry(prog);
- void riscvpayload(const char *configstring, void *payload);
- const char *config = NULL;
+ void riscvpayload(const void *fdt, void *payload);
if (ENV_RAMSTAGE && prog_type(prog) == PROG_PAYLOAD) {
- printk(BIOS_SPEW, "Config string: '%s'\n", config);
+ /*
+ * FIXME: This is wrong and will crash. Linux can't (in early
+ * boot) access memory that's before its own loading address.
+ * We need to copy the FDT to a place where Linux can access it.
+ */
+ const void *fdt = rom_fdt;
+
+ printk(BIOS_SPEW, "FDT is at %p\n", fdt);
printk(BIOS_SPEW, "OK, let's go\n");
- riscvpayload(config, doit);
+ riscvpayload(fdt, doit);
}
doit(prog_entry_arg(prog));