1 /* SPDX-License-Identifier: GPL-2.0-only */
3 * Early initialization code for riscv
11 LOAD x1,1*REGBYTES(a0)
12 LOAD x2,2*REGBYTES(a0)
13 LOAD x3,3*REGBYTES(a0)
14 LOAD x4,4*REGBYTES(a0)
15 LOAD x5,5*REGBYTES(a0)
16 LOAD x6,6*REGBYTES(a0)
17 LOAD x7,7*REGBYTES(a0)
18 LOAD x8,8*REGBYTES(a0)
19 LOAD x9,9*REGBYTES(a0)
20 LOAD x11,11*REGBYTES(a0)
21 LOAD x12,12*REGBYTES(a0)
22 LOAD x13,13*REGBYTES(a0)
23 LOAD x14,14*REGBYTES(a0)
24 LOAD x15,15*REGBYTES(a0)
25 LOAD x16,16*REGBYTES(a0)
26 LOAD x17,17*REGBYTES(a0)
27 LOAD x18,18*REGBYTES(a0)
28 LOAD x19,19*REGBYTES(a0)
29 LOAD x20,20*REGBYTES(a0)
30 LOAD x21,21*REGBYTES(a0)
31 LOAD x22,22*REGBYTES(a0)
32 LOAD x23,23*REGBYTES(a0)
33 LOAD x24,24*REGBYTES(a0)
34 LOAD x25,25*REGBYTES(a0)
35 LOAD x26,26*REGBYTES(a0)
36 LOAD x27,27*REGBYTES(a0)
37 LOAD x28,28*REGBYTES(a0)
38 LOAD x29,29*REGBYTES(a0)
39 LOAD x30,30*REGBYTES(a0)
40 LOAD x31,31*REGBYTES(a0)
42 LOAD x10,10*REGBYTES(a0)
48 STORE x1,1*REGBYTES(x2)
49 STORE x3,3*REGBYTES(x2)
50 STORE x4,4*REGBYTES(x2)
51 STORE x5,5*REGBYTES(x2)
52 STORE x6,6*REGBYTES(x2)
53 STORE x7,7*REGBYTES(x2)
54 STORE x8,8*REGBYTES(x2)
55 STORE x9,9*REGBYTES(x2)
56 STORE x10,10*REGBYTES(x2)
57 STORE x11,11*REGBYTES(x2)
58 STORE x12,12*REGBYTES(x2)
59 STORE x13,13*REGBYTES(x2)
60 STORE x14,14*REGBYTES(x2)
61 STORE x15,15*REGBYTES(x2)
62 STORE x16,16*REGBYTES(x2)
63 STORE x17,17*REGBYTES(x2)
64 STORE x18,18*REGBYTES(x2)
65 STORE x19,19*REGBYTES(x2)
66 STORE x20,20*REGBYTES(x2)
67 STORE x21,21*REGBYTES(x2)
68 STORE x22,22*REGBYTES(x2)
69 STORE x23,23*REGBYTES(x2)
70 STORE x24,24*REGBYTES(x2)
71 STORE x25,25*REGBYTES(x2)
72 STORE x26,26*REGBYTES(x2)
73 STORE x27,27*REGBYTES(x2)
74 STORE x28,28*REGBYTES(x2)
75 STORE x29,29*REGBYTES(x2)
76 STORE x30,30*REGBYTES(x2)
77 STORE x31,31*REGBYTES(x2)
79 # get sr, epc, badvaddr, cause
85 STORE t0,2*REGBYTES(x2)
86 STORE s0,32*REGBYTES(x2)
87 STORE t1,33*REGBYTES(x2)
88 STORE t2,34*REGBYTES(x2)
89 STORE t3,35*REGBYTES(x2)
91 # get faulting insn, if it wasn't a fetch-related trap
93 STORE x5,36*REGBYTES(x2)
101 .align 2 # four byte alignment, as required by mtvec
105 # SMP isn't supported yet, to avoid overwriting the same stack with different
106 # harts that handle traps at the same time.
107 # someday this gets fixed.
113 # Use a different stack than in the main context, to to avoid overwriting
115 # TODO: Maybe use the old stack pointer (plus an offset) instead. But only if
116 # the previous mode was M, because it would be a very bad idea to use a stack
117 # pointer provided by unprivileged code!
119 addi sp, sp, -2048 # 2 KiB is half of the stack space
120 addi sp, sp, -MENTRY_FRAME_SIZE
129 # go back to the previous mode