aboutsummaryrefslogtreecommitdiff
path: root/arch/riscv64/kernel/start.S
diff options
context:
space:
mode:
Diffstat (limited to 'arch/riscv64/kernel/start.S')
-rw-r--r--arch/riscv64/kernel/start.S15
1 files changed, 14 insertions, 1 deletions
diff --git a/arch/riscv64/kernel/start.S b/arch/riscv64/kernel/start.S
index 5a2ed61..3f2b3cb 100644
--- a/arch/riscv64/kernel/start.S
+++ b/arch/riscv64/kernel/start.S
@@ -1,10 +1,12 @@
+#include "asm.h"
+
#if GENERIC_UBOOT
# define MAIN main_go
#else
# define MAIN main
#endif
-.section .kernel.start
+.section ".kernel.start", "ax"
.global _start
_start:
/* get load address */
@@ -15,6 +17,12 @@ lla sp, riscv_init_stack
li t0, 4096
add sp, sp, t0
+lla t0, __kernel_start
+lla t1, __kernel_end
+lla t2, kernel_size
+sub t0, t1, t0
+sr t0, 0(t2)
+
/* set thread pointer to zero so we don't accidentally try to use a tcb */
li tp, 0
@@ -32,3 +40,8 @@ add sp, sp, t1
lui t0, %hi(kernel)
addi t0, t0, %lo(kernel)
jr t0
+
+.global riscv_run_init
+riscv_run_init:
+mv sp, a6
+sret