]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blame - releases/5.15.28/arm64-add-id_aa64isar2_el1-sys-register.patch
Drop nfc patches from older trees
[thirdparty/kernel/stable-queue.git] / releases / 5.15.28 / arm64-add-id_aa64isar2_el1-sys-register.patch
CommitLineData
08fa46a8
GKH
1From foo@baz Tue Mar 8 08:47:19 PM CET 2022
2From: Joey Gouly <joey.gouly@arm.com>
3Date: Fri, 10 Dec 2021 16:54:31 +0000
4Subject: arm64: add ID_AA64ISAR2_EL1 sys register
5
6From: Joey Gouly <joey.gouly@arm.com>
7
8commit 9e45365f1469ef2b934f9d035975dbc9ad352116 upstream.
9
10This is a new ID register, introduced in 8.7.
11
12Signed-off-by: Joey Gouly <joey.gouly@arm.com>
13Cc: Will Deacon <will@kernel.org>
14Cc: Marc Zyngier <maz@kernel.org>
15Cc: James Morse <james.morse@arm.com>
16Cc: Alexandru Elisei <alexandru.elisei@arm.com>
17Cc: Suzuki K Poulose <suzuki.poulose@arm.com>
18Cc: Reiji Watanabe <reijiw@google.com>
19Acked-by: Marc Zyngier <maz@kernel.org>
20Link: https://lore.kernel.org/r/20211210165432.8106-3-joey.gouly@arm.com
21Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
22Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
23---
24 arch/arm64/include/asm/cpu.h | 1 +
25 arch/arm64/include/asm/sysreg.h | 15 +++++++++++++++
26 arch/arm64/kernel/cpufeature.c | 9 +++++++++
27 arch/arm64/kernel/cpuinfo.c | 1 +
28 arch/arm64/kvm/sys_regs.c | 2 +-
29 5 files changed, 27 insertions(+), 1 deletion(-)
30
31--- a/arch/arm64/include/asm/cpu.h
32+++ b/arch/arm64/include/asm/cpu.h
33@@ -51,6 +51,7 @@ struct cpuinfo_arm64 {
34 u64 reg_id_aa64dfr1;
35 u64 reg_id_aa64isar0;
36 u64 reg_id_aa64isar1;
37+ u64 reg_id_aa64isar2;
38 u64 reg_id_aa64mmfr0;
39 u64 reg_id_aa64mmfr1;
40 u64 reg_id_aa64mmfr2;
41--- a/arch/arm64/include/asm/sysreg.h
42+++ b/arch/arm64/include/asm/sysreg.h
43@@ -180,6 +180,7 @@
44
45 #define SYS_ID_AA64ISAR0_EL1 sys_reg(3, 0, 0, 6, 0)
46 #define SYS_ID_AA64ISAR1_EL1 sys_reg(3, 0, 0, 6, 1)
47+#define SYS_ID_AA64ISAR2_EL1 sys_reg(3, 0, 0, 6, 2)
48
49 #define SYS_ID_AA64MMFR0_EL1 sys_reg(3, 0, 0, 7, 0)
50 #define SYS_ID_AA64MMFR1_EL1 sys_reg(3, 0, 0, 7, 1)
51@@ -764,6 +765,20 @@
52 #define ID_AA64ISAR1_GPI_NI 0x0
53 #define ID_AA64ISAR1_GPI_IMP_DEF 0x1
54
55+/* id_aa64isar2 */
56+#define ID_AA64ISAR2_RPRES_SHIFT 4
57+#define ID_AA64ISAR2_WFXT_SHIFT 0
58+
59+#define ID_AA64ISAR2_RPRES_8BIT 0x0
60+#define ID_AA64ISAR2_RPRES_12BIT 0x1
61+/*
62+ * Value 0x1 has been removed from the architecture, and is
63+ * reserved, but has not yet been removed from the ARM ARM
64+ * as of ARM DDI 0487G.b.
65+ */
66+#define ID_AA64ISAR2_WFXT_NI 0x0
67+#define ID_AA64ISAR2_WFXT_SUPPORTED 0x2
68+
69 /* id_aa64pfr0 */
70 #define ID_AA64PFR0_CSV3_SHIFT 60
71 #define ID_AA64PFR0_CSV2_SHIFT 56
72--- a/arch/arm64/kernel/cpufeature.c
73+++ b/arch/arm64/kernel/cpufeature.c
74@@ -225,6 +225,10 @@ static const struct arm64_ftr_bits ftr_i
75 ARM64_FTR_END,
76 };
77
78+static const struct arm64_ftr_bits ftr_id_aa64isar2[] = {
79+ ARM64_FTR_END,
80+};
81+
82 static const struct arm64_ftr_bits ftr_id_aa64pfr0[] = {
83 ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64PFR0_CSV3_SHIFT, 4, 0),
84 ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64PFR0_CSV2_SHIFT, 4, 0),
85@@ -637,6 +641,7 @@ static const struct __ftr_reg_entry {
86 ARM64_FTR_REG(SYS_ID_AA64ISAR0_EL1, ftr_id_aa64isar0),
87 ARM64_FTR_REG_OVERRIDE(SYS_ID_AA64ISAR1_EL1, ftr_id_aa64isar1,
88 &id_aa64isar1_override),
89+ ARM64_FTR_REG(SYS_ID_AA64ISAR2_EL1, ftr_id_aa64isar2),
90
91 /* Op1 = 0, CRn = 0, CRm = 7 */
92 ARM64_FTR_REG(SYS_ID_AA64MMFR0_EL1, ftr_id_aa64mmfr0),
93@@ -933,6 +938,7 @@ void __init init_cpu_features(struct cpu
94 init_cpu_ftr_reg(SYS_ID_AA64DFR1_EL1, info->reg_id_aa64dfr1);
95 init_cpu_ftr_reg(SYS_ID_AA64ISAR0_EL1, info->reg_id_aa64isar0);
96 init_cpu_ftr_reg(SYS_ID_AA64ISAR1_EL1, info->reg_id_aa64isar1);
97+ init_cpu_ftr_reg(SYS_ID_AA64ISAR2_EL1, info->reg_id_aa64isar2);
98 init_cpu_ftr_reg(SYS_ID_AA64MMFR0_EL1, info->reg_id_aa64mmfr0);
99 init_cpu_ftr_reg(SYS_ID_AA64MMFR1_EL1, info->reg_id_aa64mmfr1);
100 init_cpu_ftr_reg(SYS_ID_AA64MMFR2_EL1, info->reg_id_aa64mmfr2);
101@@ -1151,6 +1157,8 @@ void update_cpu_features(int cpu,
102 info->reg_id_aa64isar0, boot->reg_id_aa64isar0);
103 taint |= check_update_ftr_reg(SYS_ID_AA64ISAR1_EL1, cpu,
104 info->reg_id_aa64isar1, boot->reg_id_aa64isar1);
105+ taint |= check_update_ftr_reg(SYS_ID_AA64ISAR2_EL1, cpu,
106+ info->reg_id_aa64isar2, boot->reg_id_aa64isar2);
107
108 /*
109 * Differing PARange support is fine as long as all peripherals and
110@@ -1272,6 +1280,7 @@ u64 __read_sysreg_by_encoding(u32 sys_id
111 read_sysreg_case(SYS_ID_AA64MMFR2_EL1);
112 read_sysreg_case(SYS_ID_AA64ISAR0_EL1);
113 read_sysreg_case(SYS_ID_AA64ISAR1_EL1);
114+ read_sysreg_case(SYS_ID_AA64ISAR2_EL1);
115
116 read_sysreg_case(SYS_CNTFRQ_EL0);
117 read_sysreg_case(SYS_CTR_EL0);
118--- a/arch/arm64/kernel/cpuinfo.c
119+++ b/arch/arm64/kernel/cpuinfo.c
120@@ -391,6 +391,7 @@ static void __cpuinfo_store_cpu(struct c
121 info->reg_id_aa64dfr1 = read_cpuid(ID_AA64DFR1_EL1);
122 info->reg_id_aa64isar0 = read_cpuid(ID_AA64ISAR0_EL1);
123 info->reg_id_aa64isar1 = read_cpuid(ID_AA64ISAR1_EL1);
124+ info->reg_id_aa64isar2 = read_cpuid(ID_AA64ISAR2_EL1);
125 info->reg_id_aa64mmfr0 = read_cpuid(ID_AA64MMFR0_EL1);
126 info->reg_id_aa64mmfr1 = read_cpuid(ID_AA64MMFR1_EL1);
127 info->reg_id_aa64mmfr2 = read_cpuid(ID_AA64MMFR2_EL1);
128--- a/arch/arm64/kvm/sys_regs.c
129+++ b/arch/arm64/kvm/sys_regs.c
130@@ -1518,7 +1518,7 @@ static const struct sys_reg_desc sys_reg
131 /* CRm=6 */
132 ID_SANITISED(ID_AA64ISAR0_EL1),
133 ID_SANITISED(ID_AA64ISAR1_EL1),
134- ID_UNALLOCATED(6,2),
135+ ID_SANITISED(ID_AA64ISAR2_EL1),
136 ID_UNALLOCATED(6,3),
137 ID_UNALLOCATED(6,4),
138 ID_UNALLOCATED(6,5),