1*c40739a6SBiju Das/* 2*c40739a6SBiju Das * Copyright (c) 2015-2019, Renesas Electronics Corporation. All rights reserved. 3*c40739a6SBiju Das * 4*c40739a6SBiju Das * SPDX-License-Identifier: BSD-3-Clause 5*c40739a6SBiju Das */ 6*c40739a6SBiju Das 7*c40739a6SBiju Das#include <arch.h> 8*c40739a6SBiju Das#include <asm_macros.S> 9*c40739a6SBiju Das 10*c40739a6SBiju Das.global rcar_pwrc_switch_stack 11*c40739a6SBiju Das 12*c40739a6SBiju Das/* 13*c40739a6SBiju Das * x0 : jump address, 14*c40739a6SBiju Das * x1 : stack address, 15*c40739a6SBiju Das * x2 : arg, 16*c40739a6SBiju Das * x3 : stack address (temporary) 17*c40739a6SBiju Das */ 18*c40739a6SBiju Dasfunc rcar_pwrc_switch_stack 19*c40739a6SBiju Das 20*c40739a6SBiju Das /* lr to stack */ 21*c40739a6SBiju Das stp x29, x30, [sp,#-16] 22*c40739a6SBiju Das 23*c40739a6SBiju Das /* change stack pointer */ 24*c40739a6SBiju Das mov x3, sp 25*c40739a6SBiju Das mov sp, x1 26*c40739a6SBiju Das 27*c40739a6SBiju Das /* save stack pointer */ 28*c40739a6SBiju Das sub sp, sp, #16 29*c40739a6SBiju Das stp x0, x3, [sp] 30*c40739a6SBiju Das 31*c40739a6SBiju Das /* data synchronization barrier */ 32*c40739a6SBiju Das dsb sy 33*c40739a6SBiju Das 34*c40739a6SBiju Das /* jump to code */ 35*c40739a6SBiju Das mov x1, x0 36*c40739a6SBiju Das mov x0, x2 37*c40739a6SBiju Das blr x1 38*c40739a6SBiju Das 39*c40739a6SBiju Das /* load stack pointer */ 40*c40739a6SBiju Das ldp x0, x2, [sp,#0] 41*c40739a6SBiju Das 42*c40739a6SBiju Das /* change stack pointer */ 43*c40739a6SBiju Das mov sp, x2 44*c40739a6SBiju Das 45*c40739a6SBiju Das /* return */ 46*c40739a6SBiju Das ldp x29, x30, [sp,#-16] 47*c40739a6SBiju Das ret 48*c40739a6SBiju Dasendfunc rcar_pwrc_switch_stack 49