xref: /rk3399_ARM-atf/services/spd/trusty/trusty_helpers.S (revision 948c090d8c03466f95939318ca515d301b6a8182)
1*948c090dSVarun Wadekar/*
2*948c090dSVarun Wadekar * Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
3*948c090dSVarun Wadekar *
4*948c090dSVarun Wadekar * Redistribution and use in source and binary forms, with or without
5*948c090dSVarun Wadekar * modification, are permitted provided that the following conditions are met:
6*948c090dSVarun Wadekar *
7*948c090dSVarun Wadekar * Redistributions of source code must retain the above copyright notice, this
8*948c090dSVarun Wadekar * list of conditions and the following disclaimer.
9*948c090dSVarun Wadekar *
10*948c090dSVarun Wadekar * Redistributions in binary form must reproduce the above copyright notice,
11*948c090dSVarun Wadekar * this list of conditions and the following disclaimer in the documentation
12*948c090dSVarun Wadekar * and/or other materials provided with the distribution.
13*948c090dSVarun Wadekar *
14*948c090dSVarun Wadekar * Neither the name of ARM nor the names of its contributors may be used
15*948c090dSVarun Wadekar * to endorse or promote products derived from this software without specific
16*948c090dSVarun Wadekar * prior written permission.
17*948c090dSVarun Wadekar *
18*948c090dSVarun Wadekar * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19*948c090dSVarun Wadekar * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20*948c090dSVarun Wadekar * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21*948c090dSVarun Wadekar * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22*948c090dSVarun Wadekar * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23*948c090dSVarun Wadekar * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24*948c090dSVarun Wadekar * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25*948c090dSVarun Wadekar * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26*948c090dSVarun Wadekar * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27*948c090dSVarun Wadekar * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28*948c090dSVarun Wadekar * POSSIBILITY OF SUCH DAMAGE.
29*948c090dSVarun Wadekar */
30*948c090dSVarun Wadekar
31*948c090dSVarun Wadekar#include <asm_macros.S>
32*948c090dSVarun Wadekar
33*948c090dSVarun Wadekar.macro push ra, rb, sp=sp
34*948c090dSVarun Wadekar	stp \ra, \rb, [\sp,#-16]!
35*948c090dSVarun Wadekar.endm
36*948c090dSVarun Wadekar
37*948c090dSVarun Wadekar.macro pop ra, rb, sp=sp
38*948c090dSVarun Wadekar	ldp \ra, \rb, [\sp], #16
39*948c090dSVarun Wadekar.endm
40*948c090dSVarun Wadekar
41*948c090dSVarun Wadekar	.global trusty_context_switch_helper
42*948c090dSVarun Wadekarfunc trusty_context_switch_helper
43*948c090dSVarun Wadekar	push	x8, xzr
44*948c090dSVarun Wadekar	push	x19, x20
45*948c090dSVarun Wadekar	push	x21, x22
46*948c090dSVarun Wadekar	push	x23, x24
47*948c090dSVarun Wadekar	push	x25, x26
48*948c090dSVarun Wadekar	push	x27, x28
49*948c090dSVarun Wadekar	push	x29, x30
50*948c090dSVarun Wadekar
51*948c090dSVarun Wadekar	mov	x9, sp
52*948c090dSVarun Wadekar	ldr	x10, [x0]
53*948c090dSVarun Wadekar	mov	sp, x10
54*948c090dSVarun Wadekar	str	x9, [x0]
55*948c090dSVarun Wadekar
56*948c090dSVarun Wadekar	pop	x29, x30
57*948c090dSVarun Wadekar	pop	x27, x28
58*948c090dSVarun Wadekar	pop	x25, x26
59*948c090dSVarun Wadekar	pop	x23, x24
60*948c090dSVarun Wadekar	pop	x21, x22
61*948c090dSVarun Wadekar	pop	x19, x20
62*948c090dSVarun Wadekar	pop	x8, xzr
63*948c090dSVarun Wadekar	stp	x1, x2, [x8]
64*948c090dSVarun Wadekar	stp	x3, x4, [x8, #16]
65*948c090dSVarun Wadekar
66*948c090dSVarun Wadekar	ret
67*948c090dSVarun Wadekarendfunc trusty_context_switch_helper
68*948c090dSVarun Wadekar
69*948c090dSVarun Wadekar	.global trusty_init_context_stack
70*948c090dSVarun Wadekarfunc trusty_init_context_stack
71*948c090dSVarun Wadekar	push	x8, xzr, x1
72*948c090dSVarun Wadekar	push	xzr, xzr, x1
73*948c090dSVarun Wadekar	push	xzr, xzr, x1
74*948c090dSVarun Wadekar	push	xzr, xzr, x1
75*948c090dSVarun Wadekar	push	xzr, xzr, x1
76*948c090dSVarun Wadekar	push	xzr, xzr, x1
77*948c090dSVarun Wadekar	adr	x9, el3_exit
78*948c090dSVarun Wadekar	push	xzr, x9, x1
79*948c090dSVarun Wadekar	str	x1, [x0]
80*948c090dSVarun Wadekar	ret
81*948c090dSVarun Wadekarendfunc trusty_init_context_stack
82