]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/RISC-V_IGLOO2_Creative_SoftConsole/Microsemi_Code/riscv_hal/entry.S
fce18d785643085ee215fb0eaf0dd10433295fd9
[freertos] / FreeRTOS / Demo / RISC-V_IGLOO2_Creative_SoftConsole / Microsemi_Code / riscv_hal / entry.S
1 /*******************************************************************************\r
2  * (c) Copyright 2016-2018 Microsemi SoC Products Group.  All rights reserved.\r
3  *\r
4  * @file entry.S\r
5  * @author Microsemi SoC Products Group\r
6  * @brief Mi-V soft processor vectors, trap handling and startup code.\r
7  *\r
8  * SVN $Revision: 9947 $\r
9  * SVN $Date: 2018-04-30 20:28:49 +0530 (Mon, 30 Apr 2018) $\r
10  */\r
11 #ifndef ENTRY_S\r
12 #define ENTRY_S\r
13 \r
14 #include "encoding.h"\r
15 \r
16 #if __riscv_xlen == 64\r
17 # define LREG ld\r
18 # define SREG sd\r
19 # define REGBYTES 8\r
20 #else\r
21 # define LREG lw\r
22 # define SREG sw\r
23 # define REGBYTES 4\r
24 #endif\r
25 \r
26   .section      .text.entry\r
27   .extern vFreeRTOSPortTrapHandler\r
28   .globl _start\r
29 \r
30 _start:\r
31   j handle_reset\r
32 \r
33 nmi_vector:\r
34   j nmi_vector\r
35 \r
36 trap_vector:\r
37   j vFreeRTOSPortTrapHandler\r
38 \r
39 handle_reset:\r
40   la t0, vFreeRTOSPortTrapHandler\r
41   csrw mtvec, t0\r
42   csrwi mstatus, 0\r
43   csrwi mie, 0\r
44 \r
45 /*Floating point support configuration*/\r
46 \r
47 #ifdef __riscv_flen\r
48   csrr t0, mstatus\r
49   lui t1, 0xffffa\r
50   addi t1, t1, -1\r
51   and t0, t0, t1\r
52   lui t1, 0x4\r
53   or t1, t0, t1\r
54   csrw mstatus, t1\r
55 \r
56   lui t0, 0x0\r
57   fscsr t0\r
58 #endif\r
59 .option push\r
60 \r
61 # Ensure the instruction is not optimized, since gp is not yet set\r
62 \r
63 .option norelax\r
64   # initialize global pointer\r
65   la gp, __global_pointer$\r
66 \r
67 .option pop\r
68 \r
69   # initialize stack pointer\r
70   la sp, __stack_top\r
71 \r
72   # perform the rest of initialization in C\r
73   j _init\r
74 \r
75 #if 0\r
76 trap_entry:\r
77   addi sp, sp, -32*REGBYTES\r
78 \r
79   SREG x1, 0 * REGBYTES(sp)\r
80   SREG x2, 1 * REGBYTES(sp)\r
81   SREG x3, 2 * REGBYTES(sp)\r
82   SREG x4, 3 * REGBYTES(sp)\r
83   SREG x5, 4 * REGBYTES(sp)\r
84   SREG x6, 5 * REGBYTES(sp)\r
85   SREG x7, 6 * REGBYTES(sp)\r
86   SREG x8, 7 * REGBYTES(sp)\r
87   SREG x9, 8 * REGBYTES(sp)\r
88   SREG x10, 9 * REGBYTES(sp)\r
89   SREG x11, 10 * REGBYTES(sp)\r
90   SREG x12, 11 * REGBYTES(sp)\r
91   SREG x13, 12 * REGBYTES(sp)\r
92   SREG x14, 13 * REGBYTES(sp)\r
93   SREG x15, 14 * REGBYTES(sp)\r
94   SREG x16, 15 * REGBYTES(sp)\r
95   SREG x17, 16 * REGBYTES(sp)\r
96   SREG x18, 17 * REGBYTES(sp)\r
97   SREG x19, 18 * REGBYTES(sp)\r
98   SREG x20, 19 * REGBYTES(sp)\r
99   SREG x21, 20 * REGBYTES(sp)\r
100   SREG x22, 21 * REGBYTES(sp)\r
101   SREG x23, 22 * REGBYTES(sp)\r
102   SREG x24, 23 * REGBYTES(sp)\r
103   SREG x25, 24 * REGBYTES(sp)\r
104   SREG x26, 25 * REGBYTES(sp)\r
105   SREG x27, 26 * REGBYTES(sp)\r
106   SREG x28, 27 * REGBYTES(sp)\r
107   SREG x29, 28 * REGBYTES(sp)\r
108   SREG x30, 29 * REGBYTES(sp)\r
109   SREG x31, 30 * REGBYTES(sp)\r
110 \r
111 \r
112   csrr t0, mepc\r
113   SREG t0, 31 * REGBYTES(sp)\r
114 \r
115   csrr a0, mcause\r
116   csrr a1, mepc\r
117   mv a2, sp\r
118   jal handle_trap\r
119   csrw mepc, a0\r
120 \r
121   # Remain in M-mode after mret\r
122   li t0, MSTATUS_MPP\r
123   csrs mstatus, t0\r
124 \r
125   LREG x1, 0 * REGBYTES(sp)\r
126   LREG x2, 1 * REGBYTES(sp)\r
127   LREG x3, 2 * REGBYTES(sp)\r
128   LREG x4, 3 * REGBYTES(sp)\r
129   LREG x5, 4 * REGBYTES(sp)\r
130   LREG x6, 5 * REGBYTES(sp)\r
131   LREG x7, 6 * REGBYTES(sp)\r
132   LREG x8, 7 * REGBYTES(sp)\r
133   LREG x9, 8 * REGBYTES(sp)\r
134   LREG x10, 9 * REGBYTES(sp)\r
135   LREG x11, 10 * REGBYTES(sp)\r
136   LREG x12, 11 * REGBYTES(sp)\r
137   LREG x13, 12 * REGBYTES(sp)\r
138   LREG x14, 13 * REGBYTES(sp)\r
139   LREG x15, 14 * REGBYTES(sp)\r
140   LREG x16, 15 * REGBYTES(sp)\r
141   LREG x17, 16 * REGBYTES(sp)\r
142   LREG x18, 17 * REGBYTES(sp)\r
143   LREG x19, 18 * REGBYTES(sp)\r
144   LREG x20, 19 * REGBYTES(sp)\r
145   LREG x21, 20 * REGBYTES(sp)\r
146   LREG x22, 21 * REGBYTES(sp)\r
147   LREG x23, 22 * REGBYTES(sp)\r
148   LREG x24, 23 * REGBYTES(sp)\r
149   LREG x25, 24 * REGBYTES(sp)\r
150   LREG x26, 25 * REGBYTES(sp)\r
151   LREG x27, 26 * REGBYTES(sp)\r
152   LREG x28, 27 * REGBYTES(sp)\r
153   LREG x29, 28 * REGBYTES(sp)\r
154   LREG x30, 29 * REGBYTES(sp)\r
155   LREG x31, 30 * REGBYTES(sp)\r
156 \r
157   addi sp, sp, 32*REGBYTES\r
158   mret\r
159 #endif /* 0 */\r
160 \r
161 #endif\r
162 \r