The entry address for a VM is an IPA.
Change-Id: I9b447796789082c031c8a342a283d3050cf15ccb
diff --git a/src/arch/aarch64/handler.c b/src/arch/aarch64/handler.c
index f5bdd21..bcc67e6 100644
--- a/src/arch/aarch64/handler.c
+++ b/src/arch/aarch64/handler.c
@@ -124,7 +124,7 @@
break;
}
- if (cpu_on(c, arg1, arg2)) {
+ if (cpu_on(c, ipa_init(arg1), arg2)) {
*ret = PSCI_RETURN_ALREADY_ON;
break;
}
diff --git a/src/arch/aarch64/inc/arch_cpu.h b/src/arch/aarch64/inc/arch_cpu.h
index 933de8e..681f981 100644
--- a/src/arch/aarch64/inc/arch_cpu.h
+++ b/src/arch/aarch64/inc/arch_cpu.h
@@ -6,6 +6,8 @@
#include <stddef.h>
#include <stdint.h>
+#include "addr.h"
+
struct arch_regs {
/* General purpose registers. */
uint64_t r[31];
@@ -91,13 +93,13 @@
__asm__ volatile("msr cnthctl_el2, %0" ::"r"(cnthctl));
}
-static inline void arch_regs_init(struct arch_regs *r, size_t pc, size_t arg,
+static inline void arch_regs_init(struct arch_regs *r, ipaddr_t pc, size_t arg,
bool is_primary)
{
/* TODO: Use constant here. */
r->spsr = 5 | /* M bits, set to EL1h. */
(0xf << 6); /* DAIF bits set; disable interrupts. */
- r->pc = pc;
+ r->pc = ipa_addr(pc);
r->r[0] = arg;
}