Back to home page

OSCL-LXR

 
 

    


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