xref: /rk3399_ARM-atf/include/services/trp/trp_helpers.h (revision ec56d5951f03bab04a23c83288da527c6c3499dc)
11d0ca40eSJavier Almansa Sobrino /*
2*8b3a89faSSona Mathew  * Copyright (c) 2022-2025, 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
20*8b3a89faSSona Mathew #define TRP_ARG8		0x40
21*8b3a89faSSona Mathew #define TRP_ARG9		0x48
22*8b3a89faSSona Mathew #define TRP_ARG10		0x50
23*8b3a89faSSona Mathew #define TRP_ARG11		0x58
24*8b3a89faSSona Mathew #define TRP_ARGS_END		0x60
251d0ca40eSJavier Almansa Sobrino 
261d0ca40eSJavier Almansa Sobrino #ifndef __ASSEMBLER__
271d0ca40eSJavier Almansa Sobrino 
281d0ca40eSJavier Almansa Sobrino #include <platform_def.h>
291d0ca40eSJavier Almansa Sobrino 
301d0ca40eSJavier Almansa Sobrino /* Data structure to hold SMC arguments */
311d0ca40eSJavier Almansa Sobrino typedef struct trp_args {
321d0ca40eSJavier Almansa Sobrino 	uint64_t regs[TRP_ARGS_END >> 3];
331d0ca40eSJavier Almansa Sobrino } __aligned(CACHE_WRITEBACK_GRANULE) trp_args_t;
341d0ca40eSJavier Almansa Sobrino 
351d0ca40eSJavier Almansa Sobrino trp_args_t *set_smc_args(uint64_t arg0,
361d0ca40eSJavier Almansa Sobrino 			 uint64_t arg1,
371d0ca40eSJavier Almansa Sobrino 			 uint64_t arg2,
381d0ca40eSJavier Almansa Sobrino 			 uint64_t arg3,
391d0ca40eSJavier Almansa Sobrino 			 uint64_t arg4,
401d0ca40eSJavier Almansa Sobrino 			 uint64_t arg5,
411d0ca40eSJavier Almansa Sobrino 			 uint64_t arg6,
42*8b3a89faSSona Mathew 			 uint64_t arg7,
43*8b3a89faSSona Mathew 			 uint64_t arg8,
44*8b3a89faSSona Mathew 			 uint64_t arg9,
45*8b3a89faSSona Mathew 			 uint64_t arg10,
46*8b3a89faSSona Mathew 			 uint64_t arg11);
471d0ca40eSJavier Almansa Sobrino 
481d0ca40eSJavier Almansa Sobrino __dead2 void trp_boot_abort(uint64_t err);
491d0ca40eSJavier Almansa Sobrino 
50b96253dbSAlexeiFedorov /* TRP SMC result registers X0-X4 */
51b96253dbSAlexeiFedorov #define TRP_SMC_RESULT_REGS	5
52b96253dbSAlexeiFedorov 
53b96253dbSAlexeiFedorov struct trp_smc_result {
54b96253dbSAlexeiFedorov 	unsigned long long x[TRP_SMC_RESULT_REGS];
55b96253dbSAlexeiFedorov };
56b96253dbSAlexeiFedorov 
571d0ca40eSJavier Almansa Sobrino #endif /* __ASSEMBLER __ */
581d0ca40eSJavier Almansa Sobrino #endif /* TRP_HELPERS_H */
59