You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
760 B
49 lines
760 B
/*
|
|
* Copyright (c) 2015-2019, Renesas Electronics Corporation. All rights reserved.
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
|
|
#include <arch.h>
|
|
#include <asm_macros.S>
|
|
|
|
.global rcar_pwrc_switch_stack
|
|
|
|
/*
|
|
* x0 : jump address,
|
|
* x1 : stack address,
|
|
* x2 : arg,
|
|
* x3 : stack address (temporary)
|
|
*/
|
|
func rcar_pwrc_switch_stack
|
|
|
|
/* lr to stack */
|
|
stp x29, x30, [sp,#-16]
|
|
|
|
/* change stack pointer */
|
|
mov x3, sp
|
|
mov sp, x1
|
|
|
|
/* save stack pointer */
|
|
sub sp, sp, #16
|
|
stp x0, x3, [sp]
|
|
|
|
/* data synchronization barrier */
|
|
dsb sy
|
|
|
|
/* jump to code */
|
|
mov x1, x0
|
|
mov x0, x2
|
|
blr x1
|
|
|
|
/* load stack pointer */
|
|
ldp x0, x2, [sp,#0]
|
|
|
|
/* change stack pointer */
|
|
mov sp, x2
|
|
|
|
/* return */
|
|
ldp x29, x30, [sp,#-16]
|
|
ret
|
|
endfunc rcar_pwrc_switch_stack
|