RISCV: modify arch_prog_run to handle payloads correctly.
Unlike the other stages, the payload requires virtual memory to be set up and also a privelege level change. Change-Id: Ibbe2a55f7719d917f121a53a17c6d90e6b2ab3d1 Signed-off-by: Ronald G. Minnich <rminnich@gmail.com> Reviewed-on: http://review.coreboot.org/11699 Reviewed-by: Aaron Durbin <adurbin@chromium.org> Tested-by: build bot (Jenkins)
This commit is contained in:
parent
d972f78e75
commit
f47f5fb4f1
|
@ -18,11 +18,19 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <program_loading.h>
|
#include <program_loading.h>
|
||||||
|
#include <vm.h>
|
||||||
|
#include <arch/encoding.h>
|
||||||
|
#include <rules.h>
|
||||||
|
|
||||||
void arch_prog_run(struct prog *prog)
|
void arch_prog_run(struct prog *prog)
|
||||||
{
|
{
|
||||||
void (*doit)(void *);
|
void (*doit)(void *) = prog_entry(prog);
|
||||||
|
|
||||||
doit = prog_entry(prog);
|
if (ENV_RAMSTAGE && prog_type(prog) == ASSET_PAYLOAD) {
|
||||||
doit(prog_entry_arg(prog));
|
initVirtualMemory();
|
||||||
|
write_csr(mepc, doit);
|
||||||
|
asm volatile("eret");
|
||||||
|
} else {
|
||||||
|
doit(prog_entry_arg(prog));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue