2018-04-16 19:03:33 +02:00
|
|
|
/*
|
|
|
|
* Copyright (C) 2017 JP Bonn, Ken Rabold
|
|
|
|
*
|
|
|
|
* This file is subject to the terms and conditions of the GNU Lesser
|
|
|
|
* General Public License v2.1. See the file LICENSE in the top level
|
|
|
|
* directory for more details.
|
|
|
|
*/
|
2021-02-17 11:36:19 +01:00
|
|
|
#include "vendor/riscv_csr.h"
|
|
|
|
|
|
|
|
.section .init
|
|
|
|
|
2018-04-16 19:03:33 +02:00
|
|
|
.globl _start
|
|
|
|
.type _start,@function
|
|
|
|
|
|
|
|
_start:
|
|
|
|
.cfi_startproc
|
|
|
|
.cfi_undefined ra
|
|
|
|
.option push
|
|
|
|
.option norelax
|
2021-02-17 11:36:19 +01:00
|
|
|
csrc CSR_MSTATUS, MSTATUS_MIE
|
2021-09-22 10:37:23 +02:00
|
|
|
lui a0, %hi(_start_real)
|
2022-12-08 13:20:14 +01:00
|
|
|
jalr x0, a0, %lo(_start_real)
|
2021-02-17 11:36:19 +01:00
|
|
|
|
|
|
|
_start_real:
|
2018-04-16 19:03:33 +02:00
|
|
|
la gp, __global_pointer$
|
|
|
|
.option pop
|
|
|
|
la sp, _sp
|
|
|
|
|
2022-02-16 10:59:14 +01:00
|
|
|
#ifdef MODULE_PUF_SRAM
|
|
|
|
/* PUF */
|
|
|
|
call riscv_puf_sram_init
|
|
|
|
#endif
|
2018-04-16 19:03:33 +02:00
|
|
|
|
|
|
|
/* Load data section */
|
|
|
|
la a0, _data_lma
|
|
|
|
la a1, _data
|
|
|
|
la a2, _edata
|
|
|
|
bgeu a1, a2, 2f
|
|
|
|
1:
|
|
|
|
lw t0, (a0)
|
|
|
|
sw t0, (a1)
|
|
|
|
addi a0, a0, 4
|
|
|
|
addi a1, a1, 4
|
|
|
|
bltu a1, a2, 1b
|
|
|
|
2:
|
|
|
|
|
2022-02-16 10:52:09 +01:00
|
|
|
|
2018-04-16 19:03:33 +02:00
|
|
|
/* Clear bss section */
|
|
|
|
la a0, __bss_start
|
2022-02-16 10:52:09 +01:00
|
|
|
la a1, __bss_end
|
2018-04-16 19:03:33 +02:00
|
|
|
bgeu a0, a1, 2f
|
|
|
|
1:
|
|
|
|
sw zero, (a0)
|
|
|
|
addi a0, a0, 4
|
|
|
|
bltu a0, a1, 1b
|
|
|
|
2:
|
|
|
|
|
|
|
|
/* Call global constructors */
|
|
|
|
call __libc_init_array
|
|
|
|
|
|
|
|
|
2021-09-07 21:01:51 +02:00
|
|
|
/* Initialize CPU, board and start kernel */
|
|
|
|
call cpu_init
|
2018-04-16 19:03:33 +02:00
|
|
|
call board_init
|
|
|
|
call kernel_init
|
|
|
|
|
|
|
|
/* Loop forever (should never get here) */
|
|
|
|
1:
|
|
|
|
j 1b
|
|
|
|
|
|
|
|
.cfi_endproc
|