aboutsummaryrefslogtreecommitdiff
path: root/arch/riscv64/kernel/start.S
blob: 73a442e17b6a191b23a8a33b300f300e9a9bcaeb (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#if GENERIC_UBOOT
# define MAIN main_go
#else
# define MAIN main
#endif

.section .kernel.start
.global _start
_start:
/* get load address */
auipc a2, 0

/* load initial stack */
lla sp, riscv_init_stack
li t0, 4096
add sp, sp, t0

/* set thread pointer to zero so we don't accidentally try to use a tcb */
li tp, 0

/* call main, whichever one is relevant */
call MAIN
ret

.section .text

/* a0 is fdt, a1 is load_addr, a2 is d, a3 is ram_base, a4 is DMAP */
.global to_kernelspace
to_kernelspace:
lla t0, kernel
add t0, t0, a4
sub t0, t0, a3
add sp, sp, a4
sub sp, sp, a3
jr t0