riscv: add entry assembly file for RAMSTAGE
RAMSTAGE will revoke CAR/scratchpad, so stack and exception handling needs to be moved to ddr memory. So add a assembly file to do this. Change-Id: I58aa6ff911f385180bad6e026d3c3eace846e37d Signed-off-by: Xiang Wang <wxjstz@126.com> Reviewed-on: https://review.coreboot.org/28384 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Aaron Durbin <adurbin@chromium.org>
This commit is contained in:
parent
384e9aed8c
commit
21ed107958
|
@ -97,6 +97,10 @@ endif #CONFIG_ARCH_ROMSTAGE_RISCV
|
||||||
ifeq ($(CONFIG_ARCH_RAMSTAGE_RISCV),y)
|
ifeq ($(CONFIG_ARCH_RAMSTAGE_RISCV),y)
|
||||||
|
|
||||||
ramstage-y =
|
ramstage-y =
|
||||||
|
ramstage-y += ramstage.S
|
||||||
|
ramstage-y += mcall.c
|
||||||
|
ramstage-y += trap_util.S
|
||||||
|
ramstage-y += trap_handler.c
|
||||||
ramstage-y += virtual_memory.c
|
ramstage-y += virtual_memory.c
|
||||||
ramstage-y += stages.c
|
ramstage-y += stages.c
|
||||||
ramstage-y += misc.c
|
ramstage-y += misc.c
|
||||||
|
|
|
@ -13,6 +13,8 @@
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <rules.h>
|
||||||
|
|
||||||
/* We use ELF as output format. So that we can debug the code in some form. */
|
/* We use ELF as output format. So that we can debug the code in some form. */
|
||||||
OUTPUT_ARCH(riscv)
|
OUTPUT_ARCH(riscv)
|
||||||
|
|
||||||
|
@ -21,7 +23,7 @@ PHDRS
|
||||||
to_load PT_LOAD;
|
to_load PT_LOAD;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __BOOTBLOCK__
|
#if ENV_BOOTBLOCK || ENV_RAMSTAGE
|
||||||
ENTRY(_start)
|
ENTRY(_start)
|
||||||
#else
|
#else
|
||||||
ENTRY(stage_entry)
|
ENTRY(stage_entry)
|
||||||
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
/*
|
||||||
|
* This file is part of the coreboot project.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2018 HardenedLinux
|
||||||
|
*
|
||||||
|
* 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 <arch/encoding.h>
|
||||||
|
#include <mcall.h>
|
||||||
|
|
||||||
|
.section ".text._start", "ax", %progbits
|
||||||
|
.globl _start
|
||||||
|
_start:
|
||||||
|
# initialize stack point for each hart
|
||||||
|
# and the stack must be page-aligned.
|
||||||
|
# 0xDEADBEEF used to check stack overflow
|
||||||
|
csrr a0, mhartid
|
||||||
|
la t0, _stack
|
||||||
|
slli t1, a0, RISCV_PGSHIFT
|
||||||
|
add t0, t0, t1
|
||||||
|
li t1, 0xDEADBEEF
|
||||||
|
sd t1, 0(t0)
|
||||||
|
li t1, RISCV_PGSIZE - HLS_SIZE
|
||||||
|
add sp, t0, t1
|
||||||
|
|
||||||
|
# initialize hart-local storage
|
||||||
|
csrr a0, mhartid
|
||||||
|
call hls_init
|
||||||
|
|
||||||
|
# initialize entry of interrupt/exception
|
||||||
|
la t0, trap_entry
|
||||||
|
csrw mtvec, t0
|
||||||
|
|
||||||
|
# clear any pending interrupts
|
||||||
|
csrwi mip, 0
|
||||||
|
|
||||||
|
call exit_car
|
||||||
|
# set up the mstatus register for VM
|
||||||
|
call mstatus_init
|
||||||
|
tail main
|
||||||
|
|
||||||
|
# These codes need to be implemented on a specific SoC
|
||||||
|
.weak exit_car
|
||||||
|
exit_car:
|
||||||
|
ret
|
Loading…
Reference in New Issue