aboutsummaryrefslogtreecommitdiff
path: root/arch/riscv/init
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
parent68fcd6d027b88581992b4fb10ee1edc301e30678 (diff)
downloadkmi-13fe461374c0716404e2ee7726781b9cd12dbaa7.tar.gz
kmi-13fe461374c0716404e2ee7726781b9cd12dbaa7.zip
Added default stack location
Diffstat (limited to 'arch/riscv/init')
-rw-r--r--arch/riscv/init/head.S2
-rw-r--r--arch/riscv/init/init.c9
2 files changed, 8 insertions, 3 deletions
diff --git a/arch/riscv/init/head.S b/arch/riscv/init/head.S
index bbd2945..3589ead 100644
--- a/arch/riscv/init/head.S
+++ b/arch/riscv/init/head.S
@@ -2,6 +2,6 @@
.global _start
.type _start, @function
_start:
- /* stack pointer is whatever? */
+ li sp, PM_STACK_TOP
/* go to proper init */
j init
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)