/* * Early initialization code for RISC-V * * Copyright 2013 Google Inc. * Copyright 2016 Jonathan Neuschäfer * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; version 2 of * the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the * GNU General Public License for more details. */ #include .section ".text._start", "ax", %progbits .globl _start _start: #define STACK_START 0x80800000 /* 2GiB + 8MiB */ #define STACK_SIZE 0x0000fff0 li sp, STACK_START + STACK_SIZE # make room for HLS and initialize it addi sp, sp, -64 // MENTRY_FRAME_SIZE csrr a0, mhartid call hls_init # poison the stack li t1, STACK_START li t0, 0xdeadbeef sd t0, 0(t1) la t0, trap_entry csrw mtvec, t0 # clear any pending interrupts csrwi mip, 0 # set up the mstatus register for VM call mstatus_init tail main