arm64: v8.3: Support for weaker release consistency
authorSuzuki K Poulose <suzuki.poulose@arm.com>
Tue, 14 Mar 2017 18:13:27 +0000 (18:13 +0000)
committerCatalin Marinas <catalin.marinas@arm.com>
Mon, 20 Mar 2017 16:30:22 +0000 (16:30 +0000)
ARMv8.3 adds new instructions to support Release Consistent
processor consistent (RCpc) model, which is weaker than the
RCsc model.

Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Documentation/arm64/cpu-feature-registers.txt
arch/arm64/include/asm/sysreg.h
arch/arm64/include/uapi/asm/hwcap.h
arch/arm64/kernel/cpufeature.c
arch/arm64/kernel/cpuinfo.c

index 0ce0a4021aa413f14601d821bcbfde13b7ce778f..d1c97f9f51cc3bd3fd21ad181253bb354e7771b1 100644 (file)
@@ -174,6 +174,8 @@ infrastructure:
      x--------------------------------------------------x
      | Name                         |  bits   | visible |
      |--------------------------------------------------|
+     | LRCPC                        | [23-20] |    y    |
+     |--------------------------------------------------|
      | FCMA                         | [19-16] |    y    |
      |--------------------------------------------------|
      | JSCVT                        | [15-12] |    y    |
index 69af995c9b76c99743389d5957b92ddd1b4e1db2..c776bde940bd90af8e846597c5a279d43750f6b3 100644 (file)
 #define ID_AA64ISAR0_AES_SHIFT         4
 
 /* id_aa64isar1 */
+#define ID_AA64ISAR1_LRCPC_SHIFT       20
 #define ID_AA64ISAR1_FCMA_SHIFT                16
 #define ID_AA64ISAR1_JSCVT_SHIFT       12
 
index 85841a469cda8bb84eb47d0accfda12fdd823c43..4e187ce2a8113472b6c94ffb4feb934a45d4e254 100644 (file)
@@ -34,5 +34,6 @@
 #define HWCAP_ASIMDRDM         (1 << 12)
 #define HWCAP_JSCVT            (1 << 13)
 #define HWCAP_FCMA             (1 << 14)
+#define HWCAP_LRCPC            (1 << 15)
 
 #endif /* _UAPI__ASM_HWCAP_H */
index 3ce8b18a1ab557c1870c411c31779d772da01bda..81a78d9331ea4e352b7d43d1dfebac58a2667454 100644 (file)
@@ -98,6 +98,7 @@ static const struct arm64_ftr_bits ftr_id_aa64isar0[] = {
 };
 
 static const struct arm64_ftr_bits ftr_id_aa64isar1[] = {
+       ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_EXACT, ID_AA64ISAR1_LRCPC_SHIFT, 4, 0),
        ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_EXACT, ID_AA64ISAR1_FCMA_SHIFT, 4, 0),
        ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_EXACT, ID_AA64ISAR1_JSCVT_SHIFT, 4, 0),
        ARM64_FTR_END,
@@ -896,6 +897,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, HWCAP_ASIMDHP),
        HWCAP_CAP(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_JSCVT_SHIFT, FTR_UNSIGNED, 1, CAP_HWCAP, HWCAP_JSCVT),
        HWCAP_CAP(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_FCMA_SHIFT, FTR_UNSIGNED, 1, CAP_HWCAP, HWCAP_FCMA),
+       HWCAP_CAP(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_LRCPC_SHIFT, FTR_UNSIGNED, 1, CAP_HWCAP, HWCAP_LRCPC),
        {},
 };
 
index 4a43c6abb42283f799ed80d79c0709370abd83c4..68b1f364c515bac13514ce1484731a48cb842184 100644 (file)
@@ -67,6 +67,7 @@ static const char *const hwcap_str[] = {
        "asimdrdm",
        "jscvt",
        "fcma",
+       "lrcpc",
        NULL
 };