/[packages]/updates/8/kernel/current/SOURCES/arm64-add-id_aa64isar2_el1-sys-register.patch
ViewVC logotype

Contents of /updates/8/kernel/current/SOURCES/arm64-add-id_aa64isar2_el1-sys-register.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1789982 - (show annotations) (download)
Tue Mar 8 23:11:59 2022 UTC (2 years, 1 month ago) by tmb
File size: 5334 byte(s)
add current -stable queue
1 From foo@baz Tue Mar 8 08:47:19 PM CET 2022
2 From: Joey Gouly <joey.gouly@arm.com>
3 Date: Fri, 10 Dec 2021 16:54:31 +0000
4 Subject: arm64: add ID_AA64ISAR2_EL1 sys register
5
6 From: Joey Gouly <joey.gouly@arm.com>
7
8 commit 9e45365f1469ef2b934f9d035975dbc9ad352116 upstream.
9
10 This is a new ID register, introduced in 8.7.
11
12 Signed-off-by: Joey Gouly <joey.gouly@arm.com>
13 Cc: Will Deacon <will@kernel.org>
14 Cc: Marc Zyngier <maz@kernel.org>
15 Cc: James Morse <james.morse@arm.com>
16 Cc: Alexandru Elisei <alexandru.elisei@arm.com>
17 Cc: Suzuki K Poulose <suzuki.poulose@arm.com>
18 Cc: Reiji Watanabe <reijiw@google.com>
19 Acked-by: Marc Zyngier <maz@kernel.org>
20 Link: https://lore.kernel.org/r/20211210165432.8106-3-joey.gouly@arm.com
21 Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
22 Signed-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),

  ViewVC Help
Powered by ViewVC 1.1.30