arm64: Expose DC CVADP to userspace
authorAndrew Murray <andrew.murray@arm.com>
Tue, 9 Apr 2019 09:52:43 +0000 (10:52 +0100)
committerWill Deacon <will.deacon@arm.com>
Tue, 16 Apr 2019 15:27:56 +0000 (16:27 +0100)
ARMv8.5 builds upon the ARMv8.2 DC CVAP instruction by introducing a DC
CVADP instruction which cleans the data cache to the point of deep
persistence. Let's expose this support via the arm64 ELF hwcaps.

Signed-off-by: Andrew Murray <andrew.murray@arm.com>
Reviewed-by: Dave Martin <Dave.Martin@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Documentation/arm64/elf_hwcaps.txt
arch/arm64/include/asm/hwcap.h
arch/arm64/include/uapi/asm/hwcap.h
arch/arm64/kernel/cpufeature.c
arch/arm64/kernel/cpuinfo.c

index 11805777031e7b9c18a89d96e08f7867c40c1578..55431fd2a67a68a18371165e4bdba0f4c5aedac3 100644 (file)
@@ -135,6 +135,10 @@ HWCAP_DCPOP
 
     Functionality implied by ID_AA64ISAR1_EL1.DPB == 0b0001.
 
+HWCAP2_DCPODP
+
+    Functionality implied by ID_AA64ISAR1_EL1.DPB == 0b0010.
+
 HWCAP_SHA3
 
     Functionality implied by ID_AA64ISAR0_EL1.SHA3 == 0b0001.
index a843b6efce5b41a5f1de8f1a2ea774ddf006459f..f78c86c64e6825b2739d6c2ef52679885e83e23a 100644 (file)
@@ -88,6 +88,7 @@
 #define KERNEL_HWCAP_PACG              __khwcap_feature(PACG)
 
 #define __khwcap2_feature(x)           (const_ilog2(HWCAP2_ ## x) + 32)
+#define KERNEL_HWCAP_DCPODP            __khwcap2_feature(DCPODP)
 
 /*
  * This yields a mask that user programs can use to figure out what
index 453b45af80b77c32233d784dbc5c7fe2ab941878..d64af3913a9e002d31fcfb9f7b2bde33dc7bf404 100644 (file)
@@ -53,4 +53,9 @@
 #define HWCAP_PACA             (1 << 30)
 #define HWCAP_PACG             (1UL << 31)
 
+/*
+ * HWCAP2 flags - for AT_HWCAP2
+ */
+#define HWCAP2_DCPODP          (1 << 0)
+
 #endif /* _UAPI__ASM_HWCAP_H */
index a655d1bb1186d02c7b9fad5706e6178ac6e7a616..f8b682a3a9f4fdd1250ed41ab69777a27f4e3d83 100644 (file)
@@ -1591,6 +1591,7 @@ static const struct arm64_cpu_capabilities arm64_elf_hwcaps[] = {
        HWCAP_CAP(SYS_ID_AA64PFR0_EL1, ID_AA64PFR0_ASIMD_SHIFT, FTR_SIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_ASIMDHP),
        HWCAP_CAP(SYS_ID_AA64PFR0_EL1, ID_AA64PFR0_DIT_SHIFT, FTR_SIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_DIT),
        HWCAP_CAP(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_DPB_SHIFT, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_DCPOP),
+       HWCAP_CAP(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_DPB_SHIFT, FTR_UNSIGNED, 2, CAP_HWCAP, KERNEL_HWCAP_DCPODP),
        HWCAP_CAP(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_JSCVT_SHIFT, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_JSCVT),
        HWCAP_CAP(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_FCMA_SHIFT, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_FCMA),
        HWCAP_CAP(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_LRCPC_SHIFT, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_LRCPC),
index 810db95f293fff040b7e92a3196fe8cb7437df84..093ca53ce1d1c5af02b9c9691e6bbcfb7ac85a0b 100644 (file)
@@ -85,6 +85,7 @@ static const char *const hwcap_str[] = {
        "sb",
        "paca",
        "pacg",
+       "dcpodp",
        NULL
 };