1/*
2 * Copyright (c) 2021-2023 HPMicro
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 *
6 */
7 #include <rtconfig.h>
8 #include "hpm_csr_regs.h"
9    .section .start, "ax"
10
11    .global _start
12    .type _start,@function
13
14_start:
15    /* Initialize global pointer */
16    .option push
17    .option norelax
18    la gp, __global_pointer$
19    la tp, __thread_pointer
20    .option pop
21
22#ifdef __riscv_flen
23    /* Enable FPU */
24    li t0, CSR_MSTATUS_FS_MASK
25    csrrs t0, mstatus, t0
26
27    /* Initialize FCSR */
28    fscsr zero
29#endif
30
31#ifdef INIT_EXT_RAM_FOR_DATA
32    la t0, _stack_in_dlm
33    mv sp, t0
34    call _init_ext_ram
35#endif
36
37    /* Initialize stack pointer */
38    la t0, _stack
39    mv sp, t0
40
41#ifdef __nds_execit
42    /* Initialize EXEC.IT table */
43    la t0, _ITB_BASE_
44    csrw uitb, t0
45#endif
46
47#ifdef __riscv_flen
48    /* Enable FPU */
49    li t0, CSR_MSTATUS_FS_MASK
50    csrrs t0, mstatus, t0
51
52    /* Initialize FCSR */
53    fscsr zero
54#endif
55    /* Disable Vector mode */
56    csrci CSR_MMISC_CTL, 2
57    /* Initialize trap_entry base */
58    la t0, SW_handler
59    csrw mtvec, t0
60
61
62    /* System reset handler */
63    call reset_handler
64
65    /* Infinite loop, if returned accidently */
661:    j 1b
67
68    .weak nmi_handler
69nmi_handler:
701:    j 1b
71
72    .global default_irq_handler
73    .weak default_irq_handler
74    .align 2
75default_irq_handler:
761:    j 1b
77
78    .macro IRQ_HANDLER irq
79    .weak default_isr_\irq
80    .set default_isr_\irq, default_irq_handler
81    .long default_isr_\irq
82    .endm
83
84#include "vectors.S"
85