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