xref: /rk3399_ARM-atf/include/services/trp/trp_helpers.h (revision b96253db08383c3edfb417c505c8da6f7b1dbe75)
11d0ca40eSJavier Almansa Sobrino /*
21d0ca40eSJavier Almansa Sobrino  * Copyright (c) 2022, Arm Limited. All rights reserved.
31d0ca40eSJavier Almansa Sobrino  *
41d0ca40eSJavier Almansa Sobrino  * SPDX-License-Identifier: BSD-3-Clause
51d0ca40eSJavier Almansa Sobrino  */
61d0ca40eSJavier Almansa Sobrino 
71d0ca40eSJavier Almansa Sobrino #ifndef TRP_HELPERS_H
81d0ca40eSJavier Almansa Sobrino #define TRP_HELPERS_H
91d0ca40eSJavier Almansa Sobrino 
101d0ca40eSJavier Almansa Sobrino /* Definitions to help the assembler access the SMC/ERET args structure */
111d0ca40eSJavier Almansa Sobrino #define TRP_ARGS_SIZE		TRP_ARGS_END
121d0ca40eSJavier Almansa Sobrino #define TRP_ARG0		0x0
131d0ca40eSJavier Almansa Sobrino #define TRP_ARG1		0x8
141d0ca40eSJavier Almansa Sobrino #define TRP_ARG2		0x10
151d0ca40eSJavier Almansa Sobrino #define TRP_ARG3		0x18
161d0ca40eSJavier Almansa Sobrino #define TRP_ARG4		0x20
171d0ca40eSJavier Almansa Sobrino #define TRP_ARG5		0x28
181d0ca40eSJavier Almansa Sobrino #define TRP_ARG6		0x30
191d0ca40eSJavier Almansa Sobrino #define TRP_ARG7		0x38
201d0ca40eSJavier Almansa Sobrino #define TRP_ARGS_END		0x40
211d0ca40eSJavier Almansa Sobrino 
221d0ca40eSJavier Almansa Sobrino #ifndef __ASSEMBLER__
231d0ca40eSJavier Almansa Sobrino 
241d0ca40eSJavier Almansa Sobrino #include <platform_def.h>
251d0ca40eSJavier Almansa Sobrino 
261d0ca40eSJavier Almansa Sobrino /* Data structure to hold SMC arguments */
271d0ca40eSJavier Almansa Sobrino typedef struct trp_args {
281d0ca40eSJavier Almansa Sobrino 	uint64_t regs[TRP_ARGS_END >> 3];
291d0ca40eSJavier Almansa Sobrino } __aligned(CACHE_WRITEBACK_GRANULE) trp_args_t;
301d0ca40eSJavier Almansa Sobrino 
311d0ca40eSJavier Almansa Sobrino trp_args_t *set_smc_args(uint64_t arg0,
321d0ca40eSJavier Almansa Sobrino 			 uint64_t arg1,
331d0ca40eSJavier Almansa Sobrino 			 uint64_t arg2,
341d0ca40eSJavier Almansa Sobrino 			 uint64_t arg3,
351d0ca40eSJavier Almansa Sobrino 			 uint64_t arg4,
361d0ca40eSJavier Almansa Sobrino 			 uint64_t arg5,
371d0ca40eSJavier Almansa Sobrino 			 uint64_t arg6,
381d0ca40eSJavier Almansa Sobrino 			 uint64_t arg7);
391d0ca40eSJavier Almansa Sobrino 
401d0ca40eSJavier Almansa Sobrino __dead2 void trp_boot_abort(uint64_t err);
411d0ca40eSJavier Almansa Sobrino 
42*b96253dbSAlexeiFedorov /* TRP SMC result registers X0-X4 */
43*b96253dbSAlexeiFedorov #define TRP_SMC_RESULT_REGS	5
44*b96253dbSAlexeiFedorov 
45*b96253dbSAlexeiFedorov struct trp_smc_result {
46*b96253dbSAlexeiFedorov 	unsigned long long x[TRP_SMC_RESULT_REGS];
47*b96253dbSAlexeiFedorov };
48*b96253dbSAlexeiFedorov 
491d0ca40eSJavier Almansa Sobrino #endif /* __ASSEMBLER __ */
501d0ca40eSJavier Almansa Sobrino #endif /* TRP_HELPERS_H */
51