xref: /rk3399_ARM-atf/services/std_svc/rmmd/trp/trp_entry.S (revision 50a3056a3cd33d395e8712e1d1e67a8840bf3db1)
1*50a3056aSZelalem Aweke/*
2*50a3056aSZelalem Aweke * Copyright (c) 2021, Arm Limited. All rights reserved.
3*50a3056aSZelalem Aweke *
4*50a3056aSZelalem Aweke * SPDX-License-Identifier: BSD-3-Clause
5*50a3056aSZelalem Aweke */
6*50a3056aSZelalem Aweke
7*50a3056aSZelalem Aweke#include <asm_macros.S>
8*50a3056aSZelalem Aweke#include <services/gtsi_svc.h>
9*50a3056aSZelalem Aweke#include <services/rmi_svc.h>
10*50a3056aSZelalem Aweke#include "trp_private.h"
11*50a3056aSZelalem Aweke
12*50a3056aSZelalem Aweke.global trp_head
13*50a3056aSZelalem Aweke.global trp_smc
14*50a3056aSZelalem Aweke
15*50a3056aSZelalem Aweke.section ".head.text", "ax"
16*50a3056aSZelalem Aweke
17*50a3056aSZelalem Aweke	/* ---------------------------------------------
18*50a3056aSZelalem Aweke	 * Populate the params in x0-x7 from the pointer
19*50a3056aSZelalem Aweke	 * to the smc args structure in x0.
20*50a3056aSZelalem Aweke	 * ---------------------------------------------
21*50a3056aSZelalem Aweke	 */
22*50a3056aSZelalem Aweke	.macro restore_args_call_smc
23*50a3056aSZelalem Aweke	ldp	x6, x7, [x0, #TRP_ARG6]
24*50a3056aSZelalem Aweke	ldp	x4, x5, [x0, #TRP_ARG4]
25*50a3056aSZelalem Aweke	ldp	x2, x3, [x0, #TRP_ARG2]
26*50a3056aSZelalem Aweke	ldp	x0, x1, [x0, #TRP_ARG0]
27*50a3056aSZelalem Aweke	smc	#0
28*50a3056aSZelalem Aweke	.endm
29*50a3056aSZelalem Aweke
30*50a3056aSZelalem Aweke	/* ---------------------------------------------
31*50a3056aSZelalem Aweke	 * Entry point for TRP
32*50a3056aSZelalem Aweke	 * ---------------------------------------------
33*50a3056aSZelalem Aweke	 */
34*50a3056aSZelalem Aweketrp_head:
35*50a3056aSZelalem Aweke	bl	plat_set_my_stack
36*50a3056aSZelalem Aweke	bl	plat_is_my_cpu_primary
37*50a3056aSZelalem Aweke	cbz	x0, trp_secondary_cpu_entry
38*50a3056aSZelalem Aweke
39*50a3056aSZelalem Aweke	/* ---------------------------------------------
40*50a3056aSZelalem Aweke	 * Zero out BSS section
41*50a3056aSZelalem Aweke	 * ---------------------------------------------
42*50a3056aSZelalem Aweke	 */
43*50a3056aSZelalem Aweke	ldr	x0, =__BSS_START__
44*50a3056aSZelalem Aweke	ldr	x1, =__BSS_SIZE__
45*50a3056aSZelalem Aweke	bl	zeromem
46*50a3056aSZelalem Aweke
47*50a3056aSZelalem Aweke	bl	trp_setup
48*50a3056aSZelalem Aweke
49*50a3056aSZelalem Aweke	bl	trp_main
50*50a3056aSZelalem Aweketrp_secondary_cpu_entry:
51*50a3056aSZelalem Aweke	mov_imm	x0, RMI_RMM_REQ_COMPLETE
52*50a3056aSZelalem Aweke	mov	x1, xzr
53*50a3056aSZelalem Aweke	smc	#0
54*50a3056aSZelalem Aweke	b	trp_handler
55*50a3056aSZelalem Aweke
56*50a3056aSZelalem Aweke	/* ---------------------------------------------
57*50a3056aSZelalem Aweke	 *   Direct SMC call to BL31 service provided by
58*50a3056aSZelalem Aweke	 *   RMM Dispatcher
59*50a3056aSZelalem Aweke	 * ---------------------------------------------
60*50a3056aSZelalem Aweke	 */
61*50a3056aSZelalem Awekefunc trp_smc
62*50a3056aSZelalem Aweke	restore_args_call_smc
63*50a3056aSZelalem Aweke	ret
64*50a3056aSZelalem Awekeendfunc trp_smc
65*50a3056aSZelalem Aweke
66*50a3056aSZelalem Aweke	/* ---------------------------------------------
67*50a3056aSZelalem Aweke	 * RMI call handler
68*50a3056aSZelalem Aweke	 * ---------------------------------------------
69*50a3056aSZelalem Aweke	 */
70*50a3056aSZelalem Awekefunc trp_handler
71*50a3056aSZelalem Aweke	bl	trp_rmi_handler
72*50a3056aSZelalem Aweke	restore_args_call_smc
73*50a3056aSZelalem Aweke	b	trp_handler
74*50a3056aSZelalem Awekeendfunc trp_handler
75