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