9os

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit eea0b8b736c37289d7f6ef29a6c84902fa6920b8
parent 2c19b32e891a768aabdd75a48add114c93777afb
Author: Dimitris Papastamos <dimitris.papastamos@arm.com>
Date:   Fri, 26 Oct 2018 14:47:31 +0100

[arm64] Rework fake trapframe handling

Change-Id: I88b4430b0b1c137423bbafaeec5904b3b4854cdc
Signed-off-by: Dimitris Papastamos <dimitris.papastamos@arm.com>

Diffstat:
March/arm64/arch.s | 9+--------
March/arm64/rom-none.c | 23++++++-----------------
Minclude/rcode.h | 1-
3 files changed, 7 insertions(+), 26 deletions(-)

diff --git a/arch/arm64/arch.s b/arch/arm64/arch.s @@ -5,7 +5,7 @@ .globl rd_actlr_r,wr_actlr_r .globl rd_id_aa64rmfr0_r,wr_id_aa64rmfr0_r .globl rd_rcr_r,wr_rcr_r,rd_rdscr_r,wr_rdscr_r - .globl rd_sctlr_r,wr_sctlr_r,rd_rvbar_el3,wr_sp_r + .globl rd_sctlr_r,wr_sctlr_r,rd_rvbar_el3 .globl vectbl,swtch,isb,inm8,inm16,inm32 .globl outm8,outm16,outm32 @@ -61,13 +61,6 @@ rd_rvbar_el3: mrs x0,rvbar_el3 ret -wr_sp_r: - mrs x1,spsel - msr spsel,#1 - mov sp,x0 - msr spsel,x1 - ret - inm8: ldrb w0,[x0] ret diff --git a/arch/arm64/rom-none.c b/arch/arm64/rom-none.c @@ -3,28 +3,17 @@ #include <rcode.h> #include <uart.h> -/* - * We allocate space for 3 nested exceptions, covering - * the case of having an abort while dealing a panic - * from an abort generated by the rmc. You are not - * expected to understand this. - */ -#define NR_NESTED 3 - void main(void *text, void *ram, size_t ramsiz) { - struct trapframe *fp; + struct trapframe frame; char *bp = ram; size_t bsssiz; bsssiz = (sizeof(struct bssmap) + 15) & ~15; - fp = (struct trapframe *) (bp + bsssiz); - fp += NR_NESTED - 1; - wr_sp_r(fp); memset(ram, 0, bsssiz); - memset(fp, 0, sizeof(*fp)); + memset(&frame, 0, sizeof(frame)); bss->text = text; bss->backtrace = 1; @@ -34,12 +23,12 @@ main(void *text, void *ram, size_t ramsiz) enaint(); isb(); - fp->sp = bp + (ramsiz - sizeof(*fp)); - fp->elr = rd_rvbar_el3(); - fp->spsr = 0xf << 6 | 0xd; + frame.sp = bp + (ramsiz - sizeof(frame)); + frame.elr = rd_rvbar_el3(); + frame.spsr = 0xf << 6 | 0xd; dbg("romfw: text = %p, ram = %p, ramsiz = 0x%llx\n", text, ram, (unsigned long long)ramsiz); - swtch(fp); + swtch(&frame); } diff --git a/include/rcode.h b/include/rcode.h @@ -166,7 +166,6 @@ extern void wr_rdscr_r(unsigned long long v); extern unsigned long long rd_sctlr_r(void); extern void wr_sctlr_r(unsigned long long v); extern void *rd_rvbar_el3(void); -extern void wr_sp_r(void *); extern void isb(void); extern uint8_t inm8(void *addr); extern uint16_t inm16(void *addr);