diff options
author | Chen-Yu Tsai <wens@csie.org> | 2016-06-19 12:38:44 +0800 |
---|---|---|
committer | Hans de Goede <hdegoede@redhat.com> | 2016-07-15 15:54:58 +0200 |
commit | 6e6622de166f53597172687b7269b07cf48844df (patch) | |
tree | 8a89c350dff56f3ee34cc7fe721a7864179c8c86 /arch/arm/mach-tegra/psci.S | |
parent | 45c334e6b22bae75ada8662b88000c4347b1361b (diff) |
ARM: PSCI: Switch to per-CPU target PC storage in secure data section
Now that we have a secure data section and space to store per-CPU target
PC address, switch to it instead of storing the target PC on the stack.
Also save clobbered r4-r7 registers on the stack and restore them on
return in psci_cpu_on for Tegra, i.MX7, and LS102xA platforms.
Signed-off-by: Chen-Yu Tsai <wens@csie.org>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Diffstat (limited to 'arch/arm/mach-tegra/psci.S')
-rw-r--r-- | arch/arm/mach-tegra/psci.S | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/arch/arm/mach-tegra/psci.S b/arch/arm/mach-tegra/psci.S index 85d5b6b59d..645d08fa0b 100644 --- a/arch/arm/mach-tegra/psci.S +++ b/arch/arm/mach-tegra/psci.S @@ -85,12 +85,13 @@ _loop: wfi ENDPROC(psci_cpu_off) ENTRY(psci_cpu_on) - push {lr} + push {r4, r5, r6, lr} + mov r4, r1 mov r0, r1 - bl psci_get_cpu_stack_top @ get stack top of target CPU - str r2, [r0] @ store target PC at stack top - dsb + mov r1, r2 + bl psci_save_target_pc @ store target PC + mov r1, r4 ldr r6, =TEGRA_RESET_EXCEPTION_VECTOR ldr r5, =psci_cpu_entry @@ -103,7 +104,7 @@ ENTRY(psci_cpu_on) str r5, [r6, r2] mov r0, #ARM_PSCI_RET_SUCCESS @ Return PSCI_RET_SUCCESS - pop {pc} + pop {r4, r5, r6, pc} ENDPROC(psci_cpu_on) .popsection |