0001 .. SPDX-License-Identifier: GPL-2.0
0002
0003 .. include:: ../disclaimer-zh_TW.rst
0004
0005 :Original: :ref:`Documentation/arm64/elf_hwcaps.rst <elf_hwcaps_index>`
0006
0007 Translator: Bailu Lin <bailu.lin@vivo.com>
0008 Hu Haowen <src.res@email.cn>
0009
0010 ================
0011 ARM64 ELF hwcaps
0012 ================
0013
0014 這篇文檔描述了 arm64 ELF hwcaps 的用法和語義。
0015
0016
0017 1. 簡介
0018 -------
0019
0020 有些硬體或軟體功能僅在某些 CPU 實現上和/或在具體某個內核配置上可用,但
0021 對於處於 EL0 的用戶空間代碼沒有可用的架構發現機制。內核通過在輔助向量表
0022 公開一組稱爲 hwcaps 的標誌而把這些功能暴露給用戶空間。
0023
0024 用戶空間軟體可以通過獲取輔助向量的 AT_HWCAP 或 AT_HWCAP2 條目來測試功能,
0025 並測試是否設置了相關標誌,例如::
0026
0027 bool floating_point_is_present(void)
0028 {
0029 unsigned long hwcaps = getauxval(AT_HWCAP);
0030 if (hwcaps & HWCAP_FP)
0031 return true;
0032
0033 return false;
0034 }
0035
0036 如果軟體依賴於 hwcap 描述的功能,在嘗試使用該功能前則應檢查相關的 hwcap
0037 標誌以驗證該功能是否存在。
0038
0039 不能通過其他方式探查這些功能。當一個功能不可用時,嘗試使用它可能導致不可
0040 預測的行爲,並且無法保證能確切的知道該功能不可用,例如 SIGILL。
0041
0042
0043 2. Hwcaps 的說明
0044 ----------------
0045
0046 大多數 hwcaps 旨在說明通過架構 ID 寄存器(處於 EL0 的用戶空間代碼無法訪問)
0047 描述的功能的存在。這些 hwcap 通過 ID 寄存器欄位定義,並且應根據 ARM 體系
0048 結構參考手冊(ARM ARM)中定義的欄位來解釋說明。
0049
0050 這些 hwcaps 以下面的形式描述::
0051
0052 idreg.field == val 表示有某個功能。
0053
0054 當 idreg.field 中有 val 時,hwcaps 表示 ARM ARM 定義的功能是有效的,但是
0055 並不是說要完全和 val 相等,也不是說 idreg.field 描述的其他功能就是缺失的。
0056
0057 其他 hwcaps 可能表明無法僅由 ID 寄存器描述的功能的存在。這些 hwcaps 可能
0058 沒有被 ID 寄存器描述,需要參考其他文檔。
0059
0060
0061 3. AT_HWCAP 中揭示的 hwcaps
0062 ---------------------------
0063
0064 HWCAP_FP
0065 ID_AA64PFR0_EL1.FP == 0b0000 表示有此功能。
0066
0067 HWCAP_ASIMD
0068 ID_AA64PFR0_EL1.AdvSIMD == 0b0000 表示有此功能。
0069
0070 HWCAP_EVTSTRM
0071 通用計時器頻率配置爲大約100KHz以生成事件。
0072
0073 HWCAP_AES
0074 ID_AA64ISAR0_EL1.AES == 0b0001 表示有此功能。
0075
0076 HWCAP_PMULL
0077 ID_AA64ISAR0_EL1.AES == 0b0010 表示有此功能。
0078
0079 HWCAP_SHA1
0080 ID_AA64ISAR0_EL1.SHA1 == 0b0001 表示有此功能。
0081
0082 HWCAP_SHA2
0083 ID_AA64ISAR0_EL1.SHA2 == 0b0001 表示有此功能。
0084
0085 HWCAP_CRC32
0086 ID_AA64ISAR0_EL1.CRC32 == 0b0001 表示有此功能。
0087
0088 HWCAP_ATOMICS
0089 ID_AA64ISAR0_EL1.Atomic == 0b0010 表示有此功能。
0090
0091 HWCAP_FPHP
0092 ID_AA64PFR0_EL1.FP == 0b0001 表示有此功能。
0093
0094 HWCAP_ASIMDHP
0095 ID_AA64PFR0_EL1.AdvSIMD == 0b0001 表示有此功能。
0096
0097 HWCAP_CPUID
0098 根據 Documentation/arm64/cpu-feature-registers.rst 描述,EL0 可以訪問
0099 某些 ID 寄存器。
0100
0101 這些 ID 寄存器可能表示功能的可用性。
0102
0103 HWCAP_ASIMDRDM
0104 ID_AA64ISAR0_EL1.RDM == 0b0001 表示有此功能。
0105
0106 HWCAP_JSCVT
0107 ID_AA64ISAR1_EL1.JSCVT == 0b0001 表示有此功能。
0108
0109 HWCAP_FCMA
0110 ID_AA64ISAR1_EL1.FCMA == 0b0001 表示有此功能。
0111
0112 HWCAP_LRCPC
0113 ID_AA64ISAR1_EL1.LRCPC == 0b0001 表示有此功能。
0114
0115 HWCAP_DCPOP
0116 ID_AA64ISAR1_EL1.DPB == 0b0001 表示有此功能。
0117
0118 HWCAP_SHA3
0119 ID_AA64ISAR0_EL1.SHA3 == 0b0001 表示有此功能。
0120
0121 HWCAP_SM3
0122 ID_AA64ISAR0_EL1.SM3 == 0b0001 表示有此功能。
0123
0124 HWCAP_SM4
0125 ID_AA64ISAR0_EL1.SM4 == 0b0001 表示有此功能。
0126
0127 HWCAP_ASIMDDP
0128 ID_AA64ISAR0_EL1.DP == 0b0001 表示有此功能。
0129
0130 HWCAP_SHA512
0131 ID_AA64ISAR0_EL1.SHA2 == 0b0010 表示有此功能。
0132
0133 HWCAP_SVE
0134 ID_AA64PFR0_EL1.SVE == 0b0001 表示有此功能。
0135
0136 HWCAP_ASIMDFHM
0137 ID_AA64ISAR0_EL1.FHM == 0b0001 表示有此功能。
0138
0139 HWCAP_DIT
0140 ID_AA64PFR0_EL1.DIT == 0b0001 表示有此功能。
0141
0142 HWCAP_USCAT
0143 ID_AA64MMFR2_EL1.AT == 0b0001 表示有此功能。
0144
0145 HWCAP_ILRCPC
0146 ID_AA64ISAR1_EL1.LRCPC == 0b0010 表示有此功能。
0147
0148 HWCAP_FLAGM
0149 ID_AA64ISAR0_EL1.TS == 0b0001 表示有此功能。
0150
0151 HWCAP_SSBS
0152 ID_AA64PFR1_EL1.SSBS == 0b0010 表示有此功能。
0153
0154 HWCAP_SB
0155 ID_AA64ISAR1_EL1.SB == 0b0001 表示有此功能。
0156
0157 HWCAP_PACA
0158 如 Documentation/arm64/pointer-authentication.rst 所描述,
0159 ID_AA64ISAR1_EL1.APA == 0b0001 或 ID_AA64ISAR1_EL1.API == 0b0001
0160 表示有此功能。
0161
0162 HWCAP_PACG
0163 如 Documentation/arm64/pointer-authentication.rst 所描述,
0164 ID_AA64ISAR1_EL1.GPA == 0b0001 或 ID_AA64ISAR1_EL1.GPI == 0b0001
0165 表示有此功能。
0166
0167 HWCAP2_DCPODP
0168
0169 ID_AA64ISAR1_EL1.DPB == 0b0010 表示有此功能。
0170
0171 HWCAP2_SVE2
0172
0173 ID_AA64ZFR0_EL1.SVEVer == 0b0001 表示有此功能。
0174
0175 HWCAP2_SVEAES
0176
0177 ID_AA64ZFR0_EL1.AES == 0b0001 表示有此功能。
0178
0179 HWCAP2_SVEPMULL
0180
0181 ID_AA64ZFR0_EL1.AES == 0b0010 表示有此功能。
0182
0183 HWCAP2_SVEBITPERM
0184
0185 ID_AA64ZFR0_EL1.BitPerm == 0b0001 表示有此功能。
0186
0187 HWCAP2_SVESHA3
0188
0189 ID_AA64ZFR0_EL1.SHA3 == 0b0001 表示有此功能。
0190
0191 HWCAP2_SVESM4
0192
0193 ID_AA64ZFR0_EL1.SM4 == 0b0001 表示有此功能。
0194
0195 HWCAP2_FLAGM2
0196
0197 ID_AA64ISAR0_EL1.TS == 0b0010 表示有此功能。
0198
0199 HWCAP2_FRINT
0200
0201 ID_AA64ISAR1_EL1.FRINTTS == 0b0001 表示有此功能。
0202
0203 HWCAP2_SVEI8MM
0204
0205 ID_AA64ZFR0_EL1.I8MM == 0b0001 表示有此功能。
0206
0207 HWCAP2_SVEF32MM
0208
0209 ID_AA64ZFR0_EL1.F32MM == 0b0001 表示有此功能。
0210
0211 HWCAP2_SVEF64MM
0212
0213 ID_AA64ZFR0_EL1.F64MM == 0b0001 表示有此功能。
0214
0215 HWCAP2_SVEBF16
0216
0217 ID_AA64ZFR0_EL1.BF16 == 0b0001 表示有此功能。
0218
0219 HWCAP2_I8MM
0220
0221 ID_AA64ISAR1_EL1.I8MM == 0b0001 表示有此功能。
0222
0223 HWCAP2_BF16
0224
0225 ID_AA64ISAR1_EL1.BF16 == 0b0001 表示有此功能。
0226
0227 HWCAP2_DGH
0228
0229 ID_AA64ISAR1_EL1.DGH == 0b0001 表示有此功能。
0230
0231 HWCAP2_RNG
0232
0233 ID_AA64ISAR0_EL1.RNDR == 0b0001 表示有此功能。
0234
0235 HWCAP2_BTI
0236
0237 ID_AA64PFR0_EL1.BT == 0b0001 表示有此功能。
0238
0239
0240 4. 未使用的 AT_HWCAP 位
0241 -----------------------
0242
0243 爲了與用戶空間交互,內核保證 AT_HWCAP 的第62、63位將始終返回0。
0244