1d6aed566Sopenharmony_ci/*
2d6aed566Sopenharmony_ci * Copyright (c) 2020-2021 Huawei Device Co., Ltd.
3d6aed566Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4d6aed566Sopenharmony_ci * you may not use this file except in compliance with the License.
5d6aed566Sopenharmony_ci * You may obtain a copy of the License at
6d6aed566Sopenharmony_ci *
7d6aed566Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8d6aed566Sopenharmony_ci *
9d6aed566Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10d6aed566Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11d6aed566Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12d6aed566Sopenharmony_ci * See the License for the specific language governing permissions and
13d6aed566Sopenharmony_ci * limitations under the License.
14d6aed566Sopenharmony_ci */
15d6aed566Sopenharmony_ci
16d6aed566Sopenharmony_ci#include "soc.h"
17d6aed566Sopenharmony_ci
18d6aed566Sopenharmony_ci.macro PUSH_CALLER_REG
19d6aed566Sopenharmony_ci    addi  sp, sp, -(INT_SIZE_ON_STACK)
20d6aed566Sopenharmony_ci    SREG  t6, 16 * REGBYTES(sp)
21d6aed566Sopenharmony_ci    SREG  t5, 17 * REGBYTES(sp)
22d6aed566Sopenharmony_ci    SREG  t4, 18 * REGBYTES(sp)
23d6aed566Sopenharmony_ci    SREG  t3, 19 * REGBYTES(sp)
24d6aed566Sopenharmony_ci    SREG  a7, 20 * REGBYTES(sp)
25d6aed566Sopenharmony_ci    SREG  a6, 21 * REGBYTES(sp)
26d6aed566Sopenharmony_ci    SREG  a5, 22 * REGBYTES(sp)
27d6aed566Sopenharmony_ci    SREG  a4, 23 * REGBYTES(sp)
28d6aed566Sopenharmony_ci    SREG  a3, 24 * REGBYTES(sp)
29d6aed566Sopenharmony_ci    SREG  a2, 25 * REGBYTES(sp)
30d6aed566Sopenharmony_ci    SREG  a1, 26 * REGBYTES(sp)
31d6aed566Sopenharmony_ci    SREG  a0, 27 * REGBYTES(sp)
32d6aed566Sopenharmony_ci    SREG  t2, 28 * REGBYTES(sp)
33d6aed566Sopenharmony_ci    SREG  t1, 29 * REGBYTES(sp)
34d6aed566Sopenharmony_ci    SREG  t0, 30 * REGBYTES(sp)
35d6aed566Sopenharmony_ci    SREG  ra, 31 * REGBYTES(sp)
36d6aed566Sopenharmony_ci.endm
37d6aed566Sopenharmony_ci
38d6aed566Sopenharmony_ci.extern memset
39d6aed566Sopenharmony_ci.global _start
40d6aed566Sopenharmony_ci.section .start.text
41d6aed566Sopenharmony_ci.align 4
42d6aed566Sopenharmony_ci_start:
43d6aed566Sopenharmony_ci    li    t0, RISCV_MSTATUS_MPP
44d6aed566Sopenharmony_ci    csrw  mstatus, t0
45d6aed566Sopenharmony_ci    csrw  mie, zero
46d6aed566Sopenharmony_ci    la    t0, HalTrapVector
47d6aed566Sopenharmony_ci    csrw  mtvec, t0      # direct mode
48d6aed566Sopenharmony_ci
49d6aed566Sopenharmony_ci    .option push
50d6aed566Sopenharmony_ci    .option norelax
51d6aed566Sopenharmony_ci    la    gp, __global_pointer$
52d6aed566Sopenharmony_ci    .option pop
53d6aed566Sopenharmony_ci
54d6aed566Sopenharmony_ci    la    t0, __bss_start
55d6aed566Sopenharmony_ci    la    t1, __bss_end
56d6aed566Sopenharmony_ci2:
57d6aed566Sopenharmony_ci    sw    zero, 0x0(t0)
58d6aed566Sopenharmony_ci    addi  t0, t0, 0x4
59d6aed566Sopenharmony_ci    bgtu  t1, t0, 2b
60d6aed566Sopenharmony_ci
61d6aed566Sopenharmony_ci    la    sp, __start_and_irq_stack_top
62d6aed566Sopenharmony_ci
63d6aed566Sopenharmony_ci    tail  main
64