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