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