9os

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

commit 5715c330da8a5f1d7515c25f5a80304f44292893
parent cff84b4e06fca8136953f5a96ab9ec7fc3a057e7
Author: Roberto Vargas <roberto.vargas@arm.com>
Date:   Fri, 16 Nov 2018 16:21:02 +0000

[rmode/rom.c] Factorize main()

Change-Id: I61a921b0e31927c352f9600e2efec9cc4e1f8231

Diffstat:
March/rmode/rom.c | 39++++++++++++++++++++++-----------------
1 file changed, 22 insertions(+), 17 deletions(-)

diff --git a/arch/rmode/rom.c b/arch/rmode/rom.c @@ -6,34 +6,39 @@ #include "sysreg.h" #include "arch.h" -void -main(void *text, void *ram, size_t ramsiz) +static void +ibss(void *text) { - struct trapframe frame; - char *bp = ram; - size_t bsssiz; - - bsssiz = (sizeof(struct bssmap) + 15) & ~15; - - memset(ram, 0, bsssiz); - memset(&frame, 0, sizeof(frame)); - bss->text = text; bss->backtrace = 1; bss->dumpstack = 1; bss->uartbase = (void *)UARTBASE; +} + +static void +imach(struct trapframe *fp, void *sp) +{ + memset(fp, 0, sizeof(*fp)); + fp->sp = sp; + fp->elr = (void *) rsysreg(RVBAR_EL3); + fp->spsr = 0xf << 6 | 0xd; + + invicache(); + invdcache(); +} - frame.sp = bp + ramsiz; - frame.elr = (void *) rsysreg(RVBAR_EL3); - frame.spsr = 0xf << 6 | 0xd; +void +main(void *text, void *ram, size_t ramsiz) +{ + struct trapframe frame; + char *sp = (char *) ram + ramsiz; + ibss(text); + imach(&frame, sp); uartinit(UARTCLK, UARTBAUDRATE); enaint(); barrier(ISB); - invicache(); - invdcache(); - dbg("romfw: text = %p, ram = %p, ramsiz = 0x%llx\n", text, ram, (unsigned long long)ramsiz);