]> git.ipfire.org Git - thirdparty/kernel/stable.git/blame - Documentation/arch/arm64/elf_hwcaps.rst
Merge tag 'kvm-x86-docs-6.7' of https://github.com/kvm-x86/linux into HEAD
[thirdparty/kernel/stable.git] / Documentation / arch / arm64 / elf_hwcaps.rst
CommitLineData
2472943c
BL
1.. _elf_hwcaps_index:
2
b693d0b3 3================
611a7bc7
MR
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
a70f00e7 17of flags called hwcaps, exposed in the auxiliary vector.
611a7bc7 18
aaba098f
AM
19Userspace software can test for features by acquiring the AT_HWCAP or
20AT_HWCAP2 entry of the auxiliary vector, and testing whether the relevant
b693d0b3 21flags are set, e.g.::
611a7bc7 22
b693d0b3
MCC
23 bool floating_point_is_present(void)
24 {
25 unsigned long hwcaps = getauxval(AT_HWCAP);
26 if (hwcaps & HWCAP_FP)
27 return true;
611a7bc7 28
b693d0b3
MCC
29 return false;
30 }
611a7bc7
MR
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
b693d0b3 51Such hwcaps are described below in the form::
611a7bc7
MR
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
611a7bc7
MR
70 Functionality implied by ID_AA64PFR0_EL1.FP == 0b0000.
71
72HWCAP_ASIMD
611a7bc7
MR
73 Functionality implied by ID_AA64PFR0_EL1.AdvSIMD == 0b0000.
74
75HWCAP_EVTSTRM
611a7bc7 76 The generic timer is configured to generate events at a frequency of
5d8505fd 77 approximately 10KHz.
611a7bc7
MR
78
79HWCAP_AES
4bfbe5ee 80 Functionality implied by ID_AA64ISAR0_EL1.AES == 0b0001.
611a7bc7
MR
81
82HWCAP_PMULL
4bfbe5ee 83 Functionality implied by ID_AA64ISAR0_EL1.AES == 0b0010.
611a7bc7
MR
84
85HWCAP_SHA1
611a7bc7
MR
86 Functionality implied by ID_AA64ISAR0_EL1.SHA1 == 0b0001.
87
88HWCAP_SHA2
611a7bc7
MR
89 Functionality implied by ID_AA64ISAR0_EL1.SHA2 == 0b0001.
90
91HWCAP_CRC32
611a7bc7
MR
92 Functionality implied by ID_AA64ISAR0_EL1.CRC32 == 0b0001.
93
94HWCAP_ATOMICS
611a7bc7
MR
95 Functionality implied by ID_AA64ISAR0_EL1.Atomic == 0b0010.
96
97HWCAP_FPHP
611a7bc7
MR
98 Functionality implied by ID_AA64PFR0_EL1.FP == 0b0001.
99
100HWCAP_ASIMDHP
611a7bc7
MR
101 Functionality implied by ID_AA64PFR0_EL1.AdvSIMD == 0b0001.
102
103HWCAP_CPUID
611a7bc7 104 EL0 access to certain ID registers is available, to the extent
e4624435 105 described by Documentation/arch/arm64/cpu-feature-registers.rst.
611a7bc7
MR
106
107 These ID registers may imply the availability of features.
108
109HWCAP_ASIMDRDM
611a7bc7
MR
110 Functionality implied by ID_AA64ISAR0_EL1.RDM == 0b0001.
111
112HWCAP_JSCVT
611a7bc7
MR
113 Functionality implied by ID_AA64ISAR1_EL1.JSCVT == 0b0001.
114
115HWCAP_FCMA
611a7bc7
MR
116 Functionality implied by ID_AA64ISAR1_EL1.FCMA == 0b0001.
117
118HWCAP_LRCPC
611a7bc7
MR
119 Functionality implied by ID_AA64ISAR1_EL1.LRCPC == 0b0001.
120
121HWCAP_DCPOP
611a7bc7
MR
122 Functionality implied by ID_AA64ISAR1_EL1.DPB == 0b0001.
123
124HWCAP_SHA3
611a7bc7
MR
125 Functionality implied by ID_AA64ISAR0_EL1.SHA3 == 0b0001.
126
127HWCAP_SM3
611a7bc7
MR
128 Functionality implied by ID_AA64ISAR0_EL1.SM3 == 0b0001.
129
130HWCAP_SM4
611a7bc7
MR
131 Functionality implied by ID_AA64ISAR0_EL1.SM4 == 0b0001.
132
133HWCAP_ASIMDDP
611a7bc7
MR
134 Functionality implied by ID_AA64ISAR0_EL1.DP == 0b0001.
135
136HWCAP_SHA512
4bfbe5ee 137 Functionality implied by ID_AA64ISAR0_EL1.SHA2 == 0b0010.
43994d82
DM
138
139HWCAP_SVE
43994d82 140 Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001.
3b3b6810
DG
141
142HWCAP_ASIMDFHM
3b3b6810 143 Functionality implied by ID_AA64ISAR0_EL1.FHM == 0b0001.
7206dc93
SP
144
145HWCAP_DIT
7206dc93
SP
146 Functionality implied by ID_AA64PFR0_EL1.DIT == 0b0001.
147
148HWCAP_USCAT
7206dc93
SP
149 Functionality implied by ID_AA64MMFR2_EL1.AT == 0b0001.
150
151HWCAP_ILRCPC
4bfbe5ee 152 Functionality implied by ID_AA64ISAR1_EL1.LRCPC == 0b0010.
7206dc93
SP
153
154HWCAP_FLAGM
7206dc93 155 Functionality implied by ID_AA64ISAR0_EL1.TS == 0b0001.
ee911761
WD
156
157HWCAP_SSBS
ee911761 158 Functionality implied by ID_AA64PFR1_EL1.SSBS == 0b0010.
fbedc599 159
0f6e4c40
JG
160HWCAP_SB
161 Functionality implied by ID_AA64ISAR1_EL1.SB == 0b0001.
162
fbedc599 163HWCAP_PACA
fbedc599
MR
164 Functionality implied by ID_AA64ISAR1_EL1.APA == 0b0001 or
165 ID_AA64ISAR1_EL1.API == 0b0001, as described by
e4624435 166 Documentation/arch/arm64/pointer-authentication.rst.
fbedc599
MR
167
168HWCAP_PACG
fbedc599
MR
169 Functionality implied by ID_AA64ISAR1_EL1.GPA == 0b0001 or
170 ID_AA64ISAR1_EL1.GPI == 0b0001, as described by
e4624435 171 Documentation/arch/arm64/pointer-authentication.rst.
aaba098f 172
3a25e46c 173HWCAP2_DCPODP
3a25e46c
JG
174 Functionality implied by ID_AA64ISAR1_EL1.DPB == 0b0010.
175
176HWCAP2_SVE2
3a25e46c
JG
177 Functionality implied by ID_AA64ZFR0_EL1.SVEVer == 0b0001.
178
179HWCAP2_SVEAES
3a25e46c
JG
180 Functionality implied by ID_AA64ZFR0_EL1.AES == 0b0001.
181
182HWCAP2_SVEPMULL
3a25e46c
JG
183 Functionality implied by ID_AA64ZFR0_EL1.AES == 0b0010.
184
185HWCAP2_SVEBITPERM
3a25e46c
JG
186 Functionality implied by ID_AA64ZFR0_EL1.BitPerm == 0b0001.
187
188HWCAP2_SVESHA3
3a25e46c
JG
189 Functionality implied by ID_AA64ZFR0_EL1.SHA3 == 0b0001.
190
191HWCAP2_SVESM4
3a25e46c
JG
192 Functionality implied by ID_AA64ZFR0_EL1.SM4 == 0b0001.
193
194HWCAP2_FLAGM2
3a25e46c
JG
195 Functionality implied by ID_AA64ISAR0_EL1.TS == 0b0010.
196
ca9503fc 197HWCAP2_FRINT
ca9503fc
MB
198 Functionality implied by ID_AA64ISAR1_EL1.FRINTTS == 0b0001.
199
d4209d8b 200HWCAP2_SVEI8MM
d4209d8b
SP
201 Functionality implied by ID_AA64ZFR0_EL1.I8MM == 0b0001.
202
203HWCAP2_SVEF32MM
d4209d8b
SP
204 Functionality implied by ID_AA64ZFR0_EL1.F32MM == 0b0001.
205
206HWCAP2_SVEF64MM
d4209d8b
SP
207 Functionality implied by ID_AA64ZFR0_EL1.F64MM == 0b0001.
208
209HWCAP2_SVEBF16
d4209d8b
SP
210 Functionality implied by ID_AA64ZFR0_EL1.BF16 == 0b0001.
211
212HWCAP2_I8MM
d4209d8b
SP
213 Functionality implied by ID_AA64ISAR1_EL1.I8MM == 0b0001.
214
215HWCAP2_BF16
d4209d8b
SP
216 Functionality implied by ID_AA64ISAR1_EL1.BF16 == 0b0001.
217
218HWCAP2_DGH
d4209d8b 219 Functionality implied by ID_AA64ISAR1_EL1.DGH == 0b0001.
aaba098f 220
1a50ec0b 221HWCAP2_RNG
1a50ec0b
RH
222 Functionality implied by ID_AA64ISAR0_EL1.RNDR == 0b0001.
223
8ef8f360 224HWCAP2_BTI
8ef8f360
DM
225 Functionality implied by ID_AA64PFR0_EL1.BT == 0b0001.
226
df9d7a22 227HWCAP2_MTE
df9d7a22 228 Functionality implied by ID_AA64PFR1_EL1.MTE == 0b0010, as described
e4624435 229 by Documentation/arch/arm64/memory-tagging-extension.rst.
8ef8f360 230
fee29f00 231HWCAP2_ECV
fee29f00
MZ
232 Functionality implied by ID_AA64MMFR0_EL1.ECV == 0b0001.
233
5c13f042 234HWCAP2_AFP
5c13f042
JG
235 Functionality implied by ID_AA64MFR1_EL1.AFP == 0b0001.
236
1175011a 237HWCAP2_RPRES
1175011a
JG
238 Functionality implied by ID_AA64ISAR2_EL1.RPRES == 0b0001.
239
d082a025 240HWCAP2_MTE3
d082a025 241 Functionality implied by ID_AA64PFR1_EL1.MTE == 0b0011, as described
e4624435 242 by Documentation/arch/arm64/memory-tagging-extension.rst.
d082a025 243
5e64b862 244HWCAP2_SME
5e64b862 245 Functionality implied by ID_AA64PFR1_EL1.SME == 0b0001, as described
e4624435 246 by Documentation/arch/arm64/sme.rst.
5e64b862
MB
247
248HWCAP2_SME_I16I64
5e64b862
MB
249 Functionality implied by ID_AA64SMFR0_EL1.I16I64 == 0b1111.
250
251HWCAP2_SME_F64F64
5e64b862
MB
252 Functionality implied by ID_AA64SMFR0_EL1.F64F64 == 0b1.
253
254HWCAP2_SME_I8I32
5e64b862
MB
255 Functionality implied by ID_AA64SMFR0_EL1.I8I32 == 0b1111.
256
257HWCAP2_SME_F16F32
5e64b862
MB
258 Functionality implied by ID_AA64SMFR0_EL1.F16F32 == 0b1.
259
260HWCAP2_SME_B16F32
5e64b862
MB
261 Functionality implied by ID_AA64SMFR0_EL1.B16F32 == 0b1.
262
263HWCAP2_SME_F32F32
5e64b862
MB
264 Functionality implied by ID_AA64SMFR0_EL1.F32F32 == 0b1.
265
266HWCAP2_SME_FA64
5e64b862
MB
267 Functionality implied by ID_AA64SMFR0_EL1.FA64 == 0b1.
268
69bb02eb 269HWCAP2_WFXT
69bb02eb
MZ
270 Functionality implied by ID_AA64ISAR2_EL1.WFXT == 0b0010.
271
a6a468f5 272HWCAP2_EBF16
a6a468f5
MB
273 Functionality implied by ID_AA64ISAR1_EL1.BF16 == 0b0010.
274
81ff692a
MB
275HWCAP2_SVE_EBF16
276 Functionality implied by ID_AA64ZFR0_EL1.BF16 == 0b0010.
277
95aa6860
MB
278HWCAP2_CSSC
279 Functionality implied by ID_AA64ISAR2_EL1.CSSC == 0b0001.
280
939e4649
MB
281HWCAP2_RPRFM
282 Functionality implied by ID_AA64ISAR2_EL1.RPRFM == 0b0001.
283
d12aada8
MB
284HWCAP2_SVE2P1
285 Functionality implied by ID_AA64ZFR0_EL1.SVEver == 0b0010.
286
7d5d8601
MB
287HWCAP2_SME2
288 Functionality implied by ID_AA64SMFR0_EL1.SMEver == 0b0001.
289
290HWCAP2_SME2P1
291 Functionality implied by ID_AA64SMFR0_EL1.SMEver == 0b0010.
292
293HWCAP2_SMEI16I32
294 Functionality implied by ID_AA64SMFR0_EL1.I16I32 == 0b0101
295
296HWCAP2_SMEBI32I32
297 Functionality implied by ID_AA64SMFR0_EL1.BI32I32 == 0b1
298
299HWCAP2_SMEB16B16
300 Functionality implied by ID_AA64SMFR0_EL1.B16B16 == 0b1
301
302HWCAP2_SMEF16F16
303 Functionality implied by ID_AA64SMFR0_EL1.F16F16 == 0b1
304
b7564127
KM
305HWCAP2_MOPS
306 Functionality implied by ID_AA64ISAR2_EL1.MOPS == 0b0001.
307
5ad361f4
MB
308HWCAP2_HBC
309 Functionality implied by ID_AA64ISAR2_EL1.BC == 0b0001.
310
aaba098f
AM
3114. Unused AT_HWCAP bits
312-----------------------
313
314For interoperation with userspace, the kernel guarantees that bits 62
315and 63 of AT_HWCAP will always be returned as 0.