aboutsummaryrefslogtreecommitdiff
path: root/arch/riscv/init/init.c
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2021-09-25 12:24:24 +0300
committerKimplul <kimi.h.kuparinen@gmail.com>2021-09-25 12:24:24 +0300
commit13fe461374c0716404e2ee7726781b9cd12dbaa7 (patch)
tree8081e42fbebe8561d87f4e685e0f2c38b40fc0c4 /arch/riscv/init/init.c
parent68fcd6d027b88581992b4fb10ee1edc301e30678 (diff)
downloadkmi-13fe461374c0716404e2ee7726781b9cd12dbaa7.tar.gz
kmi-13fe461374c0716404e2ee7726781b9cd12dbaa7.zip
Added default stack location
Diffstat (limited to 'arch/riscv/init/init.c')
-rw-r--r--arch/riscv/init/init.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/arch/riscv/init/init.c b/arch/riscv/init/init.c
index 5612d0b..86c2563 100644
--- a/arch/riscv/init/init.c
+++ b/arch/riscv/init/init.c
@@ -112,8 +112,8 @@ static pm_t get_kerneltop()
/* interesting, for some reason if I define these to be just char
* pointers I get some wacky values. Not sure why that would be, but
* this works. */
- extern char __init_end[], __kernel_size[];
- return (pm_t)__init_end + (pm_t)__kernel_size;
+ extern char __init_end, __kernel_size;
+ return (pm_t)&__init_end + (pm_t)&__kernel_size;
}
static pm_t get_initrdtop(void *fdt)
@@ -146,11 +146,16 @@ static void setup_pmem(void *fdt)
dbg("kernel_top:\t%#lx\n", kernel_top);
dbg("fdt_top:\t%#lx\n", fdt_top);
+ /* TODO: check that pmap placement doesn't overwrite anything, such as
+ * stack or go over top address of memory */
/* riscv handles two byte boundaries better than one byte, so align
* upwards */
populate_pmap(pmem.base, pmem.top - pmem.base, align_up(top + 1, 2));
/* TODO: mark used pages */
+
+ /* mark init stack */
+ mark_used(PM_STACK_BASE, MM_MPAGE);
}
void init(void *fdt)