245 lines · plain
1.. SPDX-License-Identifier: GPL-2.02 3.. include:: ../../disclaimer-zh_TW.rst4 5:Original: :ref:`Documentation/arch/arm64/elf_hwcaps.rst <elf_hwcaps_index>`6 7Translator: Bailu Lin <bailu.lin@vivo.com>8 Hu Haowen <2023002089@link.tyut.edu.cn>9 10================11ARM64 ELF hwcaps12================13 14這篇文檔描述了 arm64 ELF hwcaps 的用法和語義。15 16 171. 簡介18-------19 20有些硬件或軟件功能僅在某些 CPU 實現上和/或在具體某個內核配置上可用,但21對於處於 EL0 的用戶空間代碼沒有可用的架構發現機制。內核通過在輔助向量表22公開一組稱爲 hwcaps 的標誌而把這些功能暴露給用戶空間。23 24用戶空間軟件可以通過獲取輔助向量的 AT_HWCAP 或 AT_HWCAP2 條目來測試功能,25並測試是否設置了相關標誌,例如::26 27 bool floating_point_is_present(void)28 {29 unsigned long hwcaps = getauxval(AT_HWCAP);30 if (hwcaps & HWCAP_FP)31 return true;32 33 return false;34 }35 36如果軟件依賴於 hwcap 描述的功能,在嘗試使用該功能前則應檢查相關的 hwcap37標誌以驗證該功能是否存在。38 39不能通過其他方式探查這些功能。當一個功能不可用時,嘗試使用它可能導致不可40預測的行爲,並且無法保證能確切的知道該功能不可用,例如 SIGILL。41 42 432. Hwcaps 的說明44----------------45 46大多數 hwcaps 旨在說明通過架構 ID 寄存器(處於 EL0 的用戶空間代碼無法訪問)47描述的功能的存在。這些 hwcap 通過 ID 寄存器字段定義,並且應根據 ARM 體系48結構參考手冊(ARM ARM)中定義的字段來解釋說明。49 50這些 hwcaps 以下面的形式描述::51 52 idreg.field == val 表示有某個功能。53 54當 idreg.field 中有 val 時,hwcaps 表示 ARM ARM 定義的功能是有效的,但是55並不是說要完全和 val 相等,也不是說 idreg.field 描述的其他功能就是缺失的。56 57其他 hwcaps 可能表明無法僅由 ID 寄存器描述的功能的存在。這些 hwcaps 可能58沒有被 ID 寄存器描述,需要參考其他文檔。59 60 613. AT_HWCAP 中揭示的 hwcaps62---------------------------63 64HWCAP_FP65 ID_AA64PFR0_EL1.FP == 0b0000 表示有此功能。66 67HWCAP_ASIMD68 ID_AA64PFR0_EL1.AdvSIMD == 0b0000 表示有此功能。69 70HWCAP_EVTSTRM71 通用計時器頻率配置爲大約100KHz以生成事件。72 73HWCAP_AES74 ID_AA64ISAR0_EL1.AES == 0b0001 表示有此功能。75 76HWCAP_PMULL77 ID_AA64ISAR0_EL1.AES == 0b0010 表示有此功能。78 79HWCAP_SHA180 ID_AA64ISAR0_EL1.SHA1 == 0b0001 表示有此功能。81 82HWCAP_SHA283 ID_AA64ISAR0_EL1.SHA2 == 0b0001 表示有此功能。84 85HWCAP_CRC3286 ID_AA64ISAR0_EL1.CRC32 == 0b0001 表示有此功能。87 88HWCAP_ATOMICS89 ID_AA64ISAR0_EL1.Atomic == 0b0010 表示有此功能。90 91HWCAP_FPHP92 ID_AA64PFR0_EL1.FP == 0b0001 表示有此功能。93 94HWCAP_ASIMDHP95 ID_AA64PFR0_EL1.AdvSIMD == 0b0001 表示有此功能。96 97HWCAP_CPUID98 根據 Documentation/arch/arm64/cpu-feature-registers.rst 描述,EL0 可以訪問99 某些 ID 寄存器。100 101 這些 ID 寄存器可能表示功能的可用性。102 103HWCAP_ASIMDRDM104 ID_AA64ISAR0_EL1.RDM == 0b0001 表示有此功能。105 106HWCAP_JSCVT107 ID_AA64ISAR1_EL1.JSCVT == 0b0001 表示有此功能。108 109HWCAP_FCMA110 ID_AA64ISAR1_EL1.FCMA == 0b0001 表示有此功能。111 112HWCAP_LRCPC113 ID_AA64ISAR1_EL1.LRCPC == 0b0001 表示有此功能。114 115HWCAP_DCPOP116 ID_AA64ISAR1_EL1.DPB == 0b0001 表示有此功能。117 118HWCAP_SHA3119 ID_AA64ISAR0_EL1.SHA3 == 0b0001 表示有此功能。120 121HWCAP_SM3122 ID_AA64ISAR0_EL1.SM3 == 0b0001 表示有此功能。123 124HWCAP_SM4125 ID_AA64ISAR0_EL1.SM4 == 0b0001 表示有此功能。126 127HWCAP_ASIMDDP128 ID_AA64ISAR0_EL1.DP == 0b0001 表示有此功能。129 130HWCAP_SHA512131 ID_AA64ISAR0_EL1.SHA2 == 0b0010 表示有此功能。132 133HWCAP_SVE134 ID_AA64PFR0_EL1.SVE == 0b0001 表示有此功能。135 136HWCAP_ASIMDFHM137 ID_AA64ISAR0_EL1.FHM == 0b0001 表示有此功能。138 139HWCAP_DIT140 ID_AA64PFR0_EL1.DIT == 0b0001 表示有此功能。141 142HWCAP_USCAT143 ID_AA64MMFR2_EL1.AT == 0b0001 表示有此功能。144 145HWCAP_ILRCPC146 ID_AA64ISAR1_EL1.LRCPC == 0b0010 表示有此功能。147 148HWCAP_FLAGM149 ID_AA64ISAR0_EL1.TS == 0b0001 表示有此功能。150 151HWCAP_SSBS152 ID_AA64PFR1_EL1.SSBS == 0b0010 表示有此功能。153 154HWCAP_SB155 ID_AA64ISAR1_EL1.SB == 0b0001 表示有此功能。156 157HWCAP_PACA158 如 Documentation/arch/arm64/pointer-authentication.rst 所描述,159 ID_AA64ISAR1_EL1.APA == 0b0001 或 ID_AA64ISAR1_EL1.API == 0b0001160 表示有此功能。161 162HWCAP_PACG163 如 Documentation/arch/arm64/pointer-authentication.rst 所描述,164 ID_AA64ISAR1_EL1.GPA == 0b0001 或 ID_AA64ISAR1_EL1.GPI == 0b0001165 表示有此功能。166 167HWCAP2_DCPODP168 169 ID_AA64ISAR1_EL1.DPB == 0b0010 表示有此功能。170 171HWCAP2_SVE2172 173 ID_AA64ZFR0_EL1.SVEVer == 0b0001 表示有此功能。174 175HWCAP2_SVEAES176 177 ID_AA64ZFR0_EL1.AES == 0b0001 表示有此功能。178 179HWCAP2_SVEPMULL180 181 ID_AA64ZFR0_EL1.AES == 0b0010 表示有此功能。182 183HWCAP2_SVEBITPERM184 185 ID_AA64ZFR0_EL1.BitPerm == 0b0001 表示有此功能。186 187HWCAP2_SVESHA3188 189 ID_AA64ZFR0_EL1.SHA3 == 0b0001 表示有此功能。190 191HWCAP2_SVESM4192 193 ID_AA64ZFR0_EL1.SM4 == 0b0001 表示有此功能。194 195HWCAP2_FLAGM2196 197 ID_AA64ISAR0_EL1.TS == 0b0010 表示有此功能。198 199HWCAP2_FRINT200 201 ID_AA64ISAR1_EL1.FRINTTS == 0b0001 表示有此功能。202 203HWCAP2_SVEI8MM204 205 ID_AA64ZFR0_EL1.I8MM == 0b0001 表示有此功能。206 207HWCAP2_SVEF32MM208 209 ID_AA64ZFR0_EL1.F32MM == 0b0001 表示有此功能。210 211HWCAP2_SVEF64MM212 213 ID_AA64ZFR0_EL1.F64MM == 0b0001 表示有此功能。214 215HWCAP2_SVEBF16216 217 ID_AA64ZFR0_EL1.BF16 == 0b0001 表示有此功能。218 219HWCAP2_I8MM220 221 ID_AA64ISAR1_EL1.I8MM == 0b0001 表示有此功能。222 223HWCAP2_BF16224 225 ID_AA64ISAR1_EL1.BF16 == 0b0001 表示有此功能。226 227HWCAP2_DGH228 229 ID_AA64ISAR1_EL1.DGH == 0b0001 表示有此功能。230 231HWCAP2_RNG232 233 ID_AA64ISAR0_EL1.RNDR == 0b0001 表示有此功能。234 235HWCAP2_BTI236 237 ID_AA64PFR0_EL1.BT == 0b0001 表示有此功能。238 239 2404. 未使用的 AT_HWCAP 位241-----------------------242 243爲了與用戶空間交互,內核保證 AT_HWCAP 的第62、63位將始終返回0。244 245