The back-to-bootrom implementation for Rockchip has always relied on the stack-pointer being valid on entry, so there was little reason to have this as an assembly implementation. This provides a new C-only implementation of save_boot_params and back_to_bootrom (relying on setjmp/longjmp) and removes the older assembly-only implementation. Signed-off-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Tested-by: Andy Yan <andy.yan@rock-chips.com>master
parent
b4806d6f1f
commit
ecfd71891a
@ -1,69 +0,0 @@ |
||||
/* |
||||
* (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
|
||||
|
||||
/* |
||||
* void save_boot_params |
||||
* |
||||
* Save sp, lr, r1~r12 |
||||
*/ |
||||
ENTRY(save_boot_params) |
||||
push {r1-r12, lr} |
||||
ldr r0, =SAVE_SP_ADDR |
||||
str sp, [r0] |
||||
b save_boot_params_ret @ back to my caller
|
||||
ENDPROC(save_boot_params) |
||||
|
||||
|
||||
.globl _back_to_bootrom_s
|
||||
ENTRY(_back_to_bootrom_s) |
||||
ldr r0, =SAVE_SP_ADDR |
||||
ldr sp, [r0] |
||||
mov r0, #0 |
||||
pop {r1-r12, pc} |
||||
ENDPROC(_back_to_bootrom_s) |
||||
#endif |
Loading…
Reference in new issue