From dc2e2cc9dc9d7790e23dd9a4ccc265d7bb6d76aa Mon Sep 17 00:00:00 2001 From: Kimplul Date: Mon, 20 Dec 2021 12:28:30 +0200 Subject: Added init back --- arch/riscv/init/init.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 arch/riscv/init/init.c (limited to 'arch/riscv/init') diff --git a/arch/riscv/init/init.c b/arch/riscv/init/init.c new file mode 100644 index 0000000..d9b32a0 --- /dev/null +++ b/arch/riscv/init/init.c @@ -0,0 +1,29 @@ +#include +#include +#include +#include + +/* assume 64 bit for now */ +struct __packed init_vmem { + int *leaf[512]; +}; + +struct init_vmem root_branch; + +/* assume Sv48 for now */ +void init_lowmem() +{ + size_t flags = VM_V | VM_X | VM_R | VM_W; + for(size_t i = 0; i < 512; ++i) + root_branch.leaf[i] = (int *)((1UL << 37) * i | flags); + + csr_write(CSR_SATP, SATP_MODE_Sv48 | ((size_t)&root_branch >> 12)); +} + +void __section(".init.start") main(void *fdt) +{ + extern char *__init_end; + void (*kernel_main)(void *fdt) = (void (*)(void *))(VM_KERN + (size_t)&__init_end); + init_lowmem(); + kernel_main(fdt); +} -- cgit v1.3