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:
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);