arm64: Add HWCAP for Data Gathering Hint instruction
This commit is contained in:
parent
1cfcd56e3e
commit
f1759b64e4
|
@ -193,6 +193,8 @@ infrastructure:
|
||||||
+------------------------------+---------+---------+
|
+------------------------------+---------+---------+
|
||||||
| Name | bits | visible |
|
| Name | bits | visible |
|
||||||
+------------------------------+---------+---------+
|
+------------------------------+---------+---------+
|
||||||
|
| DGH | [51-48] | y |
|
||||||
|
+------------------------------+---------+---------+
|
||||||
| GPI | [31-28] | y |
|
| GPI | [31-28] | y |
|
||||||
+------------------------------+---------+---------+
|
+------------------------------+---------+---------+
|
||||||
| GPA | [27-24] | y |
|
| GPA | [27-24] | y |
|
||||||
|
|
|
@ -206,6 +206,9 @@ HWCAP2_ECV
|
||||||
|
|
||||||
Functionality implied by ID_AA64MMFR0_EL1.ECV == 0b0001.
|
Functionality implied by ID_AA64MMFR0_EL1.ECV == 0b0001.
|
||||||
|
|
||||||
|
HWCAP2_DGH
|
||||||
|
Functionality implied by ID_AA64ISAR1_EL1.DGH == 0b0001.
|
||||||
|
|
||||||
4. Unused AT_HWCAP bits
|
4. Unused AT_HWCAP bits
|
||||||
-----------------------
|
-----------------------
|
||||||
|
|
||||||
|
|
|
@ -87,6 +87,7 @@
|
||||||
#define KERNEL_HWCAP_FLAGM2 __khwcap2_feature(FLAGM2)
|
#define KERNEL_HWCAP_FLAGM2 __khwcap2_feature(FLAGM2)
|
||||||
#define KERNEL_HWCAP_FRINT __khwcap2_feature(FRINT)
|
#define KERNEL_HWCAP_FRINT __khwcap2_feature(FRINT)
|
||||||
#define KERNEL_HWCAP_ECV __khwcap2_feature(ECV)
|
#define KERNEL_HWCAP_ECV __khwcap2_feature(ECV)
|
||||||
|
#define KERNEL_HWCAP_DGH __khwcap2_feature(DGH)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This yields a mask that user programs can use to figure out what
|
* This yields a mask that user programs can use to figure out what
|
||||||
|
|
|
@ -567,6 +567,7 @@
|
||||||
#define ID_AA64ISAR0_TLB_RANGE 0x2
|
#define ID_AA64ISAR0_TLB_RANGE 0x2
|
||||||
|
|
||||||
/* id_aa64isar1 */
|
/* id_aa64isar1 */
|
||||||
|
#define ID_AA64ISAR1_DGH_SHIFT 48
|
||||||
#define ID_AA64ISAR1_SB_SHIFT 36
|
#define ID_AA64ISAR1_SB_SHIFT 36
|
||||||
#define ID_AA64ISAR1_FRINTTS_SHIFT 32
|
#define ID_AA64ISAR1_FRINTTS_SHIFT 32
|
||||||
#define ID_AA64ISAR1_GPI_SHIFT 28
|
#define ID_AA64ISAR1_GPI_SHIFT 28
|
||||||
|
|
|
@ -66,5 +66,6 @@
|
||||||
#define HWCAP2_FLAGM2 (1 << 7)
|
#define HWCAP2_FLAGM2 (1 << 7)
|
||||||
#define HWCAP2_FRINT (1 << 8)
|
#define HWCAP2_FRINT (1 << 8)
|
||||||
#define HWCAP2_ECV (1 << 9)
|
#define HWCAP2_ECV (1 << 9)
|
||||||
|
#define HWCAP2_DGH (1 << 10)
|
||||||
|
|
||||||
#endif /* _UAPI__ASM_HWCAP_H */
|
#endif /* _UAPI__ASM_HWCAP_H */
|
||||||
|
|
|
@ -140,6 +140,7 @@ static const struct arm64_ftr_bits ftr_id_aa64isar0[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct arm64_ftr_bits ftr_id_aa64isar1[] = {
|
static const struct arm64_ftr_bits ftr_id_aa64isar1[] = {
|
||||||
|
ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_DGH_SHIFT, 4, 0),
|
||||||
ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_SB_SHIFT, 4, 0),
|
ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_SB_SHIFT, 4, 0),
|
||||||
ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_FRINTTS_SHIFT, 4, 0),
|
ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_FRINTTS_SHIFT, 4, 0),
|
||||||
ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_PTR_AUTH),
|
ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_PTR_AUTH),
|
||||||
|
@ -1714,6 +1715,7 @@ static const struct arm64_cpu_capabilities arm64_elf_hwcaps[] = {
|
||||||
HWCAP_CAP(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_LRCPC_SHIFT, FTR_UNSIGNED, 2, CAP_HWCAP, KERNEL_HWCAP_ILRCPC),
|
HWCAP_CAP(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_LRCPC_SHIFT, FTR_UNSIGNED, 2, CAP_HWCAP, KERNEL_HWCAP_ILRCPC),
|
||||||
HWCAP_CAP(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_FRINTTS_SHIFT, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_FRINT),
|
HWCAP_CAP(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_FRINTTS_SHIFT, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_FRINT),
|
||||||
HWCAP_CAP(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_SB_SHIFT, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_SB),
|
HWCAP_CAP(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_SB_SHIFT, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_SB),
|
||||||
|
HWCAP_CAP(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_DGH_SHIFT, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_DGH),
|
||||||
HWCAP_CAP(SYS_ID_AA64MMFR2_EL1, ID_AA64MMFR2_AT_SHIFT, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_USCAT),
|
HWCAP_CAP(SYS_ID_AA64MMFR2_EL1, ID_AA64MMFR2_AT_SHIFT, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_USCAT),
|
||||||
#ifdef CONFIG_ARM64_SVE
|
#ifdef CONFIG_ARM64_SVE
|
||||||
HWCAP_CAP(SYS_ID_AA64PFR0_EL1, ID_AA64PFR0_SVE_SHIFT, FTR_UNSIGNED, ID_AA64PFR0_SVE, CAP_HWCAP, KERNEL_HWCAP_SVE),
|
HWCAP_CAP(SYS_ID_AA64PFR0_EL1, ID_AA64PFR0_SVE_SHIFT, FTR_UNSIGNED, ID_AA64PFR0_SVE, CAP_HWCAP, KERNEL_HWCAP_SVE),
|
||||||
|
|
|
@ -87,6 +87,7 @@ static const char *const hwcap_str[] = {
|
||||||
"flagm2",
|
"flagm2",
|
||||||
"frint",
|
"frint",
|
||||||
"ecv",
|
"ecv",
|
||||||
|
"dgh",
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue