From 96e5ed750e7447f2c0316368e5592fd331ee345c Mon Sep 17 00:00:00 2001 From: "Wesley W. Terpstra" Date: Thu, 23 Mar 2017 19:16:43 -0700 Subject: bbl: copy dtb after the kernel --- bbl/bbl.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'bbl') diff --git a/bbl/bbl.c b/bbl/bbl.c index 3550c9a..300182c 100644 --- a/bbl/bbl.c +++ b/bbl/bbl.c @@ -4,10 +4,25 @@ #include "vm.h" #include "bits.h" #include "config.h" +#include "fdt.h" #include static const void* entry_point; +static uintptr_t dtb_output() +{ + extern char _payload_end; + uintptr_t end = (uintptr_t) &_payload_end; + return (end + MEGAPAGE_SIZE - 1) / MEGAPAGE_SIZE * MEGAPAGE_SIZE; +} + +static void filter_dtb(uintptr_t source) +{ + uintptr_t dest = dtb_output(); + uint32_t size = fdt_size(source); + memcpy((void*)dest, (void*)source, size); +} + void boot_other_hart(uintptr_t dtb) { const void* entry; @@ -15,12 +30,13 @@ void boot_other_hart(uintptr_t dtb) entry = entry_point; mb(); } while (!entry); - enter_supervisor_mode(entry, read_csr(mhartid), dtb); + enter_supervisor_mode(entry, read_csr(mhartid), dtb_output()); } void boot_loader(uintptr_t dtb) { extern char _payload_start; + filter_dtb(dtb); #ifdef PK_ENABLE_LOGO print_logo(); #endif -- cgit v1.1