1.. _elf_hwcaps_index: 2 3================ 4ARM64 ELF hwcaps 5================ 6 7This document describes the usage and semantics of the arm64 ELF hwcaps. 8 9 101. Introduction 11--------------- 12 13Some hardware or software features are only available on some CPU 14implementations, and/or with certain kernel configurations, but have no 15architected discovery mechanism available to userspace code at EL0. The 16kernel exposes the presence of these features to userspace through a set 17of flags called hwcaps, exposed in the auxiliary vector. 18 19Userspace software can test for features by acquiring the AT_HWCAP or 20AT_HWCAP2 entry of the auxiliary vector, and testing whether the relevant 21flags are set, e.g.:: 22 23 bool floating_point_is_present(void) 24 { 25 unsigned long hwcaps = getauxval(AT_HWCAP); 26 if (hwcaps & HWCAP_FP) 27 return true; 28 29 return false; 30 } 31 32Where software relies on a feature described by a hwcap, it should check 33the relevant hwcap flag to verify that the feature is present before 34attempting to make use of the feature. 35 36Features cannot be probed reliably through other means. When a feature 37is not available, attempting to use it may result in unpredictable 38behaviour, and is not guaranteed to result in any reliable indication 39that the feature is unavailable, such as a SIGILL. 40 41 422. Interpretation of hwcaps 43--------------------------- 44 45The majority of hwcaps are intended to indicate the presence of features 46which are described by architected ID registers inaccessible to 47userspace code at EL0. These hwcaps are defined in terms of ID register 48fields, and should be interpreted with reference to the definition of 49these fields in the ARM Architecture Reference Manual (ARM ARM). 50 51Such hwcaps are described below in the form:: 52 53 Functionality implied by idreg.field == val. 54 55Such hwcaps indicate the availability of functionality that the ARM ARM 56defines as being present when idreg.field has value val, but do not 57indicate that idreg.field is precisely equal to val, nor do they 58indicate the absence of functionality implied by other values of 59idreg.field. 60 61Other hwcaps may indicate the presence of features which cannot be 62described by ID registers alone. These may be described without 63reference to ID registers, and may refer to other documentation. 64 65 663. The hwcaps exposed in AT_HWCAP 67--------------------------------- 68 69HWCAP_FP 70 Functionality implied by ID_AA64PFR0_EL1.FP == 0b0000. 71 72HWCAP_ASIMD 73 Functionality implied by ID_AA64PFR0_EL1.AdvSIMD == 0b0000. 74 75HWCAP_EVTSTRM 76 The generic timer is configured to generate events at a frequency of 77 approximately 10KHz. 78 79HWCAP_AES 80 Functionality implied by ID_AA64ISAR0_EL1.AES == 0b0001. 81 82HWCAP_PMULL 83 Functionality implied by ID_AA64ISAR0_EL1.AES == 0b0010. 84 85HWCAP_SHA1 86 Functionality implied by ID_AA64ISAR0_EL1.SHA1 == 0b0001. 87 88HWCAP_SHA2 89 Functionality implied by ID_AA64ISAR0_EL1.SHA2 == 0b0001. 90 91HWCAP_CRC32 92 Functionality implied by ID_AA64ISAR0_EL1.CRC32 == 0b0001. 93 94HWCAP_ATOMICS 95 Functionality implied by ID_AA64ISAR0_EL1.Atomic == 0b0010. 96 97HWCAP_FPHP 98 Functionality implied by ID_AA64PFR0_EL1.FP == 0b0001. 99 100HWCAP_ASIMDHP 101 Functionality implied by ID_AA64PFR0_EL1.AdvSIMD == 0b0001. 102 103HWCAP_CPUID 104 EL0 access to certain ID registers is available, to the extent 105 described by Documentation/arch/arm64/cpu-feature-registers.rst. 106 107 These ID registers may imply the availability of features. 108 109HWCAP_ASIMDRDM 110 Functionality implied by ID_AA64ISAR0_EL1.RDM == 0b0001. 111 112HWCAP_JSCVT 113 Functionality implied by ID_AA64ISAR1_EL1.JSCVT == 0b0001. 114 115HWCAP_FCMA 116 Functionality implied by ID_AA64ISAR1_EL1.FCMA == 0b0001. 117 118HWCAP_LRCPC 119 Functionality implied by ID_AA64ISAR1_EL1.LRCPC == 0b0001. 120 121HWCAP_DCPOP 122 Functionality implied by ID_AA64ISAR1_EL1.DPB == 0b0001. 123 124HWCAP_SHA3 125 Functionality implied by ID_AA64ISAR0_EL1.SHA3 == 0b0001. 126 127HWCAP_SM3 128 Functionality implied by ID_AA64ISAR0_EL1.SM3 == 0b0001. 129 130HWCAP_SM4 131 Functionality implied by ID_AA64ISAR0_EL1.SM4 == 0b0001. 132 133HWCAP_ASIMDDP 134 Functionality implied by ID_AA64ISAR0_EL1.DP == 0b0001. 135 136HWCAP_SHA512 137 Functionality implied by ID_AA64ISAR0_EL1.SHA2 == 0b0010. 138 139HWCAP_SVE 140 Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001. 141 142HWCAP_ASIMDFHM 143 Functionality implied by ID_AA64ISAR0_EL1.FHM == 0b0001. 144 145HWCAP_DIT 146 Functionality implied by ID_AA64PFR0_EL1.DIT == 0b0001. 147 148HWCAP_USCAT 149 Functionality implied by ID_AA64MMFR2_EL1.AT == 0b0001. 150 151HWCAP_ILRCPC 152 Functionality implied by ID_AA64ISAR1_EL1.LRCPC == 0b0010. 153 154HWCAP_FLAGM 155 Functionality implied by ID_AA64ISAR0_EL1.TS == 0b0001. 156 157HWCAP_SSBS 158 Functionality implied by ID_AA64PFR1_EL1.SSBS == 0b0010. 159 160HWCAP_SB 161 Functionality implied by ID_AA64ISAR1_EL1.SB == 0b0001. 162 163HWCAP_PACA 164 Functionality implied by ID_AA64ISAR1_EL1.APA == 0b0001 or 165 ID_AA64ISAR1_EL1.API == 0b0001, as described by 166 Documentation/arch/arm64/pointer-authentication.rst. 167 168HWCAP_PACG 169 Functionality implied by ID_AA64ISAR1_EL1.GPA == 0b0001 or 170 ID_AA64ISAR1_EL1.GPI == 0b0001, as described by 171 Documentation/arch/arm64/pointer-authentication.rst. 172 173HWCAP2_DCPODP 174 Functionality implied by ID_AA64ISAR1_EL1.DPB == 0b0010. 175 176HWCAP2_SVE2 177 Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and 178 ID_AA64ZFR0_EL1.SVEver == 0b0001. 179 180HWCAP2_SVEAES 181 Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and 182 ID_AA64ZFR0_EL1.AES == 0b0001. 183 184HWCAP2_SVEPMULL 185 Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and 186 ID_AA64ZFR0_EL1.AES == 0b0010. 187 188HWCAP2_SVEBITPERM 189 Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and 190 ID_AA64ZFR0_EL1.BitPerm == 0b0001. 191 192HWCAP2_SVESHA3 193 Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and 194 ID_AA64ZFR0_EL1.SHA3 == 0b0001. 195 196HWCAP2_SVESM4 197 Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and 198 ID_AA64ZFR0_EL1.SM4 == 0b0001. 199 200HWCAP2_FLAGM2 201 Functionality implied by ID_AA64ISAR0_EL1.TS == 0b0010. 202 203HWCAP2_FRINT 204 Functionality implied by ID_AA64ISAR1_EL1.FRINTTS == 0b0001. 205 206HWCAP2_SVEI8MM 207 Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and 208 ID_AA64ZFR0_EL1.I8MM == 0b0001. 209 210HWCAP2_SVEF32MM 211 Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and 212 ID_AA64ZFR0_EL1.F32MM == 0b0001. 213 214HWCAP2_SVEF64MM 215 Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and 216 ID_AA64ZFR0_EL1.F64MM == 0b0001. 217 218HWCAP2_SVEBF16 219 Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and 220 ID_AA64ZFR0_EL1.BF16 == 0b0001. 221 222HWCAP2_I8MM 223 Functionality implied by ID_AA64ISAR1_EL1.I8MM == 0b0001. 224 225HWCAP2_BF16 226 Functionality implied by ID_AA64ISAR1_EL1.BF16 == 0b0001. 227 228HWCAP2_DGH 229 Functionality implied by ID_AA64ISAR1_EL1.DGH == 0b0001. 230 231HWCAP2_RNG 232 Functionality implied by ID_AA64ISAR0_EL1.RNDR == 0b0001. 233 234HWCAP2_BTI 235 Functionality implied by ID_AA64PFR1_EL1.BT == 0b0001. 236 237HWCAP2_MTE 238 Functionality implied by ID_AA64PFR1_EL1.MTE == 0b0010, as described 239 by Documentation/arch/arm64/memory-tagging-extension.rst. 240 241HWCAP2_ECV 242 Functionality implied by ID_AA64MMFR0_EL1.ECV == 0b0001. 243 244HWCAP2_AFP 245 Functionality implied by ID_AA64MMFR1_EL1.AFP == 0b0001. 246 247HWCAP2_RPRES 248 Functionality implied by ID_AA64ISAR2_EL1.RPRES == 0b0001. 249 250HWCAP2_MTE3 251 Functionality implied by ID_AA64PFR1_EL1.MTE == 0b0011, as described 252 by Documentation/arch/arm64/memory-tagging-extension.rst. 253 254HWCAP2_SME 255 Functionality implied by ID_AA64PFR1_EL1.SME == 0b0001, as described 256 by Documentation/arch/arm64/sme.rst. 257 258HWCAP2_SME_I16I64 259 Functionality implied by ID_AA64SMFR0_EL1.I16I64 == 0b1111. 260 261HWCAP2_SME_F64F64 262 Functionality implied by ID_AA64SMFR0_EL1.F64F64 == 0b1. 263 264HWCAP2_SME_I8I32 265 Functionality implied by ID_AA64SMFR0_EL1.I8I32 == 0b1111. 266 267HWCAP2_SME_F16F32 268 Functionality implied by ID_AA64SMFR0_EL1.F16F32 == 0b1. 269 270HWCAP2_SME_B16F32 271 Functionality implied by ID_AA64SMFR0_EL1.B16F32 == 0b1. 272 273HWCAP2_SME_F32F32 274 Functionality implied by ID_AA64SMFR0_EL1.F32F32 == 0b1. 275 276HWCAP2_SME_FA64 277 Functionality implied by ID_AA64SMFR0_EL1.FA64 == 0b1. 278 279HWCAP2_WFXT 280 Functionality implied by ID_AA64ISAR2_EL1.WFXT == 0b0010. 281 282HWCAP2_EBF16 283 Functionality implied by ID_AA64ISAR1_EL1.BF16 == 0b0010. 284 285HWCAP2_SVE_EBF16 286 Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and 287 ID_AA64ZFR0_EL1.BF16 == 0b0010. 288 289HWCAP2_CSSC 290 Functionality implied by ID_AA64ISAR2_EL1.CSSC == 0b0001. 291 292HWCAP2_RPRFM 293 Functionality implied by ID_AA64ISAR2_EL1.RPRFM == 0b0001. 294 295HWCAP2_SVE2P1 296 Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and 297 ID_AA64ZFR0_EL1.SVEver == 0b0010. 298 299HWCAP2_SME2 300 Functionality implied by ID_AA64SMFR0_EL1.SMEver == 0b0001. 301 302HWCAP2_SME2P1 303 Functionality implied by ID_AA64SMFR0_EL1.SMEver == 0b0010. 304 305HWCAP2_SMEI16I32 306 Functionality implied by ID_AA64SMFR0_EL1.I16I32 == 0b0101 307 308HWCAP2_SMEBI32I32 309 Functionality implied by ID_AA64SMFR0_EL1.BI32I32 == 0b1 310 311HWCAP2_SMEB16B16 312 Functionality implied by ID_AA64SMFR0_EL1.B16B16 == 0b1 313 314HWCAP2_SMEF16F16 315 Functionality implied by ID_AA64SMFR0_EL1.F16F16 == 0b1 316 317HWCAP2_MOPS 318 Functionality implied by ID_AA64ISAR2_EL1.MOPS == 0b0001. 319 320HWCAP2_HBC 321 Functionality implied by ID_AA64ISAR2_EL1.BC == 0b0001. 322 323HWCAP2_SVE_B16B16 324 Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and 325 ID_AA64ZFR0_EL1.B16B16 == 0b0001. 326 327HWCAP2_LRCPC3 328 Functionality implied by ID_AA64ISAR1_EL1.LRCPC == 0b0011. 329 330HWCAP2_LSE128 331 Functionality implied by ID_AA64ISAR0_EL1.Atomic == 0b0011. 332 333HWCAP2_FPMR 334 Functionality implied by ID_AA64PFR2_EL1.FMR == 0b0001. 335 336HWCAP2_LUT 337 Functionality implied by ID_AA64ISAR2_EL1.LUT == 0b0001. 338 339HWCAP2_FAMINMAX 340 Functionality implied by ID_AA64ISAR3_EL1.FAMINMAX == 0b0001. 341 342HWCAP2_F8CVT 343 Functionality implied by ID_AA64FPFR0_EL1.F8CVT == 0b1. 344 345HWCAP2_F8FMA 346 Functionality implied by ID_AA64FPFR0_EL1.F8FMA == 0b1. 347 348HWCAP2_F8DP4 349 Functionality implied by ID_AA64FPFR0_EL1.F8DP4 == 0b1. 350 351HWCAP2_F8DP2 352 Functionality implied by ID_AA64FPFR0_EL1.F8DP2 == 0b1. 353 354HWCAP2_F8E4M3 355 Functionality implied by ID_AA64FPFR0_EL1.F8E4M3 == 0b1. 356 357HWCAP2_F8E5M2 358 Functionality implied by ID_AA64FPFR0_EL1.F8E5M2 == 0b1. 359 360HWCAP2_SME_LUTV2 361 Functionality implied by ID_AA64SMFR0_EL1.LUTv2 == 0b1. 362 363HWCAP2_SME_F8F16 364 Functionality implied by ID_AA64SMFR0_EL1.F8F16 == 0b1. 365 366HWCAP2_SME_F8F32 367 Functionality implied by ID_AA64SMFR0_EL1.F8F32 == 0b1. 368 369HWCAP2_SME_SF8FMA 370 Functionality implied by ID_AA64SMFR0_EL1.SF8FMA == 0b1. 371 372HWCAP2_SME_SF8DP4 373 Functionality implied by ID_AA64SMFR0_EL1.SF8DP4 == 0b1. 374 375HWCAP2_SME_SF8DP2 376 Functionality implied by ID_AA64SMFR0_EL1.SF8DP2 == 0b1. 377 378HWCAP2_SME_SF8DP4 379 Functionality implied by ID_AA64SMFR0_EL1.SF8DP4 == 0b1. 380 381HWCAP2_POE 382 Functionality implied by ID_AA64MMFR3_EL1.S1POE == 0b0001. 383 3844. Unused AT_HWCAP bits 385----------------------- 386 387For interoperation with userspace, the kernel guarantees that bits 62 388and 63 of AT_HWCAP will always be returned as 0. 389