mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 23:24:38 +00:00
rockchip: back-to-bootrom: add 'back-to-bootrom' support for AArch64
The back-to-bootrom support for Rockchip is equivalent to an (assembly) implementation of setjmp/longjmp (i.e. it saves the stack-pointer, link-register and callee-saved registers). Up until now, this had only been implemented for AArch32 (i.e. ARMv7 or older), which puts the new ARMv8 devices (which boot in AArch64 mode) at a slight disadvantage. To allow use of the 'back-to-bootrom' feature on new devices (e.g. the RK3368), this commit adds an implementation for AArch64. Signed-off-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Reviewed-by: Simon Glass <sjg@chromium.org> Reviewed-by: Tom Rini <trini@konsulko.com>
This commit is contained in:
parent
a954fa3203
commit
36979c7e56
1 changed files with 37 additions and 0 deletions
|
@ -1,11 +1,47 @@
|
|||
/*
|
||||
* (C) Copyright 2016 Rockchip Electronics Co., Ltd
|
||||
* (C) Copyright 2017 Theobroma Systems Design und Consulting GmbH
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#include <linux/linkage.h>
|
||||
|
||||
#if defined(CONFIG_ARM64)
|
||||
.globl SAVE_SP_ADDR
|
||||
SAVE_SP_ADDR:
|
||||
.quad 0
|
||||
|
||||
ENTRY(save_boot_params)
|
||||
sub sp, sp, #0x60
|
||||
stp x29, x30, [sp, #0x50]
|
||||
stp x27, x28, [sp, #0x40]
|
||||
stp x25, x26, [sp, #0x30]
|
||||
stp x23, x24, [sp, #0x20]
|
||||
stp x21, x22, [sp, #0x10]
|
||||
stp x19, x20, [sp, #0]
|
||||
ldr x8, =SAVE_SP_ADDR
|
||||
mov x9, sp
|
||||
str x9, [x8]
|
||||
b save_boot_params_ret /* back to my caller */
|
||||
ENDPROC(save_boot_params)
|
||||
|
||||
.globl _back_to_bootrom_s
|
||||
ENTRY(_back_to_bootrom_s)
|
||||
ldr x0, =SAVE_SP_ADDR
|
||||
ldr x0, [x0]
|
||||
mov sp, x0
|
||||
ldp x29, x30, [sp, #0x50]
|
||||
ldp x27, x28, [sp, #0x40]
|
||||
ldp x25, x26, [sp, #0x30]
|
||||
ldp x23, x24, [sp, #0x20]
|
||||
ldp x21, x22, [sp, #0x10]
|
||||
ldp x19, x20, [sp]
|
||||
add sp, sp, #0x60
|
||||
mov x0, xzr
|
||||
ret
|
||||
ENDPROC(_back_to_bootrom_s)
|
||||
#else
|
||||
.globl SAVE_SP_ADDR
|
||||
SAVE_SP_ADDR:
|
||||
.word 0
|
||||
|
@ -30,3 +66,4 @@ ENTRY(_back_to_bootrom_s)
|
|||
mov r0, #0
|
||||
pop {r1-r12, pc}
|
||||
ENDPROC(_back_to_bootrom_s)
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue