forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-11 04dd17822334871b23ea2862f7798fb0e0007777
kernel/arch/powerpc/kvm/book3s_interrupts.S
....@@ -1,16 +1,5 @@
1
+/* SPDX-License-Identifier: GPL-2.0-only */
12 /*
2
- * This program is free software; you can redistribute it and/or modify
3
- * it under the terms of the GNU General Public License, version 2, as
4
- * published by the Free Software Foundation.
5
- *
6
- * This program is distributed in the hope that it will be useful,
7
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
8
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9
- * GNU General Public License for more details.
10
- *
11
- * You should have received a copy of the GNU General Public License
12
- * along with this program; if not, write to the Free Software
13
- * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
143 *
154 * Copyright SUSE Linux Products GmbH 2009
165 *
....@@ -37,7 +26,7 @@
3726 #define FUNC(name) name
3827 #define GET_SHADOW_VCPU(reg) lwz reg, (THREAD + THREAD_KVM_SVCPU)(r2)
3928
40
-#endif /* CONFIG_PPC_BOOK3S_XX */
29
+#endif /* CONFIG_PPC_BOOK3S_64 */
4130
4231 #define VCPU_LOAD_NVGPRS(vcpu) \
4332 PPC_LL r14, VCPU_GPR(R14)(vcpu); \
....@@ -66,8 +55,7 @@
6655 ****************************************************************************/
6756
6857 /* Registers:
69
- * r3: kvm_run pointer
70
- * r4: vcpu pointer
58
+ * r3: vcpu pointer
7159 */
7260 _GLOBAL(__kvmppc_vcpu_run)
7361
....@@ -79,8 +67,8 @@
7967 /* Save host state to the stack */
8068 PPC_STLU r1, -SWITCH_FRAME_SIZE(r1)
8169
82
- /* Save r3 (kvm_run) and r4 (vcpu) */
83
- SAVE_2GPRS(3, r1)
70
+ /* Save r3 (vcpu) */
71
+ SAVE_GPR(3, r1)
8472
8573 /* Save non-volatile registers (r14 - r31) */
8674 SAVE_NVGPRS(r1)
....@@ -93,47 +81,46 @@
9381 PPC_STL r0, _LINK(r1)
9482
9583 /* Load non-volatile guest state from the vcpu */
96
- VCPU_LOAD_NVGPRS(r4)
84
+ VCPU_LOAD_NVGPRS(r3)
9785
9886 kvm_start_lightweight:
9987 /* Copy registers into shadow vcpu so we can access them in real mode */
100
- mr r3, r4
10188 bl FUNC(kvmppc_copy_to_svcpu)
10289 nop
103
- REST_GPR(4, r1)
90
+ REST_GPR(3, r1)
10491
10592 #ifdef CONFIG_PPC_BOOK3S_64
10693 /* Get the dcbz32 flag */
107
- PPC_LL r3, VCPU_HFLAGS(r4)
108
- rldicl r3, r3, 0, 63 /* r3 &= 1 */
109
- stb r3, HSTATE_RESTORE_HID5(r13)
94
+ PPC_LL r0, VCPU_HFLAGS(r3)
95
+ rldicl r0, r0, 0, 63 /* r3 &= 1 */
96
+ stb r0, HSTATE_RESTORE_HID5(r13)
11097
11198 /* Load up guest SPRG3 value, since it's user readable */
112
- lwz r3, VCPU_SHAREDBE(r4)
113
- cmpwi r3, 0
114
- ld r5, VCPU_SHARED(r4)
99
+ lbz r4, VCPU_SHAREDBE(r3)
100
+ cmpwi r4, 0
101
+ ld r5, VCPU_SHARED(r3)
115102 beq sprg3_little_endian
116103 sprg3_big_endian:
117104 #ifdef __BIG_ENDIAN__
118
- ld r3, VCPU_SHARED_SPRG3(r5)
105
+ ld r4, VCPU_SHARED_SPRG3(r5)
119106 #else
120107 addi r5, r5, VCPU_SHARED_SPRG3
121
- ldbrx r3, 0, r5
108
+ ldbrx r4, 0, r5
122109 #endif
123110 b after_sprg3_load
124111 sprg3_little_endian:
125112 #ifdef __LITTLE_ENDIAN__
126
- ld r3, VCPU_SHARED_SPRG3(r5)
113
+ ld r4, VCPU_SHARED_SPRG3(r5)
127114 #else
128115 addi r5, r5, VCPU_SHARED_SPRG3
129
- ldbrx r3, 0, r5
116
+ ldbrx r4, 0, r5
130117 #endif
131118
132119 after_sprg3_load:
133
- mtspr SPRN_SPRG3, r3
120
+ mtspr SPRN_SPRG3, r4
134121 #endif /* CONFIG_PPC_BOOK3S_64 */
135122
136
- PPC_LL r4, VCPU_SHADOW_MSR(r4) /* get shadow_msr */
123
+ PPC_LL r4, VCPU_SHADOW_MSR(r3) /* get shadow_msr */
137124
138125 /* Jump to segment patching handler and into our guest */
139126 bl FUNC(kvmppc_entry_trampoline)
....@@ -157,7 +144,7 @@
157144 *
158145 */
159146
160
- PPC_LL r3, GPR4(r1) /* vcpu pointer */
147
+ PPC_LL r3, GPR3(r1) /* vcpu pointer */
161148
162149 /*
163150 * kvmppc_copy_from_svcpu can clobber volatile registers, save
....@@ -180,7 +167,7 @@
180167 #endif /* CONFIG_PPC_BOOK3S_64 */
181168
182169 /* R7 = vcpu */
183
- PPC_LL r7, GPR4(r1)
170
+ PPC_LL r7, GPR3(r1)
184171
185172 PPC_STL r14, VCPU_GPR(R14)(r7)
186173 PPC_STL r15, VCPU_GPR(R15)(r7)
....@@ -201,11 +188,11 @@
201188 PPC_STL r30, VCPU_GPR(R30)(r7)
202189 PPC_STL r31, VCPU_GPR(R31)(r7)
203190
204
- /* Pass the exit number as 3rd argument to kvmppc_handle_exit */
205
- lwz r5, VCPU_TRAP(r7)
191
+ /* Pass the exit number as 2nd argument to kvmppc_handle_exit */
192
+ lwz r4, VCPU_TRAP(r7)
206193
207
- /* Restore r3 (kvm_run) and r4 (vcpu) */
208
- REST_2GPRS(3, r1)
194
+ /* Restore r3 (vcpu) */
195
+ REST_GPR(3, r1)
209196 bl FUNC(kvmppc_handle_exit_pr)
210197
211198 /* If RESUME_GUEST, get back in the loop */
....@@ -234,11 +221,11 @@
234221 PPC_LL r4, _LINK(r1)
235222 PPC_STL r4, (PPC_LR_STKOFF + SWITCH_FRAME_SIZE)(r1)
236223
237
- /* Load vcpu and cpu_run */
238
- REST_2GPRS(3, r1)
224
+ /* Load vcpu */
225
+ REST_GPR(3, r1)
239226
240227 /* Load non-volatile guest state from the vcpu */
241
- VCPU_LOAD_NVGPRS(r4)
228
+ VCPU_LOAD_NVGPRS(r3)
242229
243230 /* Jump back into the beginning of this function */
244231 b kvm_start_lightweight
....@@ -246,7 +233,7 @@
246233 kvm_loop_lightweight:
247234
248235 /* We'll need the vcpu pointer */
249
- REST_GPR(4, r1)
236
+ REST_GPR(3, r1)
250237
251238 /* Jump back into the beginning of this function */
252239 b kvm_start_lightweight