/* * Copyright (c) 2015-2019, Renesas Electronics Corporation. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ #include #include .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