13a1b0676SDimitris Papastamos /* 2*8db17052SBoyan Karatotev * Copyright (c) 2018-2024, Arm Limited and Contributors. All rights reserved. 33a1b0676SDimitris Papastamos * 43a1b0676SDimitris Papastamos * SPDX-License-Identifier: BSD-3-Clause 53a1b0676SDimitris Papastamos */ 63a1b0676SDimitris Papastamos 7c3cf06f1SAntonio Nino Diaz #ifndef ARM_ARCH_SVC_H 8c3cf06f1SAntonio Nino Diaz #define ARM_ARCH_SVC_H 93a1b0676SDimitris Papastamos 103a1b0676SDimitris Papastamos #define SMCCC_VERSION U(0x80000000) 113a1b0676SDimitris Papastamos #define SMCCC_ARCH_FEATURES U(0x80000001) 120e753437SManish V Badarkhe #define SMCCC_ARCH_SOC_ID U(0x80000002) 133a1b0676SDimitris Papastamos #define SMCCC_ARCH_WORKAROUND_1 U(0x80008000) 14b8a25bbbSDimitris Papastamos #define SMCCC_ARCH_WORKAROUND_2 U(0x80007FFF) 159b2510b6SBipin Ravi #define SMCCC_ARCH_WORKAROUND_3 U(0x80003FFF) 16*8db17052SBoyan Karatotev #define SMCCC_ARCH_FEATURE_AVAILABILITY U(0x80000003) 17b8a25bbbSDimitris Papastamos 180e753437SManish V Badarkhe #define SMCCC_GET_SOC_VERSION U(0) 190e753437SManish V Badarkhe #define SMCCC_GET_SOC_REVISION U(1) 200e753437SManish V Badarkhe 21*8db17052SBoyan Karatotev #ifndef __ASSEMBLER__ 22*8db17052SBoyan Karatotev #if ARCH_FEATURE_AVAILABILITY 23*8db17052SBoyan Karatotev #include <lib/cassert.h> 24*8db17052SBoyan Karatotev 25*8db17052SBoyan Karatotev #if ENABLE_FEAT_FGT2 26*8db17052SBoyan Karatotev #define SCR_FEAT_FGT2 SCR_FGTEN2_BIT 27*8db17052SBoyan Karatotev #else 28*8db17052SBoyan Karatotev #define SCR_FEAT_FGT2 (0) 29*8db17052SBoyan Karatotev #endif 30*8db17052SBoyan Karatotev 31*8db17052SBoyan Karatotev #if ENABLE_FEAT_FPMR 32*8db17052SBoyan Karatotev #define SCR_FEAT_FPMR SCR_EnFPM_BIT 33*8db17052SBoyan Karatotev #else 34*8db17052SBoyan Karatotev #define SCR_FEAT_FPMR 35*8db17052SBoyan Karatotev #endif 36*8db17052SBoyan Karatotev 37*8db17052SBoyan Karatotev #if ENABLE_FEAT_D128 38*8db17052SBoyan Karatotev #define SCR_FEAT_D128 SCR_D128En_BIT 39*8db17052SBoyan Karatotev #else 40*8db17052SBoyan Karatotev #define SCR_FEAT_D128 (0) 41*8db17052SBoyan Karatotev #endif 42*8db17052SBoyan Karatotev 43*8db17052SBoyan Karatotev #if ENABLE_FEAT_S1PIE 44*8db17052SBoyan Karatotev #define SCR_FEAT_S1PIE SCR_PIEN_BIT 45*8db17052SBoyan Karatotev #else 46*8db17052SBoyan Karatotev #define SCR_FEAT_S1PIE (0) 47*8db17052SBoyan Karatotev #endif 48*8db17052SBoyan Karatotev 49*8db17052SBoyan Karatotev #if ENABLE_FEAT_SCTLR2 50*8db17052SBoyan Karatotev #define SCR_FEAT_SCTLR2 SCR_SCTLR2En_BIT 51*8db17052SBoyan Karatotev #else 52*8db17052SBoyan Karatotev #define SCR_FEAT_SCTLR2 (0) 53*8db17052SBoyan Karatotev #endif 54*8db17052SBoyan Karatotev 55*8db17052SBoyan Karatotev #if ENABLE_FEAT_TCR2 56*8db17052SBoyan Karatotev #define SCR_FEAT_TCR2 SCR_TCR2EN_BIT 57*8db17052SBoyan Karatotev #else 58*8db17052SBoyan Karatotev #define SCR_FEAT_TCR2 (0) 59*8db17052SBoyan Karatotev #endif 60*8db17052SBoyan Karatotev 61*8db17052SBoyan Karatotev #if ENABLE_FEAT_THE 62*8db17052SBoyan Karatotev #define SCR_FEAT_THE SCR_RCWMASKEn_BIT 63*8db17052SBoyan Karatotev #else 64*8db17052SBoyan Karatotev #define SCR_FEAT_THE (0) 65*8db17052SBoyan Karatotev #endif 66*8db17052SBoyan Karatotev 67*8db17052SBoyan Karatotev #if ENABLE_SME_FOR_NS 68*8db17052SBoyan Karatotev #define SCR_FEAT_SME SCR_ENTP2_BIT 69*8db17052SBoyan Karatotev #else 70*8db17052SBoyan Karatotev #define SCR_FEAT_SME (0) 71*8db17052SBoyan Karatotev #endif 72*8db17052SBoyan Karatotev 73*8db17052SBoyan Karatotev #if ENABLE_FEAT_GCS 74*8db17052SBoyan Karatotev #define SCR_FEAT_GCS SCR_GCSEn_BIT 75*8db17052SBoyan Karatotev #else 76*8db17052SBoyan Karatotev #define SCR_FEAT_GCS (0) 77*8db17052SBoyan Karatotev #endif 78*8db17052SBoyan Karatotev 79*8db17052SBoyan Karatotev #if ENABLE_FEAT_HCX 80*8db17052SBoyan Karatotev #define SCR_FEAT_HCX SCR_HXEn_BIT 81*8db17052SBoyan Karatotev #else 82*8db17052SBoyan Karatotev #define SCR_FEAT_HCX (0) 83*8db17052SBoyan Karatotev #endif 84*8db17052SBoyan Karatotev 85*8db17052SBoyan Karatotev #if ENABLE_FEAT_LS64_ACCDATA 86*8db17052SBoyan Karatotev #define SCR_FEAT_LS64_ACCDATA (SCR_ADEn_BIT | SCR_EnAS0_BIT) 87*8db17052SBoyan Karatotev #else 88*8db17052SBoyan Karatotev #define SCR_FEAT_LS64_ACCDATA (0) 89*8db17052SBoyan Karatotev #endif 90*8db17052SBoyan Karatotev 91*8db17052SBoyan Karatotev #if ENABLE_FEAT_AMUv1p1 92*8db17052SBoyan Karatotev #define SCR_FEAT_AMUv1p1 SCR_AMVOFFEN_BIT 93*8db17052SBoyan Karatotev #else 94*8db17052SBoyan Karatotev #define SCR_FEAT_AMUv1p1 (0) 95*8db17052SBoyan Karatotev #endif 96*8db17052SBoyan Karatotev 97*8db17052SBoyan Karatotev #if ENABLE_FEAT_ECV 98*8db17052SBoyan Karatotev #define SCR_FEAT_ECV SCR_ECVEN_BIT 99*8db17052SBoyan Karatotev #else 100*8db17052SBoyan Karatotev #define SCR_FEAT_ECV (0) 101*8db17052SBoyan Karatotev #endif 102*8db17052SBoyan Karatotev 103*8db17052SBoyan Karatotev #if ENABLE_FEAT_FGT 104*8db17052SBoyan Karatotev #define SCR_FEAT_FGT SCR_FGTEN_BIT 105*8db17052SBoyan Karatotev #else 106*8db17052SBoyan Karatotev #define SCR_FEAT_FGT (0) 107*8db17052SBoyan Karatotev #endif 108*8db17052SBoyan Karatotev 109*8db17052SBoyan Karatotev #if ENABLE_FEAT_MTE2 110*8db17052SBoyan Karatotev #define SCR_FEAT_MTE2 SCR_ATA_BIT 111*8db17052SBoyan Karatotev #else 112*8db17052SBoyan Karatotev #define SCR_FEAT_MTE2 (0) 113*8db17052SBoyan Karatotev #endif 114*8db17052SBoyan Karatotev 115*8db17052SBoyan Karatotev #if ENABLE_FEAT_CSV2_2 116*8db17052SBoyan Karatotev #define SCR_FEAT_CSV2_2 SCR_EnSCXT_BIT 117*8db17052SBoyan Karatotev #else 118*8db17052SBoyan Karatotev #define SCR_FEAT_CSV2_2 (0) 119*8db17052SBoyan Karatotev #endif 120*8db17052SBoyan Karatotev 121*8db17052SBoyan Karatotev #if ENABLE_FEAT_RAS 122*8db17052SBoyan Karatotev #define SCR_FEAT_RAS SCR_TERR_BIT 123*8db17052SBoyan Karatotev #else 124*8db17052SBoyan Karatotev #define SCR_FEAT_RAS (0) 125*8db17052SBoyan Karatotev #endif 126*8db17052SBoyan Karatotev 127*8db17052SBoyan Karatotev #ifndef SCR_PLAT_FEATS 128*8db17052SBoyan Karatotev #define SCR_PLAT_FEATS (0) 129*8db17052SBoyan Karatotev #endif 130*8db17052SBoyan Karatotev #ifndef SCR_PLAT_FLIPPED 131*8db17052SBoyan Karatotev #define SCR_PLAT_FLIPPED (0) 132*8db17052SBoyan Karatotev #endif 133*8db17052SBoyan Karatotev #ifndef SCR_PLAT_IGNORED 134*8db17052SBoyan Karatotev #define SCR_PLAT_IGNORED (0) 135*8db17052SBoyan Karatotev #endif 136*8db17052SBoyan Karatotev 137*8db17052SBoyan Karatotev #ifndef CPTR_PLAT_FEATS 138*8db17052SBoyan Karatotev #define CPTR_PLAT_FEATS (0) 139*8db17052SBoyan Karatotev #endif 140*8db17052SBoyan Karatotev #ifndef CPTR_PLAT_FLIPPED 141*8db17052SBoyan Karatotev #define CPTR_PLAT_FLIPPED (0) 142*8db17052SBoyan Karatotev #endif 143*8db17052SBoyan Karatotev 144*8db17052SBoyan Karatotev #ifndef MDCR_PLAT_FEATS 145*8db17052SBoyan Karatotev #define MDCR_PLAT_FEATS (0) 146*8db17052SBoyan Karatotev #endif 147*8db17052SBoyan Karatotev #ifndef MDCR_PLAT_FLIPPED 148*8db17052SBoyan Karatotev #define MDCR_PLAT_FLIPPED (0) 149*8db17052SBoyan Karatotev #endif 150*8db17052SBoyan Karatotev #ifndef MDCR_PLAT_IGNORED 151*8db17052SBoyan Karatotev #define MDCR_PLAT_IGNORED (0) 152*8db17052SBoyan Karatotev #endif 153*8db17052SBoyan Karatotev /* 154*8db17052SBoyan Karatotev * XYZ_EL3_FEATS - list all bits that are relevant for feature enablement. It's 155*8db17052SBoyan Karatotev * a constant list based on what features are expected. This relies on the fact 156*8db17052SBoyan Karatotev * that if the feature is in any way disabled, then the relevant bit will not be 157*8db17052SBoyan Karatotev * written by context management. 158*8db17052SBoyan Karatotev * 159*8db17052SBoyan Karatotev * XYZ_EL3_FLIPPED - bits with an active 0, rather than the usual active 1. The 160*8db17052SBoyan Karatotev * spec always uses active 1 to mean that the feature will not trap. 161*8db17052SBoyan Karatotev * 162*8db17052SBoyan Karatotev * XYZ_EL3_IGNORED - list of all bits that are not relevant for feature 163*8db17052SBoyan Karatotev * enablement and should not be reported to lower ELs 164*8db17052SBoyan Karatotev */ 165*8db17052SBoyan Karatotev #define SCR_EL3_FEATS ( \ 166*8db17052SBoyan Karatotev SCR_FEAT_FGT2 | \ 167*8db17052SBoyan Karatotev SCR_FEAT_FPMR | \ 168*8db17052SBoyan Karatotev SCR_FEAT_D128 | \ 169*8db17052SBoyan Karatotev SCR_FEAT_S1PIE | \ 170*8db17052SBoyan Karatotev SCR_FEAT_SCTLR2 | \ 171*8db17052SBoyan Karatotev SCR_FEAT_TCR2 | \ 172*8db17052SBoyan Karatotev SCR_FEAT_THE | \ 173*8db17052SBoyan Karatotev SCR_FEAT_SME | \ 174*8db17052SBoyan Karatotev SCR_FEAT_GCS | \ 175*8db17052SBoyan Karatotev SCR_FEAT_HCX | \ 176*8db17052SBoyan Karatotev SCR_FEAT_LS64_ACCDATA | \ 177*8db17052SBoyan Karatotev SCR_FEAT_AMUv1p1 | \ 178*8db17052SBoyan Karatotev SCR_FEAT_ECV | \ 179*8db17052SBoyan Karatotev SCR_FEAT_FGT | \ 180*8db17052SBoyan Karatotev SCR_FEAT_MTE2 | \ 181*8db17052SBoyan Karatotev SCR_FEAT_CSV2_2 | \ 182*8db17052SBoyan Karatotev SCR_APK_BIT | /* FEAT_Pauth */ \ 183*8db17052SBoyan Karatotev SCR_FEAT_RAS | \ 184*8db17052SBoyan Karatotev SCR_PLAT_FEATS) 185*8db17052SBoyan Karatotev #define SCR_EL3_FLIPPED ( \ 186*8db17052SBoyan Karatotev SCR_FEAT_RAS | \ 187*8db17052SBoyan Karatotev SCR_PLAT_FLIPPED) 188*8db17052SBoyan Karatotev #define SCR_EL3_IGNORED ( \ 189*8db17052SBoyan Karatotev SCR_API_BIT | \ 190*8db17052SBoyan Karatotev SCR_RW_BIT | \ 191*8db17052SBoyan Karatotev SCR_SIF_BIT | \ 192*8db17052SBoyan Karatotev SCR_HCE_BIT | \ 193*8db17052SBoyan Karatotev SCR_FIQ_BIT | \ 194*8db17052SBoyan Karatotev SCR_IRQ_BIT | \ 195*8db17052SBoyan Karatotev SCR_NS_BIT | \ 196*8db17052SBoyan Karatotev SCR_RES1_BITS | \ 197*8db17052SBoyan Karatotev SCR_PLAT_IGNORED) 198*8db17052SBoyan Karatotev CASSERT((SCR_EL3_FEATS & SCR_EL3_IGNORED) == 0, scr_feat_is_ignored); 199*8db17052SBoyan Karatotev CASSERT((SCR_EL3_FLIPPED & SCR_EL3_FEATS) == SCR_EL3_FLIPPED, scr_flipped_not_a_feat); 200*8db17052SBoyan Karatotev 201*8db17052SBoyan Karatotev #if ENABLE_SYS_REG_TRACE_FOR_NS 202*8db17052SBoyan Karatotev #define CPTR_SYS_REG_TRACE (TCPAC_BIT | TTA_BIT) 203*8db17052SBoyan Karatotev #else 204*8db17052SBoyan Karatotev #define CPTR_SYS_REG_TRACE (0) 205*8db17052SBoyan Karatotev #endif 206*8db17052SBoyan Karatotev 207*8db17052SBoyan Karatotev #if ENABLE_FEAT_AMU 208*8db17052SBoyan Karatotev #define CPTR_FEAT_AMU TAM_BIT 209*8db17052SBoyan Karatotev #else 210*8db17052SBoyan Karatotev #define CPTR_FEAT_AMU (0) 211*8db17052SBoyan Karatotev #endif 212*8db17052SBoyan Karatotev 213*8db17052SBoyan Karatotev #if ENABLE_SME_FOR_NS 214*8db17052SBoyan Karatotev #define CPTR_FEAT_SME ESM_BIT 215*8db17052SBoyan Karatotev #else 216*8db17052SBoyan Karatotev #define CPTR_FEAT_SME (0) 217*8db17052SBoyan Karatotev #endif 218*8db17052SBoyan Karatotev 219*8db17052SBoyan Karatotev #if ENABLE_SVE_FOR_NS 220*8db17052SBoyan Karatotev #define CPTR_FEAT_SVE CPTR_EZ_BIT 221*8db17052SBoyan Karatotev #else 222*8db17052SBoyan Karatotev #define CPTR_FEAT_SVE (0) 223*8db17052SBoyan Karatotev #endif 224*8db17052SBoyan Karatotev 225*8db17052SBoyan Karatotev #define CPTR_EL3_FEATS ( \ 226*8db17052SBoyan Karatotev CPTR_SYS_REG_TRACE | \ 227*8db17052SBoyan Karatotev CPTR_FEAT_AMU | \ 228*8db17052SBoyan Karatotev CPTR_FEAT_SME | \ 229*8db17052SBoyan Karatotev TFP_BIT | \ 230*8db17052SBoyan Karatotev CPTR_FEAT_SVE | \ 231*8db17052SBoyan Karatotev CPTR_PLAT_FEATS) 232*8db17052SBoyan Karatotev #define CPTR_EL3_FLIPPED ( \ 233*8db17052SBoyan Karatotev CPTR_SYS_REG_TRACE | \ 234*8db17052SBoyan Karatotev CPTR_FEAT_AMU | \ 235*8db17052SBoyan Karatotev TFP_BIT | \ 236*8db17052SBoyan Karatotev CPTR_PLAT_FLIPPED) 237*8db17052SBoyan Karatotev CASSERT((CPTR_EL3_FLIPPED & CPTR_EL3_FEATS) == CPTR_EL3_FLIPPED, cptr_flipped_not_a_feat); 238*8db17052SBoyan Karatotev 239*8db17052SBoyan Karatotev /* 240*8db17052SBoyan Karatotev * Some features enables are expressed with more than 1 bit in order to cater 241*8db17052SBoyan Karatotev * for multi world enablement. In those cases (BRB, TRB, SPE) only the last bit 242*8db17052SBoyan Karatotev * is used and reported. This (ab)uses the convenient fact that the last bit 243*8db17052SBoyan Karatotev * always means "enabled for this world" when context switched correctly. 244*8db17052SBoyan Karatotev * The per-world values have been adjusted such that this is always true. 245*8db17052SBoyan Karatotev */ 246*8db17052SBoyan Karatotev #if ENABLE_BRBE_FOR_NS 247*8db17052SBoyan Karatotev #define MDCR_FEAT_BRBE MDCR_SBRBE(1UL) 248*8db17052SBoyan Karatotev #else 249*8db17052SBoyan Karatotev #define MDCR_FEAT_BRBE (0) 250*8db17052SBoyan Karatotev #endif 251*8db17052SBoyan Karatotev 252*8db17052SBoyan Karatotev #if ENABLE_FEAT_FGT 253*8db17052SBoyan Karatotev #define MDCR_FEAT_FGT MDCR_TDCC_BIT 254*8db17052SBoyan Karatotev #else 255*8db17052SBoyan Karatotev #define MDCR_FEAT_FGT (0) 256*8db17052SBoyan Karatotev #endif 257*8db17052SBoyan Karatotev 258*8db17052SBoyan Karatotev #if ENABLE_TRBE_FOR_NS 259*8db17052SBoyan Karatotev #define MDCR_FEAT_TRBE MDCR_NSTB(1UL) 260*8db17052SBoyan Karatotev #else 261*8db17052SBoyan Karatotev #define MDCR_FEAT_TRBE (0) 262*8db17052SBoyan Karatotev #endif 263*8db17052SBoyan Karatotev 264*8db17052SBoyan Karatotev #if ENABLE_TRF_FOR_NS 265*8db17052SBoyan Karatotev #define MDCR_FEAT_TRF MDCR_TTRF_BIT 266*8db17052SBoyan Karatotev #else 267*8db17052SBoyan Karatotev #define MDCR_FEAT_TRF (0) 268*8db17052SBoyan Karatotev #endif 269*8db17052SBoyan Karatotev 270*8db17052SBoyan Karatotev #if ENABLE_SPE_FOR_NS 271*8db17052SBoyan Karatotev #define MDCR_FEAT_SPE MDCR_NSPB(1UL) 272*8db17052SBoyan Karatotev #else 273*8db17052SBoyan Karatotev #define MDCR_FEAT_SPE (0) 274*8db17052SBoyan Karatotev #endif 275*8db17052SBoyan Karatotev 276*8db17052SBoyan Karatotev #define MDCR_EL3_FEATS ( \ 277*8db17052SBoyan Karatotev MDCR_FEAT_BRBE | \ 278*8db17052SBoyan Karatotev MDCR_FEAT_FGT | \ 279*8db17052SBoyan Karatotev MDCR_FEAT_TRBE | \ 280*8db17052SBoyan Karatotev MDCR_FEAT_TRF | \ 281*8db17052SBoyan Karatotev MDCR_FEAT_SPE | \ 282*8db17052SBoyan Karatotev MDCR_TDOSA_BIT | \ 283*8db17052SBoyan Karatotev MDCR_TDA_BIT | \ 284*8db17052SBoyan Karatotev MDCR_TPM_BIT | /* FEAT_PMUv3 */ \ 285*8db17052SBoyan Karatotev MDCR_PLAT_FEATS) 286*8db17052SBoyan Karatotev #define MDCR_EL3_FLIPPED ( \ 287*8db17052SBoyan Karatotev MDCR_FEAT_FGT | \ 288*8db17052SBoyan Karatotev MDCR_FEAT_TRF | \ 289*8db17052SBoyan Karatotev MDCR_TDOSA_BIT | \ 290*8db17052SBoyan Karatotev MDCR_TDA_BIT | \ 291*8db17052SBoyan Karatotev MDCR_TPM_BIT | \ 292*8db17052SBoyan Karatotev MDCR_PLAT_FLIPPED) 293*8db17052SBoyan Karatotev #define MDCR_EL3_IGNORED ( \ 294*8db17052SBoyan Karatotev MDCR_EBWE_BIT | \ 295*8db17052SBoyan Karatotev MDCR_EnPMSN_BIT | \ 296*8db17052SBoyan Karatotev MDCR_SBRBE(2UL) | \ 297*8db17052SBoyan Karatotev MDCR_MTPME_BIT | \ 298*8db17052SBoyan Karatotev MDCR_NSTBE_BIT | \ 299*8db17052SBoyan Karatotev MDCR_NSTB(2UL) | \ 300*8db17052SBoyan Karatotev MDCR_SDD_BIT | \ 301*8db17052SBoyan Karatotev MDCR_SPD32(3UL) | \ 302*8db17052SBoyan Karatotev MDCR_NSPB(2UL) | \ 303*8db17052SBoyan Karatotev MDCR_NSPBE_BIT | \ 304*8db17052SBoyan Karatotev MDCR_PLAT_IGNORED) 305*8db17052SBoyan Karatotev CASSERT((MDCR_EL3_FEATS & MDCR_EL3_IGNORED) == 0, mdcr_feat_is_ignored); 306*8db17052SBoyan Karatotev CASSERT((MDCR_EL3_FLIPPED & MDCR_EL3_FEATS) == MDCR_EL3_FLIPPED, mdcr_flipped_not_a_feat); 307*8db17052SBoyan Karatotev 308*8db17052SBoyan Karatotev #define MPAM3_EL3_FEATS (MPAM3_EL3_TRAPLOWER_BIT) 309*8db17052SBoyan Karatotev #define MPAM3_EL3_FLIPPED (MPAM3_EL3_TRAPLOWER_BIT) 310*8db17052SBoyan Karatotev #define MPAM3_EL3_IGNORED (MPAM3_EL3_MPAMEN_BIT) 311*8db17052SBoyan Karatotev CASSERT((MPAM3_EL3_FEATS & MPAM3_EL3_IGNORED) == 0, mpam3_feat_is_ignored); 312*8db17052SBoyan Karatotev CASSERT((MPAM3_EL3_FLIPPED & MPAM3_EL3_FEATS) == MPAM3_EL3_FLIPPED, mpam3_flipped_not_a_feat); 313*8db17052SBoyan Karatotev 314*8db17052SBoyan Karatotev /* The hex representations of these registers' S3 encoding */ 315*8db17052SBoyan Karatotev #define SCR_EL3_OPCODE U(0x1E1100) 316*8db17052SBoyan Karatotev #define CPTR_EL3_OPCODE U(0x1E1140) 317*8db17052SBoyan Karatotev #define MDCR_EL3_OPCODE U(0x1E1320) 318*8db17052SBoyan Karatotev #define MPAM3_EL3_OPCODE U(0x1EA500) 319*8db17052SBoyan Karatotev 320*8db17052SBoyan Karatotev #endif /* ARCH_FEATURE_AVAILABILITY */ 321*8db17052SBoyan Karatotev #endif /* __ASSEMBLER__ */ 322c3cf06f1SAntonio Nino Diaz #endif /* ARM_ARCH_SVC_H */ 323