1/*
2 * Copyright (C) 2017-2019 Alibaba Group Holding Limited
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 *
6 * Change Logs:
7 * Date           Author       Notes
8 * 2020-08-20     zx.chen      startup file. Should use with
9 *          		       GCC for T-HEAD Embedded Processors
10 */
11
12#include <csi_config.h>
13
14
15.section .vectors, "aw", @progbits
16    .align  6
17    .globl  __Vectors
18    .type   __Vectors, @object
19__Vectors:
20    .long   Default_Handler
21    .long   Default_Handler
22    .long   Default_Handler
23    .long   PendSV_Handler
24    .long   Default_Handler
25    .long   Default_Handler
26    .long   Default_Handler
27    .long   SysTick_Handler
28    .long   Default_Handler
29    .long   Default_Handler
30    .long   Default_Handler
31    .long   Default_Handler
32    .long   Default_Handler
33    .long   Default_Handler
34    .long   Default_Handler
35    .long   Default_Handler
36
37    /* External interrupts */
38    .long   USART_IRQHandler
39    .long   Default_Handler
40    .long   TIM0_IRQHandler
41    .long   Default_Handler
42    .long   Default_Handler
43    .long   Default_Handler
44    .long   Default_Handler
45    .long   Default_Handler
46    .long   Default_Handler
47    .long   Default_Handler
48    .long   Default_Handler
49    .long   Default_Handler
50    .long   Default_Handler
51    .long   Default_Handler
52    .long   Default_Handler
53    .long   Default_Handler
54    .long   Default_Handler
55    .long   Default_Handler
56    .long   Default_Handler
57    .long   Default_Handler
58    .long   Default_Handler
59    .long   Default_Handler
60    .long   Default_Handler
61    .long   Default_Handler
62    .long   Default_Handler
63    .long   Default_Handler
64    .long   Default_Handler
65    .long   Default_Handler
66    .long   Default_Handler
67    .long   Default_Handler
68    .long   Default_Handler
69    .long   Default_Handler
70    .size __Vectors,.-__Vectors
71
72    .text
73    .align  2
74_start:
75    .text
76    .align  2
77    .globl  Reset_Handler
78    .type   Reset_Handler, %function
79Reset_Handler:
80.option push
81.option norelax
82    la      gp, __global_pointer$
83.option pop
84    la      a0, Default_Handler
85    ori     a0, a0, 3
86    csrw    mtvec, a0
87    la      a0, __Vectors
88    csrw    mtvt, a0
89    la      sp, __StackTop
90    csrw    mscratch, sp
91
92    /* Load data section */
93    la      a0, __erodata
94    la      a1, __data_start__
95    la      a2, __data_end__
96    bgeu    a1, a2, 2f
971:
98    lw      t0, (a0)
99    sw      t0, (a1)
100    addi    a0, a0, 4
101    addi    a1, a1, 4
102    bltu    a1, a2, 1b
1032:
104
105    /* Clear bss section */
106    la      a0, __bss_start__
107    la      a1, __bss_end__
108    bgeu    a0, a1, 2f
1091:
110    sw      zero, (a0)
111    addi    a0, a0, 4
112    bltu    a0, a1, 1b
1132:
114
115#ifndef __NO_SYSTEM_INIT
116    jal     SystemInit
117#endif
118
119    jal     entry
120
121    .size   Reset_Handler, . - Reset_Handler
122
123__exit:
124    j      __exit
125
126.section .bss
127
128    .align  3
129    .global g_base_irqstack
130    .global g_top_irqstack
131g_base_irqstack:
132    .space CONFIG_ARCH_INTERRUPTSTACK
133g_top_irqstack:
134