@@ -37,6 +37,7 @@ psci_cpu_on:
mov r0, r1
bl psci_get_cpu_stack_top
+ sub r0, r0, #PSCI_TARGET_PC_OFFSET
str r2, [r0]
dsb
@@ -31,6 +31,7 @@ psci_cpu_on:
mov r0, r1
bl psci_get_cpu_stack_top
+ sub r0, r0, #PSCI_TARGET_PC_OFFSET
str r2, [r0]
dsb
@@ -294,7 +294,8 @@ ENTRY(psci_cpu_entry)
bl psci_get_cpu_id @ CPU ID => r0
bl psci_get_cpu_stack_top @ stack top => r0
- ldr r0, [r0] @ target PC at stack top
+ sub r0, r0, #PSCI_TARGET_PC_OFFSET
+ ldr r0, [r0] @ get target PC
b _do_nonsec_entry
ENDPROC(psci_cpu_entry)
@@ -136,7 +136,8 @@ psci_cpu_on:
mov r0, r1
bl psci_get_cpu_stack_top @ get stack top of target CPU
- str r2, [r0] @ store target PC at stack top
+ sub r0, r0, #PSCI_TARGET_PC_OFFSET
+ str r2, [r0] @ store target PC
dsb
movw r0, #(SUN6I_CPUCFG_BASE & 0xffff)
@@ -125,7 +125,8 @@ psci_cpu_on:
mov r0, r1
bl psci_get_cpu_stack_top @ get stack top of target CPU
- str r2, [r0] @ store target PC at stack top
+ sub r0, r0, #PSCI_TARGET_PC_OFFSET
+ str r2, [r0] @ store target PC
dsb
movw r0, #(SUN7I_CPUCFG_BASE & 0xffff)
@@ -65,6 +65,7 @@
/* size of percpu stack, 1kB */
#define PSCI_PERCPU_STACK_SIZE 0x400
+#define PSCI_TARGET_PC_OFFSET (PSCI_PERCPU_STACK_SIZE - 4)
#ifndef __ASSEMBLY__
int psci_update_dt(void *fdt);
@@ -92,7 +92,8 @@ ENTRY(psci_cpu_on)
mov r0, r1
bl psci_get_cpu_stack_top @ get stack top of target CPU
- str r2, [r0] @ store target PC at stack top
+ sub r0, r0, #PSCI_TARGET_PC_OFFSET
+ str r2, [r0] @ store target PC
dsb
ldr r6, =TEGRA_RESET_EXCEPTION_VECTOR