1 /*******************************************************************************
2 * (c) Copyright 2016-2018 Microsemi SoC Products Group. All rights reserved.
5 * @author Microsemi SoC Products Group
6 * @brief Mi-V soft processor vectors, trap handling and startup code.
8 * SVN $Revision: 9947 $
9 * SVN $Date: 2018-04-30 20:28:49 +0530 (Mon, 30 Apr 2018) $
16 #if __riscv_xlen == 64
27 .extern freertos_risc_v_trap_handler
37 j freertos_risc_v_trap_handler
40 la t0, freertos_risc_v_trap_handler
45 /*Floating point support configuration*/
61 # Ensure the instruction is not optimized, since gp is not yet set
64 # initialize global pointer
65 la gp, __global_pointer$
69 # initialize stack pointer
72 # perform the rest of initialization in C
77 addi sp, sp, -32*REGBYTES
79 SREG x1, 0 * REGBYTES(sp)
80 SREG x2, 1 * REGBYTES(sp)
81 SREG x3, 2 * REGBYTES(sp)
82 SREG x4, 3 * REGBYTES(sp)
83 SREG x5, 4 * REGBYTES(sp)
84 SREG x6, 5 * REGBYTES(sp)
85 SREG x7, 6 * REGBYTES(sp)
86 SREG x8, 7 * REGBYTES(sp)
87 SREG x9, 8 * REGBYTES(sp)
88 SREG x10, 9 * REGBYTES(sp)
89 SREG x11, 10 * REGBYTES(sp)
90 SREG x12, 11 * REGBYTES(sp)
91 SREG x13, 12 * REGBYTES(sp)
92 SREG x14, 13 * REGBYTES(sp)
93 SREG x15, 14 * REGBYTES(sp)
94 SREG x16, 15 * REGBYTES(sp)
95 SREG x17, 16 * REGBYTES(sp)
96 SREG x18, 17 * REGBYTES(sp)
97 SREG x19, 18 * REGBYTES(sp)
98 SREG x20, 19 * REGBYTES(sp)
99 SREG x21, 20 * REGBYTES(sp)
100 SREG x22, 21 * REGBYTES(sp)
101 SREG x23, 22 * REGBYTES(sp)
102 SREG x24, 23 * REGBYTES(sp)
103 SREG x25, 24 * REGBYTES(sp)
104 SREG x26, 25 * REGBYTES(sp)
105 SREG x27, 26 * REGBYTES(sp)
106 SREG x28, 27 * REGBYTES(sp)
107 SREG x29, 28 * REGBYTES(sp)
108 SREG x30, 29 * REGBYTES(sp)
109 SREG x31, 30 * REGBYTES(sp)
113 SREG t0, 31 * REGBYTES(sp)
121 # Remain in M-mode after mret
125 LREG x1, 0 * REGBYTES(sp)
126 LREG x2, 1 * REGBYTES(sp)
127 LREG x3, 2 * REGBYTES(sp)
128 LREG x4, 3 * REGBYTES(sp)
129 LREG x5, 4 * REGBYTES(sp)
130 LREG x6, 5 * REGBYTES(sp)
131 LREG x7, 6 * REGBYTES(sp)
132 LREG x8, 7 * REGBYTES(sp)
133 LREG x9, 8 * REGBYTES(sp)
134 LREG x10, 9 * REGBYTES(sp)
135 LREG x11, 10 * REGBYTES(sp)
136 LREG x12, 11 * REGBYTES(sp)
137 LREG x13, 12 * REGBYTES(sp)
138 LREG x14, 13 * REGBYTES(sp)
139 LREG x15, 14 * REGBYTES(sp)
140 LREG x16, 15 * REGBYTES(sp)
141 LREG x17, 16 * REGBYTES(sp)
142 LREG x18, 17 * REGBYTES(sp)
143 LREG x19, 18 * REGBYTES(sp)
144 LREG x20, 19 * REGBYTES(sp)
145 LREG x21, 20 * REGBYTES(sp)
146 LREG x22, 21 * REGBYTES(sp)
147 LREG x23, 22 * REGBYTES(sp)
148 LREG x24, 23 * REGBYTES(sp)
149 LREG x25, 24 * REGBYTES(sp)
150 LREG x26, 25 * REGBYTES(sp)
151 LREG x27, 26 * REGBYTES(sp)
152 LREG x28, 27 * REGBYTES(sp)
153 LREG x29, 28 * REGBYTES(sp)
154 LREG x30, 29 * REGBYTES(sp)
155 LREG x31, 30 * REGBYTES(sp)
157 addi sp, sp, 32*REGBYTES