|
17 | 17 | #include <asm/kvm_mmu.h> |
18 | 18 |
|
19 | 19 | #define SYS_IMP_APL_ACTLR_EL12 sys_reg(3, 6, 15, 14, 6) |
| 20 | +#define SYS_ACTLR_EL12 sys_reg(3, 5, 1, 0, 1) |
20 | 21 |
|
21 | 22 | static inline bool ctxt_has_s1poe(struct kvm_cpu_context *ctxt); |
22 | 23 |
|
@@ -123,9 +124,12 @@ static inline void __sysreg_save_el1_state(struct kvm_cpu_context *ctxt) |
123 | 124 | ctxt_sys_reg(ctxt, SP_EL1) = read_sysreg(sp_el1); |
124 | 125 | ctxt_sys_reg(ctxt, ELR_EL1) = read_sysreg_el1(SYS_ELR); |
125 | 126 | ctxt_sys_reg(ctxt, SPSR_EL1) = read_sysreg_el1(SYS_SPSR); |
126 | | - if (IS_ENABLED(CONFIG_ARM64_ACTLR_STATE) && |
127 | | - alternative_has_cap_unlikely(ARM64_HAS_TSO_APPLE)) |
128 | | - ctxt_sys_reg(ctxt, ACTLR_EL1) = read_sysreg_s(SYS_IMP_APL_ACTLR_EL12); |
| 127 | + if (IS_ENABLED(CONFIG_ARM64_ACTLR_STATE)) { |
| 128 | + if (alternative_has_cap_unlikely(ARM64_HAS_ACTLR_VIRT)) |
| 129 | + ctxt_sys_reg(ctxt, ACTLR_EL1) = read_sysreg_s(SYS_ACTLR_EL12); |
| 130 | + else if (alternative_has_cap_unlikely(ARM64_HAS_ACTLR_VIRT_APPLE)) |
| 131 | + ctxt_sys_reg(ctxt, ACTLR_EL1) = read_sysreg_s(SYS_IMP_APL_ACTLR_EL12); |
| 132 | + } |
129 | 133 | } |
130 | 134 |
|
131 | 135 | static inline void __sysreg_save_el2_return_state(struct kvm_cpu_context *ctxt) |
@@ -203,9 +207,12 @@ static inline void __sysreg_restore_el1_state(struct kvm_cpu_context *ctxt) |
203 | 207 | write_sysreg(ctxt_sys_reg(ctxt, PAR_EL1), par_el1); |
204 | 208 | write_sysreg(ctxt_sys_reg(ctxt, TPIDR_EL1), tpidr_el1); |
205 | 209 |
|
206 | | - if (IS_ENABLED(CONFIG_ARM64_ACTLR_STATE) && |
207 | | - alternative_has_cap_unlikely(ARM64_HAS_TSO_APPLE)) |
208 | | - write_sysreg_s(ctxt_sys_reg(ctxt, ACTLR_EL1), SYS_IMP_APL_ACTLR_EL12); |
| 210 | + if (IS_ENABLED(CONFIG_ARM64_ACTLR_STATE)) { |
| 211 | + if (alternative_has_cap_unlikely(ARM64_HAS_ACTLR_VIRT)) |
| 212 | + write_sysreg_s(ctxt_sys_reg(ctxt, ACTLR_EL1), SYS_ACTLR_EL12); |
| 213 | + else if (alternative_has_cap_unlikely(ARM64_HAS_ACTLR_VIRT_APPLE)) |
| 214 | + write_sysreg_s(ctxt_sys_reg(ctxt, ACTLR_EL1), SYS_IMP_APL_ACTLR_EL12); |
| 215 | + } |
209 | 216 |
|
210 | 217 | if (ctxt_has_mte(ctxt)) { |
211 | 218 | write_sysreg_el1(ctxt_sys_reg(ctxt, TFSR_EL1), SYS_TFSR); |
|
0 commit comments