xref: /rk3399_ARM-atf/services/std_svc/rmmd/trp/trp_private.h (revision 50a3056a3cd33d395e8712e1d1e67a8840bf3db1)
1*50a3056aSZelalem Aweke /*
2*50a3056aSZelalem Aweke  * Copyright (c) 2021, Arm Limited and Contributors. All rights reserved.
3*50a3056aSZelalem Aweke  *
4*50a3056aSZelalem Aweke  * SPDX-License-Identifier: BSD-3-Clause
5*50a3056aSZelalem Aweke  */
6*50a3056aSZelalem Aweke 
7*50a3056aSZelalem Aweke #ifndef TRP_PRIVATE_H
8*50a3056aSZelalem Aweke #define TRP_PRIVATE_H
9*50a3056aSZelalem Aweke 
10*50a3056aSZelalem Aweke /* Definitions to help the assembler access the SMC/ERET args structure */
11*50a3056aSZelalem Aweke #define TRP_ARGS_SIZE		TRP_ARGS_END
12*50a3056aSZelalem Aweke #define TRP_ARG0		0x0
13*50a3056aSZelalem Aweke #define TRP_ARG1		0x8
14*50a3056aSZelalem Aweke #define TRP_ARG2		0x10
15*50a3056aSZelalem Aweke #define TRP_ARG3		0x18
16*50a3056aSZelalem Aweke #define TRP_ARG4		0x20
17*50a3056aSZelalem Aweke #define TRP_ARG5		0x28
18*50a3056aSZelalem Aweke #define TRP_ARG6		0x30
19*50a3056aSZelalem Aweke #define TRP_ARG7		0x38
20*50a3056aSZelalem Aweke #define TRP_ARGS_END		0x40
21*50a3056aSZelalem Aweke 
22*50a3056aSZelalem Aweke #ifndef __ASSEMBLER__
23*50a3056aSZelalem Aweke 
24*50a3056aSZelalem Aweke #include <stdint.h>
25*50a3056aSZelalem Aweke 
26*50a3056aSZelalem Aweke /* Data structure to hold SMC arguments */
27*50a3056aSZelalem Aweke typedef struct trp_args {
28*50a3056aSZelalem Aweke 	uint64_t regs[TRP_ARGS_END >> 3];
29*50a3056aSZelalem Aweke } __aligned(CACHE_WRITEBACK_GRANULE) trp_args_t;
30*50a3056aSZelalem Aweke 
31*50a3056aSZelalem Aweke #define write_trp_arg(args, offset, val) (((args)->regs[offset >> 3])	\
32*50a3056aSZelalem Aweke 					 = val)
33*50a3056aSZelalem Aweke 
34*50a3056aSZelalem Aweke /* Definitions for RMI VERSION */
35*50a3056aSZelalem Aweke #define RMI_ABI_VERSION_MAJOR		U(0x0)
36*50a3056aSZelalem Aweke #define RMI_ABI_VERSION_MINOR		U(0x0)
37*50a3056aSZelalem Aweke #define RMI_ABI_VERSION			((RMI_ABI_VERSION_MAJOR << 16) | \
38*50a3056aSZelalem Aweke 					RMI_ABI_VERSION_MINOR)
39*50a3056aSZelalem Aweke 
40*50a3056aSZelalem Aweke /* Helper to issue SMC calls to BL31 */
41*50a3056aSZelalem Aweke uint64_t trp_smc(trp_args_t *);
42*50a3056aSZelalem Aweke 
43*50a3056aSZelalem Aweke /* The main function to executed only by Primary CPU */
44*50a3056aSZelalem Aweke void trp_main(void);
45*50a3056aSZelalem Aweke 
46*50a3056aSZelalem Aweke /* Setup TRP. Executed only by Primary CPU */
47*50a3056aSZelalem Aweke void trp_setup(void);
48*50a3056aSZelalem Aweke 
49*50a3056aSZelalem Aweke #endif /* __ASSEMBLER__ */
50*50a3056aSZelalem Aweke #endif /* TRP_PRIVATE_H */
51